如何更改消息框的位置?

15

我需要改变消息框的位置。我不希望它位于页面的中心。

MessageBox.Show("Hello");

31
我已将您的标题从“massagebox”(听起来很可爱)改为“messagebox”。 - jgauffin
2
@jgauffin,标记winforms有点不正确,因为MessageBox在WPF中也可用。 - kyrylomyr
可能是Winforms-如何使MessageBox出现在MainForm的中心?的重复问题。 - Hans Passant
5个回答

14

通常情况下,无法更改标准消息框的启动位置。

解决方案:


6
您的 Windows Hook Procedure 链接已损坏。 - user2163234
@user2163234 已更新为存档副本。 - StayOnTarget

2

您需要创建一个继承自MessageBox窗体的新表单。这是访问位置属性的唯一方式。


2

有一种方法可以改变位置,但对于这样一个小任务来说,太过复杂。
如果您真的需要更改其位置,您可以先显示它,然后使用GetForegroundWindow获取窗口句柄,然后使用MoveWindow将其移动到所需位置。
但是,正如我已经提到的,这太过复杂了。
只需创建自己的表单并在上面放置一个标签和一个“确定”按钮。将该按钮设置为默认窗口按钮,然后在Form1中执行MyWndName.ShowDialog();


1
你不能确保 GetForegroundWindow 会给你创建的消息框的句柄。可能会发生另一个应用程序在那一刻进入前台的情况。 - kyrylomyr

2
你可以创建一个新窗口,将属性AllowsTransparency设置为true,并将Background设置为Transparent。在这个窗口中,你可以放置一个TextBlock或标签,还可以添加Yes/No按钮。使用Canvas.SetTop(Window,TopPosition)和Canvas.SetLeft(Window,LeftPosition)来设置此窗口的位置。接下来,使用方法Show()或ShowDialog()调用此窗口。

1

由于我在项目中已经使用AutoIt来完成其他任务,所以我只需创建另一个线程来移动消息框。

using System.Threading;
using AutoIt;
//Namespace, class, function stuffs
//New thread BEFORE create message box - safety measure
Thread autoItThread = new Thread(delegate ()
                {
                    AutoItX.WinWait("New Message box");
                    AutoItX.WinMove("New Message box", "This box will be moved", 400, 300);
                });
                autoItThread.Start();
MessageBox.Show("This box will be moved", "New Message box");

请注意:
  • 坐标400,300是绝对的。 0,0将成为左上角。
  • 这取决于屏幕。如果要精确,请使用其他代码确定位置。
  • 此任务是更改消息框的绝对位置而不是移动它。
  • 如何获取/安装AutoIt在此处未涉及。如果需要,请查找相关指示。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接