我在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
?
答案 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
希望这有助于:)