Entwickler-Ecke
WinForms - Event wird erstellt obwohl es schon vorhanden ist
DrHoas - Fr 11.12.15 13:47
Titel: Event wird erstellt obwohl es schon vorhanden ist
Hallo,
ich habe eine ComboBox und ein "_SelectedIndexChanged-Event". Die Klasse "Form1 : Form" ist eh partial, also wollte ich etwas Struktur reinbringen und Events in die Datei "Events.cs" auslagern. Prinzipiell funktioniert das auch. Allerdings wird mir manchmal ein zweites "_SelectedIndexChanged-Event" automatisch in "Form1.cs" erstellt und dann meckert der Compiler natürlich.
Ich denke, das liegt an der Zeile
C#-Quelltext
1:
| this.cbSpezies.SelectedIndexChanged += new System.EventHandler(this.cbSpezies_SelectedIndexChanged); |
aber ohne die läuft's halt gar ned.
Kann man da was machen?
Dank und Gruß
Philipp
Ralf Jansen - Fr 11.12.15 14:09
Du kannst belibieg viele EventHandler haben und die jeweils belibieg oft an den Event hängen.
Was nicht sein darf ist das die EventHandler gleich heißen (gleiche Methodenname ist nicht). Aber du hast uns ja nicht verraten worüber der Compiler meckert. Er spricht ja eigentlich sehr konkret mit einem und sagt nicht nur nö ;)
Th69 - Fr 11.12.15 16:39
Hallo DrHoas,
wenn du mit dem Designer arbeitest, würde ich davon abraten, die Forms-Klasse in weitere partielle Klassen aufzusplitten.
Was du machen kannst (und solltest) ist interne Logik-Klassen erstellen, welche dann von den Event-Methoden benutzt werden:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| private MyLogic _logic = new MyLogic();
private void cbSpezies_SelectedIndexChanged(object sender, EventArgs e) { logic.DoSomethingWithSelectedItem(cbSpezies.SelectedItem); } |
Direkte GUI-Aktivitäten sollten aber in der Forms-Klasse stattfinden.
Wenn du zuviele Elemente auf der Form hast, dann kannst du dafür Benutzersteuerelemente (UserControls) erstellen, welche dann wiederum mit einem eigenen Designer + Code bearbeitet werden können. Und die Form benutzt dann diese UserControls (wie normale andere Elemente).
DrHoas - Sa 12.12.15 07:57
Ja genau, ich arbeite mit dem Designer und werde es wohl so machen, wie von Th69 vorgeschlagen.
Trotzdem nochmal eine Beschreibung des Fehlers, denn für mich ist das ein Bug von VisualStudio (wenn schon partial, dann bitte richtig):
Ich erstelle im Eigenschaftenfenster unter Ereignisse das SelectedIndexChanged-Event. Es wird automatisch in Form1.cs erstellt. Dort schneide ich es aus und steck es in meine Datei Events.cs. Das Ganze funktioniert einwandfrei aber irgendwann, mir ist nicht ganz klar, wann genau, wird in Form1.cs nochmal eine SelectedIndexChanged-Event mit identischem Namen erstellt. Der Compiler meldet dann
| Zitat: |
Fehler 1 Der Aufruf unterscheidet nicht eindeutig zwischen folgenden Methoden und Eigenschaften:
"HG.Form1.cbSpezies_SelectedIndexChanged(object, System.EventArgs)" und
"HG.Form1.cbSpezies_SelectedIndexChanged(object, System.EventArgs)" |
Grüße
Philipp
Th69 - Sa 12.12.15 13:06
Der VS-Designer benutzt die zur .designer.cs-Datei passende Forms-Datei um dann die fehlenden Ereignishandler zu generieren. In der Projektdatei sind diese beiden Dateien miteinander verlinkt:
XML-Daten
1: 2: 3: 4: 5: 6:
| <Compile Include="MainForm.cs"> <SubType>Form</SubType> </Compile> <Compile Include="MainForm.Designer.cs"> <DependentUpon>MainForm.cs</DependentUpon> </Compile> |
Deine eigene Datei "Events.cs" kennt der VS-Designer einfach nicht (du könntest zwar jetzt die Projektdatei ändern, aber davon würde ich abraten, wenn du nicht genau weißt, wie du evtl. Fehler dann wieder ausbügeln kannst).
PS: Mit dem Schlüsselwort
partial hat dies also wenig zu tun (dies ist nur eine zwingend notwendige Unterstützung für den Compiler).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!