从 Windows 窗体中查找输入类型控件

Posted

技术标签:

【中文标题】从 Windows 窗体中查找输入类型控件【英文标题】:Find Input Type Controls from Windows Form 【发布时间】:2012-09-18 00:49:05 【问题描述】:

我有窗口应用程序,并且有一个弹出对话框(窗体),其中包含一些输入控件(TextBoxComboBox)和其他控件,如 PictureBox、Label。我的表单有两种模式 1)添加或编辑模式 2)查看模式。在查看模式下,用户只能查看详细信息,也可以复制输入值(例如,用户可以复制TextBox 值)。

如果表单模式是查看,那么我想将表单的所有输入控件的只读属性设置为 true,并使用我的 Forma 的逐个迭代控件(使用 for each)。但我不知道如何知道特定控件是输入类型控件。 System.Windows.Forms.Control 没有 ReadOnly 属性。我发现我可以为我的解决方案使用 Enable 属性,但问题是如果 Enable 设置为 false,用户无法从 TextBox 复制文本值。

任何人都可以帮助我如何知道特定控件是输入类型控件。

谢谢。

【问题讨论】:

你说的输入类型Control是什么意思?复选框是输入类型控件吗?无论如何,我只看到“肮脏”的解决方案:a)保留您认为作为 输入控件的类型的数组 b)检查控件是否具有``Value 属性。 Forms.Control 没有 ReadOnly 属性,这是更高级别的 TextBoxBase 类的属性 是的。 CheckBox 是一个输入型控件。我也在考虑使用输入控件类型的数组。但正在寻找更好的解决方案。我可以想到你的第二个解决方案。让我检查一下。 【参考方案1】:

我认为TextBoxBase 可能是input type Control

foreach (TextBoxBase txt in this.Controls.OfType<TextBoxBase>())

    txt.ReadOnly = true;

【讨论】:

【参考方案2】:

我通常会循环浏览表单上的所有控件,然后按类型评估每个控件。开始做一些工作,但一旦到位,您就可以添加更多控件,而不必担心单独设置它们。

foreach (Control c in formMain.Controls)
 
    if(c.GetType()==typeof(ComboBox))
    
        ComboBox cb = (ComboBox) c;
        //do something
    
    else if(c.GetType()==typeof(TextBox))
    
        TextBox t = (TextBox) c;
        t.ReadOnly = true;
    
 

我也使用相同的过程来设置通用事件处理程序,例如将控制值保存到文本更改的设置中。因此,如果您创建与您的控件同名的设置,您可以在事件处理程序中放置类似的内容...

private void TextBoxTextchanged(object sender, EventArgs e)

    TextBox t = (TextBox) sender;
    Settings.Default[t.Name] = t.Text;
    Settings.Default.Save();

【讨论】:

【参考方案3】:

此代码可能会对您有所帮助:

foreach(Control ctl in form.Controls)

  if (ctl is TextBox)
      
  if (ctl is CheckBox)
      
  if (ctl is ComboBox)
      
  /* etc */

【讨论】:

【参考方案4】:

System.Windows.forms.clipboard.clear(); 试试这个。

【讨论】:

以上是关于从 Windows 窗体中查找输入类型控件的主要内容,如果未能解决你的问题,请参考以下文章

按名称在 Windows 窗体中查找控件

VS2008中如何根据控件名字查找窗体中已经存在的控件

Windows 窗体 TreeView - 绑定分层递归数据源

C# Winform 控件或窗体失去焦点时,获取键盘输入数据(我用winform获取另一个窗口的数据)

C#中Windows窗体工具栏

使用两个 Windows 窗体 DataGridView 控件创建一个主/从窗体