Используя Windows Forms, я хотел поместить окно в определенные координаты. Я думал, что это может быть сделано в простой форме, но следующий код не работает на всех:Позиционирование окна C#
public Form1()
{
InitializeComponent();
this.Top = 0;
this.Left = 0;
}
Однако, когда только получить дескриптор этого окна, он хорошо работает:
public Form1()
{
InitializeComponent();
IntPtr hwnd = this.Handle;
this.Top = 0;
this.Left = 0;
}
You может видеть, что я вообще не работаю с этим указателем. Я нашел в MSDN следующее заявление:
Значение свойства Handle - это Windows HWND. Если дескриптор имеет , он еще не создан, ссылка на это свойство заставит дескриптор быть создан.
Означает ли это, что мы можем установить положение окна только после создания его ручки? Устанавливают ли верхние/левые сеттеры с помощью этого ручка внутри? Благодарим вас за разъяснения.
Не отвечая на ваш вопрос, но вы можете переопределить метод OnHandleCreated, чтобы избежать вызова 'this.Handle'. Я согласен, что странно, что 'this.Handle', по-видимому, проверяет и создает базовый дескриптор, в то время как другие свойства, зависящие от базового дескриптора, не работают. –
Вы пытались установить их в дизайнере? –
Я знаю, что могу обойти это разными способами. Я только хотел узнать, почему он ведет себя так, потому что в других рамках (Qt, wxWidgets, MFC ...) вы можете установить свою позицию окна непосредственно во время построения окна. – Fremen