C#. Как заставить форму перемещаться удалив у нее рамку?

174
02 марта 2018, 14:05

Добрый день. Подскажите как заставить форму перемещаться удалив у нее рамку? Тоесть у меня у MainForm выключен ControlBox и BorderStyle - None И форма не двигается теперь.. Как вернуть возможность перемещать ее? Спасибо заранее

Answer 1
    protected override void WndProc(ref Message m)
    {
        if (m.Msg==0x84)
        {
            base.WndProc(ref m);
            if ((int)m.Result == 0x1)
                m.Result = (IntPtr)0x2;
            return;
        }
        base.WndProc(ref m);
    }

Добавьте этот метод.

Answer 2

Код взят с англоязычного SO https://stackoverflow.com/questions/1592876/make-a-borderless-form-movable.

Определите onMouseDown слушателя на форму, и вставьте следующий код.

public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{     
    if (e.Button == MouseButtons.Left)
    {
        ReleaseCapture();
        SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    }
}

В результате получается по сути делает то же самое, что и захват строки заголовка окна у обычной winform

READ ALSO
Запуск и работы формы только при запущенном процессе

Запуск и работы формы только при запущенном процессе

Как можно сделать так, чтобы форма запускалась и работала только при запущенном процессе?

192
Как определить что программа запущена в первый раз?

Как определить что программа запущена в первый раз?

Как определить что программа запущена в первый раз? Без создания папок или файлов настроекЭти способы я знаю

168
ASP.NET Core 2: CORS-ошибка

ASP.NET Core 2: CORS-ошибка

Есть проект, который опубликован как контейнер на Amazon ECS

198
Копирование в буфер нужной колонки в DataGridView

Копирование в буфер нужной колонки в DataGridView

Как реализовать копирование нужных колонок из таблицы? Например при клике на кнопку в буфер должны упасть все значения, которые были в первом...

184