Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von oehrle
Thema: Applikation mit ClickOnce - Micosoft.Sqlserver.Dmf.DLL soll instaliert werden
Am im Forum: Rund um die Programmierung

Zitat von Mr. Bart Simpson
Eine DLL im GAC zu registrieren geht meines Wissens nach nicht per ClickOnce (ich lass mich aber gerne korrigieren - wär interessant zu wissen...). Per Code ging es vermutlich - aber wozu? Warum verteilst Du sie nicht einfach mit (im Zweifelsfall explizit als "Einschließen" bzw. "Erforderlich" unter den Einstellungen für die Anwendungsdateien eintragen)?

Bart Simpson
Hallo Bart, das mach ich ja. Habe die DLL's eingebunden ([Einschließen]), aber der Client sagt das diese DLL im GAC eingefügt werden muss. Er kann die Anwendung nicht installieren.
Komisch ist daran, das diese Anwendung in einer vorfigen Version funktioniert hatte, da wurde diese DLL auch gebraucht. Was ist nun anders:
- Ich habe das Zertifikat 5 Jahre verlängert
- Jetzt verwende ich VS2013, davor VS2012
Zitat von Abt
Das geht in ClickOnce über ein prerequisite Package, also einem Manifest.
Zur Not die DLL über den CMD-Weg registrieren. Gedacht ist das in ClickOnce aber eigentlich nicht...
Ja, das steht so auch bei Galileo Computing (Rheinwerk), das solche DLL's nicht über ClickOnce in den GAC installiert werden können.

Thema: Applikation mit ClickOnce - Micosoft.Sqlserver.Dmf.DLL soll instaliert werden
Am im Forum: Rund um die Programmierung

Hallo, ich habe eine Applikation die per ClickOnce verteilt wird. Jetzt habe ich eine neue Version erstellt, unter anderem mit einem neuen Zertifikat. Jetzt wollte ich diese Applikation auf einem rechner installieren, wo schon eine Vorgängerversion installiert war.
Jetzt bemängelt der Clinet, das die DLL nicht im GAC installiert werden soll. Kann das über ClickOnce gar nicht gemacht werden?
Wie kann ich das denn sosnt machen? Die Clients haben alle Adminrechte bei dem angemeldeten User. Könnte ich das per Code realisieren oder wie kann ich das automatisiert tun?

Thema: Tasks.Parallel: Problem mit korrekter Datenzuordnung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo, danke für die Info (MVVM).
Also Speedtechnisch ist das immer noch sehr schnell, wesentlich schneller als nur sequentiell, aber halt falsch :-(

Normal müsste das fleInfo isoliert sein, und dann noch gelockt. Aber gut, evtl. hat noch jemand eine Idee. Und der Code sieht so wirklich unleserlich aus, da hast recht.

Thema: Tasks.Parallel: Problem mit korrekter Datenzuordnung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo, in meiner Anwendung verarbeite ich eine unmenge von Dateien, die ich abgleichen muss. Ich werde unter anderem das Datum aus.

Nun habe ich mehrere Collections (FileInfo[] - genauer gesagt) die nacheinander abgearbeitet werden. Diese Bearbeitung läuft in einem Thread, damit man an anderen Dingen weiter arbeiten kann.
Nun wird jedes FileInfo[] mit seinen Dateien untersucht. Damit das schneller geht, versuchte ich die Parallel.Foreach().
Wenn ich diese aber verwende, geht die auswertung schief, Daten kommen durcheinander (da gibt's wohl das berüchtigte DataRace).
Ich verwende nun das lock(), aber es passiert trotzdem. Hat jemand einen Tipp, Hinweis?


foreach (DirectoryInfo directoryInfo in diCol.Where(x => x != null))
                            {
                                fi = directoryInfo.GetFiles();

                                Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => lbx_Ablaufplan.Items.Insert(0, "Neue Dateien von " + directoryInfo.FullName + " suchen und in Sammelpool kopieren ...\n")));
                                Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action<ListBox>(lbx => lbx.Items.Insert(0, "\n\n\n--------------------------------------\n")), lbx_Ablaufplan);                   
                            

                                //// Progressbar neu initialiseren
                                Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => 
                                    {
                                        pg_Bar.Value = 0;
                                        pg_Bar.Maximum = fi.Count();
                                    }));

                                //// Label für Dateizähler nullen
                                fileNummer = 0;

                                // INFO: Umbaumaßnahme (04.08.2014), damit nur noch GSS und GSV eingelesen werden, somit kommt keine PDF oder TXT-DAtei mehr dazu

                                #region PARALLEL-Verarbeitung
                                Parallel.ForEach(fi.Where(x=>x.Extension == ".GSS" || x.Extension == ".GSV"), fileInfo =>
                                {
                                    lock (fileInfo)
                                    {
                                        try
                                        {
                                            fileNummer++;

                                            //// Erstelldatum der Datei abfragen, für Vergleich aus Kopftabelle und Datei
                                            DateTime aenderungsdatum = new DateTime(fileInfo.CreationTime.Year, fileInfo.CreationTime.Month, fileInfo.CreationTime.Day, fileInfo.CreationTime.Hour, fileInfo.CreationTime.Minute, fileInfo.CreationTime.Second);


                                            //// Vergleich auf Name und Erstelldatum der Datei
                                            //if (SWD.DsProg.Tables[0].AsEnumerable().Where(i => i["Datei"].ToString().Trim() == fileInfo.Name.Trim() && Convert.ToDateTime(i["Dateidatum"].ToString()) < dateiErstelldatum).Count() > 0)
                                            //{
                                            DataRow vorhandenesFileInDatenfinder = SWD.DsProg.Tables[0].AsEnumerable().Where(i => i["Datei"].ToString().Trim() == fileInfo.Name.Trim()).FirstOrDefault();
                                            if (vorhandenesFileInDatenfinder == null || Convert.ToDateTime(vorhandenesFileInDatenfinder["Änderungsdatum"].ToString()) < aenderungsdatum)
                                            {
                                                //// Datei in den Sammelpool kopieren
                                                fileInfo.CopyTo(SWD.NameCol["sammelpool"] + "\\" + fileInfo.Name, true);
                                                //// Datei mit Pfad und Name der Liste zufügen
                                                _listUpdateDateien.Add(new string[] { fileInfo.Name, fileInfo.FullName, fileInfo.LastWriteTime.ToString() });

                                                Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => { lbx_Verarbeitet.Items.Insert(0, fileInfo.Name); }));
                                            }
                                            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action<ProgressBar, int>((p, v) => p.Value = v), pg_Bar, fileNummer);
                                            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action<Label>(lbl => lbl.Content = fileNummer + " von " + fi.Count()), lbl_AnzVerarbeitetVonX);
                                        }
                                        catch (IndexOutOfRangeException)
                                        { }
                                    }
                                });
                                #endregion
.
.
.

Thema: LinQ-Prüfen ob in String ein Ausdruck aus einer List<T> oder String[]-Array vorhanden ist
Am im Forum: Datentechnologien

Danke hypersurf, das funktioniert. Jetzt wäre die Frage, ob ich auch gleich den Ausdruck mitbekomme, der gefunden wurde.

Thema: LinQ-Prüfen ob in String ein Ausdruck aus einer List<T> oder String[]-Array vorhanden ist
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: <SqlExpress 2008>

Hallo, folgende Frage zu Linq:

Ich habe einen string, den ich untersuchen muss, ob ein bestimmter Ausdruck vorhanden ist.
Der Ausdruck ist aber nicht nur einer, sondern es gibt 10 Stück.
Jetzt habe ich alle Ausdrücke in eine List<T> gepackt, und frage mich ob man mit LinQ auch die Abfrage generieen kann, ähnlich wie:

string strUntersuchen = "MeineKleinesFahhrad";
List<String> LAusdrücke = new List<String>("Fahrrad", "Helm", "Sattel");

var xx = strUntersuchen.AsEnumerable().Where(x=>x.ToString() == LAusdrücke.ForEach(x=>x)) ....


So irgendwie. Gibt es da eine Möglichkeit?

Thema: [gelöst] Random-Access Datei (erstellt in Power Basic) Einleseprobleme
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Danke für die Info, hat gepasst.

Thema: [gelöst] Random-Access Datei (erstellt in Power Basic) Einleseprobleme
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo, ich kämpfe schon seit gestern mit einer Datei die in Powerbasic das in der MS-DOS-Konsole läuft, erstellt wurde.
Die Datei wird als Bytestream abgelegt.

Der Mann der das Projekt noch betreut, hat mir gesagt wie die Datei aufgebaut ist.

Eine Datenzeile oder ein Datensatz besteht aus 136 Byte, dazu folgende Aufschlüsselung:

1.Feld: 10 Byte (Typ: Integer)
2.Feld: 10 Byte (Typ: Integer)
.
.
4. Feld: 10 Byte (Typ: Integer)
5. Feld: 8 Byte (Typ: Double)
6. Feld: 8 Byte (Typ: Double)
.
.
.
16. Feld: 8 Byte (Typ: Double)

In allen Felder sind Zahlenwerte abgelegt.
Die ersten 1000 Datenzeilen sind leer, kann ich komplett einlesen.

Ab der 1001 Zeile kommen Werte, die ersten 4 Spalten kommen auch korrekt:
Feld.Spalte:
1001.0 ==> 1001 (Zahlenwert 1001 OK)
1001.1 ==> 1001 (Zahlenwert 1001 OK)
1001.2 ==> null (kein WErt vorhandne, also "NULL" OK)
1001.3 ==> 1 (Zahlenwert 1 OK)
1001.4 ==> "\0\0\0\0\[email protected]" (Zahlenwert sollte 148,00000 sein, kommt aber dieses kryptische Ding an)
1001.4 ==> "\0\[email protected]ó?" (Zahlenwert sollte 1,200000 sein, kommt aber dieses kryptische Ding an)

Wieso bekomme ich das Zeug nicht komplett richtig, oder was mache ich falsch?
Kann mir jemand ein Tipp geben?
Evtl. ist das was bitmäßig verschoben?

Hier mal mein Code für die Auswertung:


  string datenSatz = null;

            List<byte[]> lByteArray = null;
            List<string> lDatensätze = new List<string>();

            string pfadScheibendatei = @"c:\ablageordner\wheels.neu";


            using (FileStream fs = new FileStream(pfadScheibendatei, FileMode.Open, FileAccess.Read))
            {
                using (BinaryReader bn = new BinaryReader(fs))
                {

                    while (bn.PeekChar() != -1)
                    {
                        lByteArray = new List<byte[]>();
                        try
                        {
                            //// Ab 1000. Datensatz kommen Daten, deshalb ab diesem Datensatz debuggen (Einsprung)
                            if (lDatensätze.Count == 1000)
                            {
                                
                            }

                            lByteArray.Add(bn.ReadBytes(10));
                            lByteArray.Add(bn.ReadBytes(10));
                            lByteArray.Add(bn.ReadBytes(10));
                            lByteArray.Add(bn.ReadBytes(10));

                            lByteArray.Add(bn.ReadBytes(8));
                            lByteArray.Add(bn.ReadBytes(8));
                            lByteArray.Add(bn.ReadBytes(8));
                            lByteArray.Add(bn.ReadBytes(8));
                            lByteArray.Add(bn.ReadBytes(8));
                            lByteArray.Add(bn.ReadBytes(8));
                            lByteArray.Add(bn.ReadBytes(8));
                            lByteArray.Add(bn.ReadBytes(8));
                            lByteArray.Add(bn.ReadBytes(8));
                            lByteArray.Add(bn.ReadBytes(8));
                            lByteArray.Add(bn.ReadBytes(8));
                            lByteArray.Add(bn.ReadBytes(8));


                            string datenSpalte = null;

                            //// Alle Einträge in der List<> nacheinander durchgehen und die Feldwerte zusammenstellen
                            for (int a = 0; a < lByteArray.Count; a++)
                            {
                                datenSpalte = null;
                                foreach (Byte byteWert in lByteArray[a])
                                    datenSpalte += Convert.ToChar(byteWert);

                                datenSatz += datenSpalte;
                            }
                        }
                        catch (OverflowException ex)
                        {

                        }
                        catch (Exception ex)
                        {

                        }


                        try
                        {
                            //// Datensatz der List<> zufügen, wenn Daten vorhanden sind
                            if (datenSatz.Trim() != "")
                                lDatensätze.Add(datenSatz);
                            
                        }
                        catch (OverflowException ex)
                        {

                        }
                        catch (Exception ex)
                        {

                        }
                    }
                }

            }

            return;
Habe die Datei gezippt und angehängt. Da bin ich mal gespannt, ob mir dabei jemand einen guten Tipp geben kann.


Ach: Hier noch ein Link zu PowerBasic mit dem Befehl MKD, der verwendet wird. Evtl. gibt das noch irgend welche Aufschlüssen.
PowerBasic MKD$

Thema: [gelöst] Probleme bei Update mit ClickOnce: Zertifikat abgelaufen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von Probleme mit Zertifikat in ClickOnce - Zertifikatsverlängerung mit "RenewCert" klappt nicht
Was RenewCert angeht:

Die VC 2005 Debug DLLs finden sich in keinem Redistributable, da sie ausschließlich für Entwicklungszwecke gedacht sind (waren) und nur die Release Versionen verteilt werden[1]. Zur Diagnose siehe Diagnosing SideBySide failures - dort wird auch die Debug Version als Problemfall herangezogen.

Ich weiß nun nicht, welche Version von RenewCert Dir unter die Finger gekommen ist, Du solltest aber eine im Release-Modus kompilierte verwenden. Ggf. kompiliere die von http://may.be/renewcert/ selbst.

Das hatte ich natürlich nicht getan, das war der Fehler. Hatte das RenewCert.exe von dort gezogen, das ist aber mit einer anders versionierten DLL erstellt worden :-(.

Egal, jetzt funzt die Sache, schon wieder was gelernt.

Thema: [gelöst] Probleme bei Update mit ClickOnce: Zertifikat abgelaufen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ja. Die habe ich alle auch schon in den ordner Windows\sys32 kopiert.
Leider ohne erfolg. Es kommt immer noch die gleiche Meldung.
Habe noch mit sxstrace probiert, und alles was ich bekome ist folgendes:

	Flags = 0
	ProcessorArchitecture = Wow32
	CultureFallBacks = en-US;en
	ManifestPath = c:\Ablageordner\Firmenintern\Projekte\Signaturerstellung\Renewcert.exe
	AssemblyDirectory = c:\Ablageordner\Firmenintern\Projekte\Signaturerstellung\
	Application Config File = 


Kann doch nicht sein, da muss doch mehr Info drin stecken, oder?

Kann es sein das die app.config in diesem Verzeichnis vorhanden sein muss, wo die PFX-Datei steht (die verlängert werden soll)??

Thema: [gelöst] Probleme bei Update mit ClickOnce: Zertifikat abgelaufen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi TH69.

Es geht also um die msvcr80.dll, so wie es aussieht. Ich finde diese DLL auch auf meiner Festplatte, und zwar unter:
c:\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.762_none_10b2f55f9bffb8f8\msvcr80.dll

Diese muss wohl in einen anderen Bereich, aber wohin damit dieser Fehler nicht mehr kommt?
Ich könnte diese neuere einfach umbenennen und diese einfügen, danach evtl. wieder alles rpckgängig machen?

Thema: [gelöst] Probleme bei Update mit ClickOnce: Zertifikat abgelaufen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo, ichhabe nun auch das Problem mit einem abgelaufenen Testzertifikat, das ich über ClickOnce erstellen lassen habe (wird automatisch miterstellt). Das Zertifikat wurde ohne Passwort erstellt.
Nun ist es abgelaufen, an allen Maschinen müßte ich die Applikatiion neu installieren, weil das autoupdate nicht mehr funktioniert. Jetzt wollte ich das alte Zertifikat verlängern. Geht aber nicht mit dem "RenewCert.exe".
Ich bekomme folgende Fehlermeldung:

Fehler
The application has failed to start because its side-by-side configuration is in
correct. Please see the application event log or use the command-line sxstrace.e
xe tool for more detail.

Habe mit sxstrace die Logmeldung aufgenommen, da stehen aber nur 4 Zeilen drin, und auch nicht das etwas fehlt.

Wenn ich im Ereignisprotokoll nachsehe, finde ich die Meldung:
Fehler
Activation context generation failed for "C:\Ablageordner\Firmenintern\Projekte\Signaturerstellung\Renewcert_org.exe". Dependent Assembly Microsoft.VC80.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762" could not be found. Please use sxstrace.exe for detailed diagnosis.

Ich habe schon gegoogelt und die vcredist_x86.exe und x64 in 2005 und 2008 Verson installiert, ohne Erfolg.

Ich habe immer noch diesen side-by-side - Fehler.
Hat jemand eine Lösung dafür?

Thema: ADO.Net / Ist WIN7 toleranter als WIN XP ???
Am im Forum: GUI: WPF und XAML

Ok Werde mich an die Regeln halten. Wie würde das eurer Meinung nach aussehen, wenn man in einem internationalen Unternehmen eine Anwendung erstellt, in der "en-US" der Standard ist und man Datenbanktabellen erstellt? Würdet ihr alles komplett auf "US" einstellen?
Es geht ja dann auch um Eingabefelder die deziamale Eingaben erfordern, Datenfelder in Datenbanken mit Typisierung "float" usw?

Thema: ADO.Net / Ist WIN7 toleranter als WIN XP ???
Am im Forum: GUI: WPF und XAML

Zitat von Abt
Vermutlich ist das ein Fehler aus Deiner falschen Anwendung von ToString, anderen Ländereinstellungen, kombiniert mit zwei unterschiedlichen .NET Versionen.
Deswegen, da ToString-Returnwerte niemals garantiert sind, verwendet man auch die entsprechenden Eigenschaften, statt ToString zu missbrauchen.
Also, ich habe in beiden Systemen gedebuggt (WIXP und WIN7 System) und als "ordercode" war jedesmal ein eindeutiger Wert ohne Leerzeichen oder sonstiges drin. Sollte das deiner Meinung nach dann immer noch der Grund sein, das bei WINXP "kein Datensatz" gefunden wird?
Zitat von Abt
Das andere kann ebenfalls durchaus aufgrund einer suboptimale Programmierung entstehen, die bei verschiedenen .NET Versionen dann negativ zur Geltung kommen.
Deswegen hoffe ich, dass Du diesen schlechten Stil von ToString und Co nicht wirklich führst, sondern immer die entsprechenden Eigenschaften verwendest.
In beiden Systemen ist die Vorraussetzung das FW 4.0 installiert sein muss.
Zitat von Abt
Hier hatten schon nen paar Leute diesbezüglich ähnliche Fragen.
Immer lag es am Programmierer und der falschen Anwendung; nie am Framework.


Ich denke auch, das Problem sitzt meistens vor dem Computer

Thema: ADO.Net / Ist WIN7 toleranter als WIN XP ???
Am im Forum: GUI: WPF und XAML

Hallo, ich habe schon ab und zu mal zickige Vorfälle in meinen Anwendungen gehabt, die bei WIN7 ohne Probleme funktionieren, aber in WINXP rummacken.

Das Problem ist ja, ich entwickle in WIN7. Wir haben aber noch Systeme die arbeiten mit WINXP, :-(

Diesen Fehler habe ich dann auch nur gefunden, weil ich eine virtuelle Maschine mit WINXP habe, und den Code mal dort gedebuggt habe.

Nun mal ein aktuelles Beispiel. Ich sichere Produktionsdaten. Die können später wieder gesichtet werden. Die Daten (jeder Auftrag ein Datensatz) werden in einem DataGrid angezeigt.
Bei Doppelclick wird der Datensatz geöffnet und in Oberfläche dargestellt, außerdem wird eine Datei in einem Textfeld angezeigt. Das funktioniert in WIN7 wunderbar. In WINXP nicht.

Hier mal der Code wo das passiert:


 //// Auftragsnummer auslesen
                   string ordercode = ((DataRowView) (dataGrid.SelectedItem))["Auftragsnummer"].ToString();

//// Von der Kopftabelle über die Auftragsnummer den Dateinamen ausfindig machen und die Datei dann einlesen und darstellen zu können
                   //// ==> In WIN7 funktioniert das, WINXP akzeptiert das nicht, das muss .Select("Auftragsnummer LIKE '" + ordercode + "'") angegeben werden
                   DataRow[] datarows = VfDaten.dSetVfReini.Tables[0].Select("Auftragsnummer = '" + ordercode + "'");

Also wie im Code beschrieben, muss ich für WINXP den "LIKE"-Operator verwenden. Ist doch komisch oder? Kann man die Toleranz der Systeme irgendwo einstellen?

Dann habe ich noch eine andere Applikation. Auf den WINXP-Maschinen läuft die ohne Probleme.
Aber in der WIN7-Maschine tut sich in der Oberfläche nach einer gewissen Zeit nichts mehr. Jetzt ist mir aufgefallen, dass dieser Zustand in WIN7 passiert, wenn die Applikation den Vollbildschirm einnimmt. Wenn ich das Fenster etwas minimiere, läufts auf WIN7 einwandfrei.
Komisch, oder?
Habt ihr auch solche Phänomene?

Bin schon gespannt was mich da noch bei WIN8 erwartet.

Thema: Kann das Programm aus einer NullReferenceException ermitteln, welche Variable null war?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Danke für die Info.

Thema: Kann das Programm aus einer NullReferenceException ermitteln, welche Variable null war?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

In meiner Anwendung wird eine riesen Datenmenge durchlaufen und Werte aus eine DB erfasst. Es kann vorkommen, dass irgend ein Wert NULL ist oder einfach "" ist. Ich habe auf die DB kein Einfluss, ich muss die Daten rausholen und verrechnen.
Nun, kann ich aus einer geworfenen Exception genau herausbekommen, umd welches Feld (Variable) es sich in der Klasse handelt, die einen ungültigen Wert zugewiesen bekommt? Oder muss ich jede Zuweisung mit try catch abfangen und sofort reagieren?

Thema: Kollisionserkennung von 2 Objekten
Am im Forum: GUI: WPF und XAML

Ja, das hatte ich gestern schon gesehen, mit dem VisualTreeHelper.
Aber die genaue Position, wo es kracht kann man wohl nicht feststellen.

Thema: Kollisionserkennung von 2 Objekten
Am im Forum: GUI: WPF und XAML

Hallo, ich habe etwas über Hit Test gelesen. Nun bin ich mir nicht sicher, ob das genaus das ist was ich brauche, mir fehlt dazu eine Info. Ich habe einen Kreis in der Mitte vom Bildschirm. Jetzt lasse ich von oben eine Polygonform auf den Kreis zusteuern. Irgendwann berühren sich beide.
Meine Fragen:
- ich bekomme mitgeteilt, waann die sich berühren (Eventauslösung, oder?)
- kann ich in erfahrung bringen, an welchen Punkten (Koordinaten) die sich berühren?

Wenn das geht, hilft das für mich leichter zu entscheiden ob ich dieses Hit Test verwenden kann.

Thema: MVVM - Problem bei Databinding bei TextBox
Am im Forum: GUI: WPF und XAML

Hallo, Problem vorerst gelöst. Habe was gutes dazu gefunden, und dazu noch die Idee mit der boolschen Property. Hier habe ich auch was gutes für einen Tooltip gefunden (mittlerer Bereich in der Website):

Tooltip per code behind

Nur dazu noch etwas, wie kann ich im code behind den Tooltip mit ToolTipService ändern? das habe ich krampfhaft versucht und jetzt tut mir alles weh ;-). Tipp??

Thema: MVVM - Problem bei Databinding bei TextBox
Am im Forum: GUI: WPF und XAML

Ja, das Model wird im Konstruktor übergeben. Wie kann ich das mit dem ersten mal der Validierung einbauen? Muss ich das BindingExpression manipulieren?

Thema: MVVM - Problem bei Databinding bei TextBox
Am im Forum: GUI: WPF und XAML

Sorry, Commands verwende ich hier nicht, wird auch noch ein Punkt werden. Zuerst aber das Problem mit dem BindingExpression. Das lösen der BindingExpresssion und erneute binden kann doch selbstverständlich immer wieder vorkommen. Habe das bei Galileo Computing gesehen (ziemlich unten Lissting 24.14 ist der Code):

Visual C# 2012 von Andreas Kühnel - Das umfassende Handbuch
Dort ist das Problem mit dem zufügen neuer Personen, bei mir ist das Problem, das manche Felder double-Werte enthalten die "nullfähig" sind, und deswegen mit "double ?" angelegt sind. Diese Felder müssen belegt werden und machen den Datensatz eindeutig (Pimarykeys), welche beim übernehmen der Daten über den Button sofoort in einer Datenbank das vorhandensein überprüft wird. Wenn ich bei den Feldern keine nullfähigkeit verwende, dann musss ich da sofort einen "Vorgabewert" einstellen oder es steht einfach "0" drin, was ich nicht möchte, und die Felder mit einer negativen Zahl belegen, das meine Prüfung erst mal so genehmigen würde geht nicht,weil die werte durchaus negativ sein können.
Meine Idee oder Vorgehen sieht so aus:
1. User will einen neuen Datensatz zu einer bestimmeten Gruppe anlegen
2. Mein System untersucht die Daten in DB und belegt ein paar definierte Felder vor, schreibt die in das Model (Klasse)
3. Das Window mit dem Model wird geöffnet, diese Daten in den Textboxen angezeigt (dabei wird aber im Konstruktor nach Initialize() das Binding der drei TExtboxen aufgehoben).
4. WIndow wird angezeigt, die drei Felder sind leer, es folgt kein roter Rahmen, wegen Fehler, da Bindung gelöscht ist.
5. User hat Daten eingegeben und übernimmt per Buttonclick due Daten. Jetzt wird die BindingExpressiion der der drei Textboxen wieder gesetz, aber das Binnding funktioniert nicht!!! Warum ist die Frage?? Es kommen sofort die Fehlermeldungen zu den drei TExtboxen und die rote Umrahmung, obwohl gültige Werte in den Textboxen stehen.
Gebe ich die Werte einzweites mal ein, funktionierts.

So, das nochmal zu meinem Problem. Habt ihr eine Idee an was es liegen könnte? UpdateSourceTrigger.Explizit setzen hatte ich auch schon bei einer TExtbox probiert. aber ohne Erfolg. Ich muss die Bindung irgenwie besser untersuchen können, was zuvor war und wie die neue Bindung ist.

Thema: MVVM - Problem bei Databinding bei TextBox
Am im Forum: GUI: WPF und XAML

Hallo, tu mir im Moment gerade schwer. Ich verwende MVVM, das zuerst auch soweit funktionierte. Ich öffne in meiner WPF-Anwendung ein Window, in dem per XAML die Controls bestückt sind. Die Bindings an den DataContext sind dort auch schon gesetzt. Die Klasse mit den Feldern die an die Controls gebunden sind hat eben die Schnittstelle INotifyPropertyChanged, und die IDataErrorInfo für Fehlermeldung.

Nun ist es so, das ein paar Felder der Klasse die an die Controls gebunden werden, den Datentyp mit dem "?" versehen bekommen, damit sie "NULL" sein dürfen. Das mache ich deswegen so, damit der User neue gültige Werte eintragen kann. Ansonsten wären ja Vorgabedaten drin, und das möchte ich nicht, der User muss dort neue Daten eingeben. Und das kann ich nur feststellen, wenn zuvor nichts eingegeben war. Deswegen die NULL-Fahigkeit.

Ich prüfen dann bei der Datenübernahme (erfolgt durch Button-Click), ob die NULL-fähigen Variablen gesetzt sind, ansonsten kommt Fehlermeldung (IDataErrorInfo).

Damit das aber nicht sofort anspricht wenn das WPF-Window geöffnet wird, löse ich von diesen Controls das DataBinding und reagiere beim Button-Click der Datenübernahme mit der neuen Zuordnung der DataBindings für diese Controls. Es handelt sich um TextBoxen.

Hier mal der Code:


  //// Binding der TextBoxen entfernen, damit keine Fehlermeldung kommt, wenn Window aufgebaut wird
            BindingOperations.ClearBinding(tbx_Kantenradius, TextBox.TextProperty);
            BindingOperations.ClearBinding(tbx_Winkel1, TextBox.TextProperty);
            BindingOperations.ClearBinding(tbx_Breite1, TextBox.TextProperty);

Hier mal der Vorgang für die erste TextBox, wenn über Button die Eingabedaten übernommen werden sollen:


 btn_Datenübernahme.Click += (o, eventArgs) =>
                {
                    

                    DatenUebenehmenAktiv = true;

                        //// Binding wieder an Feld "Kantenradius" herstellen
                    Binding binding = new Binding("Kantenradius");
                    binding.NotifyOnSourceUpdated = true;
                    binding.NotifyOnTargetUpdated = true;
                
                    //// Test für Explizite Aktualisierung 
                    binding.UpdateSourceTrigger = UpdateSourceTrigger.Explicit;
                    binding.Mode = BindingMode.TwoWay;
               
                    binding.ValidatesOnDataErrors = true;
                    ////binding.NotifyOnValidationError = true;
                    ////binding.ValidatesOnExceptions = true;

                    //// Control wieder binden ==> Leider steht aber in tbx_Kantenradius.Text = ""  drin, obwohl etwas eingegeben wurde.
                    tbx_Kantenradius.SetBinding(TextBox.TextProperty, binding);
               
                    //// Explizite Aktualisierung lostreten    
                    tbx_Kantenradius.GetBindingExpression(TextBox.TextProperty).UpdateSource();
                

Wo mache ich den Fehler, das die Bindung nicht mehr funktioniert?

Thema: Event (anonym) sofort wieder abmelden
Am im Forum: GUI: WPF und XAML

Hallo, ich nutze desöfteren die anonymen Events (wenn diese Bezeichnung so stimmt). Meine Frage, kann ich das auch sofort wieder abmelden wenn ich das so nutze?


 mnuItem_AenderungenSpeichern.Click += (sender, args) =>
                {
                    DatenupdateDurchführenNeu();

                    //// Event abmelden, geht das irgendwie ??
                    mnuItem_AenderungenSpeichern.Click -= ABMELDENEVENT
                };

Gibt es da eine Möglichkeit, das nur 1x durchlaufen wird und sofort wieder abgemeldet wird?
Ansosnten mach ich das halt so:


 mnuItem_AenderungenSpeichern.Click += nuItemAenderungenSpeichernOnClick;

//// Eventmethode, in der dann auch abgemeldet wird
 private void MnuItemAenderungenSpeichernOnClick(object sender, RoutedEventArgs routedEventArgs)
        {
            DatenupdateDurchführenNeu();
//// Event wieder abmelden
            mnuItem_AenderungenSpeichern.Click -= nuItemAenderungenSpeichernOnClick;

        }

Thema: UserControl definierte TextBoxen mit ErrorProvider ansprechen
Am im Forum: GUI: Windows-Forms

Hallo, arbeite geradwe an einer Applikation, die von mir kreierte UserControls verwendet.
Jedes dieser UserControls beinhaltet ein Bitmap (Werkzeuggeometrie mit Bemassunggslinien) und and diese Bemassungslinien hänge ich dann noch Textboxen an. Wenn die Applikation läuft und der User dementsprechend ein Werkzeug auswählt, werden von ihm Daten abgeftagt und in die Textboxen eingetragen. Die Eingabedaten weden in eine Klasse geschrieben, welche mit INotifyPropertyChanged versehen ist. Die Textboxen der Usercontrols werden sind mit DataBindings an die Eigenschaften der Klasse mit den Eingabedaten gebunden.
Nun mein Problem. Wenn der User Daten für das Werkzeug eingibt, dann prüfe ich Eingabegrenzen ab. Wenn der User einen Wert eingibt der außerhalb dem Bereich liegt, möchte ich die TextBox rot erschienen lassen und den ErrorProvider ausgeben. Wie kann ich aber in der Klasse in der die Property geändert wird herausfinden, welches Control (TextBox) gerade dran ist oder war umd diese dem ErrorProvider übergeben zu können?
Wie kann ich das machen, oder ist mein PRoblem schlecht geschildert?

Thema: Ereignis sofort wieder verlassen wie aber Codeabarbeitung durchführen
Am im Forum: GUI: Windows-Forms

Hallo, habe in meiner Applikation eine 3rd - Party DLL eingebunden. Dort werden Events aufgerufen, und ich muss dann sämtliche Dinge in meiner Applikation prüfen und bearbeiten (z.B. Event FileTransfer_Complete).
Nun, wie mache ich das denn, damit die Eventmethode sofort wieder freigegeben wird? Ich muss aber noch mehrere Zeilen Code ausführen. Das führt aber wohl zu Problemen, wenn ich mich zulange in der Methode aufhalte. Rufe ich auch ein Event auf, das ich erstelle? Wird dann nach dem Aufruf die 3rd - Party DLL - Eventmethode auch sofort wieder frei, oder erst wenn mein Code in meinem gefeuerten Event abgearbeitet wurde?

Thema: DataGrid: Editierende Row Schriftfarbe ändern
Am im Forum: GUI: WPF und XAML

Hallo, nach langer Zeit (gestern) getestet. Mußte mich damit erst auseinandersetzen, weil ich mit XAML nicht soviel mache (viel dynamisch in Code Behind).
Aber es hat auch ein Stück weit funktioniert. Mein Window mit dem DataGrid wird auch in CodeBehind erstellt, und die Daten aus einer Tabelle geladen und visualisiert. Die Tabelle hat über 50 Spalten und es sind immer verschiedene Blöcke von Spalten die zu einer Gruppe gehören. Diese Gruppen habe ich eingefärbt, und das passiert sobald das Ereignis "DataGrid.Loaded" feuert. Dann sieht der Code so aus:


 private void dg_Loaded(object sender, RoutedEventArgs e)
        {
            //// Spalte "Datum" kann nicht editiert werden
            (sender as DataGrid).Columns[4].IsReadOnly = true;

            //// Hintergrundfarbe der Spalte festlegen
            for (int i = 0; i < (sender as DataGrid).Columns.Count; i++)
            {
                if (i ≤ 4)
                {
                    (sender as DataGrid).Columns[i].CellStyle = new Style()
                    {
                        Setters = { new Setter(ContentControl.BackgroundProperty, Brushes.LightGreen)  /*, new Setter(ContentControl.ForegroundProperty, Brushes.DarkBlue)*/ }
                     };
                }
                else if (i ≤ 14)
                    (sender as DataGrid).Columns[i].CellStyle = new Style()
                    {
                        Setters = { new Setter(ContentControl.BackgroundProperty, Brushes.LightYellow) /*, new Setter(ContentControl.ForegroundProperty, Brushes.DarkBlue)*/ }
                    };
                else if (i ≤ 24)
                    (sender as DataGrid).Columns[i].CellStyle = new Style()
                    {
                        Setters = { new Setter(ContentControl.BackgroundProperty, Brushes.Yellow) }
                    };
                else if (i ≤ 34)
                    (sender as DataGrid).Columns[i].CellStyle = new Style()
                    {
                        Setters = { new Setter(ContentControl.BackgroundProperty, Brushes.Orange) }
                    };
                else if (i ≤ 44)
                    (sender as DataGrid).Columns[i].CellStyle = new Style()
                    {
                        Setters = { new Setter(ContentControl.BackgroundProperty, Brushes.LightGoldenrodYellow) }
                    };
                else if (i ≤ 54)
                    (sender as DataGrid).Columns[i].CellStyle = new Style()
                    {
                        Setters = { new Setter(ContentControl.BackgroundProperty, Brushes.Goldenrod) }
                    };
                else if (i ≤ 56)
                    (sender as DataGrid).Columns[i].CellStyle = new Style()
                    {
                        Setters = { new Setter(ContentControl.BackgroundProperty, Brushes.LightGray) }
                    };
                }
        }

Mein Style mit dem Trigger habe ich in eine Resourcendatei geschrieben, aus der ich den Style mit den Triggereinstellungen hole. Leider werden bei den Triggern die Schriftfarbe (Foreground) oder die Hintergrundfarbe (Background) nicht verändert. Ich habe aber bemerkt, warum das so ist. Das hängt mit den Einstellungen in dem oben gezeigten Ereignis zusammen. Entferne ich diese Einstellungen, dann kommen alle Triggereinstellungen durch.

Hier der Style:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  
    
    <Style x:Key="DgEditRowStyle" TargetType="DataGridRow">
        <!--    Hilfe aus einem Forum, hier der Link: http://stackoverflow.com/questions/1223280/how-can-i-set-the-color-of-a-selected-row-in-datagrid
                Hier werden die Systemeigenschaften überschrieben.
        -->
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Blue" />
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Red" />
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
        </Style.Resources>
        
                <!--    Die eigentlichen Trigger die ich verwenden: -->
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Black"/>
                <Setter Property="Foreground" Value="Red"/>
                <Setter Property="FontSize" Value="20"/>
            </Trigger>
			
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="Black"/>
                <Setter Property="FontSize" Value="17"/>
            </Trigger>
			
        </Style.Triggers>
    </Style>

</ResourceDictionary>

Was aber noch hilft (siehe Style, wenn ich die Systemresourcen überschreibe, was ich aber eigentlich nicht möchte.

Mir fehlt jetzt da die Idee. Wie mache ich das?

Thema: Thread mit paralleler Berabeitung die in Hintergrund arbeitet
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo, habe mich am Wochenende mit der TPL beschäftigt, da ich im Moment mit einer Applikation dehr viel Daten und Dateien bewegen, organidieren und Daten filtern sowie aufbereiten muss. Somit habe ich einige Bearbeitungen parallelisiert (da wir Mehrkernmaschinen im Einsatz haben) mit gutem Erfolg (zeigt die Zeitmessung).
Nun aber noch zu meinem Problem, wo ich noch nicht so richig verstehe. Ich habe in meiner Applikation mit einer Menuleiste, bei der man bei Klick auf die Menupunkte verschiedene Abarbeitungen aufruft (Klassen), die Daten aufbereiten und visualisieren. Solange die Abarbeitung läuft, kann ich aber keine anderen Menupunkte anklicken, damit diese auch schon weitere Dinge machen könnten.
Ich habe allerdings auch schon einen Menupunkt in einem eigenen Thread gestartet, dann friert die Oberfläche nicht ein und ich kann einen weiteren Menubutton anklicken.
Da habe ich jetzt auch so probiert, mit der parallelen Abareitung, aber ohne Erfolg.
Deswegen meine Frage zum folgenden Code:


 //// Thread starten, wenn Menubutton geklickt wird
                new Thread(() =>
                {

                    //// parallele Bearbeitung
                    Parallel.Invoke(()=> { GibMeldungStartAus(); }, ()=>{GibMeldungEndeAus();});

                    //// weitere Bearbeitungen
                    Task t1 = new Task(() => {IchMachAuchNochEtwasFürDatenausgabe();});
                    Task t2 = new Task(() => {IchMachAuchNochEtwasZusätzlichesFürDatenausgabe();});

                    //// Warten, bis die Tasks fertig sind
                    Task.WaitAll(t1, t2);

                    //// Fenster anzeigen (muss noch in eine Dispatcher-Methode)
                    ZeigeDasAusgabeWindowAn();

                }).Start();

1. ist es richtig einen Thread zu verwenden und zu starten, in dem dann intern die TPL verwendet wird?
2. Was wäre die Alternative, damit meine Anwendung während der Bearbeitung nicht einfriert?

Kann mir da jemand einen Tipp geben?

Thema: DataGrid: Editierende Row Schriftfarbe ändern
Am im Forum: GUI: WPF und XAML

Hallo, folgendes Problem bei einer DataGridRow die editiert wird.
Wird eine Zelle angesptrungen, werden alle Texte in der DataGridRow in weisser Schriftfarbe dargestellt. Das ist natürlich schlecht, weil ich die Tabellenspalten farblich voneinander abgestzt habe (damit User besser erkenne kann was zusammen gehört). Wie kann ich das einstellen, das die Schriftfarbe während dem editieren z.B. rot ist?
Da muss ich doch irgendwie an den CellSyle ran, beim Ereignis ""BeginningEdit", oder?
Normalerweise wäre das nicht der Fall ,wenn ich die Spalten nicht verschiedenfarbig einefärbt hätte.

Wichtig zu wissen, dass ich das im CodeBehind realisiere, da meine Tabellen dynamisch sind. Kann mir da jemand einen Tipp geben?

Thema: VS2012 ClickOnce Veröffentlichung: Setup.exe geht für x86 Systeme nicht
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo, habe das gefunden :

the clickonce vsto setup.exe installer is not a valid win32 application on windows xp

Habe das ausgeführt, geht leider immer noch nicht. Das Ausrufezeichen ist immer noch da, siehe Bild oben. Hat von euch schon jemand das Update über VS2012 laufen lassen?

Da gibt es noch ein zweites update, habe ich gesehen. Weiss nicht ob ich es installieren soll. hat das schon einer von euch gemacht?
KB2797912: Beschreibung des Visual Studio 2012 Update 2