Как передать ссылочный тип в Control.Invoke / отобразить форму с центром в главной форме - PullRequest
0 голосов
/ 03 июня 2010

Я нахожусь в потоке, отличном от потока пользовательского интерфейса, и мне нужно отобразить модальную форму, которая находится в центре основной формы приложения. Обычно я использую ширину и высоту основной формы и модальную форму для расчета местоположения, затем использую метод PointToScreen основной формы, чтобы получить местоположение модальной формы. Поскольку я нахожусь в другом потоке, мне нужно использовать Control.Invoke для вызова этого метода. Я просто не могу понять, как передать параметр типа Point в Control.Invoke (params object []). Значения типов и String работают нормально.

или , если кто-то сможет найти лучший способ отображения формы с центром в основной форме независимо от потока, это было бы замечательно. MessageBox, кажется, может это сделать (хотя и не модально).

EDIT

У меня нет проблем с вызовом чего-то подобного.

mainform.Invoke(..., object[] { someString });

Проблема заключается в следующем:

public Point Control.PointToScreen(Point p)

Этот метод принимает Point в качестве параметра и возвращает Point . Как я могу позвонить через Control.Invoke?

Ответы [ 3 ]

0 голосов
/ 03 июня 2010

Посмотрите на это , вы можете адаптировать функцию UpdateStatusBarMessage_OnNewStatusMessage, чтобы отображать вашу форму вместо написания сообщения.

0 голосов
/ 03 июня 2010

WRT «лучший способ отобразить форму с центром в основной форме независимо от потока, это было бы здорово» - вам действительно не нужно делать это центрирование вручную. :)

  1. Перед отображением (предположительно вызывая ShowDialog) установите для свойства StartPosition в дочернем диалоге значение CenterParent .
  2. В случае, если активное окно (имеет кнопку, которая создает диалоговое окно) не является предполагаемым родителем (звучит маловероятно, учитывая ваш сценарий), вы можете вызвать перегрузку ShowDialog, которая позволяет вам указать родителя, Я не думаю, что вам это понадобится, но это позволяет вам произвольно использовать родительский диалог. :)
0 голосов
/ 03 июня 2010

myWhatever.Invoke(myDelegate, new object[] { myParam1, myParam2, myParam3 });

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...