C#清除所有文本框并取消选中WPF中的所有复选框

时间:2016-06-10 03:13:44

标签: c# wpf checkbox

我试图弄清楚如何清除所有文本框并取消选中C#WPF中的所有复选框。表单有很多文本框,它会很繁琐.Clear()或=""对于每个单个文本框。复选框也一样。

我听说在Windows Forms中使用foreach循环执行类似下面的操作很容易,但我在WPF上执行此操作,因此无法使其工作。

foreach (Control c in Controls)
{
  if (c is CheckBox)
  {
     ((CheckBox) c).Checked = false;
  }
  else if (c is TextBox)
  {
    ((TextBox) c).Text = "";
  }
}

有人有什么建议吗?感谢

4 个答案:

答案 0 :(得分:2)

让整个控件位于Container内(让它成为Stack面板),如下所示:

<StackPanel Name="containerCanvas" Margin="0,0,0,191">
    <CheckBox Name="chk1" >chk1</CheckBox>
    <CheckBox Name="chk2" >chk2</CheckBox>
    <CheckBox Name="chk3" >chk3</CheckBox>
    <TextBox Name="txt1" Text="xxxxxxxx"></TextBox>
    <TextBox Name="txt2" Text="xxxxxxxxx"></TextBox>
    <TextBox Name="txt3" Text="xxxxxxxxxx"></TextBox>
</StackPanel>

然后Clear按钮的Click事件将如下所示:

private void btnClear_Click(object sender, RoutedEventArgs e)
{
    foreach (Control  ctl  in containerCanvas.Children)
    {
        if (ctl.GetType() == typeof(CheckBox))
            ((CheckBox)ctl).IsChecked = false;
          if (ctl.GetType() == typeof(TextBox))
            ((TextBox)ctl).Text = String.Empty;
    }
}

答案 1 :(得分:0)

下面是我实时项目中使用的代码。

以下代码将帮助您从Parent控件中识别所有子控件,并根据需要执行操作。这里我使用panel作为父控件,并使用简单的方法一次性清除所有文本框控件值。

示例代码

public void SetTextBoxToNull(Panel pnlobjid)  
{  
    try  
    {  
        foreach(Control cntrl in pnlobjid.Controls)  
        {  
            if (cntrl is TextBox)  
            {  
                TextBox txtbox = cntrl as TextBox;  
                txtbox.Text = "";  
            }  
        }  
    }  
    catch (Exception ex)  
    {  
        string test = ex.Message;  
    }  
} 

希望上面的代码能为您提供一些指导,请让我知道。

由于

答案 2 :(得分:0)

我在同一个问题上看了答案:)感谢您的解决方案。现在在我的程序中使用类似的代码:

void clearTextBox(Grid gridName)
{
    foreach (Control txtBox in gridName.Children)
    {
        if (txtBox.GetType() == typeof(TextBox))
            ((TextBox)txtBox).Text = string.Empty;
        if (txtBox.GetType() == typeof(PasswordBox))
           ((PasswordBox)txtBox).Password = string.Empty;
    }
}

答案 3 :(得分:0)

要实现此目的,您可以将控件放置在容器(在本例中为StackPanel)中。
这样,您可以轻松访问所需的控件组。

注意:

  • 在下面的伪代码表示中;为了简化理解,我将这些功能分开,以便可以轻松地对其进行调整以满足您的需求。

示例控件

此示例使用2个按钮:

  • 重置按钮:重置文本框文本
  • 切换按钮:切换复选框的已检查状态。

每个CheckBoxes和Textboxes在StackPanel中声明。
这允许访问容器内的一组控件,从而执行所需的操作。

  • 一个包含CheckBoxes的StackPanel(黄色重命名为“ sp_CheckBoxes”)。
  • 一个包含TextBoxes的StackPanel(白色,重命名为:“ sp_TextBoxes”)。

示例事件

  • 两个按钮都分配了相同的事件(“ Button_Click”)。
  • 事件本身将检查按钮是否已按下并采取相应措施。

XAML

<Grid container direction = "row">
  <Grid item xs={2} key={1}>
    <Paper>
      <Typography> word </Typography>
    </Paper>
  <Grid>
  <Grid item xs={2} key={2}>
    ...
  </Grid>
  ...
  <Grid item xs={2} key={5}>
    ...
  </Grid>
</Grid>

C#

<!-- Buttons -->
    <Button x:Name="btn_ResetText" Click="Button_Click" Content = "Reset" />
    <Button x:Name="btn_TogglecheckBoxes" Click="Button_Click" Content = "Toggle" />

<!-- Stack Panel Containing CheckBoxes -->
    <StackPanel x:Name="sp_CheckBoxes">
        <CheckBox x:Name="myCheckBox1" Content="ContentText1"/>
        <CheckBox x:Name="myCheckBox2" Content="ContentText2"/>
        <CheckBox x:Name="myCheckBox3" Content="ContentText3"/>
        <CheckBox x:Name="myCheckBox4" Content="ContentText4"/>
        <CheckBox x:Name="myCheckBox5" Content="ContentText5"/>
    </StackPanel>

<!-- Stack Panel Containing TextBoxes -->
    <StackPanel x:Name="sp_TextBoxes">
        <TextBox x:Name="myTextBox1" Text="Text1"/>
        <TextBox x:Name="myTextBox2" Text="Text2"/>
        <TextBox x:Name="myTextBox3" Text="Text3"/>
        <TextBox x:Name="myTextBox4" Text="Text4"/>
        <TextBox x:Name="myTextBox5" Text="Text5"/>
    </StackPanel>