【问题标题】:Display messagebox in dll library在 dll 库中显示消息框
【发布时间】:2012-05-11 20:18:35
【问题描述】:

我正在编写一个dll库(例如用于检查用户的登录详细信息),并且我想在此过程中弹出一个确认对话框或信息对话框,例如

"Are you sure you want to continue? (Yes/No/Cancel)"

出于某种原因。目前我需要这个用于 Winforms 中的应用程序,我也想为我的其他 webforms 应用程序使用相同的 dll。谁能指导如何实现它?不用说我不想引用System.Windows.FormsSystem.Web。任何人都可以给我一些指示吗?我正在使用 .net 4.0

我不想发布/订阅活动,因为我对 cab 架构不是很熟悉。

编辑

我有一个用于在应用程序运行时创建数据库的 dll。所以我的 dll 通常会检查数据库是否已经存在并且是否是最新的,如果它是然后停止。但是如果它不存在或不是最新的,那么我想问用户他是想现在还是以后更新它。如果用户现在说,更新它,然后说继续申请。这只是一个示例,欢迎提供任何相关信息。

谢谢。

【问题讨论】:

  • 嗯,你可以参考 VisualBasic.Interop ......但我想这也不会让你满意,对吗?
  • 如果不使用支持窗口的库,您不可能在非窗口环境中查看窗口。
  • 嗯,我认为这就是为什么我们有 Confirm 用于网络
  • 如果你想要MessageBox,你需要System.Windows.Forms。如果你想要网页控制,你需要System.Web。为什么不喜欢引用这些内容?
  • 确保服务器机房的钥匙易于取用。对正确的用户界面进行 DLL 猜测是一个有损的提议。改为引发事件。

标签: c# .net dll message


【解决方案1】:

你真的不应该。这不属于库,但应该在使用该库的应用程序中完成。

WinForms 应用程序可能会通过显示MessageBox 来解决此问题,而 Web 应用程序可能会在成功 POST 后执行请求而不询问(因为 POST 通常显示修改资源的意图)。

例如,当您的库用于登录时,只需抛出 AuthenticationException,这样客户端应用程序(无论是 WinForms、Web 还是其他)都可以捕获并显示适当的消息。


至于您的编辑:

我有一个用于在应用程序运行时创建数据库的 dll ...

为什么不公开IsDatabaseUpToDate()UpdateDatabase() 这样的两个方法呢?然后在客户端,就可以调用第一个方法了。如果它返回 false,您将询问用户(无论是使用 MessageBox、HTML 表单、JavaScript 警报、简单的“是”按钮还是闪烁的磁贴)他们是否要更新数据库。如果是这样,您调用UpdateDatabase() 方法就可以开始了。

【讨论】:

  • 但是如果消息需要显示在方法的中间呢?我想在用户单击是/否/取消后做某事
  • @rapsalands 那么您应该将该方法拆分为多个较小的方法,并使用用于调用该方法的参数来回答这些问题。你能给出你认为什么时候可能需要这个的确切例子吗?
  • 相信我,同时我也在努力,我做了同样的事情。
  • 有可能吗?我希望有人能真正回答如何做到这一点。
  • @JasonAxelson:让您的库公开一个接口(使用方法ShowPopup),然后您的表单实现该接口。 ShowPopup 的实现应该有MessageBox.Show。然后从库中调用ShowPopup,你就完成了。如果还不清楚......请告诉我
【解决方案2】:

要完成此操作,您需要右键单击项目并选择“添加引用”,然后选择“.NET”选项卡并单击“System.Windows.Forms”。那么这应该在.dll中工作:

System.Windows.Forms.MessageBox.Show("Hello World!");

当然,这对于原始海报(如 CodeCaster 所涵盖)来说是个坏主意。

【讨论】:

  • 从不......如何将 Windows 窗体引用添加到库。这将使您的库与网络表单等其他平台不兼容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多