C-Sharp (C#) Перетаскивание формы за любой элемент winforms - wpf

Тема в разделе "Разработка приложений C# .Net Скрипты библиотеки .", создана пользователем Prime Scripts Labs, 5 окт 2017.

  1. Prime Scripts Labs

    Prime Scripts Labs Разработчик
    // DEVELOPER //

    Регистрация:
    10 июн 2017
    Сообщения:
    255
    Симпатии:
    408
    Получил несколько сообщений в ЛС с просьбой подсказать, как перетаскивать форму за любой элемент .
    Представляю способ реализации перемещения формы "FormBorderStyle: None" за любую область , с возможностью указать событие в любом контроле WinForms.

    Оригинальный способ реализации:

    using System.Runtime.InteropServices

    Код (C#):
    1. public static class NativeMethods
    2. {
    3.     [DllImport("user32", CharSet = CharSet.Auto)]
    4.     internal extern static bool PostMessage(IntPtr hWnd, uint Msg, IntPtr WParam, IntPtr LParam);
    5.  
    6.     [DllImport("user32", CharSet = CharSet.Auto)]
    7.     internal extern static bool ReleaseCapture();
    8. }
    9.  
    10. const uint WM_SYSCOMMAND = 0x0112;
    11. const uint DOMOVE = 0xF012;
    12. const uint DOSIZE = 0xF008;
    В событие "MouseDown" формы, и любого элемента форм виндовс вставляем сл.
    Код (C#):
    1. NativeMethods.ReleaseCapture();
    2. NativeMethods.PostMessage(this.Handle, WM_SYSCOMMAND, (IntPtr)DOMOVE, (IntPtr)0);

    Для WPF всё намного проще.
    Код (C#):
    1. private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    2. {
    3.     this.DragMove();
    4. }
    DEMO
     

    Вложения:

Поделиться этой страницей