Laden...

Forenbeiträge von chrisrabe Ingesamt 25 Beiträge

22.01.2024 - 09:14 Uhr

Es hat sich gelöst.

Möglicherweise verwirrt durch die vielen Internetbeiträge habe ich wohl schlicht den falschen Weg versucht gangbar zu machen.

Durch das Erstellen eines eigenen Click Events in meiner 'Control', welches durch das Click-Event der im Control befindlichen Button ausgelöst wird ist nun auch im Testprogramm mein eigenes Click-Event verfügbar und wird, wie gewünscht, ausgelöst.

Thema geschlossen.

21.01.2024 - 18:21 Uhr

Hallo herbivore,

nachdem ich den Sonntag vergebens mit internetrecherche verbracht habe, stoße ich nun auf diesen Thread, der (16 Jahre später) mein Problem trifft. Offensichtlich hatte aber Oli001 nicht 'meine' Probleme.

In einem Windows Forms Projekt habe ich ein Control erstellt (myButton) welches einen standard Button enthält und daneben etwas zusätzliche Design-Dinge. Diesen MyButton möchte ich nun testweise in einem kleinen Prüfprogramm per Button.Click in eine SlideBar einfügen. Das klappt alles problemlos. Nach jedem Butto.Click erscheint wunschgemäß der neue, zusätzliche Button.

Mein Problem besteht darin, dass ich es nicht schaffe die Events von MyButton zu nutzen. Alle Varianten mit den Button events umzugehen die ich hier fand bleiben ohne funktion bei mir - sprich, auf ein MyButton.Click erfolgt nicht die gewünschte Reaktion. Letzte Version meiner Tests ist folgende, in der ich eine Ausgabe 'BuildSlideBar' im Debugfenster erhalte, aber wenn ich dann den eigenen 'SlideBarButton' drücke, kommt keine Ausgabe im Debugfenster von VS.

        private void BuildSlideBar(List <SlideBarButton> buttonList)
        {
            Debug.WriteLine("BuildSlideBar");
            foreach (SlideBarButton sbb in buttonList)
            {
                slideBar.Controls.Add(sbb);
//                sbb.Click += (object s, EventArgs e) => { Debug.WriteLine("Test "); };
                sbb.Click += (s, e) => { MessageBox.Show( sbb.Name + sbb.ButtonText); };

            }
            slideBar.Refresh();
        }

Ich habe einige Berichte gefunden, dass beim dynamische Anlegen von Controls, also zur Laufzeit, schwierigkeiten mit den Events macht. Wennich die Buttons nicht dynamisch zur Laufzeit, sondern vorab im Designer anlege, geht ja alles wunderbar.

Hast Du einen Tip(p) für mich, wie ich das Problem lösen kann?

Grüße

Christian

18.08.2022 - 18:01 Uhr

Hallo Abt und Th69,

Ja, das WPF Konzept ist mir noch nicht so geläufig da ich bislang nur in WinForms gearbeitet habe. Dort hätte ich jetzt vermutlich versucht in einem separaten Thread die Daten zu laden statt in der ISR des ButtonLoad events. Die Darstellung wäre aber sicherlich auch nicht schneller geworden.

vielen Dank für die beiden Hinweise. Ich werde das so versuchen.

Grüße
Christian

18.08.2022 - 17:09 Uhr

Hallo,

ich versucher erstmals mit C# eine mini WPF-Anwendung zu erstellen. Grundaufgabe soll es sein eine Textdatei zu öffnen und den Inhalt darzustellen.
Besonders daran ist, dass die Textdatei sehr groß ist (z.B. 980000 Zeilen mit je über 160 Zeichen). Sie beinhaltet Messwerte im Textformat und logging-Informationen.

Ich habe einige Versuche gemacht, jedoch scheinbar nicht die richtigen Methoden gefunden. Das Laden bzw. Darstellen des Dateiinhaltes dauert extrem lange (über eine Minute)
Aktuell lade ich die Datei so:


   private void Button_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog fd = new OpenFileDialog();
            Nullable<bool> result = fd.ShowDialog();

            if (result == true)
            {
                if (File.Exists(fd.FileName))
                {
                    var run = new Run(File.ReadAllText(fd.FileName));
                    var p = new Paragraph(run);
                    var flowDocument = new FlowDocument(p);
                    documentViewer.Document = flowDocument;
                }
            }
        }

Ich habe auch Versuche mit einer Textbox gemacht, jedoch wird das dadurch nicht schneller.
Wenn ich vergleichsweise die selbe Datei mit Notepad++ offne, dann ist sie sofort dargestellt und ich kann darin scrollen. So würde ich mir das vorstellen.

Könnte mir jemand einen Tipp geben, wie es möglich ist so große Dateien zu öffnen?

Grüße
Christian

19.12.2020 - 20:31 Uhr

Hallo,

danke für die regen Ideen.
Bevor wir zu weit vom eigentlichen Ziel abweichen muss ich nochmal klarer sagen was gemeint ist. Letztendlich ist nicht das Ziel tatsächlich irgendwie die offenen Forms genannt zu bekommen, sorry für die unklare Formulierung.

Es ist so:
Das Windows Forms Programm hat eine Menge zuschaltbarer Funktionsmodule. Diese werden, je nach Konfiguration des Programmes, freigeschaltet, z.B.:

  • Option Temperaturmesser
  • Option Torsteuerung
  • Option Lichtsteuerung
  • Option Wasserverteilung
    ...

Es soll ein übergeordnetes Status-Form im Hauptprogramm durch Tastendruck geöffnet werden. Dieses soll nun eine 'broadcast ähnliche' Aufforderung schicken, welche alle aktiven Funktionsmodule dazu veranlasst, sich beim Status-Form zu melden, damit dieses dann deren Namen auflisten kann. Sobald sich ein Modul am Status-Form angemeldet hat soll das Status-Form auf ein Event des jeweiligen Modules hören, in welchem Messdaten übertragen werden. Die Anmeldung am Status-Form kann aber nicht bei Programmstart erfolgen, da dieses zu dem Zeitpunkt nicht läuft. Das Status-Form muss also zur Anmeldung aufrufen.

18.12.2020 - 20:02 Uhr

Hallo, ich komme wieder einmal nicht weiter und hätte gerne einen Ansatz für folgendes Problem:

Ich habe ein Programm, welches mehrere Forms geöffnet haben kann.
Ein Übersichtsform soll die wichtigsten Inhalte aller offenen Forms darstellen. Im einfachsten Fall z.B. eine Namensliste.

Mein Wunsch wäre, im Übersichtsform so eine Art Broadcast oder Event zu schicken, auf welches alle Forms hören und ihre Antwort zurück schicken.

Was wären denn hier die richtigen Stichworte zur Suche? Mit Broadcast finde ich immer wieder UDP Ansätze, ich dachte mehr an Events. Unter 'Callback' hatte ich bislang vermutet eine Lösung zu finden, aber zum Erfolg komme ich damit auch nicht.

u.U. wichtig zu wissen ist: dass das Übersichtsfor immer erst geöffnet wird, wenn die anderen Forms bereits laufen. Diese können sich also nicht am Ü.Form anmelden, die Suche/Anfrage muss also vom Ü.Form ausgelöst werden.

ich schätze mein Ansatz ist nicht der richtige?

Viele Grüße
Christian

22.11.2020 - 09:27 Uhr

Hallo TH69,

vielen Dank. Diesen Beitrag habe ich nicht gefunden.

Grüße

21.11.2020 - 11:48 Uhr

Hallo Forum,

ich habe seit Jahren immer wieder ein ungelöstes Problem, welches ich nun nach längerer Programmierpause endlich versuchen möchte zu beseitigen - ich denke ich bin auf eine völlig falschen Strategie festgefahren.

Zum Problem:
Ich habe ein Windows Forms Programm, welches die Bedienung von externen Geräten ermöglicht. Die Geräte hängen per Schnittstelle am PC. Als einfaches Beispiel ein Netzteil. Ich möchte nun, dass die Bedienelemente der GUI beim Start des Programmes den Zustand der Hardware abfragen und auf der GUI darstellen (z.B. eingestellte Spannung, eingestellter max. Strom, etc.) Das ist alles kein Thema und funktioniert natürlich.

Über die Controls für Strom und Spannung auf der GUI steuert der Benutzer zur Laufzeit das Netzteil (funktioniert auch), jedoch auch vom Netzteil selbst vorgenommene Änderungen dieser Werte sollen in den Controls richtig gezeigt werden, damit die GUI Anzeige immer mit dem Istzustand am Netzteil übereinstimmt. sprich: Das Control wird vom User als auch vom Programm verändert.

Mein Problem besteht darin, dass bei Änderungen durch das Programm auch die Ereignisse der Controls aufgerufen werden, welche ich für die manuelle Bedienung aufrufe (z.B. Value changed).

Das führt z.B. dazu, dass eine Änderung durch das Netzteil vom Prog erkannt und an das Control weitergereicht wird. Die Änderung des Control feuert das Event, welches nun die neuen Werte an das Netzteil sendet (dieses ist ja aber bereits auf diesen Wert eingestellt)

Ich suche nach einem Weg, der nicht unnötige Events auslöst und keine unnötige Kommunikation auf der Schnittstelle verursacht. Ich bin scheinbar zu festgefahren um selbst auf eine Lösung zu kommen...

Weiß jemand Rat?

Vielen Dank

01.08.2020 - 20:25 Uhr

Hallo Abt,

danke für diesen Hinweis. Klingt logisch und passt zum Verhalten hier. Es hat sich am Quellcode nichts (zumindest diesbezüglich nichts) geändert.

Ich habe eine ältere Variante aus GIT zurück geholt, die eben solche Effekte zeigte.

Denke mit den gegebenen Tipps bekomme ich das wieder hin.

Danke!

01.08.2020 - 15:53 Uhr

Hallo MarsStein,

Danke für den Tipp. Da ich noch auf 4.6 arbeite möchte ich erstmal wissen was hier passiert ist.

Die Richtung in die Th69 verweist wirkt schon mal in der vergrößerten Schrift wie eine gute Lösung. Hier stand in Win10 tatsächtlich 125%. Das Scaling der Forms steht auf none.

Möglicherweise ist hier was passiert beim Einrichten des zweiten Displayports auf meiner W530 Dockingstation. Das würde in den Zeitraum passen.

Danke erstmal für die Hinweise!!

Grüße
Christian

01.08.2020 - 11:49 Uhr

noch ein Nachtrag....

erstaunlicherweise treten einige dieser Größenprobleme erst beim Ausführen des compilierten Programmes auf:

Wenn ich Forms im VS2015 Editor geöffnet habe und das Laufende Programm daneben schiebe sieht man deutlich, dass z.B. Panels auf der GUI im ausgeführte Code nur 3/4 so groß sind wie im VS-Designer.

01.08.2020 - 11:31 Uhr

Nachtrag...

es sing jedoch nicht nur die Schriften. Auch Bilder sind verschoben.
Deutlich erkennbar ist das z.B. dadurch, dass ein Form eine Hintergrundgrafik enthält, die an manchen Stellen von picture boxen überlagert ist.
Diese Positionen stimmen auch nicht mehr.

01.08.2020 - 11:28 Uhr

Hallo,

es ist schon zum verzweifeln wenn Dinge die 'immer gingen plötzlich 'von alleine' nicht mehr gehen.

Ich arbeite seit mehreren Jahren unter VS2015 an einem C# Projekt, welches viele Forms enthält. Seit einigen Tagen ist aufgefallen, dass sich die Schriften (möglicherweise auch andere Dinge wie Bilder...) in der Größe geändert haben, wodurch das Programm nicht nur bescheiden aussieht, sondern z.T. auch nicht mehr nutzbar ist.

Die Schriftdarstellung von VS2015 Arbeitsumgebung ist nicht betroffen, nur die Darstellung meines Programmes, welches als Terget Framework .NET 4.6 benutzt

Offensichtlich finde ich nicht die geeigneten Suchbegriffe für das Forum oder Suchmaschinen um der Ursache auf die Spur zu kommen. Ich kann mir nicht vorstellen der einzige betrofene zu sein.

Kann mir jemand helfen dieses Problem zu lösen?

Grüße

14.02.2019 - 09:53 Uhr

Guten Morgen Th69 und C#nup,

vielen Dank für Eure Tips!

Es ist zwar nicht unbedingt die elegante Variante, aber ich konnte durch Euch immerhin mein Ziel erreichen den ungewünschten Node zu entfernen.

Ein schlichtes

projectTreeView.Nodes[0].Nodes[2].Remove();

nach dem InitializeComponent() im Constructor beendet meine Suche nun bis auf weiteres erfolgreich.

Danke nochmals!!

Grüße
Chrisrabe

13.02.2019 - 15:11 Uhr

Hallo C#nup,

genau da liegt ja mein Problem.
Nach Ausführung dieser Zeile ist mein Knoten mit dem RootNode und den vier ChildNodes versehen.
Dies passiert also durch Ausführung der Operation von "resources.GetObject("projectTreeView.Nodes")".
Was ich halt nicht verstehe ist, woher die Informationen über diese Knoten kommen. Worauf greift denn das '.GetObject' zu?

Grüße

13.02.2019 - 14:56 Uhr

Hallo Th69,

dort habe ich als erstes eschaut, aber es gibt keinerlei Zusammenhang zwischen diesen Dateien und den ChildNodes - sprich sie tauchen dort nicht auf,

trotzdem danke für den Tip!

13.02.2019 - 12:27 Uhr

Hallo MrSparkle,

ich verstehe den Ansatz sich selbst vorab um eine Lösung zu bemühen durchaus richtig. Ich habe auch bereits vor Deinem Tipp als auch jetzt nochmals mich genau mit diesen Resourcen beschäftigt, komme aber sei gestern schlicht nicht vorwärts.

Es ist eine Datei MeinProgramm.Recources.dll vorhanden, in der diese ChildNodes zu finden sind. Was ich nicht verstehe ist die Herkunft dieser Datei und wie sie zu ihrem Inhalt kommt.
Ein 'Resource File' ist in den Projekt properties unter 'Application' nicht eingetragen.

Ist es denn vermessen zu fragen, ob mein Ansatz falsch ist, dass der Name der ChildNodes in exakter Schreibweise irgendwo innerhalb der Dateien im Projekt zu finden sein müsste?

Grüße

13.02.2019 - 09:56 Uhr

Hallo Liebes Forum,

ich bearbeite ein fremdes Programm (C#) unter Visual Studio 2015 und muss dabei aus einem vorhandenen TreeView einen ChildNode entfernen. Klingt zwar komisch, aber ich bin dazu offensichtlich nicht in der Lage. Vielleicht könnt Ihr mir zeigen was ich nicht weiß?

Problem
Ich habe im laufenden Programm auf dem Haupt Form ein TreeView mit einem RootNode und vier ChildNodes. In den Properties kann ich unter 'Nodes' die 'Collection' ansehen und finde hier auch den RootNode. Die ChildNodes werden aber nicht durch die Einstellunden im treenode Editor angelegt/angezeigt (siehe anhängendes Bild).

In der Datei MeinProgram.Designer.cs finde ich wohl die Stelle, an welcher der RootNode zugewiesen wird:

  this.projectTreeView.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
            ((System.Windows.Forms.TreeNode)(resources.GetObject("projectTreeView.Nodes")))});

Mit einem Breakepoint vor dieser Zeile kann ich hier auch den RootNode und darunter die vier ChildNodes finden, habe aber schlicht keine Ahnung wo die vier ChildNodes definiert werden.
Klar ist, dass die ChildNodes durch Ausführen von 'InitializeComponent()' im Construktor des Hauptprogrammes bereits existieren.

Ich habe das Gesamte Projekt nach dem Namen des zu entfernenden ChildNodes "Control Loops" durchsucht und nichts gefunden.

Frage
Kann mir jemand sagen wo ich die Definition der ChildNodes finden kann?
Natürlich meine ich damit nicht die Zeile in meinem Euch unbekannten Quellcode, sondern ob der Ursprung irgendwo hinter der obigen Anweisung "...resources.GetObject("projectTreeView.Nodes")..." liegt. Ich verstehe diese Zeile nicht und kann in der Richtung deshalb nicht vernünftig suchen.

Vielen Dank im Voraus

29.08.2014 - 16:53 Uhr

Hallo Bernd,

da versuche ich schon eine ganze Weile dran zu kommen, also an die Eigenschaften der Verknüpfung. Wenn ich mit der Maus auf der Verknüpfung 'rechts-klicke' startet irrsinnigerweise der Installer wieder. Wenn ich hingegen manuell eine Verknüpfung auf den Desktop ziehe, dann funktioniert die ganz normal.

Bis auf die Funktion der Verknüpfung sieht es also jetzt schon ganz gut aus...

(Alle anderen Verknüpfungen auf dem Rechner funktionieren einwandfrei - also kein generell merkwürdiges Verhalten)

Gruss
Christian

29.08.2014 - 15:45 Uhr

Etwas weitergekommen bin ich.

Ich habe das Setup Projekt nochmals kompiliert, mit 'R*** Uninstaller' alles dieser Installation auf dem Rechner entfernt und die Installation neu durchgeführt. Jetzt sind Installationspfad und Texte im Installationsdialog richtig. Der Name unter dem Icon bleibt aber der falsch.

29.08.2014 - 15:30 Uhr

Hallo vbprogger,

das dachte ich auch, aber auch nachdem ich den Namen dort geändert hatte änderte sich nichts.
Der 'alte' Name wird konsequent beim Installer verwendet. In allen Texten zur Benutzerführung usw. Habe auch scheon MVS neu gestartet und die Änderungen erneut überprüft - geht nicht.

Das kann doch nicht so schwer sein....

29.08.2014 - 14:47 Uhr

Hallo,

die ist zwar eine Grundlagenfrage, aber ich komme schlicht nicht dahinter, sorry.

Die Situation:
Man hat sich entschlossen ein umfangreiches Projekt nun umzubenennen. Überall dort wo es programm technisch geändert werden kann habe ich das erledigt. Auch das Icon im Programm und für den Link auf dem Desktop (nach Ausführen des Installers) sind angepasst.
(Zur Weitergabe der Software wird mit dem eingebauten Installer des Visual Studio 2008 ein *.msi file erstellt)

Das Problem:
Was ich einfach nicht schaffe ist den Programmnamen, der unter dem Desktop-Icon steht, zu ändern 😦
Der "Assembly name" in den Projekt Properties ist natürlich angepasst, der ist es also nicht.

Hat jemand einen Rat für mich?

Gruß
Christian

24.02.2014 - 19:12 Uhr

Hallo Robin,

das klingt im Grunde auch gut, sofern der eigentliche Aufruf

ComandoParser.Execute("SNR");

eben eine Variable verträgt anstelle des "SNR", also

ComandoParser.Execute(Funktion);

.
Ich muss es ausprobieren... Danke für diesen Ansatz

Hallo Witte,

das kannte ich nicht. Interessante Idee, die ich nochmals lesen werde.
Danke

24.02.2014 - 08:19 Uhr

Guten Morgen, Abt und Sarc,

vielen Dank für Eure Tipps. Denke das hilft mir weiter.

23.02.2014 - 18:15 Uhr

Hallo Forum,

auf meiner nun wirklich langen und erfolglosen Suche nach einer Lösung bin ich hier im Forum gelandet und hoffe auf Eure Hilfe.

In VisualStudio 2008 und 2010 versuche ich in C# einen Kommando Parser zu erstellen, der eingehende RS232 Antworten eines externen Gerätes interpretiert und eine entsprechende Funktion aufruft.
Die zu erkennenden Kommandos wie die dazu gehörig auszuführenden Funktionen möchte ich in einem 2-dimensionalen Stringarray verwalten etwa so:

SNR, SaveSN
Typ, ShowTyp
...

Nach Erkennung eines Kommandos soll irgendwie (ich dachte mit Delegaten) die entsprechende Funktion/Methode aufgerufen werden, also irgendwie so:


string[,] MyArray = new string[2, 2] { { "SNR", "SaveSN" }, { "Typ", "ShowTyp" } };
string TargetFunction = MyArray[0][0];
fncPtr = TargetFunction;

SNR z.B. ist also eine Kennung die per RS232 kommt, SaveSN der Name einer Funktion die bei Erkennung auszuführen ist.

Mit den Delegaten habe ich zwar geschafft eine Funktion aufzurufen, aber die Zuweisung des auszuführenden Methoden Namens müsste über eine Variable erfolgen die also je nach Kommando andere Namen enthält. Bei obiger Zeile will er aber die Funktion mit dem Namen "TargetFunction" ausführen die es natürlich nicht gibt.

Was kann man den machen, um diese Zuweisung per Variable zu ermöglichen?

Viele Grüße
Christian