将一组文本框控件更改为ReadOnly = false

时间:2019-04-04 00:49:35

标签: c#

我有一组要从ReadOnly中更改的文本框控件。我的代码段如下。 ReadOnly行给出错误“控件没有ReadOnly的定义...”,我认为问题与TextBoxBase类中的ReadOnly功能有关。如何解决这个问题并可以访问TextBoxBase类?

        foreach (Control c in fraPParameters.Controls)
        {
            if (c is Label)
            {
                c.Visible = false;
                c.Text = string.Empty;
                c.Tag = string.Empty;
                tt.SetToolTip(c, null);
            }

            if (c is TextBox)
            {
                c.Visible = false;
                c.ReadOnly = false;
                c.Text = string.Empty;
                c.Tag = string.Empty;
                tt.SetToolTip(c, null);
                c.BackColor = Color.White;
            }
        }

2 个答案:

答案 0 :(得分:3)

使用Type Pattern测试表达式是否可以转换为指定的类型,如果可以,将其强制转换为该类型的变量。

  

使用类型模式执行模式匹配时,是否进行测试   表达式是否可以转换为指定的类型,如果可以   可以,将其强制转换为该类型的变量。这很简单   is语句的扩展,使简洁的类型评估和   转换。类型模式的一般形式为:

expr is type varname

示例

if (sender is TextBox textBox) 
{
    textBox.Visible = false;
    textBox.ReadOnly = false;
    textBox.Text = string.Empty;
    textBox.Tag = string.Empty;
    ...

另外,您可能只想使用Callum Watkins在评论中提到的带有模式匹配的switch语句

foreach (Control c in fraPParameters.Controls)
{
    switch (c)
    {
        case TextBox textbox:
            textbox.Visible = false;
            textbox.ReadOnly = false;
            textbox.Text = string.Empty;
            textbox.Tag = string.Empty;
            //...
            break;
        case Label label:
            label.Visible = false;
            label.Text = string.Empty;
            label.Tag = string.Empty;
            //...
            break;

    }
}

其他资源

is (C# Reference)

  

检查对象是否与给定类型兼容,或者(以   C#7.0)针对模式测试表达式。

Using pattern matching switch statements

答案 1 :(得分:2)

问题是c变量仍然被键入为Control,即使我们只是检查了它指向的对象引用是否真的是TextBox。条件检查不会更改引用变量的基础类型,基本的Control类型不支持ReadOnly属性。

有几种方法可以解决此问题。我们已经有了使用C#7的新is强制转换的答案。但是,如果您还不能使用它(仍然很多人),请尝试以下方法:

foreach (Control c in fraPParameters.Controls)
{
    var lbl = c as Label;
    var box = c as TextBox;

    if (lbl != null)
    {
        lbl.Visible = false;
        lbl.Text = string.Empty;
        lbl.Tag = string.Empty;
        tt.SetToolTip(c, null);
    }

    if (box != null)
    {
        box.Visible = false;
        box.ReadOnly = false;
        box.Text = string.Empty;
        box.Tag = string.Empty;
        tt.SetToolTip(c, null);
        box.BackColor = Color.White;
    }
}