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.
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
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
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
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.:
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.
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
Hallo TH69,
vielen Dank. Diesen Beitrag habe ich nicht gefunden.
Grüße
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
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!
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