我正在一個簡單的C#表單中工作。我共有20個組合框。 10個組合框將包含類似的數據類型,並且將具有非常相似的名稱(CB1,CB2,CB3,... CB10)。每個ComboBox加載了5個元素A,B,C,D,E的列表(我的意思是我將這些值添加到10個「CB」ComboBoxes中的每一個)。我的目的是用戶可以從1個組合框或2個組合框中選擇項目(A,B,C,D,E中的一個)。 。 。或全部(10個組合框)。如何使用C#中的循環遍歷選定的ComboBoxes控件?
我希望從列表或數組中選擇項目的組合框中存儲數據。爲此,我想遍歷10個組合框(名稱爲CB1,CB2,CB3,...,CB10的組合框),檢查組合框中是否選擇了某個項目,並將組合框中選定的值存儲到組合框中一個列表(在列表下面的代碼中稱爲符號)。最後,我的符號列表長度(項目數量)將取決於用戶從中選擇多少個ComboBox。這裏是我使用的代碼:
List<string> symbols = new List<string>();
for (int i = 1; i <= 10; i++)
{
var my_comboBox = this.Controls["CB" + i.ToString()];
if (null != my_comboBox.SelectedItem)
{ symbols.add(my_comboBox.Text); }
}
當我運行代碼時出現以下錯誤。
未將對象引用設置爲對象的實例。
任何人都可以請解釋我做錯了什麼?我從另一個已發佈和回答的問題中獲得了代碼,下面是該問題的鏈接。提前致謝。
How can I iterate all ComboBoxes controls with a loop in C#?
我也嘗試提出在回答中引用的問題的其他選擇。 但它沒有奏效。它不通過foreach循環(雖然沒有顯示錯誤)。下面是選項2
List<string> symbols = new List<string>();
var comboBoxes = this.Controls.OfType<ComboBox>().Where(x => x.Name.StartsWith("CB"));
foreach (var cmbBox in comboBoxes)
{
if (null != my_comboBox.SelectedItem)
{ symbols.add(my_comboBox.Text); }
}
再次,如果任何人都可以請提供給我的想法是什麼,我做錯了,這將是非常不錯的代碼。再次感謝提前。
ComboBoxes屬於如下圖所示的窗體。在那裏ComboBoxes被稱爲component_CB1,component_CB2,component_CB3,...,component_CB10(我將問題中的ComboBoxes的名稱更改爲CB,以便更容易理解)。
screenshot of my solution explorer
組合框直接添加到窗體中,或者它們位於某些其他容器(如組框或面板)內部?只有將代碼直接添加到表單中,您的代碼才能正常工作。 –
親愛的@ChetanRanpariya感謝您的幫助。我不確定是否將組合框直接添加到我的表單「Form1」中。我上傳瞭解決方案資源管理器的圖片,組合框在那裏。我相信他們是直接添加的,但你能糾正。 –
從解決方案資源管理器我找不出如果組合框直接添加到窗體或添加到某個容器。但我認爲你正在嘗試使用無效的id從控件數組中獲取組合框。組合框名稱以'component'開始,但您嘗試使用「CB」進行搜索。你應該做'this.Controls [「component_CB」+ i.ToString();''。你的循環也應該以'i = 1'開頭,因爲沒有名爲'component_CB0'的組合框。 –