2015-08-26 2 views
0

Я пытаюсь создать ярлык, который центрирован в форме, которая требует от меня использовать label.dock = dockStyle.Fill. Поэтому я попытался реализовать код, который означает, что когда я удерживаю метку, я могу перемещать форму. Это то, что я до сих пор:перемещение формы путем размещения на этикетке

private void messageIndicator_MouseUp(object sender, MouseEventArgs e) 
    { 
     window.AllowTransparency = true; 
     window.TransparencyKey = window.TransparencyKey = window.BackColor; 
     isDragging = false; 
    } 

    void messageIndicator_MouseHover(object sender, EventArgs e) 
    { 
     window.AllowTransparency = false; 
    } 

    private void messageIndicator_MouseDown(object sender, MouseEventArgs e) 
    { 
     // Set the drag mode 
     isDragging = true; 

     // Get the initial location 
     lastLocation = e.Location; 
    } 

    private void messageIndicator_MouseMove(object sender, MouseEventArgs e) 
    { 
     // Only drag if in correct state (mouse down) 
     if (isDragging) 
     { 
      // The parameter sender is the form object 
      Form f = (Form)sender; 

      // Calculate the new location and update the form 
      f.Location = new Point((f.Location.X - lastLocation.X) + e.X, (f.Location.Y - lastLocation.Y) + e.Y); 
      f.Update(); 
     } 
    } 

messageIndicator быть метка на форме. Он сбой при выполнении Form f = (form)sender. Помощь была бы оценена :)

+0

Нет, отправитель должен быть 'label'. Какое исключение он поднимает? – Shaharyar

+0

Необработанное исключение типа «System.InvalidCastException» произошло в Pear GIS.exe Дополнительная информация: Невозможно передать объект типа «System.Windows.Forms.Label» для ввода «System.Windows.Forms.Form». – Khal786

ответ

0

Попробуйте это,

public const int WM_NCLBUTTONDOWN = 0xA1; 
public const int HT_CAPTION = 0x2; 

[DllImportAttribute("user32.dll")] 
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); 
[DllImportAttribute("user32.dll")] 
public static extern bool ReleaseCapture(); 

private void YourLabel_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) 
{  
    if (e.Button == MouseButtons.Left) 
    { 
     ReleaseCapture(); 
     SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); 
    } 
} 

Источник: Article

+0

Ошибка Имя «Handle» не существует в текущем контексте – Khal786

+0

Ошибка со стороны – Khal786

+0

@ Khal786 Извините, что очень поздно, если вы еще не решили эту проблему, пожалуйста, покажите свой код. –

Смежные вопросы