2012-07-23 66 views
2

我試圖更新c#中的flowlayoutpanel內的複選框的值。 爲每個創建的面板生成複選框,並將其命名爲「selected1」。如何訪問流佈局面板中的複選框值?

要嘗試和代碼訪問特定的複選框我使用

flowLayoutPanel2.Controls[e.Index].Controls["selected1"] 

我試圖創建一個複選框對象並獲取Name屬性值,並得到一個錯誤,指出:

System.NullReferenceException: Object reference not set to an instance of an object. 

我正在使用的代碼是:

try 
{ 
    System.Windows.Forms.Control checkBox = new System.Windows.Forms.Control(); 
    checkBox = flowLayoutPanel2.Controls[e.Index].Controls["selected1"]; 
    MessageBox.Show(Convert.ToString(checkBox.Name)); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(Convert.ToString(ex)); 
} 

我想我可能只是試圖訪問檢查以錯誤的方式,就好像我只是試圖訪問包含它的面板一樣,我可以毫無問題地操縱面板。

感謝, 山姆

+1

這段代碼在哪裏?複選框的點擊事件處理程序? e(來自e.Index)從哪裏來? – Eddy 2012-07-23 19:03:25

+0

它在顯示相同數據的列表視圖的事件處理程序中。目前我已經在流佈局面板中的複選框更新相應的列表視圖複選框,但我一直在努力做相反的事情。 e是列表視圖複選框,e.Index是索引,因爲它們是相同編號的面板。 – 2012-07-23 23:32:13

+1

不是你在下面回答的Q,而是:「=新」部分是不需要的。它會創建一個未使用的控件,因爲您在下一行重新分配變量。另外checkBox.Name是一個字符串,所以Convert.ToString()也是不需要的。 – Eddy 2012-07-24 10:22:00

回答

2

目前尚不清楚其中e.Index是從哪裏來的,但我不認爲這是必要的:

CheckBox checkBox; 
if (flowLayoutPanel2.Controls.ContainsKey("selected1")) { 
    checkBox = (CheckBox)flowLayoutPanel2.Controls["selected1"]; 
} 

如果你有興趣的值,它可能是最好使用CheckBox而不是僅僅是Control。

+0

謝謝,這樣做更有意義。我還沒有想出ContainsKey功能。 – 2012-07-23 23:33:35