在您的代码中,编译器认为您找到的对象是Control
,并且不知道它是什么类型的控件。你需要告诉它,它是什么样的控制,你可以通过它强制转换为文本做到这一点:
((TextBox)item).ReadOnly = false;
不过,也有这样做的更好的方法。您的代码只会查看顶级控件,并且如果您的表单上有容器控件,它将不会递归搜索这些以查找其他文本框。递归方法做,这是如下:
public static IEnumerable<T> GetControlsOfType<T>(Control root)
where T : Control
{
var t = root as T;
if (t != null)
yield return t;
var container = root as ContainerControl;
if (container != null)
foreach (Control c in container.Controls)
foreach (var i in GetControlsOfType<T>(c))
yield return i;
}
这是一些代码,我从here了。它允许你做这样的事情:
foreach (var textBox in GetControlsOfType<TextBox>(theForm))
{
textBox.ReadOnly = false;
}
_“它不工作” _ - 甚至不是接近,其中一个具体足够问题陈述。请修复您的问题,以便更清楚。提供一个好的[mcve],可以可靠地再现你遇到的任何问题,并且精确详细地描述这个问题。解释你具体遇到什么困难。 –
试试这个:'(item as TextBox).ReadOnly = false;' – ja72