首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • MessageBox.Show()如何在父窗体居中 [已结贴,结贴人:conan304]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • conan304
    • 等级:
    发表于:2008-07-08 22:44:40 楼主
    MessageBox.Show()默认是屏幕居中,有没有办法让此对话框在父窗体居中啊?
    比如单击Form1上的button1弹出Messag.Show()对话框,此对话框能在Form1居中吗?而不是默认的屏幕居中

    谢谢
    200  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • akirya
    • 等级:
    发表于:2008-07-08 22:48:511楼 得分:10
    不是有这个成员么?
    Show(IWin32Window, String)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • conan304
    • 等级:
    发表于:2008-07-08 23:06:262楼 得分:0
    引用 1 楼 akirya 的回复:
    不是有这个成员么?
    Show(IWin32Window, String)

    使用这个方法的重载,就可以居中么?
    恕我驽钝啊,查了下资料还是不知道怎么用。

    即在form1居中,而不是屏幕居中。谢谢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-08 23:15:333楼 得分:10
    show之前设置一下location 不就好了吗?

    应该是  (父窗体宽-show出来窗体的宽)/2 , (父窗体高-show出来窗体的高)/2

    这个点就对了

    我是小菜鸟!  说的不好清见谅,  希望能够帮到你!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-08 23:19:204楼 得分:0
    引用 3 楼 SuperTyro 的回复:
    show之前设置一下location 不就好了吗?

    应该是  (父窗体宽-show出来窗体的宽)/2 , (父窗体高-show出来窗体的高)/2

    这个点就对了

    我是小菜鸟!  说的不好清见谅,  希望能够帮到你!


    好象不是这样的  错了  应该还要再加一步

    (父窗体宽-show出来窗体的宽)/2 +父窗体.location.宽 , (父窗体高-show出来窗体的高)/2 +父窗体.location.高

    这样可以了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mapserver
    • 等级:
    发表于:2008-07-08 23:23:465楼 得分:10
    http://topic.csdn.net/u/20080519/15/ba651bbe-286a-4a2c-961b-e712a40f999d.html
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • conan304
    • 等级:
    发表于:2008-07-09 08:02:006楼 得分:0
    谢谢楼上的几位。但是还是无法解决问题。
    MessageBox.Show()无法设置location属性

    楼上的,哪个帖子,其实老早之前我就搜索到了。

    show.StartPosition = FormStartPosition.CenterParent;
    或者设置centralparent属性
    一样,无法设置StartPosition属性
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • rqx110
    • 等级:
    发表于:2008-07-09 08:30:557楼 得分:15
    你可以自己写个MessageBox嘛,然后showDialog就好了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 08:53:288楼 得分:15
    自己写个Form吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 08:55:109楼 得分:0
    该回复于2008-07-09 21:39:57被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zswang
    • 等级:
    发表于:2008-07-09 08:56:1110楼 得分:50
    挺复杂的,得截获MessageBox显示。
    C# code
    using System.Runtime.InteropServices; public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll")] public static extern IntPtr SetWindowsHookEx(int hookid, HookProc pfnhook, IntPtr hinst, int threadid); [DllImport("user32.dll")] public static extern IntPtr CallNextHookEx(IntPtr hhook, int code, IntPtr wparam, IntPtr lparam); [DllImport("kernel32.dll")] public static extern IntPtr GetModuleHandle(string modName); [DllImport("user32.dll")] public static extern bool UnhookWindowsHookEx(IntPtr hhook); [DllImport("user32.dll")] public static extern bool GetWindowRect(IntPtr hWnd, ref Rectangle rect); [DllImport("user32.dll")] public static extern bool MoveWindow( IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); public const int WH_CBT = 5; public const int HCBT_ACTIVATE = 5; IntPtr hookHandle = IntPtr.Zero; private IntPtr CBTHookCallback(int nCode, IntPtr wParam, IntPtr lParam) { switch(nCode) { case HCBT_ACTIVATE: Rectangle vRectangle = new Rectangle(); GetWindowRect(wParam, ref vRectangle); vRectangle.Width = vRectangle.Width - vRectangle.Left; vRectangle.Height = vRectangle.Height - vRectangle.Top; MoveWindow(wParam, // 右下 Screen.GetWorkingArea(this).Width - vRectangle.Width, Screen.GetWorkingArea(this).Height - vRectangle.Height, vRectangle.Width, vRectangle.Height, false); UnhookWindowsHookEx(hookHandle); break; } return CallNextHookEx(hookHandle, nCode, wParam, lParam); } private void button1_Click(object sender, EventArgs e) { hookHandle = SetWindowsHookEx(WH_CBT, new HookProc(CBTHookCallback), GetModuleHandle(null), 0); MessageBox.Show("Zswang 路过"); }
    提示 居中就是计算一下出现的位置,交给楼主自己。[img=http://p.blog.csdn.net/images/p_blog_csdn_net/zswang/reply.jpg][/img]
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yygyogfny
    • 等级:
    发表于:2008-07-09 08:58:0811楼 得分:2
    学习~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • badtank
    • 等级:
    发表于:2008-07-09 08:59:3912楼 得分:50
    我的办法相对简单一些
    重写MessageBox类
    C# code
    public class MessageBox { public MessageBox() { } public static DialogResult Show() { Form2 frm = new Form2();//Form2是自己新建的form,外观做的和MessageBox.show出来的效果一样。设置窗体的StartPosition为CenterParent. return frm.ShowDialog(); } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 09:01:4013楼 得分:2
    崇拜一下zswang大侠!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 09:04:1714楼 得分:10
    只有自己写个Form了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 09:11:5615楼 得分:2
    C# code
    public class MessageBox { public MessageBox() { } public static DialogResult Show() { Form2 frm = new Form2();//Form2是自己新建的form,外观做的和MessageBox.show出来的效果一样。设置窗体的StartPosition为CenterParent. return frm.ShowDialog(); } }


    确实要崇拜一下以上楼的牛人们

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojlovecd
    • 等级:
    发表于:2008-07-09 09:12:0115楼 得分:10
    C# code
    From2 fm = new Form2(); Point point = PointToScreen(this.Location); fm.StartPosition = FormStartPosition.Manual; fm.Location = new Point(point.X + (this.Size.Width - fm.Size.Width) / 2, point.Y + (this.Size.Height - fm.Size.Height) / 2); fm.Show();
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zzyhuian06142
    • 等级:
    发表于:2008-07-09 09:12:0716楼 得分:0
    Mark下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojlovecd
    • 等级:
    发表于:2008-07-09 09:12:3817楼 得分:0
    看错了,是MessageBox.Show(),请楼主忽略15楼回复
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 09:16:5118楼 得分:2
    重写不错
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 10:52:3419楼 得分:8
    只能用API来实现了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 12:20:2320楼 得分:2
    引用 10 楼 zswang 的回复:
    挺复杂的,得截获MessageBox显示。
    C# codeusingSystem.Runtime.InteropServices;publicdelegateIntPtr HookProc(intnCode, IntPtr wParam, IntPtr lParam);

    [DllImport("user32.dll")]publicstaticexternIntPtr SetWindowsHookEx(inthookid,
        HookProc pfnhook, IntPtr hinst,intthreadid);

    [DllImport("user32.dll")]publicstaticexternIntPtr CallNextHookEx(IntPtr hhook,intcode, IntPtr wparam, IntPtr lparam);

    […



    顶!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 14:01:2121楼 得分:2
    mark,看大侠重写
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • conan304
    • 等级:
    发表于:2008-07-11 21:07:4622楼 得分:0
    清洁工同志,汗,恕我驽钝,没看懂。不过我还去招书来看的。谢谢。
    BadTank,谢谢,相对简单,确实是一个好的解决方法。

    ps:谢谢楼上几位顶贴还有给我出主义的朋友,谢谢。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved