2016-12-16 84 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轉換來嘗試將結果轉換爲正確的類型。