gpt4 book ai didi

C# .net 使复选框充当单选按钮

转载 作者:太空宇宙 更新时间:2023-11-03 18:14:31 25 4
gpt4 key购买 nike

我有一个包含一些单选按钮的组框。我正在尝试借助 Code Project 的教程来实现序列化。该教程支持复选框而不是单选按钮的序列化。所以我需要在我的应用程序中将单选按钮设置为复选框(也就是说它们应该是复选框但像单选按钮一样工作)。

我尝试编写代码,但是当我发现某个特定的复选框被选中并且我取消选中或反之时,它会触发 checked_changed 事件处理程序并进入无限循环。

有人可以帮我解决这个问题吗?

谢谢

更新:

看到您的回复,非常感谢。是的,你说得对,我们不应该搞乱基本属性。我将改变序列化方法。

P.S 教程的链接是http://www.codeproject.com/KB/dialog/SavingTheStateOfAForm.aspx

最终更新:

按照此处发布的回复,我决定不更改默认属性,而是更改序列化程序代码。我做到了,它现在完美地工作了。非常感谢大家。

最佳答案

我同意所有评论者的意见:不要制作像单选按钮一样的复选框,它违反了 UI 约定并使用户感到困惑。

执行此操作的正确方法是修复您的代码以序列化单选按钮,但如果没有看到您的代码,就很难知道如何帮助您。首先,您可以通过在执行任何操作之前临时删除事件处理程序来修复 CheckedChanged 循环。例如:

myCheckBox.CheckedChanged -= MyCheckedChangedEventHandler;
myCheckBox.Checked = true;
myCheckBox.CheckedChanged += MyCheckedChangedEventHandler;

如果仅此一项不能解决您的问题,请向我们展示您的代码,我们会尽力提供更多帮助。

编辑:根据更新中列出的教程,我猜测问题发生在您调用 FormSerialisor.Deserialise() 时,这会触发控件的事件处理程序要解雇?如果是这种情况,快速解决方法就是按照我提到的去做:在调用 FormSerialisor.Deserialise() 之前删除单选按钮事件处理程序,然后再重新添加它们。示例:

myRadioButton.CheckedChanged -= MyCheckedChangedEventHandler;
FormSerialisor.Deserialise(this, mySerialisepath);
myRadioButton.CheckedChanged += MyCheckedChangedEventHandler;

您可能还需要编辑 FormSerialisor 类来处理 RadioButton;只需复制处理复选框的代码,但更改对 RadioButton 的所有引用。从您的问题中不清楚是否需要此步骤。

关于C# .net 使复选框充当单选按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8805253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com