4

我在覆盖、重载等方面非常薄弱,所以我无法处理这个问题。我的问题是这样

我有一个框架对话框。它仅用于显示进程消息、错误消息等。它从日志中获取文本,因此我不需要将变量传递给它。在每个过程之后(在其他表单上),我创建这个表单并调用 rmDialog.ShowDialog()。我的问题是,即使文本为空,此对话框也会打开并且什么也不显示。所以我想覆盖这个 ShowDialog。ShowDialog 返回 DialogResult,所以我真的不知道该怎么做。

public override DialogResult ShowDialog(){
    if(this.Text != string.Empty){
    return base.ShowDialog();
    }
    else{
    //don't do anything
    }
}

当有其他人时我会返回什么?我真的无法理解这一点。

4

4 回答 4

5

我个人建议将 ShowDialog 放在 if 语句中,以便仅在文本不为空时触发。

例如

if(text is not empty)
{
    //Show dialog
}

这样您就可以避免当前遇到的问题。如果你必须返回一些东西,你可以将 DialogResult 设置为它需要的值 - 例如 OK 或 Cancel。

但是,根据您的评论,我建议您将其放在代码的 else 语句中:

else
{
    return base.ShowDialog = "<OK>";
}
于 2012-08-13T10:46:31.607 回答
1

而不是覆盖 ShowDialog,您需要更高的东西,以便仅在有一些文本要显示时才构造和显示 frmDialog。

public DialogResult ShowMessage(string text)
{
    DialogResult dialogResult = DialogResult.OK;
    if (!string.IsNullOrEmpty(text))
    {
        FrmDialog frmDialog = new FrmDialog(text);
        dialogResult = frmDialog.ShowDialog();
    }
    return dialogResult;
}
于 2012-08-13T10:51:32.040 回答
0

我认为这取决于是否有任何调用者检查对话结果,您在评论中说您有 860 次调用此方法,他们中的任何一个都检查结果吗?如果不是,它返回什么并不重要,只有将来避免WTF才重要?!当您不显示对话框时返回确定。

由于您必须返回某些东西,DialogResult.None因此以后可能会最不混乱

于 2012-08-13T10:58:27.627 回答
0

else{ 返回 DialogResult.OK; }

于 2012-08-13T10:48:32.747 回答