Mori_hatam Ответов: 3

Изменение размера формы без границ


Если я установлю FormBorderStyle = None, как я могу разрешить его изменение размера?

[Модифицированный: Узнайте, как правильно написать вопрос. Тема должна быть общей, а "подробное описание" должно содержать более подробное описание вопроса]

clwprogrammer

вы можете использовать события мыши для проверки координат для отображения правильного курсора, а затем использовать событие mousedown вместе с вызовом API sendmessage для изменения размера. я не могу точно вспомнить сообщение или параметры, которые нужно отправить через SendMessage, чтобы это сработало. google "использование API sendmessage для изменения размера и перемещения формы"

3 Ответов

Рейтинг:
2

lw@zi

Без границы, единственный способ AFAIK, будет обрабатывать события MouseDown, MouseMove,MouseUp и Paint. Вам нужно будет получить координаты перемещения и изменить размер формы.

Если вам действительно нужно изменить размер, у вас должна быть граница.

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


Рейтинг:
1

Gregory Gadow

В C# (и VB, если уж на то пошло) вам нужно иметь границу, чтобы форма была значительной: Это граница, которую пользователь тянет, а когда границы нет, то не за что ухватиться.

Предполагая, что то, что вы действительно хотите, - это большая форма без строки заголовка, вы можете получить это, установив ControlBox, MaximizeBox и MinimizeBox все False и Текст к пустой строке. Поскольку в строке заголовка ничего не отображается, фреймворк его не нарисует. Просто не забудьте дать своим пользователям какой - то способ закрыть форму ;P


William Winner

Причина моего голосования 2
это верно только в том случае, если вы предполагаете, что кодер не может реализовать изменение размера, что не так уж трудно сделать.

Gregory Gadow

Когда я ответил 4 часа назад, вопрос был совсем другим.

William Winner

um...no...it сказал: "Как сделать форму изменяемой с помощью FormBorderStyle = None в C#"

Единственное, что изменилось, - это то, что вопрос был поставлен в вопрос и переведен на правильный английский язык. Я полагаю, что цель вопроса та же самая.

Рейтинг:
0

William Winner

Что вам нужно сделать, так это реализовать его самостоятельно, используя события MouseMove и MouseDown формы. Это немного сложнее, если у вас есть меню, потому что тогда вы также должны обрабатывать MouseMove меню и MouseDown, а также потому, что это будет переопределять события формы. Основы таковы:

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
    if ((e.X <= 2 && e.Y <= 2) || (e.X + 2 >= this.Width && e.Y + 2 >= this.Height))
    {
        this.Cursor = Cursors.SizeNWSE;
    }
    else if ((e.X + 2 >= this.Width && e.Y <= 2) || (e.X <= 2 && e.Y + 2 >= this.Height))
    {
        this.Cursor = Cursors.SizeNESW;
    }
    else if (e.X <= 2 || e.X + 2 >= this.Width)
    {
        this.Cursor = Cursors.SizeWE;
    }
    else if (e.Y <= 2 || e.Y + 2 >= this.Height)
    {
        this.Cursor = Cursors.SizeNS;
    }
    else
    {
        this.Cursor = Cursors.Default;
    }
}


Конечно, чтобы полностью реализовать его, вам придется проверить, была ли мышь опущена (для этого вы можете использовать bool и установить его в событиях MouseDown и MouseUp), а затем проверить, в какую сторону она перетаскивается. Если его перетаскивают вверх или влево, вам придется сначала переместить форму, а затем изменить размер в зависимости от того, насколько она переместилась. Если он находится справа или внизу, вы можете просто установить высоту и ширину в положение мыши (конечно, сначала проверьте, потому что похоже, что мышь не зарегистрирована как находящаяся в форме, пока она не станет на два меньше высоты и ширины).

И вы могли бы упростить его, разрешив им изменять размер только с помощью нижнего правого угла, и вы могли бы добавить изображение в этом углу, указывающее, что вы можете изменить его размер.

[Обновление]
На самом деле, это не собирается быть так просто. Сначала вам нужно будет сделать глобальный крюк на мыши. Причина в том, что MouseMove не будет работать, когда вы выходите за пределы формы, что вам придется сделать, чтобы изменить ее размер. Итак, это можно сделать, но опять же, вам придется использовать глобальный крюк. Статья о том, как это сделать, находится здесь: Обработка глобальных Крючков мыши и клавиатуры в C#[^]