以编程方式从循环访问winform控件中获取checkbox.checked值

时间:2013-08-07 12:46:57

标签: c# winforms checkbox textbox

对于我的winforms程序,我有一个Options对话框,当它关闭时,我循环遍历所有Dialog Box控件名称(文本框,复选框等)及其值并将它们存储在数据库中以便我可以阅读在我的程序中。如下所示,我可以轻松地从Text组访问Control属性,但没有属性可以访问文本框的Checked值。我是否需要首先将c转换为复选框?

conn.Open();
foreach (Control c in grp_InvOther.Controls)
{
    string query = "INSERT INTO tbl_AppOptions (CONTROLNAME, VALUE) VALUES (@control, @value)";
    command = new SQLiteCommand(query, conn);
    command.Parameters.Add(new SQLiteParameter("control",c.Name.ToString()));
    string controlVal = "";
    if (c.GetType() == typeof(TextBox))
        controlVal = c.Text;
    else if (c.GetType() == typeof(CheckBox))
        controlVal = c.Checked; ***no such property exists!!***

    command.Parameters.Add(new SQLiteParameter("value", controlVal));
    command.ExecuteNonQuery();
}
conn.Close();

如果我需要先转换c,我该怎么做呢?

4 个答案:

答案 0 :(得分:2)

是的,你需要转换它:

else if (c.GetType() == typeof(CheckBox))
    controlVal = ((CheckBox)c).Checked.ToString(); 

您可以更简单地阅读:

else if (c is CheckBox)
    controlVal = ((CheckBox)c).Checked.ToString(); 

答案 1 :(得分:0)

罗伯特的答案很好,但让我给你一个更好的答案

TextBox currTB = c as TextBox;
if (currTB != null)
    controlVal = c.Text;
else
{
    CheckBox currCB = c as CheckBox;
    if (currCB != null)
    controlVal = currCB.Checked;
}

答案 2 :(得分:-1)

你可以施放到位:

controlVal = (CheckBox)c.Checked;

BTW:controlVal不需要是一个字符串,布尔值可以完成工作并节省内存。

答案 3 :(得分:-1)

试试这个:

controlVal = Convert.ToString(c.Checked);