Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于表单中的每个控件,如何对表单中的所有文本框执行操作?_C#_Winforms - Fatal编程技术网

C# 对于表单中的每个控件,如何对表单中的所有文本框执行操作?

C# 对于表单中的每个控件,如何对表单中的所有文本框执行操作?,c#,winforms,C#,Winforms,如何使用Foreach语句对文本框执行操作 foreach (Control X in this.Controls) { Check if the controls is a TextBox, if it is delete it's .Text letters. } 你在找什么 foreach (Control x in this.Controls) { if (x is TextBox) { ((TextBox)x).Text = String.Empty; }

如何使用Foreach语句对文本框执行操作

foreach (Control X in this.Controls)
{
    Check if the controls is a TextBox, if it is delete it's .Text letters.
}
你在找什么

foreach (Control x in this.Controls)
{
  if (x is TextBox)
  {
    ((TextBox)x).Text = String.Empty;
  }
}

您可以执行以下操作:

foreach (Control X in this.Controls)
{
    TextBox tb = X as TextBox;
    if (tb != null)
    {
        string text = tb.Text;
        // Do something to text...
        tb.Text = string.Empty; // Clears it out...
    }
}
如果您使用的是C#3.0或更高版本,您可以执行以下操作

foreach ( TextBox tb in this.Controls.OfType<TextBox>()) {
  ..
}
foreach ( Control c in this.Controls ) {
  TextBox tb = c as TextBox;
  if ( null != tb ) {
    ...
  }
}
或者更好的是,用C#2.0编写类型

类型的公共静态IEnumerable(IEnumerable e),其中T:class{
foreach(对象cur在e中){
T val=当前为T;
如果(val!=null){
收益率;
}
}
}
foreach(文本框tb,of type(this.Controls)){
..
}

这里的诀窍是
控件
不是
列表
IEnumerable
,而是
控件集合

我建议使用将返回更多内容的控件扩展..queryable;)

public static IEnumerable All(此控件集合控件)
{
foreach(控件中的控件)
{
foreach(Control.Controls.All()中的Control孙辈)
收益回报孙子;
收益率控制;
}
}
然后你可以做:

foreach(var textbox in this.Controls.All().OfType<TextBox>)
{
    // Apply logic to the textbox here
}
foreach(此.Controls.All()类型中的var文本框)
{
//将逻辑应用于此处的文本框
}

只需添加其他控件类型:

public static void ClearControls(Control c)
{

    foreach (Control Ctrl in c.Controls)
    {
        //Console.WriteLine(Ctrl.GetType().ToString());
        //MessageBox.Show ( (Ctrl.GetType().ToString())) ;
        switch (Ctrl.GetType().ToString())

        {
            case "System.Windows.Forms.CheckBox":
                ((CheckBox)Ctrl).Checked = false;
                break;

            case "System.Windows.Forms.TextBox":
                ((TextBox)Ctrl).Text = "";
                break;

            case "System.Windows.Forms.RichTextBox":
                ((RichTextBox)Ctrl).Text = "";
                break;

            case "System.Windows.Forms.ComboBox":
                ((ComboBox)Ctrl).SelectedIndex = -1;
                ((ComboBox)Ctrl).SelectedIndex = -1;
                break;

            case "System.Windows.Forms.MaskedTextBox":

                ((MaskedTextBox)Ctrl).Text = "";
                break;

            case "Infragistics.Win.UltraWinMaskedEdit.UltraMaskedEdit":
                ((UltraMaskedEdit)Ctrl).Text = "";
                break;

            case "Infragistics.Win.UltraWinEditors.UltraDateTimeEditor":
                DateTime dt = DateTime.Now;
                string shortDate = dt.ToShortDateString();
                ((UltraDateTimeEditor)Ctrl).Text = shortDate;
                break;

            case "System.Windows.Forms.RichTextBox":
                ((RichTextBox)Ctrl).Text = "";
                break;


            case " Infragistics.Win.UltraWinGrid.UltraCombo":
                ((UltraCombo)Ctrl).Text = "";
                break;

            case "Infragistics.Win.UltraWinEditors.UltraCurrencyEditor":
                ((UltraCurrencyEditor)Ctrl).Value = 0.0m;
                break;

            default:
                if (Ctrl.Controls.Count > 0)
                    ClearControls(Ctrl);
                break;

        }

    }
}
选中此项:

foreach (Control x in this.Controls)
{
    if (x is TextBox)
    {
        x.Text = "";
    }
}

简单地使用linq,根据您认为适合您处理的任何控制进行更改

        private void DisableButtons()
    {
        foreach (var ctl in Controls.OfType<Button>())
        {
            ctl.Enabled = false;
        }
    }

    private void EnableButtons()
    {
        foreach (var ctl in Controls.OfType<Button>())
        {
            ctl.Enabled = true;
        }
    }
private void DisableButtons()
{
foreach(Controls.OfType()中的var ctl)
{
ctl.Enabled=false;
}
}
私有void启用按钮()
{
foreach(Controls.OfType()中的var ctl)
{
ctl.Enabled=true;
}
}

更好的是,您可以用一种方法将其封装以清除任何类型的控件,如下所示:

public static void EstadoControles<T>(object control, bool estado, bool limpiar = false) where T : Control
        {
            foreach (var textEdits in ((T)control).Controls.OfType<TextEdit>()) textEdits.Enabled = estado;
            foreach (var textLookUpEdits in ((T)control).Controls.OfType<LookUpEdit>()) textLookUpEdits.Enabled = estado;

            if (!limpiar) return;
            {
                foreach (var textEdits in ((T)control).Controls.OfType<TextEdit>()) textEdits.Text = string.Empty;
                foreach (var textLookUpEdits in ((T)control).Controls.OfType<LookUpEdit>()) textLookUpEdits.EditValue = @"-1";
            }
        }
publicstaticvoid-EstadoControles(对象控件,bool-estado,bool-limpiar=false),其中T:control
{
foreach(var textdedits in((T)control).Controls.OfType())textdedits.Enabled=estado;
foreach(var textLookUpEdits in((T)control).Controls.OfType())textLookUpEdits.Enabled=estado;
如果(!limpiar)返回;
{
foreach(var textdedits in((T)control).Controls.OfType())textdedits.Text=string.Empty;
foreach(var textLookUpEdits in((T)control).Controls.OfType())textLookUpEdits.EditValue=@“-1”;
}
}

您也可以使用LINQ。例如,对于清除
Textbox
text,请执行以下操作:

this.Controls.OfType<TextBox>().ToList().ForEach(t => t.Text = string.Empty);
this.Controls.OfType().ToList().ForEach(t=>t.Text=string.Empty);
私有IEnumerable GetTextBox(控件)
{
如果(控件为TextBox TextBox)
{
返回文本框;
}
if(control.HasChildren)
{
foreach(Control.Controls中的控制中心)
{
foreach(gettextboxs(ctr)中的var textbox)
{
返回文本框;
}
}
}
}
上述工作有很多。 只是补充一下。如果文本框不是直接在表单上,而是在其他容器对象(如GroupBox)上,则必须获取GroupBox对象,然后遍历GroupBox以访问其中包含的文本框

foreach(Control t in this.Controls.OfType<GroupBox>())
{
   foreach (Control tt in t.Controls.OfType<TextBox>())
   {
        // do stuff
   }
}
foreach(this.Controls.OfType()中的控件t)
{
foreach(t.Controls.OfType()中的控制tt)
{
//做事
}
}

我发现这很有效,但最初我将文本框放在面板上,因此没有一个文本框按预期清除,因此我添加了

this.panel1.Controls.....  
这让我想到,你有很多不同功能的文本框,只有一些需要清除,也许使用多面板层次结构,你可以只针对少数而不是全部

foreach ( TextBox tb in this.Controls.OfType<TextBox>()) {
  ..
}

foreach(this.Controls.OfType()中的文本框tb){
..
}

谷歌注意:如果你有一个面板在你的控制之下,你需要指定它,比如:this.myPanel.controls.OfType(),你也可以使用this.myPanel.controls.OfType()。其中(x=>x.Name.StartsWith(“specificName”))如果您需要选择具有特定名称的组合框,我假设
这是一个表单,并且代码以相同的表单运行。如果我想读取assembly
assembly.GetExecutionGassembly().GetTypes()
中的所有表单,然后在运行时访问其中的
控件来修改某些属性,该怎么办?
this.Controls.OfType<TextBox>().ToList().ForEach(t => t.Text = string.Empty);
private IEnumerable<TextBox> GetTextBoxes(Control control)
{
    if (control is TextBox textBox)
    {
        yield return textBox;
    }

    if (control.HasChildren)
    {
        foreach (Control ctr in control.Controls)
        {
            foreach (var textbox in GetTextBoxes(ctr))
            {
                yield return textbox;
            }
        }
    }
}
foreach(Control t in this.Controls.OfType<GroupBox>())
{
   foreach (Control tt in t.Controls.OfType<TextBox>())
   {
        // do stuff
   }
}
this.panel1.Controls.....  
foreach ( TextBox tb in this.Controls.OfType<TextBox>()) {
  ..
}