[英]How to obtain the value of a control added dynamically into Windows Form c#?
我讀了一些文章並且沒有管理解決了我的問題,我的問題是在我嘗試獲取動態添加到Windows窗體中的控件(CheckBox和ComboBox)的值時,我需要知道何時選中CheckBox(或取消選中) )當按下按鈕時,如果ComboBox為空(或不是),則此按鈕調用一種方法,在該方法中我驗證所有組件是否為空,我按以下方式添加控件:
CheckBox box;
ComboBox cmBox;
for (int i = 1; i <= sumOfRegisters; i++)
{
box = new CheckBox();
box.Name = "CheckBox" + i;
box.Text = "Some text";
box.AutoSize = true;
box.Location = new Point(10, i * 25); //vertical
cmBox = new ComboBox();
cmBox.Name = "ComboBox" + i;
cmBox.Size = new System.Drawing.Size(302, 21);
cmBox.TabIndex = i;
cmBox.Text = "Some Text";
cmBox.Location = new Point(270, i * 25);
this.groupBox.Controls.Add(cmBox);
this.groupBox.Controls.Add(box);
}
“我在ComboBox的情況下添加數據庫中的值,我省略了這一部分。”
我嘗試用foreach獲取值:
foreach (Control ctrl in groupBox.Controls)
問題是我不知道如何檢查Control(CheckBox和ComboBox)是否被檢查或為空(視情況而定)。
非常感謝您的幫助,感謝您的時間。
將它添加到grbMateias后,您將丟棄對每個動態分配的控件的引用。
一種選擇當然是存儲這些引用,例如在List<Control>
。
List<ComboBox> comboBoxes = new List<ComboBox>();
for (int i = 1; i <= sumOfRegisters; i++)
{
box = new CheckBox();
comboBoxes.Add(box);
// etc.
}
但是,您可以只迭代grbMateias中的控件
foreach(Control ctl in grbMateias.Controls)
{
if (ctl is CheckBox)
{
// Use the checkbox
}
else if (ctl is ComboBox)
{
// Use the ComboBox
}
}
或使用Linq
var comboBoxes = grbMateias.Controls.OfType<ComboBox>();
var checkBoxes = grbMateias.Controls.OfType<CheckBox>();
您可以使用as
運算符,如下所示:
foreach (Control ctrl in groupBox.Controls)
{
CheckBox checkBox = ctrl as CheckBox;
ComboBox comboBox = ctrl as ComboBox;
if (checkBox != null) // Control is a CheckBox
{
if (checkBox.Checked)
{
// CheckBox is checked
}
else
{
// CheckBox is not checked
}
}
else if (comboBox != null) // Control is a ComboBox
{
if (comboBox.Items.Count == 0)
{
// ComboBox is empty
}
else
{
// ComboBox isn't empty
}
}
}
由於您在循環中為每個控件賦予一個名稱,因此只要名稱是唯一的,就可以很容易地使用它來識別每個控件。 例如,要獲取第三個復選框,您可以使用以下內容:
Control control = groupBox.Controls.Single(x => x.Name == "CheckBox3");
Checkbox thirdCheckBox = (CheckBox)control;
bool checkBoxCheched = thirdCheckBox.Checked;
首先,你需要知道迭代時你正在使用什么控件,然后你可以轉換它並使用特定控件的方法。
foreach(Control c in groupBox.Controls)
{
if(c is ComboBox)
{
if((ComboBox) c).SelectedItem == null)
//handle nothing entered
}
else if(c is CheckBox)
{
if((CheckBox) c).Checked)
//handle checked
}
}
在上面的snippit中,我們使用is
關鍵字檢查它是什么類型的Control。 然后,如果它是我們知道如何處理的控件,我們將其轉換並檢查是否為空或已檢查。
我需要知道何時檢查(或取消選中)CheckBox以及ComboBox是否為空(或不是)。
要獲取復選框和組合框的狀態,包括用於創建它們的索引,可以執行以下操作:
var checkBoxStates = groupBox.Controls
.OfType<CheckBox>
.Where(x => x.Name.StartsWith("CheckBox"))
.Select(x => new {
Index = Int.Parse(x.Name.Substring("CheckBox".Length)),
IsChecked = x.Checked
})
.ToList();
var comboBoxStates = groupBox.Controls
.OfType<ComboBox>
.Where(x => x.Name.StartsWith("ComboBox"))
.Select(x => new {
Index = Int.Parse(x.Name.Substring("ComboBox".Length)),
IsEmpty = x.Items.Count == 0
})
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.