Как изменить местоположение MessageBox?

Мне нужно изменить местоположение окна сообщения. Я не хочу, чтобы он был в центре страницы.

MessageBox.Show("Hello");

person guy    schedule 13.03.2011    source источник
comment
Я изменил ваш заголовок с massagebox (звучит прекрасно) на messagebox.   -  person jgauffin    schedule 13.03.2011
comment
@jgauffin, тег winforms немного неверен, потому что MessageBox доступен и в WPF.   -  person Kyrylo M    schedule 13.03.2011
comment
возможный дубликат Winforms-Как сделать так, чтобы MessageBox отображался по центру на главной форме?   -  person Hans Passant    schedule 13.03.2011


Ответы (5)


Обычно вы не можете изменить место запуска стандартного окна сообщений.

Решения для вашего вопроса:

person Kyrylo M    schedule 13.03.2011
comment
Ваша ссылка на процедуру Windows Hook не работает. - person user2163234; 18.06.2018

Вам нужно будет создать новую форму, которая наследуется от формы MessageBox. Это единственный способ получить доступ к свойствам позиции.

person Greg    schedule 13.03.2011

Есть способ изменить местоположение, но он слишком сложен для такой маленькой задачи.
Если вам действительно нужно изменить его местоположение, вы можете отобразить его, затем использовать GetForegroundWindow, чтобы получить дескриптор окна, а затем MoveWindow в нужное место.
Но, как я уже говорил, это слишком сложно.
Просто создайте собственную форму с меткой и кнопкой "ОК". Установите кнопку в качестве кнопки окна по умолчанию, а затем в Form1 выполните MyWndName.ShowDialog();

person alex    schedule 13.03.2011
comment
вы не можете быть уверены, что GetForegroundWindow даст вам дескриптор созданного окна сообщения. Возможно, в этот момент другое приложение перейдет на передний план. - person Kyrylo M; 13.03.2011

Что вы можете сделать, так это создать новое окно, установить для свойства AllowsTransparency значение true и установить для фона значение Transparent. В этом окне вы можете поместить TextBlock или метку, а также добавить кнопки «Да/Нет». Установите расположение этого окна, используя Canvs.SetTop(Window,TopPosition) и Canvas.SetLeft(Window,LeftPosition). затем вызовите окно методом Show() или ShowDialog().

person Tal Malaki    schedule 16.12.2013

Поскольку я уже использую 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 здесь не рассматривается. Пожалуйста, поищите инструкцию по этому поводу, если вам нужно.
person Tam Le    schedule 05.02.2020