c#winform上的奇怪的复选框行为

时间:2016-06-07 12:54:49

标签: c# winforms checkbox

我有一个带有tabControl的c#winform(它有5个Tabs),文本框,datetimepicker和复选框,通过Entity Framework连接到一个表。 我的所有复选框的属性已检查设置为错误检查状态设置为未选中三州 strong>设置为 False

当我添加新记录时,我的复选框会遇到一种非常奇怪的行为。在添加新记录时,我的程序调用一个名为 EmptyCheckBoxes 的子程序,以确保它们都被设置为false并且它们的文本被设置为" Ne"。到目前为止一切顺利 - >它们被设置为false并且文本是正确的(参见图1)。

Image1

以下是我遇到问题的两种情况:

1 我单击一个复选框以使其选中(设置为true并将其文本设置为" Da" - >查看image2上的Ponedeljek)。到此为止,一切都按计划进行。

image2

但是,如果我使用鼠标并尝试点击其他复选框(请查看图像3上的Torek),此复选框仍未选中,我的表单上的所有其他复选框都变为灰色并已检查!

image3

2 添加新记录时,复选框设置为false,文本正确(参见图1)。但是,这次我不打算触摸我的复选框,我只需点击我的datetimepicker,然后点击其他文本框。巴姆! 我表单上的所有复选框都变灰并检查!

如果他们的ThreeState属性设置为False,怎么可能呢? 这真的很烦人,我完全迷失了,在哪里找到这个问题的原因。因为,如果我保存这个新记录,所有复选框都会丢失其灰色并继续检查文本" Ne" (值true保存在表格中!)。

所有复选框都有此代码(来自其中一个代码):

    private void checkBox49_Click(object sender, EventArgs e)
    {
        if (checkBox49.Checked == true)
        {
            checkBox49.Text = "Da";
        }
        else
        {
            checkBox49.Text = "Ne";
        }
    }


    private void checkBox49_CheckedChanged(object sender, EventArgs e)
    {
        if (checkBox49.Checked == true)
        {
            checkBox49.Text = "Da";
        }
        else
        {
            checkBox49.Text = "Ne";
        }
    }

这是一个代码,用于将复选框设置为false,将文本设置为" Ne":

    private void EmptyCheckBoxes()
    {
        TabPage tabPage1 = tabControl1.TabPages[0];
        TabPage tabPage2 = tabControl1.TabPages[1];
        TabPage tabPage3 = tabControl1.TabPages[2];
        TabPage tabPage4 = tabControl1.TabPages[3];
        TabPage tabPage5 = tabControl1.TabPages[4];
        tabControl1.SelectedTab = tabPage1;
        UncheckCheckBoxes(tabPage1);
        tabControl1.SelectedTab = tabPage2;
        UncheckCheckBoxes(tabPage2);
        tabControl1.SelectedTab = tabPage3;
        UncheckCheckBoxes(tabPage3);
        tabControl1.SelectedTab = tabPage4;
        UncheckCheckBoxes(tabPage4);
        tabControl1.SelectedTab = tabPage5;
        UncheckCheckBoxes(tabPage5);
    }


    private void UncheckCheckBoxes(Control ctrl)
    {
        CheckBox chkBox = ctrl as CheckBox;
        if (chkBox == null)
        {
            foreach (Control child in ctrl.Controls)
            {
                UncheckCheckBoxes(child);                    
            }
        }
        else
        {
            chkBox.Checked = false;
            chkBox.Text = "Ne";  
        }
    }

感谢您对此问题的任何暗示,线索或解决方案。

弗拉基米尔

1 个答案:

答案 0 :(得分:1)

Fabio,你对_Click eventhandler是对的。但它没有解决我的问题。 我的问题是在我的winform上造成了groupboxes。为什么,我不知道。 这是我的 CheckStateChanged 事件的解决方法,其工作方式类似于魅力:

i