C#使用变量访问Windows窗体控件

时间:2016-12-16 02:27:49

标签: c#

我需要更新一些listView控件(例如listView1,ListView2,ListView3等)

我在Visual Studio 2015中遇到语法错误。

我已经将其分解为基本问题,因此可以隔离错误。以下是我的代码

    private void Form1_Load(object sender, EventArgs e)
    {
        listView1.Columns.Add("Task", "Task");
        Control[] TestlistView = this.Controls.Find("listView1", true);
        TestlistView[0].Columns.Add("Task22", "Task22");
    }

第一个代码行有效。我把它放在那里只是为了确保对listView1的访问是好的。

我在第3行遇到语法问题(TestlistView [0] .Columns.Add)。

错误是 '控制'不包含'列的定义'没有扩展方法'列'接受类型'控制'的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)

我的困惑在于,当我注释掉第3行并调试并在" this.Controls.Find"之后设置断点。我可以看到" TestlistView"在当地人观察窗口,它看起来都很好 - 已找到控件。

取消注释第3行,visual studio突出显示.Columns。上面详述的错误。

对于解决基本问题的任何帮助或指导都将不胜感激。

1 个答案:

答案 0 :(得分:0)

Controls.Find返回Control类型的对象。这些对象可以是从Control继承的任何类型。编译器无法准确确定您要查找的控件类型,因此当您尝试访问不属于Control的属性时,它会出错。

您可以通过告诉编译器您期望的类型来解决此问题。您可以通过添加expicit强制转换,使用Linq和OfType函数或使用" as"来实现此目的。运算符尝试将结果转换为正确的类型。