1

对于我的 winforms 程序,我有一个选项对话框,当它关闭时,我循环浏览所有对话框控件名称(文本框、复选框等)及其值并将它们存储在数据库中,以便我可以从中读取我的程序。正如您在下面看到的,我可以轻松地TextControl组中访问属性,但是没有属性可以访问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

4 回答 4

2

是的,您需要转换它:

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

您可以使检查更易于阅读:

else if (c is CheckBox)
    controlVal = ((CheckBox)c).Checked.ToString(); 
于 2013-08-07T12:51:37.100 回答
0

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

TextBox currTB = c as TextBox;
if (currTB != null)
    controlVal = c.Text;
else
{
    CheckBox currCB = c as CheckBox;
    if (currCB != null)
    controlVal = currCB.Checked;
}
于 2013-08-07T12:53:00.163 回答
-1

您可以就地投射:

controlVal = (CheckBox)c.Checked;

顺便说一句:controlVal 不需要是字符串,布尔值可以完成这项工作并节省内存。

于 2013-08-07T12:50:08.780 回答
-1

尝试这个:

controlVal = Convert.ToString(c.Checked);
于 2013-08-07T12:51:12.577 回答