Das direkte Problem, wie ich es sehe, ist, dass Sie dieses Ereignis an eine Schaltfläche binden, die versucht, den Absender auf eine Texteingabe zu übertragen. Da der Absender eine Schaltfläche Steuerung und nicht ein Textfeld wird, erhalten Sie die nullreferenceexception.
Wenn Sie etwas suchen, das mit Klicks zu tun hat, haben Sie mehrere Möglichkeiten:
- Hard-code eine Liste der Kontrolle, die Sie überprüfen möchten und refactor Ihre Check-Funktion, um die Kontrolle, die Sie validieren (in der Tat würde ich refactor diese Art und Weise sowieso).
- [rekursiv] über die Steuerelemente innerhalb des Formulars zu iterieren (vielleicht mit this.Controls und die Übergabe der
Controls
Eigenschaft für jedes Container-Element). Übergeben Sie dann die zu validierenden Steuerelemente wieder an die Validierungsmethode.
z.B..
// your validation method accepting the control
private void ValidateTextBox(TextBox textbox)
{
// validation code here
}
// bind to click event for button
private void btnValidate_Click(object Sender, EventArgs e)
{
// you can do manual reference:
List<TextBox> textboxes = new List<TextBoxes>();
textboxes.AddRange(new[]{
this.mytextbox,
this.mysecondtextbox,
...
});
//---or---
// Use recursion and grab the textbox controls (maybe using the .Tag to flag this is
// on you'd like to validate)
List<TextBox> textboxes = FindTextBoxes(this.Controls);
//---then---
// iterate over these textboxes and validate them
foreach (TextBox textbox in textboxes)
ValidateTextBox(textbox);
}
Und um Ihnen eine Vorstellung vom rekursiven Kontrollgreifer zu geben:
private List<TextBox> FindTextBoxes(ControlsCollection controls)
{
List<TextBox> matches = new List<TextBox>();
foreach (Control control in collection)
{
// it's a textbox
if (control is TextBox)
matches.Add(control as TextBox);
// it's a container with more controls (recursion)
else if (control is Panel) // do this for group boxes, etc. too
matches.AddRange((control as Panel).Controls);
// return result
return matches;
}
}
0 Stimmen
Falsch Absender Es handelt sich um eine Schaltfläche, nicht um eine Textbox.