1

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

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

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

4

3 回答 3

3

只需将属性添加到该消息框,它将成为 CheckBox 的 Checked 属性的代理,并在 OK 结果表单消息框上检查该新属性。

要添加的属性

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

像这样的最终代码

MessBox box = new MessBox();
if(box.Show() == DialogResult.OK)
{
   bool isChecked = box.Checked;
}
于 2012-05-04T13:39:06.633 回答
1

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

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

var someLocalVariable = someDlg.PublicDlgProperty;

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

于 2012-05-04T13:38:45.917 回答
0

我同意其他回答您的人的观点,即您应该拥有一个属性,委托 IsChecked 或其他东西,但是如果您必须仅使用返回枚举结果来执行此操作...

使枚举标记:

[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))
{
}
于 2012-05-04T13:40:20.067 回答