2013-05-28 41 views
1

我有這個代碼拖動面板,但它沒有做的事情。 我必須選擇,如果我只是拖動&下拉或調整大小。 我覺得我的代碼在表單加載時出現錯誤。 無論如何,我在這裏有5個標籤,panel1上名爲label1,label2,label3,label4,label5的面板。如何在運行時在面板上拖放和調整標籤大小? C#,winForms

private void form_Load(object sender, EventArgs e) 
    { 
      //for drag and drop   
      //this.panel1.AllowDrop = true; // or Allow drop in the panel. 
      foreach (Control c in this.panel1.Controls) 
      { 
       c.MouseDown += new MouseEventHandler(c_MouseDown); 
      } 
      this.panel1.DragOver += new DragEventHandler(panel1_DragOver); 
      this.panel1.DragDrop += new DragEventHandler(panel1_DragDrop); 

      //end of drag and drop 
    } 

    void c_MouseDown(object sender, MouseEventArgs e) 
    { 
     Control c = sender as Control;      
      c.DoDragDrop(c, DragDropEffects.Move); 
    } 

    void panel1_DragDrop(object sender, DragEventArgs e) 
    { 

     Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control; 
     lblResizeAmtWord.Visible = false; 
     if (c != null) 
     { 
      c.Location = this.panel1.PointToClient(new Point(e.X, e.Y)); 
      //this.panel1.Controls.Add(c); //disable if already on the panel 
     } 
    } 

    void panel1_DragOver(object sender, DragEventArgs e) 
    { 
     e.Effect = DragDropEffects.Move; 
    } 
+0

D + D **總是**需要實現DragEnter事件。如果拖放對控件的某些部分有選擇性,則只能使用DragOver。使用面板的事件而不使用面板上的控件會使用戶難以選擇放置目標。 –

+0

那麼,我需要在我的代碼中更改什麼? – ViFer

+0

無論如何,我自己解決它。對於那些想要知道它如此簡單的人。 :D – ViFer

回答

2

我用鼠標按下,起來走動我想移動控制的事件。假設我的控件名稱是ctrlToMove。

private Point _Offset = Point.Empty; 
    private void ctrlToMove_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Left) 
     { 
      _Offset = new Point(e.X, e.Y); 
     } 
    } 

    private void ctrlToMove_MouseUp(object sender, MouseEventArgs e) 
    { 
     _Offset = Point.Empty; 
    } 

    private void ctrlToMove_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (_Offset != Point.Empty) 
     { 
      Point newlocation = ctrlToMove.Location; 
      newlocation.X += e.X - _Offset.X; 
      newlocation.Y += e.Y - _Offset.Y; 
      ctrlToMove.Location = newlocation; 
     } 
    } 
相關問題