2014-01-24 49 views
1

我有一個沒有邊框和標題欄的自定義窗體。我使用面板(寬度= 1px)來模擬邊框。所有的工作都很好,除了左邊界和上邊界。當我嘗試減小窗體的大小(通過拖動它到右側),它工作正常,但當窗體的大小== this.MinimumSize。它開始移動到右側。我只想改變尺寸,但不要移動... 這裏是我的左邊的代碼。我如何修改它只更改大小?通過邊框自定義窗體大小調整

private void borderW_MouseDown(object sender, MouseEventArgs e) 
    { 
     Active = true; 

    } 


    private void borderW_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (Active) 
     { 
      if (e.X < 0) 
      { 
       this.Location = new Point(this.Left + e.X, this.Top); 
       this.Size = new Size(this.Width - e.X, this.Height); 
      } 
      else 
      { 
       this.Size = new Size(this.Width - e.X, this.Height); 
       this.Location = new Point(this.Left + e.X, this.Top); 
      } 
     } 
    } 

    private void borderW_MouseUp(object sender, MouseEventArgs e) 
    { 
     Active = false; 
    } 

回答

2

將此功能粘貼到您的表單中。這是一種可以防止表單移動的覆蓋。

但是,您必須使用使得它只有活動的情況適合它,只要你的表格的左邊是一樣的form.left + form.width(從我從你的問題理解。

protected override void WndProc(ref Message m) 
{ 
const int WM_NCLBUTTONDOWN = 161; 
const int WM_SYSCOMMAND = 274; 
const int HTCAPTION = 2; 
const int SC_MOVE = 61456; 
if ((m.Msg == WM_SYSCOMMAND) && (m.WParam.ToInt32() == SC_MOVE)) 
return; 
if ((m.Msg == WM_NCLBUTTONDOWN) && (m.WParam.ToInt32() == HTCAPTION) 
) 
return; 
base.WndProc(ref m); 
} 
+0

不,FormStartPostion如何影響表單位置,何時更改位置(this.Location = new Point(this.Left + eX,this.Top);) – Udjen

+1

你說得對,開始位置只在表單加載時纔有影響。這個答案:http://bytes.com/topic/c-sharp/answers/279387-how-do-i-prevent-form-moving指向一個解決方案。如果你的form.left是eqal form.left +表單.width,你可以踢這個winproc來防止移動窗口。 –

+0

我該如何使用這個?我在哪裏必須粘貼它? – Udjen

相關問題