[英]Get checkbox.checked value programmatically from cycling through winform controls
对于我的winforms程序,我有一个“选项”对话框,当它关闭时,我循环浏览所有“对话框”控件名称(文本框,复选框等)及其值,并将其存储在数据库中,以便我可以从中读取我的程序。 正如您在下面看到的,我可以轻松地从Control
组访问Text
属性,但是没有属性可以访问文本框的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
,我该怎么做?
是的,您需要转换它:
else if (c.GetType() == typeof(CheckBox))
controlVal = ((CheckBox)c).Checked.ToString();
您可以使支票更易于阅读:
else if (c is CheckBox)
controlVal = ((CheckBox)c).Checked.ToString();
罗伯特的回答很好,但我给你一个更好的答案
TextBox currTB = c as TextBox;
if (currTB != null)
controlVal = c.Text;
else
{
CheckBox currCB = c as CheckBox;
if (currCB != null)
controlVal = currCB.Checked;
}
您可以投放到位:
controlVal = (CheckBox)c.Checked;
顺便说一句:controlVal不必是字符串,布尔值将完成工作并节省内存。
尝试这个:
controlVal = Convert.ToString(c.Checked);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.