IDE:vs 2010,c#.net,winforms
嗨,我正在创建一个切换按钮userControl,它将具有ON和OFF状态,我也创建了一个设置按钮初始状态的属性(SAME为复选框IsChecked)。
public bool Checked
{
get { return isToggleOn; }
set { isToggleOn = value;
onPropertyChanged();
}
}
private void onPropertyChanged()
{
this.BackgroundImage = isToggleOn ? Properties.Resources.toggleOnMIUI : Properties.Resources.toggleOffMIUI;
IsChecked = isToggleOn ? true : false;
}
这在设计时是有效的,现在在form1中我添加了这个控件并创建了OnClickEvent来检查当前状态:
private void ucTglOverStepping_Click(object sender, EventArgs e)
{
if (ucTglOverStepping.Checked)
{
doWork = true; //do work is bool variable in form1.cs
}
else if (!ucTglOverStepping.Checked)
{
doWork = false;
}
}
现在的问题是,当切换按钮处于打开状态时,它将进入其他状态。
因为onPropertyChanged()在此ucTglOverStepping_Click(对象发送者,EventArgs e)函数之前执行,是否有任何方法在执行ucTglOverStepping_Click()函数或任何其他技术来执行onPropertyChanged()以解决此问题。< / p>
问题说明:
测试用例1:假设当前状态为ON
答案 0 :(得分:0)
您需要调用属性set;get;
中的函数
public bool Checked
{
get
{
return isToggleOn;
}
set
{
onPropertyChanged();
isToggleOn = value;
}
}
如果onPropertyChanged()
仅在您设置/更改值或Checked
属性时调用..
在你的函数中似乎你在最后一行再次设置属性..所以它调用函数递归..你不需要再次设置IsChecked
值
private void onPropertyChanged()
{
this.BackgroundImage = isToggleOn ? Properties.Resources.toggleOnMIUI : Properties.Resources.toggleOffMIUI;
// not need this
// IsChecked = isToggleOn ? true : false;
}
你的问题是
private void ucTglOverStepping_Click(object sender, EventArgs e)
{
if (ucTglOverStepping.Checked)
{
doWork = true; //do work is bool variable in form1.cs
}
else if (!ucTglOverStepping.Checked)
{
doWork = false;
}
}
当你获得属性值时,它只运行第一部分,它不会去调用 `onPropertyChanged()&#39; 它只会运行
public bool Checked
{
get
{
return isToggleOn;
}
}
更新
它令人困惑......但为什么不使用CheckBox1_CheckedChanged
事件?