Ich habe eine RegisterkarteControl, die viele TextBoxes enthält, möchte ich eine Schaltfläche hinzufügen, um alle TextBoxes Texte auf einmal zu löschen, habe ich diesen Code ausprobiert:
private void ClearButton_Click(object sender, EventArgs e)
{
foreach (TextBox t in tabControl1.SelectedTab.Controls)
{
t.Clear();
}
}
Aber dieser Code funktioniert nicht, ich habe folgende Fehlermeldung erhalten:
Das Objekt des Typs "System.Windows.Forms.Button" kann nicht in "System.Windows.Forms.TextBox" eingegeben werden
Was ist falsch in diesem Code?
Antworten:
2 für die Antwort № 1Probieren Sie diesen Code aus:
void ClearTextBoxes(Control parent)
{
foreach (Control child in parent.Controls)
{
TextBox textBox = child as TextBox;
if (textBox == null)
ClearTextBoxes(child);
else
textBox.Text = string.Empty;
}
}
private void ClearButton_Click(object sender, EventArgs e)
{
ClearTextBoxes(tabControl1.SelectedTab);
}
4 für die Antwort № 2
Sie versuchen, jedes Steuerelement zu durchlaufen, von denen einige keine TextBox-Steuerelemente sind.
Sie können verwenden OfType
um anzugeben, für welche Steuerelemente Sie sich interessieren, stattdessen:
foreach (TextBox t in tabControl1.SelectedTab.Controls.OfType<TextBox>())
{
t.Clear();
}
2 für die Antwort № 3
Sie erhalten alle Steuerelemente (nicht nur die TextBoxen) in der foreach-Schleife
versuche so etwas:
foreach (Control t in tabControl1.SelectedTab.Controls)
{
if(t is TextBox)
((TextBox)t).Clear();
}
0 für die Antwort № 4
Nicht alle Steuerelemente sind Textfelder. Mach es so:
private void ClearButton_Click(object sender, EventArgs e)
{
foreach (var control in tabControl1.SelectedTab.Controls)
{
if(control is TextBox)
{
TextBox t = (TextBox)control;
t.Clear();
// or short:
// ((TextBox) control).Clear();
}
}
}