Bha*_*ath 1 .net c# visual-studio-2010 winforms
我有一个组合框,有一些单选按钮.我试图在Code Project的教程的帮助下实现序列化.该教程支持复选框的序列化,而不支持单选按钮.所以我需要在我的应用程序中将单选按钮设置为复选框(即它们应该是复选框,但工作方式类似于radiobutton).
我尝试编写代码,但是当我发现选中一个特定的复选框并且我去取消选中或反之后,它会触发check_changed事件处理程序并进入无限循环.
有人可以帮我解决这个问题吗?
谢谢
更新:
看到你的回复后,我想多多感激之情.是的,你没关系我们不应该搞乱基本属性.我将使用更改序列化方法.
PS本教程的链接是http://www.codeproject.com/KB/dialog/SavingTheStateOfAForm.aspx
最后更新:
按照此处发布的回复后,我决定不更改默认属性,而是更改序列化程序代码.我做到了,它现在完美无缺.非常感谢大家.
我同意所有评论者的意见:不要制作像单选按钮那样的复选框,它会面对UI惯例并使用户感到困惑.
正确的方法是修复代码以序列化单选按钮,但是如果没有看到代码,就很难知道如何帮助您.首先,您可以CheckedChanged通过在执行任何操作之前临时删除事件处理程序来修复循环.例如:
myCheckBox.CheckedChanged -= MyCheckedChangedEventHandler;
myCheckBox.Checked = true;
myCheckBox.CheckedChanged += MyCheckedChangedEventHandler;
Run Code Online (Sandbox Code Playgroud)
如果仅此问题无法解决您的问题,请向我们展示您的代码,我们会尽力提供帮助.
编辑:根据您的更新中列出的教程,我猜测您调用时会发生问题FormSerialisor.Deserialise(),这会触发您的控件的事件处理程序触发?如果是这种情况,快速修复就是按照我提到的做法:在调用之前删除单选按钮事件处理程序FormSerialisor.Deserialise(),然后再重新添加它们.例:
myRadioButton.CheckedChanged -= MyCheckedChangedEventHandler;
FormSerialisor.Deserialise(this, mySerialisepath);
myRadioButton.CheckedChanged += MyCheckedChangedEventHandler;
Run Code Online (Sandbox Code Playgroud)
您可能还需要编辑FormSerialisor类来处理RadioButtons; 只需复制处理复选框的代码,但更改对RadioButton的所有引用.从您的问题不清楚这一步是否有必要.