C#试图覆盖ShowDialog()

时间:2012-08-13 10:43:52

标签: c#

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

我有一个frmDialog。它仅用于显示进程消息,错误消息等。它从日志中获取其文本,因此我不需要将变量传递给它。在每个进程(在其他表单)之后,我创建此表单并调用ofrmDialog.ShowDialog()。我的问题是,即使文本为空,此对话框也会打开并且不显示任何内容。所以我想覆盖这个ShowDialog。 ShowDialog返回DialogResult,所以我真的无法弄清楚如何做到这一点。

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

还有别的什么我会回来的?我真的无法理解这一点。

4 个答案:

答案 0 :(得分:5)

就个人而言,我建议将ShowDialog放在if语句中,这样只有在文本不为空时才触发它。

e.g。

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

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

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

else
{
    return base.ShowDialog = "<OK>";
}

答案 1 :(得分: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;
}

答案 2 :(得分:0)

否则{     return DialogResult.OK;     }

答案 3 :(得分:0)

我认为这取决于是否有任何调用者检查对话框结果,您在评论中声明您有860次调用此方法,是否有人检查结果?如果不是它还没有真正重要的东西,它只会在未来避免WTF?当你没有显示对话框时返回OK。

由于您必须返回某些内容,DialogResult.None以后最不容易混淆