ERLEDIGT
JA
JA
ANTWORTEN
30
30
ZUGRIFFE
1039
1039
EMPFEHLEN
-
01.08.11 23:07 #1
- Registriert seit
- Aug 2011
- Beiträge
- 14
Also ich bin erst nur Anfänger im programmieren mit C# aber ich wollt mal fragen wie man die ganze Zeit überprüft ob eine Variable gesetzt wird. Wenn die Variable dann gesetzt wird soll dann eine Aktion stattfinden. Ich glaub, dass das eig ganz einfach is aber ich hab kp wie man das machen soll
-
Hallo,
Die einzige Möglichkeit sowas zu implementieren ist glaub ich sich selbst ein Event zu schreiben und dieses z.B.: im Setter der Variable aufzurufen. Die Aktion die du ausführen möchtest kannst du dann in einem EventHandler implementieren.
Aber erzähl mal kurz was du vor hast, vielleicht kann man dann das Problem überhaupt von einer anderern Seite angehen.
-
01.08.11 23:27 #3
- Registriert seit
- Aug 2011
- Beiträge
- 14
mit dem Event versteh ich schonmal garnoichts aber egal

Also... ich habe 2 Windows Form anwendungen, wenn dann bei der 2 form auf einen knopf gedrückt wird soll dann bei der ersten form eine variable angehen. wenn diese variable dann an ist soll dann bei form 1 eine aktion ablaufen
vieleicht kann man ja machen dass machen dass wenn man auf den knopf drückt direkt die aktion in der anderen form abläuft und die variable dann garnicht nötig ist
ich hoffe du hast halbwegs verstanden was ich meine
-
Na wenn das so ist:
Du kannst den Button auf Form2 als public definieren, dann kannst du dir in der Form1 einen EventHandler für das ClickEvent registrieren und dann dort die Aktion ausführen.
Du solltest dir aber schon ein bisschen was über Events anschauen, sonst wirst du mit WinForms noch ziemlich Probleme kriegen.
-
01.08.11 23:37 #5
- Registriert seit
- Aug 2011
- Beiträge
- 14
erstmal danke für die antworten

weißt du zufällig wo man sich gut darüber informieren kann?
-
Mit welchen Unterlagen hast du denn bis jetzt C# gelernt? DAS Nachschlagewerk für .Net ist auf jeden Fall die MSDN Library.
Bei Büchern und so hab ich auch keine Ahnung was momentan aktuell und gut ist.
-
02.08.11 14:52 #7
- Registriert seit
- Aug 2011
- Beiträge
- 14
kann man nicht einfach das machen?
public void Form2.button1_Click(object sender, EventArgs e)
-
wo würdest du das hinschreiben? bzw. wo registrierst du dir den EventHandler "button1_Click"? Einfach nur eine Funktion hinzuschreiben reicht nicht, man muss auch irgendwo noch das Click-Event mit der Funktion verknüpfen.public void Form2.button1_Click(object sender, EventArgs e)
-
03.08.11 21:32 #9
- Registriert seit
- Aug 2011
- Beiträge
- 14
also dass man dann in form 1 eingibst:
public void Form2.button1_Click(object sender, EventArgs e)
{
//Anweisungen
}
oder geht das nicht?
-
Nein, das geht nicht. Die einzige Lösung die funktionert ist die von mir schon oben beschriebene: In der Form2 den Button-Modifier auf public setzen und dann in der Form1.cs irgendsowas bauen:
Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
public partial class Form1 : Form { Form2 form2; public Form1() { InitializeComponent(); form2 = new Form2(); //Eventhandler an das Click-Event binden form2.button1.Click += new EventHandler(button1_Click); } // EventHandler void button1_Click(object sender, EventArgs e) { //Hier der Code der beim Clicken auf den Button ausgeführt werden soll } }
-
03.08.11 21:53 #11
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Hi!
Gleich mal vorweg: Als Lektüre kann man sicher das aktuelle OpenBook von Galileo empfehlen.
Visual C# 2010.
Nun zum Problem:
Also den Button gleich public zu setzen, würd ich vermeiden.. Da gibts sicher interessantere Arten dies zu lösen..
Hier mal eine Variante, die man auch als Anfänger recht schnell verstehen können sollte..
Das Feld in Form1 ist auf privat gesetzt, Zugriff erfolgt über eine öffentliche Eigenschaft. Im Set-Teil der Eigenschaft wird überprüft ob der neue Wert sich vom Alten unterscheidet. Wenn der neue Wert wirklich neu ist, wird dieser auf das private Feld gesetzt und eine Methode aufgerufen. Ist der neue Wert gleich, wird nichts gemacht weil sich ja nichts ändert.
In der aufgerufenen Methode kann dann jede beliebige Aktion durchgeführt werden, die wann immer sich die Variable ändert auch ausgeführt werden soll. Dabei ists ganz egal wer den Wert ändert.
In Form2 brauchts jetzt nur eine Möglichkeit die Variable in Form1 zu setzen. Dazu übergeben wir einfach einen Verweis auf Form1 im Konstruktor. Da Form2 ziemlich sicher erst nach Form1 erstellt wird, sollte das ja Problemlos möglich sein.
Nachfolgend kurz ein bischen Code wir das ungefähr aussieht. Es ist halt ein Ansatz von der anderen Seite, im Vergleich zum Vorgehen von Steiner_B. - klingt aber eher nach der richtigen Lösung zu "wie man die ganze Zeit überprüft ob eine Variable gesetzt wird. Wenn die Variable dann gesetzt wird soll dann eine Aktion stattfinden."
Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
public class Form1 : Form { private bool myVariable = false; public bool MyVariable { get { reutrn myVariable; } set { if (myVariable == value) return; // die variable würde sich nicht ändern, also keine benachrichtigung myVariable = value; MyVariableChanged(); } } private void MyVariableChanged() { // hier deine Aktion ausführen.. } } public class Form2 : Form { private Form1 form1; public Form2(Form1 form) { this.form1 = form; //.. Form2 hat button1 } private void button1_Click(object sender, EventArgs ea) { form1.MyVariable = true; } }
Noch ein Hinweis: Du solltest gleich von Anfang an beginnen deinen Variablen sinnvolle Namen zu geben. "Form1", "Form2", etc. sagen ja überhaupt nichts aus.
Grüße,
AlexWith the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
03.08.11 23:08 #12
- Registriert seit
- Aug 2011
- Beiträge
- 14
Danke erstmal nochmal verstanden hab ich es auch aber wenn ich auf den knopf bei form2 drück stürztz das programm ab und diese fehlermeldung bei:
public class Form2 : Form
{
private Form1 form1;
public Form2(Form1 form)
{
this.form1 = form;
//.. Form2 hat button1
}
private void button1_Click(object sender, EventArgs ea)
{
form1.MyVariable = true;
}
}
"NullReferenceException wurde nicht behandelt.
Der Objektsverweis wurde nicht auf eine Objektinstanz festgelegt."
-
03.08.11 23:10 #13
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Dann hast du wahrscheinlich vergessen den Verweis auf deine Form zu setzen. (So wie ichs im Kontruktor des Beispiels gezeigt habe.)
With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
Hallo,
@Alexander Schuc: Vom Verständnis her ist deine Lösung sicher die bessere Variante, ich würde nur im Sinne der Wiederverwendbarkeit bzw. Code-Wartbarkeit davon absehen solche Lösungen zu bauen, da du jetzt auch jedes Mal den Coder der "Form2" verändern musst wenn du diese noch an einer anderen Stelle nutzen möchtest. Auch im Bezug auf Thread-Sicherheit sollte man eher Events als Setter verwenden, da (hier im Beispiel) der EventHandler im Thread der Form1 ausgeführt wird, aber der Setter im Thread von Form2 laufen würde.
Die meiner Meinung nach beste Lösung ist, wie schon im ersten Post beschrieben, sich selbst ein Event in der Form2 zu schreiben, welches dann vom button_click ausgelöst wird.
-
04.08.11 02:50 #15
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Hoi..
Ob Form2 wirklich einen eigenen UI Thread haben wird? Wäre mir wirklich neu, dass das als "gute Idee" durchgeht. Aber hey, ich machte ne Weile nichts mit WinForms..
Inwiefern ist denn das Event besser als der Setter, im Sinne der Threadsicherheit?
Das Event wechselt ja auch nicht gnädigerweise für jeden EventHandler der dranhängt in den "richtigen" Thread. Das muss man dann schon noch selber machen..
Den Button in Form2 öffentlich zu machen ist dann aber auch nicht wirklich ne tolle Idee.. aber Wiederverwendbarkeit/Code-Wartbarkeit ist hier in dem Thread glaub ich noch kein Thema. Natürlich sollte man so früh wie möglich nach Best-Practices arbeiten.. aber das dürfte einen Anfänger ziemlich schnell frusten..
Mein Code macht übrigens schon mal die erste Hälfte von dem was du in deinem ersten Beitrag beschrieben hast.
MyVariableChanged wäre der richtige Ort um ein Event abzufeuern. (Schickerweise sollte man die Methode dann aber z.b. OnMyVariableChanged nennen,..)glaub ich sich selbst ein Event zu schreiben und dieses z.B.: im Setter der Variable aufzurufen. Die Aktion die du ausführen möchtest kannst du dann in einem EventHandler implementieren.
Ein schlichtes "Alex" reicht übrigens als Anrede..
lgWith the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
Ähnliche Themen
-
SESSION-Variable per AJAX gesetzt, bei Seitenreload leer
Von Noeden im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 30.06.11, 20:53 -
Compiler-Warnung wenn Variable nicht gesetzt wird
Von XtremeCJ im Forum .NET Application und Service DesignAntworten: 3Letzter Beitrag: 26.07.09, 16:01 -
Überprüfung ob eine Variable gesetzt ist
Von mkoeni1 im Forum PHPAntworten: 2Letzter Beitrag: 18.12.07, 10:39 -
Variable oder Array wird wieder auf 0 gesetzt
Von D@nger im Forum PHPAntworten: 4Letzter Beitrag: 28.08.06, 16:07 -
Pruefen ob Variable gesetzt ist (=isset)
Von rainerdam im Forum .NET ArchivAntworten: 6Letzter Beitrag: 05.10.04, 11:32





Zitieren

Login





