【问题标题】:Catching exceptions thrown from UserControl in parent Form?在父窗体中捕获从 UserControl 引发的异常?
【发布时间】:2015-03-31 06:25:09
【问题描述】:

我有一个表单,它扩展了一些具有特殊异常处理逻辑的类,以便以干净的方式向用户呈现任何出现的问题。该 Form 包含一个自定义 UserControl,它有可能抛出异常,如果未解决,则不会被父 Form 捕获和重新抛出,因此不会遇到特殊逻辑。

我怎样才能让我的 UserControl 抛出异常我的表单?

【问题讨论】:

  • 你不能那样做。这不是异常的工作方式。它们总是向上调用堆栈。他们不知道用户控件是什么。如果您的设计要求您在父项中捕获用户控件异常,请立即停止并重新设计。没有办法做你想做的事,在任何情况下你都不应该这样做。
  • @JohnSaunders 显然,您在最具体的级别上是正确的——异常自然会在调用堆栈中上升——但想法是它们应该从子级流向父级。在这种情况下,需要在子级别响应错误的父级不是子级上下文的直接所有者。这是相当常见的。
  • “他们应该”?在哪个宇宙?不在这个中!谨防为其他人已经编写的软件发明架构。
  • 那么,也许我错报了我的目标。我正在尝试将信息从 UserControl 发送到父窗体。您能否就我如何实现这一目标提供一些指导?批评是廉价的。

标签: c# .net winforms user-controls


【解决方案1】:

一种可能的解决方案是将 try ..catch 放入您的用户控件并引发可由父表单处理的事件。

您可以将异常作为事件参数传递。

请注意,我认为这可能不是处理异常的正确方法,我只是在回答您的问题。

【讨论】:

  • 不一定是异常本身;只是一条消息,传达发生异常的信息。您能否详细说明这看起来/如何完成?我是 WinForms 的新手。
  • 仅供参考,您刚刚回答了他的问题,给出了错误的答案并提供了一个不好的例子。想象一下,如果 OP 和这个答案的许多未来成千上万的读者真的去实施这个建议!这将是你的错。
  • 我想得越多,我就越相信 OP 应该继续以这种方式实现他的代码。如果代码很重要,则尤其如此。这样,当整个纸牌屋倒塌时,OP 将学会不要与平台对抗。 WinForms 无法实现这一点的事实意味着你不应该实现它
  • @JohnSaunders:我只是告诉他他在寻找什么,即使他要求用脚射击,我警告他这会很痛。我不是来评判任何人的,只是为任何请求帮助的人提供帮助。
  • @JohnSaunders:恕我直言,安乐死不是犯罪,所以协助某人开枪是可以的,只要他愿意 :) 是我还是这变得疯狂了?
猜你喜欢
  • 2013-07-23
  • 1970-01-01
  • 2014-10-07
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
相关资源
最近更新 更多