Получение SetDesktopBounds для прикрепления - PullRequest
3 голосов
/ 14 декабря 2011

Я вызываю System.Windows.Forms ... SetDesktopBounds (x, y, width, height) на форме, которая была только что создана, но не показана.Когда я показываю форму, она не попадает в мое место SetDesktopBounds, а отображается в другом месте.

Если я покажу форму, тогда SetDesktopBounds, а затем скрыть ее ... она будет быть на месте в следующий раз, когда я покажу это.Кто-нибудь знает, что здесь происходит?Я не хочу делать Show заранее, потому что тогда вы получите мерцание формы при настройке.

Вызов Activate и / или CreateControl перед вызовом SetDesktopBounds тоже не работает.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

Вы не получите удовлетворительных результатов, если вызовете его до того, как сработает событие Load формы.Реальный размер окна неизвестен до тех пор, пользовательские настройки и масштабирование вступят в силу при создании собственного окна.Если вы сделаете это после загрузки, то будет видно изменение положения.Так что это лучше:

    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var main = new Form1();
        main.Load += delegate { main.SetDesktopBounds(100, 100, 300, 300);  };
        Application.Run(main);
    }
0 голосов
/ 19 января 2019

Это потому, что по умолчанию формы инициализируются с помощью StartPosition = FormStartPosition.WindowsDefaultLocation.Измените его на FormStartPosition.Manual, и вам не понадобится обратный вызов после загрузки формы, он сразу же игнорирует все принудительное позиционирование ОС, и вызов SetDesktopBounds просто делает то, что вы хотели.

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