对于我的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
,我该怎么做呢?
答案 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);