如何将复选框添加到消息框时返回正确的枚举

本文关键字:返回 枚举 消息 复选框 添加 | 更新日期: 2023-09-27 18:33:16

我创建了一个返回DialogResult的消息框。现在我在上面添加了复选框,想知道它是否被选中。那么我应该返回什么?我认为最简单的方法是创建新的枚举,该枚举将具有DialogResult中的所有值以及指示复选框状态的值

public enum MyDlgResult
{
    NONE = DialogResult.NONE, 
    OK = DialogResult.OK ........................, 
    CHKBOXCHECKED = 8
}

。并返回此枚举 MyDlgResult。但这是正确的方法吗?因为每次向我的消息框添加新功能时,我都必须在此枚举中添加值。
如果有的话,更好的方法。谢谢。

如何将复选框添加到消息框时返回正确的枚举

只需将属性添加到该消息框,该消息框将成为复选框的选中属性的代理,并在确定结果表单消息框中选中该新属性。

要添加的属性

public bool Checked
{
   get { return yourCheckBox.Checked; }
}

最终代码如下

MessBox box = new MessBox();
if(box.Show() == DialogResult.OK)
{
   bool isChecked = box.Checked;
}

不必重写对话框的返回,使客户端代码能够获取 UI 控件的状态。对话框信息在关闭后保留,您可以从中获取值。例如,假设有一个名为 SomeDlg 的 Form 类,其属性名为 PublicDlgProperty。PublicDlgProperty 可以设置为"确定"或任何其他 UI 更改,然后在对话框关闭后进行查询,如下所示:

var someDlg = new SomeDlg();
someDlg.ShowDialog();
var someLocalVariable = someDlg.PublicDlgProperty;

这是一个非常简单的例子。您需要测试 DialogResult 以查看是否要查询该值。

我同意其他两个人回答你的观点,你应该有一个属性,委托 IsCheck 或其他东西,但如果你必须只使用返回枚举结果来做到这一点......

使枚举被标记:

[Flags]
public enum MyDlgResult
{
    NONE = ...
    OK = ...
    CHK...
}

然后,您可以返回:

return MyDlgResult.NONE | MyDlgResult.CHK;

return MyDlgResult.OK | MyDlgResult.CHK;

或者只是

return MyDlgResult.OK;

等等...然后,您可以检查:

if (res.HasFlag(MyDlgResult.OK))
{
}
if (res.HasFlag(MyDlgResult.CHK))
{
}