Entwickler-Ecke

WinForms - startdialog soll methoden von form1 ausführen


Susilein - Sa 25.07.09 16:17
Titel: startdialog soll methoden von form1 ausführen
Ich habe vor einigen Monaten ein c # Fernseminar angefangen.
Nun habe ich ein Programm geschrieben in dem ich Daten öffnen , in einer Listbox anzeigen,
Daten aus einer Listbox auslesen und abspeichern in .txt files kann.
Nun steh ich allerdings vor einem kleinen Problem :-(
Das Programm soll anfangs einen Startdialog öffnen, indem dann 3 verschiedene Buttons
zum öffnen der in form1 geschriebenen Methoden enthalten sind.

NUr sind die Methoden in Startdialog.cs unbekannt. Wie bekomme ich Zugriff im startdialog von allen Methoden von form1? ich weiss nicht mehr weiter :(

lg susi


jaenicke - Sa 25.07.09 17:42

Wie zeigst du denn dieses Auswahlfenster an? Wie wäre es so: Du zeigst es an, und liest dort von wo du es anzeigst auch die Auswahl aus. Dann muss der Auswahldialog gar nicht umgekehrt auf etwas zugreifen.

Mit den Buttons kannst du ja vor dem Schließen des Auswahldialogs eine entsprechende Public-Eigenschaft setzen, die dann verfügbar ist nach außen.


JasonDelife - So 26.07.09 15:07

Auf myCSharp.de gibt es einen Artiekl dazu: http://www.mycsharp.de/wbb2/thread.php?threadid=5960

Grüße, JasonDelife.


Susilein - Mo 03.08.09 21:38

Hallo und danke für eure Antworten :-)

ich habe nun in meinem Startdialog eine property


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
 public StartDialog() 
        {
            InitializeComponent();
        }

        public Button liste;
        public Button Liste



Und auf meinem Button der von startdialog auf form1 übertragen werden soll,
möchte ich z.b. den button-1 von form1 ansteuern:"beim anklicken des ereignisses ausführen"!

(startdialog)

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
public void buttonNewList_Click(object sender, EventArgs e)
  
{
    
    liste = buttonNewList;
  liste.Click += new EventHandler(this.buttonNewList_Click);
             }


Im form1_load ereignis habe ich geschrieben:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public void Form1_Load(object sender, EventArgs e)
        {

           StartDialog start = new StartDialog();
           start.ShowDialog();
            {

                start.liste = button1;
                start.Liste.Click += new EventHandler(this.button1_Click);
            }
        }

Nur leider öffnet sich nur form1 wenn ich im Startdialog auf button_newlist klicke.
In den anderen foren habe ich auch schon nachgelesen.. doch da steht nur wie man zb einen
string übergibt. Das funktioniert auch einwandfrei.
lg suse

Moderiert von user profile iconKha: C#-Tags hinzugefügt


jaenicke - Di 04.08.09 06:01

Du machst ja auch nichts. :nixweiss:
Du weist Liste etwas zu, machst damit aber nichts. Und die Zuweisung beim Anzeigen des Dialogs passiert ja auch erst, wenn dieser schon wieder geschlossen wurde.

Ich hätte für diesen Zweck erwartet, dass du ein Event deklarierst (so wie Click im Button), dieses zuweist und danach den Dialog anzeigst.

Oder, wenn dir das jetzt zu schwer ist, dass du den Button von Form1 vor der Anzeige des Dialogs in deine Variable Liste (es ist ja so keine Eigenschaft ;-)) packst und dann dessen Click-Event in dem Dialog aufrufst. (Wobei die erste Variante die sauberere wäre.)


Susilein - Mi 26.08.09 13:29

Hallo und danke für die Antwort. Also ich habe bis jetz alles probiert und weiss echt nicht mehr weiter.. kannst du mir ein Beispiel zeigen wie zb bei click eines Buttons in FORM2 das Clickereignis eines Buttons von Form1 ausgelöst wird.
Zudem suche ich noch einen Online-Nachhilfelehrer für C# gegen Bezahlung.
Ich mache wie gesagt einen Fernkurs bei der SGD Darmstadt.
Und habe noch ein paar offene Fragen. Da ich beruflich sehr eingespannt bin und
ich ausserdem an praktischen Beispielen schneller lerne wäre das hilfreicher!

lg susi


JasonDelife - Mi 26.08.09 17:32

Controls sollten niemals public sein.
So wird Form1 bei Buttonclick in Form2 informiert:

C#-Quelltext
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:
class Form1 : Form {

 void showForm2() {
  Form2 frm2 = new Form2();
  frm2.SomeButtonClicked += frm2_SomeButtonClicked;
  frm2.Show();
 }

 void frm2_SomeButtonClicked(object sender, EventArgs e) {
  MessageBox.Show("Bla");
 }

}

class Form2 : Form {

 // Bin mir nicht mehr ganz sicher, ob es so ist. Einfach probieren...
 public event EventHandler SomeButtonClicked {
  add {
   someBtn.Click += value;
  }
  remove {
   someBtn.Click -= value;
  }
 }

}


Grüße, JasonDelife.