开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 6646|回复: 6

XAF的Module中呼叫ShowMessage对话框显示信息

[复制链接]

0

精华

174

贡献

985

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
195
软币
4374
在线时间
369 小时
注册时间
2013-6-7
发表于 2013-6-16 00:00:17 | 显示全部楼层 |阅读模式
XAF的消息框显示是依赖于Win或是Web的, 所以在 Module 一层中无法直接呼叫消息对话框, 但有时我们又需要, 比如某个Module的业务逻辑实现过程中需要向最终用户展示某些信息时.
这时你可以这样来实现:
首先在 Module 中定义一个类:
  1. public abstract class MyShowMessaging
  2. {
  3.     private static MyShowMessaging _fMyShowMessaging = null;

  4.     public static void RegisterShowMessageInstance(MyShowMessaging showMessaging)
  5.     {
  6.         _fMyShowMessaging = showMessaging;
  7.     }

  8.     public static string ShowMessage(string message, string caption)
  9.     {
  10.         if (_fMyShowMessaging == null)
  11.         {
  12.             throw new Exception("MyShowMessaging 未注册!");
  13.         }
  14.         return _fMyShowMessaging.ShowInfoMessageCore(message, caption);
  15.     }
  16.     protected abstract string ShowMessageCore(string message, string caption);
  17. }
复制代码
这样 Module 中就可以直接呼叫 MyShowMessaging.ShoeMessage(string message, string caption) 方法来显示消息.

解下来就是分别为 Win和Web 实现 MyShowMessaging 中的方法, 这里以 WinForm 为例:
在 Module.Win 中新增类:
  1. public class MyWinShowMessaging : MyShowMessaging
  2. {
  3.     public static void RegisterMyShowMessaging()
  4.     {
  5.         RegisterShowMessageInstance(new MyWinShowMessaging());
  6.     }

  7.     protected override string ShowMessageCore(string message, string caption)
  8.     {
  9.         return WinApplication.Messaging.Show(message, caption,
  10.             System.Windows.Forms.MessageBoxButtons.OK,
  11.             System.Windows.Forms.MessageBoxIcon.Information).ToString();
  12.     }
  13. }
复制代码
最后在 Win 应用程序中注册 MyShowMessaging 即大功告成.
  1. static void Main(string[] args)
  2. {    MyWinShowMessaging.RegisterMyShowMessaging();
  3. ......
  4. }
复制代码

评分

参与人数 3贡献 +6 赞扬 +2 收起 理由
zaishijieshang + 1 Thanks
maple + 1 感谢分享
羽叶 + 6

查看全部评分

回复

使用道具 举报

0

精华

5291

贡献

6059

赞扬

管理员

帖子
1176
软币
22629
在线时间
4467 小时
注册时间
2013-6-7

黄马甲

发表于 2013-6-16 00:09:55 | 显示全部楼层
不错,期待楼主多发这样的教程
回复

使用道具 举报

0

精华

0

贡献

15

赞扬

帖子
34
软币
1215
在线时间
28 小时
注册时间
2013-6-9
发表于 2013-6-17 08:50:20 | 显示全部楼层
请楼主将Web的实现一同发上来吧。
回复

使用道具 举报

0

精华

174

贡献

985

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
195
软币
4374
在线时间
369 小时
注册时间
2013-6-7
 楼主| 发表于 2013-6-18 12:09:14 | 显示全部楼层
geotri 发表于 2013-6-17 08:50
请楼主将Web的实现一同发上来吧。

Web的我不熟, 刚看了下,我还真实现不了.

不过你可以参见另外一种使用 DialogController 显示一个 View 的方式来替代.
How to invoke a View without using Actions or from a place that is different from the Controller context
回复

使用道具 举报

0

精华

940

贡献

167

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
237
软币
2692
在线时间
264 小时
注册时间
2013-6-17
发表于 2013-6-18 16:50:57 | 显示全部楼层
好东西,发现这个解决方案解决了我的一个难题,收藏了
回复

使用道具 举报

0

精华

-1

贡献

13

赞扬

帖子
113
软币
680
在线时间
100 小时
注册时间
2013-9-24
发表于 2013-9-29 10:06:51 | 显示全部楼层
谢谢,收下了

评分

参与人数 1赞扬 +1 收起 理由
cc1987 + 1 Thanks

查看全部评分

回复

使用道具 举报

0

精华

0

贡献

8

赞扬

帖子
26
软币
182
在线时间
14 小时
注册时间
2013-12-28
发表于 2013-12-28 06:22:49 | 显示全部楼层
谢谢,先收藏了
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-12-22 00:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表