Могу ли я заставить окно не изменять свой размер, пока пользователь не отпустит кнопку мыши? - PullRequest
1 голос
/ 25 марта 2012

У меня есть несколько экранов с большим количеством материала, и производительность перерисовки довольно низкая.Можно установить форму в режим изменения размера, где на экране отображается прямоугольник, который обозначает новые размеры окна, когда пользователь изменяет его размер, но фактическая форма не изменяется, пока они не отпустят кнопку мыши?

Спасибо!

Ответы [ 5 ]

3 голосов
/ 25 марта 2012

Да; это поведение определяется одним из стилей окна, которые вы можете включать / выключать с помощью метода Control.SetStyles. В частности, я думаю, что вы хотите это:

myForm.SetStyle(ControlStyles.ResizeRedraw, false);

Затем вы можете перехватить события mousedown / resize / mouseup и заставить перерисовку произойти, когда захотите.

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

myForm.SetStyle(ControlStyles.DoubleBuffer, true);

Подробности смотрите в этой статье: http://msdn.microsoft.com/en-us/library/fkf25009(v=vs.100).aspx

1 голос
/ 25 марта 2012

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

    private bool fastRender;

    protected override void OnResizeBegin(EventArgs e) {
        fastRender = true;
        base.OnResizeBegin(e);
    }

    protected override void OnResizeEnd(EventArgs e) {
        base.OnResizeEnd(e);
        fastRender = false;
        this.Invalidate();
    }

И проверьте переменную fastRender в обработчике событий Paint, рисуя только минимум. Или вообще ничего. Если фактическая задержка вызвана большим количеством элементов управления, то воспользуйтесь этим, сделав их невидимыми в ResizeBegin и снова видимыми в ResizeEnd. Легко сделать с помощью панели. Если это вызвано тем, что элементы управления закреплены или имеют привязку, установленную таким образом, что они будут изменять размер или перемещаться всякий раз, когда пользователь изменяет размер окна, тогда вы найдете Suspend / ResumeLayout полезным.

0 голосов
/ 27 мая 2012

Откройте окно неправильного размера; затем, удерживая нажатой клавишу управления, нажимайте клавишу + , пока не вернетесь к нужному размеру. Удачи.

0 голосов
/ 25 марта 2012

Как насчет использования ResizeEnd вместо Resize.

0 голосов
/ 25 марта 2012

Вы пытались использовать функцию DoubleBuffer для winform / control?

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