代码之家  ›  专栏  ›  技术社区  ›  sventevit

如何捕获用户控件中的所有异常

  •  4
  • sventevit  · 技术社区  · 14 年前

    我有一个用户控件,它包含多个方法,每个方法都有一个try-catch块。我只捕获一种类型的异常,例如ArgumentException。更新-我没有捕获一个异常,而是捕获多个我定义的异常。

    我可以在一个地方捕获ArgumentException以便用户控件中的所有方法都使用它吗?

    由于业务逻辑的原因,它们有几个选项来插入这些数字,因此同一个错误捕获逻辑在用户控件的多个方法中都是一样的。

    Update2:实际上,我捕捉的不是ArgumentException,而是我自己的异常,例如 CodeFormatException、CodeDoesntExistException、codeNotInSelectedRollException等。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Svisstack    14 年前

    您可以将这段代码放入一些验证参数函数中,并在函数的开头调用它。

        2
  •  1
  •   Mike Dour    14 年前

    WndProc 方法(如果您没有非托管代码权限,应用程序将在您的 UserControl 类首先被引用)。键盘、鼠标和绘图事件是由 窗口过程

    编辑: 实际上,我觉得这样更好。它不需要权限,您也可以将其用于从用户控件上的其他控件触发的事件:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
    
            this.Load += new TryCatchHandler(new EventHandler(this.Form1_Load)).EventHandler;
            this.MouseClick += new TryCatchHandler(new MouseEventHandler(this.Form1_MouseClick)).EventHandler;
    
            this.button1.Click += new TryCatchHandler(new EventHandler(this.button1_Click)).EventHandler;
        }
    
        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            // ...
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
            // ...
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            // ...
        }
    
        private class TryCatchHandler
        {
            public Delegate handler;
    
            public TryCatchHandler(Delegate handler)
            {
                this.handler = handler;
            }
    
            public void EventHandler(object sender, EventArgs e)
            {
                try
                {
                    this.handler.Method.Invoke(this.handler.Target, new object[] { sender, e });
                }
                catch (ArgumentException exc)
                {
                    // ...
                }
            }
        }
    }
    
        3
  •  0
  •   cjk    14 年前

    从基类派生异常,然后将异常处理代码重构为接受基类作为参数的方法。然后您可以处理异常,并根据需要提出建议。