Как передвигать панель вместе с label?

401
20 апреля 2017, 14:08

На форму вешаю компонент "Panel" кидаю на панель label.

Для передвижения панели без бордера кидаю код в MouseDown:

private void Panel1_MouseDown(object sender, MouseEventArgs e)
{
   Panel1.Capture = false;
   var m = Message.Create(Handle, 0xa1, new IntPtr(2), IntPtr.Zero);
   WndProc(ref m);
}

Так передвигается просто панель, а как сделать чтобы ещё при зажатие на label панель передвигалась?

Answer 1

Есть два варианта.

  1. Все дочерние контролы на этой панели подписать на событие и аналогично передвигать панель.

  2. Сделать Label (и все другие используемые контролы) на этой панели прозрачным для кликов.

    public class HitTransparentLabel : Label
    {
        protected override void WndProc(ref Message m)
        {
            const int WM_NCHITTEST = 0x0084;
            const int HTTRANSPARENT = -1;
            if (m.Msg == WM_NCHITTEST)
                m.Result = (IntPtr)HTTRANSPARENT;
            else
                base.WndProc(ref m);
        }
    }
    
READ ALSO
Как задать дочернюю переменную?

Как задать дочернюю переменную?

Я не так давно начал изучать C#, и пока что, к сожалению, не знаю всех тонкостей и возможностейПринципиально изучаю методом проб и ошибок, ну и иногда...

194
Не отображаются данные в dataGridView

Не отображаются данные в dataGridView

Используется C# MySql

539
Запуск проекта под администратором

Запуск проекта под администратором

Добрый день! как я могу запустить свой проект на другом компьютере в одинаковом со мной домене с моими логином и паролемСуть проблемы: написал...

185
Ввод даты в консольном приложении

Ввод даты в консольном приложении

Пишу программу в С#, которая предполагает простое анкетирование пользователей с последующем выводом данных

194