C# 如何更改MessageBox的位置?

C# 如何更改MessageBox的位置?,c#,messagebox,C#,Messagebox,我需要更改消息框的位置。我不想让它在这页的中间 MessageBox.Show("Hello"); 您需要创建一个从MessageBox表单继承的新表单。这是访问位置属性的唯一方法。通常,您不能更改标准消息框的启动位置 您的问题的解决方案: 创建自己的自定义消息框。 有一个关于创造的例子 复杂的使用方法 有一种方法可以改变位置,但对于这样一个小任务来说,这种方法太复杂了 如果确实需要更改其位置,可以显示它,然后使用getforegroughindow获取窗口句柄,然后MoveWindow移

我需要更改消息框的位置。我不想让它在这页的中间

MessageBox.Show("Hello");

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

通常,您不能更改标准消息框的启动位置

您的问题的解决方案:

  • 创建自己的自定义消息框。 有一个关于创造的例子
  • 复杂的使用方法

    • 有一种方法可以改变位置,但对于这样一个小任务来说,这种方法太复杂了
      如果确实需要更改其位置,可以显示它,然后使用
      getforegroughindow
      获取窗口句柄,然后
      MoveWindow
      移动到所需位置

      但是,正如我已经标注的,这太复杂了
      只需创建自己的表单,表单上有一个标签和一个“确定”按钮。将该按钮设置为默认窗口按钮,然后在Form1 do
      MyWndName.ShowDialog()中

      您可以做的是创建一个新窗口,将属性AllowTransparency设置为true,并将背景设置为Transparency。在该窗口中,您可以放置文本块或标签,还可以添加是/否按钮。使用Canvs.SetTop(window,TopPosition)和Canvas.SetLeft(window,LeftPosition)设置此窗口的位置。接下来,使用Show()或ShowDialog()方法调用窗口。

      因为我已经在项目中的其他几个任务中使用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");
      
      请注意

      • 坐标
        400300
        为绝对坐标<代码>0,0
      将位于左上角
    • 这取决于屏幕。如果您想准确,则需要其他代码来确定位置
    • 此任务是更改消息框的绝对位置,而不是移动消息框
    • 如何获取/安装AutoIt在这里没有说明。如果需要的话,请查阅相关说明

    我已将您的标题从
    massagebox
    (听起来很可爱)更改为
    messagebox
    @jgauffin,标记
    winforms
    有点不正确,因为
    messagebox
    在WPF中也可用。您的可能副本无法确保
    GetForeGroundIndow
    将为您提供创建的消息框的句柄。此时可能会有另一个应用程序进入前台。您指向Windows钩子过程的链接已断开。