Hallo! Ich habe ein Problem mit Visual Studio 2008. Wenn ich einen Button über die Toolbox erstelle und dann darauf doppelt klicke, erstellt mir VS eine Methode, in die ich dann auch meinen Code einfügen kann. Dieser funktioniert soweit auch. Wenn ich jetzt aber in der Form den Button anklicke und dann im Eigenschaftenfenster den Buttonnamen ändere (z.B. von button1 auf button2), dann funktioniert mein Code nicht mehr. Klar dass ich dann meinen Code auf button2 ändern muss. Aber es geht nicht mehr. Und wenn ich dann wieder alles auf button1 ändere glaubt man ja das wieder alles funktioniert, aber nö. Ich habe dann nochmal ein Doppelklick auf den button gemacht und mir wurde dann die Methode "button1_Click_1" erstellt(logisch, da button1_Click ja schon existiert). Wenn ich den Code dann da einfüge geht es. Also kann ich vom Prinzip her das Problem umgehen, aber ich möchte gerne wissen woran es liegt. Denn wenn man mal ausversehen einen Namen ändert, müsste man im gesamten Programm die Methoden neu erstellen. Vielleicht weis ja von euch einer, wo der Fehler liegt. MfG DeathCon
Das Problem ist das der EventHandler auch auf den alten Namen reagiert der nicht geändert worden ist. Wenn du erneut draufklickst wird ein neuer Eventhandler für den Button mit dem richtigen Namen hinzugefügt. Musst mal in Form1.Designer.cs schauen unter dem Button Namen dann beim Click event den Namen ebenfalls ändern.
In Form1.Designer.cs steht nur die eine Zeile zu dem Button:
1 | private System.Windows.Forms.Button button1; |
Das was ich ja komisch finde ist, wenn ich den Namen in den Urzusatnd bringe, klappt es trotzdem nicht mehr.
1 | private void button1_Click(object sender, EventArgs e) |
2 | {
|
3 | timer1.Enabled = !timer1.Enabled; |
4 | if (timer1.Enabled == false) |
5 | button1.Text = "Timer starten"; |
6 | else
|
7 | button1.Text = "Timer stoppen"; |
8 | }
|
Hier hatte ich auch alles geändert von button1 auf button2 und wieder zurück. Ist das ein bekanntes Problem oder liegt das bei mir oder meinen Einstellungen. Also bei Google hatte ich dazu nichts gefunden.
Hab gerade gesehn, dass die wichtigen Elemente, die du wahrscheinlich meintest, zugeklappt waren. Ich guck da mal eben ob ich was finde.
DeathCon schrieb: > In Form1.Designer.cs steht nur die eine Zeile zu dem Button: > >
1 | private System.Windows.Forms.Button button1; |
> Es muss noch eine geben. Irgendwo wird der Event dem Button zugeordnet. Also sieh dir den Rest durch. Es schadet nichts wenn du dich ein wenig damit beschäftigst, wie das aufgebaut ist. > Das was ich ja komisch finde ist, wenn ich den Namen in den Urzusatnd > bringe, klappt es trotzdem nicht mehr. Du hast wahrscheinlich schon irgendwo ein Namenschaos angerichtet. > Ist das ein bekanntes Problem oder liegt das bei mir oder meinen > Einstellungen. Es liegt daran, dass du dich zu sehr auf irgendwelche Wizzards und Automatiken verlässt. Zeichne eine Form. Füge die benötigten Controls hinzu Dann: benenne alle Controls sinnvoll und richtig Und erst dann fängst du an, Handler an die einzelnen Events anzuhängen. Halte dich an diese Reihenfolge, insbesondere das man die Dinge gleich richtig und sinnvoll benennt, oder lebe damit das nachträgliche Umänderungen händisches Eingreifen sowohl in deiner Form-Datei als auch in der vom Designer generierten cs Datei bedürfen. > Denn wenn man mal ausversehen einen Namen ändert Den ändert man aber nicht aus Versehen. Ausser man ist Spastiker (soll nicht abwertend gegenüber Spastikern sein). Von einem Programmierer wird erwartet, dass er bei dem was er tut ein wenig mitdenkt.
Selbst wenn du den Namen von deinem Button änderst, verweist der trotzdem noch auf die alte Eventhandler Funktion. Genau genommen musst du also den Namen des Handlers gar nicht ändern. Wenn du allerdings einen Handler mit anderem Namen haben willst, gibts 2 möglichkeiten: 1. Du änderst den Namen der Handler Funktion manuell und gibts im Eigenschaftenfenster des Buttons bei den Events (der kleine gelbe Blitz) die geänderte Funktion bei "Click" an. 2. Du benennst die Funktion (aber nicht so, wie sie heißen soll ;-) ) um und klickst erneut doppelt auf den umbenannten Button. Dann wird ein neuer Eventhandler erzeugt mit dem neuen Namen des Buttons. Jetzt musst du natürlich noch den Quellcode von der alten umbenannten Funktion in die neue kopieren.
Ja, das mit dem gleich richtig beschreiben, ist mir eigentlich schon klar. Normalerweise gehe ich auch so vor, aber durch zufall ist mir das aufgefallen. Ich habe es jetzt aber herausgefunden, vielleicht hilft dieser Beitrag dann noch jemandem mit dem gleichen Problem. Denn wenn es schon Automatiken gibt, würde ich sie auch schon gerne Nutzen. Aber das mit den Namen mache ich nicht mehr über die Automatik. Denn wie du schon sagtest, liegt der Fehler in der Form1.Designer.cs Dort stand bei mir:
1 | Vom Windows Form-Designer generierter Code |
Da hätte ich nur links aufs Plus gehen müssen. Bei meinem Timer war das selbe Problem, da stand nur:
1 | this.timer1.Interval = 1000; |
und es hätte noch
1 | this.timer1.Tick += new System.EventHandler(this.timer1_Tick); |
stehen müssen. Ich danke dir für deine schnelle Hilfe. Das hat mich echt nach vorn gebracht. MfG DeathCon
Auch dir danke Sven, das ist auch ein sehr hilfreicher Hinweis.
Sven schrieb: > Selbst wenn du den Namen von deinem Button änderst, verweist der > trotzdem noch auf die alte Eventhandler Funktion. Genau genommen musst > du also den Namen des Handlers gar nicht ändern. > > Wenn du allerdings einen Handler mit anderem Namen haben willst, gibts 2 > möglichkeiten: > 1. Du änderst den Namen der Handler Funktion manuell und gibts im > Eigenschaftenfenster des Buttons bei den Events (der kleine gelbe Blitz) > die geänderte Funktion bei "Click" an. > 2. Du benennst die Funktion (aber nicht so, wie sie heißen soll ;-) ) um > und klickst erneut doppelt auf den umbenannten Button. Dann wird ein > neuer Eventhandler erzeugt mit dem neuen Namen des Buttons. Jetzt musst > du natürlich noch den Quellcode von der alten umbenannten Funktion in > die neue kopieren. Und dann gibts noch den kreativen Einsatz des Copy/Paste Buffers. Alten Code aus der alten Funktion in den Copy Buffer holen. Dann die Funktion komplett rauslöschen. Neue Funktion (mit dem neuen Namen) anlegen lassen Code aus dem Copy Buffer in die Funktion einfügen. (OK. Ist im wesentlichen die Methode 2 von oben. Lediglich die 'Einschränkung' mit der Namensvergabe fällt weg, da sich diese Frage gar nicht mehr stellt.)
ditsch Jo ;-) Da macht man das seit Jaaaahren so und dann fällt einem auf, dass es irgendwie einfacher geht...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.