C# 出现异常时显示消息框

C# 出现异常时显示消息框,c#,winforms,exception,C#,Winforms,Exception,我想知道将异常从一个方法传递到表单的正确方法是什么 public void test() { try { int num = int.Parse("gagw"); } catch (Exception) { throw; } } 表格: 这样我就看不到我的文本框了。有很多方法,例如: 方法一: public string test() { string ErrMsg = string.Empty; try

我想知道将异常从一个方法传递到表单的正确方法是什么

public void test()
{
    try
    {
        int num = int.Parse("gagw");
    }
    catch (Exception)
    {
        throw;
    }
}
表格:


这样我就看不到我的文本框了。

有很多方法,例如:

方法一:

public string test()
{
string ErrMsg = string.Empty;
 try
    {
        int num = int.Parse("gagw");
    }
    catch (Exception ex)
    {
        ErrMsg = ex.Message;
    }
return ErrMsg
}
方法二:

public void test(ref string ErrMsg )
{

    ErrMsg = string.Empty;
     try
        {
            int num = int.Parse("gagw");
        }
        catch (Exception ex)
        {
            ErrMsg = ex.Message;
        }
}

如果只需要异常的摘要,请使用:

    try
    {
        test();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
如果要查看整个堆栈跟踪(通常更好地进行调试),请使用:


我有时使用的另一种方法是:

    private DoSomthing(int arg1, int arg2, out string errorMessage)
    {
         int result ;
        errorMessage = String.Empty;
        try 
        {           
            //do stuff
            int result = 42;
        }
        catch (Exception ex)
        {

            errorMessage = ex.Message;//OR ex.ToString(); OR Free text OR an custom object
            result = -1;
        }
        return result;
    }
在你的表格中,你会有如下内容:

    string ErrorMessage;
    int result = DoSomthing(1, 2, out ErrorMessage);
    if (!String.IsNullOrEmpty(ErrorMessage))
    {
        MessageBox.Show(ErrorMessage);
    }

try/catch in
test
方法是多余的。
exceptions
在调用链中冒泡。我看不出有任何问题。messagebox应该弹出。发生了什么事?你应该可以看到消息框。如果将try-test-catch-messagebox替换为
messagebox.Show(“Hi”)
,会发生什么情况?可能的重复:不需要更改原始OP的代码,因为原始代码应该可以工作。问题出在其他地方,不需要更改原始OP的代码,因为原始代码应该可以工作。问题出在别的地方。&问题是关于正确的方法。以上只是一些建议,我想说的是你在试图解决一个不存在的问题。或者更糟糕的是,您正在回答一个不存在的问题。我相信用户的问题是消息框挡住了文本框。“以这种方式我看不到我的文本框”,没有人回答这个问题(更复杂的问题)。我认为,当你在你的意图中添加一些eplaining(使用你帖子下面的编辑链接)时,这对op和其他访问者会更有帮助。
    private DoSomthing(int arg1, int arg2, out string errorMessage)
    {
         int result ;
        errorMessage = String.Empty;
        try 
        {           
            //do stuff
            int result = 42;
        }
        catch (Exception ex)
        {

            errorMessage = ex.Message;//OR ex.ToString(); OR Free text OR an custom object
            result = -1;
        }
        return result;
    }
    string ErrorMessage;
    int result = DoSomthing(1, 2, out ErrorMessage);
    if (!String.IsNullOrEmpty(ErrorMessage))
    {
        MessageBox.Show(ErrorMessage);
    }
        try
        {
           // your code
        }
        catch (Exception w)
        {
            MessageDialog msgDialog = new MessageDialog(w.ToString());
        }