2016-12-16 93 views
1

我有一个要求,更新一些的ListView控件(即ListView1的,ListView2,ListView3等)C#中使用一个变量来访问Windows窗体控件

我得到一个语法错误在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)的语法问题。

错误是 'Control'没有包含'Columns'的定义,也没有扩展方法可以找到'Columns'接受'Control'类型的第一个参数(你是否缺少using指令或程序集引用?)

我的疑惑是,当我注释掉第3行并在“this.Controls.Find”之后调试并设置断点时,我可以在本地观察窗口中看到“TestlistView”,并且它看起来很好 - 控件具有被发现。

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

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

+5

您需要将'TestlistView [0]'强制转换为树形视图。 – Rob

回答

0

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

你可以通过告诉编译器告诉你期望什么类型来解决这个问题。你可以通过使用Linq和OfType函数或使用“as”运算符来添加一个expicit转换来尝试将结果转换为正确的类型。