Autor Beitrag
Max064
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Di 03.08.10 11:39 
Hallo,

ich habe in der MSDN den EventHandler StateChanged gefunden und versuche ihn anzuwenden. Obwohl ich das angebene Namespace (using System.Windows) eingebunden habe, gibt der Compiler folgenden Fehler aus:

Zitat:

Fehler 2 "DisplayControl.GraphicEditorForm" enthält keine Definition für "StateChanged", und es konnte keine Erweiterungsmethode "StateChanged" gefunden werden, die ein erstes Argument vom Typ "DisplayControl.GraphicEditorForm" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Dokumente und Einstellungen\mh12803\Desktop\Software\DisplayControl\Program.cs 680 36 DisplayControl


Scheinbar kennt der Debugger das Ereignis nicht?! Wie bekomme ich den Handler zum Laufen?

Ausschnitt aus dem Quellcode:

ausblenden C#-Quelltext
1:
2:
3:
4:
_graphiceditor = new GraphicEditorForm();
_graphiceditor.FormClosing += graphiceditor_Closing;
_graphiceditor.StateChanged += WindowMinimized;
_graphiceditor.ShowDialog();


Der andere Handler funktioniert einwandfrei...

lg Max
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 03.08.10 11:54 
Dieses Ereignis gibt es aber nur unter WPF, nicht in WinForms (auch das Einbinden des Namensbereiches ändert daran nichts!).

Und daß du WinForms verwendest, sehe ich am FormClosing-Ereignis... -)

Du willst mitbekommen, wann das Fenster minimiert wird?
Dann probiere mal das Resize bzw. SizeChanged-Ereignis und frage dort dann den WindowState ab...

Für diesen Beitrag haben gedankt: Max064
Max064 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Di 03.08.10 13:08 
Super, danke! funktioniert wunderbar ;-).
Ivy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Di 09.10.12 13:17 
hallo,
ich habe auch ein ähnliches problem. ich habe ein event mit einem state change und möchte das in einer anderen funktion aufrufen. habe es bereits so versucht, klappt aber nicht.

ausblenden C#-Quelltext
1:
digitalIoControls[i].StateChanged += DigitalIoControlStateChanged;					


"DigitalIoControlStateChanged" ist mein event

was mache ich falsch?
danke
LG
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 09.10.12 13:30 
Klappt nicht ist keine Aussage mit der wir viel anfangen können. Bitte genauer.

Übrigens. DigitalIoControlStateChanged ist dein EventHandler nicht dein Event. Der Event heißt StateChanged.
Ivy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Di 09.10.12 13:36 
ja "klappt nicht" = mein event wird nicht aufgerufen.
ausblenden C#-Quelltext
1:
2:
3:
4:
  private void DigitalIoControlStateChanged(object sender, EventArgs e)
{
//BLABLA
}


und dann habe ich eine funktion in der ich das event aufrufen möchte
ausblenden C#-Quelltext
1:
2:
3:
4:
prublic int Beisspeil()
{
DigitalIoControlStateChanged(sender, e);
}


so in der art...
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 09.10.12 14:04 
Also hat das ganze rein gar nix mit dem Event zu tun? Sondern du möchtest einfach die Methode die zufällig auch am Event hängt direkt aufrufen?

Wenn ja zeig doch bitte kompilierbaren Code der zeigt das die Methode nicht aufgerufen wird obwohl du sie im Code aufrufst und nicht das schon der Compiler dir Fehlermeldungen wirft weil du die Methode falsch aufrufst die du uns aber verschweigst.
Ivy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Di 09.10.12 14:10 
hä? ich verstehs nicht. ich verschweige keine methode.
ich möchte einfaach nur dieses StateChange event zu einem beliebigen zeitpunkt aufrufen.
das was ich gerade gepostet habe ist genau mein sachverhalt. Ich habe ein Event auf einem control namens "StateChanged". das funktioniert auch wenn dieses event auf der oberfläche eintritt. jedoch möchte ich nun da ich den "State" zur laufzeit im programm ändere, dieses event aufrufen.
mehr kann ich dazu nicht mehr sagen
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 09.10.12 14:23 
Zitat:
hä? ich verstehs nicht. ich verschweige keine methode.


So war das auch nicht gemeint. DigitalIoControlStateChanged ist eine stink normale Methode die du genauso aufrufen kannst wie jede andere Methode auch. Also Hinschreiben passende Parameter übergeben und los. Wenn das nicht geht hat a.) Entweder schon der Compiler einen Fehler geworfen (denn du uns dann verschwiegen hättest) oder b.) dein konkreter Aufruf der Methode ist sonst irgendwie falsch dann müssten wir aber genau diesen Aufruf sehen von dem du sagst das er nicht ausgeführt wird und nicht irgendein Beispiel. Wenn dein Beispiel kompilieren würde würde der Aufruf auch klappen.
Ivy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Di 09.10.12 14:29 
ja ich versuche es ja genau so aufzurufen:
ausblenden C#-Quelltext
1:
   digitalIoControls[1].StateChanged += DigitalIoControlStateChanged;					

aber wird nicht aufgerufen
fehler kommt jedoch auch keiner

das ist meine methode in der ich versuche aufzurufen:

ausblenden C#-Quelltext
1:
2:
  public override int SetValue(string name, string value, bool query, bool store)
        {
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 09.10.12 15:40 
Zitat:
ja ich versuche es ja genau so aufzurufen:


Das ist kein Aufruf sondern die Zuweisung deines EventHandlers(eine Methode) an den Event. Damit digitalIoControls die Methode kennt und aufrufen kann wenn der StateChanged Event gefeuert wird.

Zitat:
das ist meine methode in der ich versuche aufzurufen:


Aus dem Namen der Methode und dem was du vorhast erahne ich aber böses. Vermutlich willst du aus SetValue DigitalIoControlStateChanged aufrufen weil darin zufällig Code steckt den du auch in SetValue brauchst. Wahrscheinlich ist es besser das du den Code der jetzt in DigitalIoControlStateChanged steckt in SetValue packst und aus DigitalIoControlStateChanged rauswirfst und von dort dann SetValue aufrufst. Dann fängt das ganze hier auch an ein minimum an Sinn zu erreichen.
Ivy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228



BeitragVerfasst: Mi 10.10.12 07:53 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:



Aus dem Namen der Methode und dem was du vorhast erahne ich aber böses. Vermutlich willst du aus SetValue DigitalIoControlStateChanged aufrufen weil darin zufällig Code steckt den du auch in SetValue brauchst. Wahrscheinlich ist es besser das du den Code der jetzt in DigitalIoControlStateChanged steckt in SetValue packst und aus DigitalIoControlStateChanged rauswirfst und von dort dann SetValue aufrufst. Dann fängt das ganze hier auch an ein minimum an Sinn zu erreichen.


nein nicht zufällig, in der set value wird der State des Controls zur laufzeit geändert (passiert auf der oberfläche auch schon sichtbar.) jedoch wird mein StateChange event nicht aufgerufen, was es aber tun sollte, da wenn sich der State des controls ändert auch was gemacht werden soll.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 10.10.12 13:40 
Du änderst den State von digitalIoControl und das Statechanged Event wird nicht geworfen? Also ein vermuteter Bug in dieser Klasse? Ist DigitalIoControl von dir? Hast du den SourceCode um dem Problem nachzugehen? Oder versuchst du einfach den Bug zu umschiffen in dem du einfach die Methode selbst aufrufst?

Ich frage so weil du eventuell Probleme haben wirst den Event sinnvoll aufzurufen und es natürlich besser ist den Bug zu beheben anstatt in zu workarounden. Die betroffene digitalIoControl Instanz hast du ja wahrscheinlich und kannst die als sender übergeben aber sinnvolle EventArgs könnten schwierig werden oder hat dieser Event gar keinen eigenen sinnvollen EventArgs? Dann kannst du einfach EventArgs.Empty übergeben.