离开页面时设置属性

时间:2018-01-29 16:40:15

标签: c# winforms checkbox data-binding

我在CheckBox中有一个TabControl 我这样绑定了属性Checked

MyCheckBox.DataBindings.Add("Checked", MyBindingSource, "IsOn", true, DataSourceUpdateMode.OnPropertyChanged);

属性isOn:

public bool IsOn
{
    get
    {
        return _isOn;
    }
    set
    {
        bool someCondition;
        // a test is done
        if (value != _isOn && someCondition)
        {
            _isOn = value;
        }
        else
        {
            System.Windows.Forms.MessageBox.Show("Condition not OK");
        }
    }
}

当用户点击CheckBox时,如果someCondition为false,则会显示一个消息框,CheckBox不会更改。

我的问题是当用户更改TabControl中的页面时,会显示该消息。我在调试器中看到当TabControl中的页面发生变化时,属性被设置为最后尝试的值。

更改页面时,如何才能显示MessageBox

3 个答案:

答案 0 :(得分:0)

一种方法是在显示消息框之前检查tabPage的{​​{1}},在示例中它是索引0 - 使用应用中的索引更改MsgTabPage字段:

 private int MsgTabPage = 0; // the tab page that the msgbox should be displayed
 public bool IsOn
 {
     get
     {
         return _isOn;
     }
     set
     {
         bool someCondition = false;
         // a test is done
         if (value != _isOn && someCondition)
         {
             _isOn = value;
         }
         else
         {
             if(tabControl1.SelectedIndex == MsgTabPage)
             System.Windows.Forms.MessageBox.Show("Condition not OK");
         }
     }
 }

答案 1 :(得分:0)

我终于找到了一个解决方案:在显示错误时强制Checked属性。

public bool IsOn
{
    get
    {
        return _isOn;
    }
    set
    {
        bool someCondition;
        // a test is done
        if (value != _isOn && someCondition)
        {
            _isOn = value;
        }
        else
        {
            System.Windows.Forms.MessageBox.Show("Condition not OK");
            MyCheckBox.Checked = !value; // here is my solution
        }
    }
}

但我仍然不明白为什么要这样做。我期待因绑定而产生麻烦。

答案 2 :(得分:-1)

能够选择控件吗?

如果没有那么你可以将TabStop属性设置为false
希望这有助于:)