繁体   English   中英

通过循环通过Winform控件以编程方式获取checkbox.checked值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM