Entwickler-Ecke

WinForms - Eventhandler Sender


masht - Do 22.07.10 11:28
Titel: Eventhandler Sender
Hallo,

vermutlich schimpft ihr mich gleich alle - aber könnte mir bitte jemand folgendes verständlich erklären?

und zwar hab ich ein kleines form mit 2 textboxten.

die werden mittels einem anderen form befüllt.

die Eventhandler fkt schaut so aus:´

C#-Quelltext
1:
2:
3:
4:
5:
6:
private void try2Textbox_Input(object sender, MouseEventArgs e)
{
  inputform form = new inputform(thisthis.try2Textbox, "Wert 2");
  form.Disposed += new EventHandler(this.TextBoxValueCheck);
  form.Show();
}


in TextBoxValueCheck nehme ich den TextBox Text und mach kurz was damit

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
        private void TextBoxValueCheck(object sender, EventArgs e)
        {
            
            Basistest basistest = new Basistest(this.students[currentStudent].getIdentifier(), this.students[currentStudent].getGender());
            if (this.try2Textbox.Text.Length > 0)
            {
                int failedOrNor = ((basistest.checkIfTestFailed(Basistest.whatTest.sprint, Convert.ToDouble(this.try2Textbox.Text)) == true ? 2 : 1));
                this.checkSidebarState(2, failedOrNor);
            }
        }


ich möchte aber die selbe funktion nicht nochmal schreiben und umbenenen, sondern die generisch halten - sodas ich mit über die Eventargs oder das sender obj. die textbox dieser funktion übergeben.

der sender ist aber in diesem fall ja das eingabeform und nicht die textbox - und eventargs gehen ja so nicht...

hat da vielleicht jemand einen tipp?

thanx
masht


norman2306 - Do 22.07.10 11:59

Dein Problem verstehe ich nicht ganz? Kannst du das etwas besser spezifizieren?

Zu deinem Code:

Ich denke, dass ist etwas umständlich, wie du das dort machst. Ich würde InputForm als Dialog aufbauen. In dem Dialog definierst du einen public Accessor der dein Ergebnis enthält (sowie z.B. beim OpenFileDialog das Files-Feld). Dann noch einen OK und einen Cancel-Button. Der Ok-Button ist nur enabled, wenn in deinem Textfeld etwas gültiges drin steht.

Im MainWindow kannst du dann deinen Dialog öffnen und entsprechend über DialogResult auswerten:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
InputForm iform = new InputForm();

if(iform.ShowDialog() == DialogResult.OK)
{
   text = iform.MyIFormResult;
}
else
{
   //Mach irgendwas anderes...
}


masht - Mo 26.07.10 08:52

danke vielmals!

das mit dem dialog ist genau das, nachdem ich gesucht habe :)

hab da wirklich viel zu umständlich gedacht.


für alle die ein ähnliches problem haben:

hab einfach zu den buttons im eingabeform (welches nun als dialog gezeigt wird) die entsprechenden dialog properties gesetzt


C#-Quelltext
1:
2:
this.okButton.DialogResult = DialogResult.OK;
this.cancelButton.DialogResult = DialogResult.Cancel;


und das ganze dann, wie von norman2306 beschrieben als dialog abgehandelt.

jetzt können die leute meinen eigenen "numblock" für touchscreens super nützen :)

danke