2010-04-10 233 views
3

是否可以更改WinForm邊框的樣式?我知道如果刪除了邊框,它將失去調整程序大小的功能。因此有沒有辦法改變它的風格,但保持它的可調整大小?更改WinForm邊框的樣式?

回答

0

我不認爲有一個直接的方式來做到這一點。

但是,您可以將窗體邊框樣式設置爲無。 並在您的表單中實施調整大小(我認爲它不是很難)

+0

調整大小可能不平凡將鼠標移動到窗體的邊緣。 – anonymous 2010-04-10 13:09:11

+0

我可以把面板放在我的表格上,就像上面的圖片一樣。然後,當有人調整面板大小時,是否調整了我的表單大小?我可以將面板錨定到頂部,底部,左側和右側,使其始終與表單的大小相同。你知道我可以用來做這個的任何代碼嗎? – 2010-04-10 15:43:24

+0

@MrRoys - 改變光標將是人類可以做的最容易的事情。 – SysAdmin 2010-04-10 16:56:32

0
string position = String.Empty; 
Point mouseDownPosition = new Point(); 

private void myForm_MouseDown(object sender, MouseEventArgs e) 
{ 
    position = (e.X == 0) ? "Left" : ((e.X == myForm.Width) ? "Right" : String.Empty; 
    position += (e.Y == 0) ? "Top" : ((e.Y == myForm.Height) ? "Bottom" : String.Empty; 
    if(position != String.Empty) 
    { 
     mouseDownPosition = e.Location; 
    } 
} 

private void myForm_MouseMove(object sender, MouseEventArgs e) 
{ 
    if(position != String.Empty) 
    {   
     Point movementOffset = new Point(e.Location.X - mouseDownPosition.X, e.Location.Y - mouseDownPosition.Y); 
     Switch(position) 
     { 
      Case "LeftTop": 
       myForm.Location.X += movementOffset.X; 
       myForm.Location.Y += movementOffset.Y; 
       myForm.Width -= movementOffset.X; 
       myForm.Height -= movementOffset.Y; 
      Case "Left": 
       myForm.Location.X += movementOffset.X; 
       myForm.Width -= movementOffset.X; 
      // Complete the remaining please :) 
     } 
    } 
} 

private void myForm_MouseUp(object sender, MouseEventArgs e) 
{ 
    position = String.Empty; 
} 

PS:還沒有測試它

希望你已經設置FormBorderStyle爲None

1

先寫這在InitializeComponent():

public const int WM_NCLBUTTONDOWN = 0xA1; 
public const int HT_RIGHT = 0xB; 

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 

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

this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Resize_Form); 

然後,使用類似於此的方法。在這種情況下,我的方式是從右側只可調整大小的,但應該很容易讓來自任何方面的調整:因爲遊標不再對大小光標變化,當你移動

private void Resize_Form(object sender, MouseEventArgs e) 
    { 
     if ((e.Button == MouseButtons.Left) && (MousePosition.X >= this.Location.X + formWidth - 10)) 
     { 
      System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.SizeWE; 
      ReleaseCapture(); 
      SendMessage(Handle, WM_NCLBUTTONDOWN, HT_RIGHT, 0); 
      formWidth = this.Width; 
     } 
    }