3

這可能聽起來像一個奇怪的問題,但我有C#Winform,我將FormBorderStyle設置爲無。到目前爲止,一切都很好,但我想知道是否有一種方法可以在我的表單上添加像1px的邊框?我知道我可以通過創建自己的形象來做到這一點,但我想知道是否有更自然的做法。 感謝無邊界Winform的1px邊框

+3

你可以把一個'Panel'形式和Dock.Fill它,然後給一個邊界(它有一個1px的黑色邊境)。 –

回答

6

我認爲使用圖像,或創建不必要的控件,可以很容易地使用GDI +可浪費資源來繪製。

我認爲最簡單的辦法是壓倒一切的表單的OnPaint方法和繪製邊框自己:

protected override void OnPaint(PaintEventArgs e) 
{ 
    e.Graphics.DrawRectangle(Pens.Black, this.Bounds); 
} 

當然,你也可以用自己喜歡的顏色和寬度使用自己Pen

+0

你的方法是完美的! 你會碰巧知道如何重新繪製窗體resize上的矩形? –

+0

只需將'Form'的'ResizeRedraw'屬性設置爲'true'即可。這會導致它在每次調整大小時都失效。 – Rotem

+9

我發現'e.Graphics.DrawRectangle'有點碰到並錯過了,並且使用了'ControlPaint.DrawBorder(e。圖形,ClientRectangle,Color.Black,ButtonBorderStyle.Solid);'不需要重新定位就很好。 – Lankymart

0

有沒有更多的自然非天然的方式來做到這一點。這取決於你想要什麼。

如果您在表單上放置背景圖像,則必須考慮一個事實,即爲了能夠支持可調整大小,必須具有可調整大小的背景圖像。

如果單純上有PenBrush背景畫,還可以支持可調整大小的形式,但你必須,如果你想要做一些很酷的東西更多的工作,而不是用圖片更容易。

您可以在窗體中嵌入一些控件,並用顏色表示邊框的感覺。像控制一樣,您可以使用Panel,正如評論中所建議的那樣,可以使用GroupBox來創建較薄的broder或其他內容。

1

只需在表單中添加Panel(並將其設置爲邊框),如何?

1

感謝您的建議,我決定創建4個1px的標籤,並在每邊的邊上折騰。那樣: 1.他們正在考慮自己的業務,而不是佔用整個中間,如果你使用一個groupbox或面板。 2.您可以選擇更改邊框顏色。

1

在窗體中使用填充1; 1; 1; 1併爲窗體設置背景顏色,並將窗格放置到窗體中。將白色或其他正常背景色設置爲面板。並在父控制器中設置碼頭。表單的背景顏色將用作邊框。

+0

這是最簡單的最簡單的解決方案。 –

0

我創建了這個方法,所以你可以很容易的設置邊框的位置,顏色和厚度。

private void customBackgroundPainter(PaintEventArgs e, int linethickness = 2, Color linecolor = new Color(), int offsetborder = 6) 
{ 
    Rectangle rect = new Rectangle(offsetborder, offsetborder, this.ClientSize.Width - (offsetborder * 2), this.ClientSize.Height - (offsetborder * 2)); 

    Pen pen = new Pen(new Color()); 
    pen.Width = linethickness; 
    if (linecolor != new Color()) 
    { 
     pen.Color = linecolor; 
    } 
    else 
    { 
     pen.Color = Color.Black; 
    } 

    e.Graphics.DrawRectangle(pen, rect); 
} 

你可以在OnPaintBackground使用它喜歡這樣:

protected override void OnPaintBackground(PaintEventArgs e) 
{ 
    base.OnPaintBackground(e); 
    customBackgroundPainter(
    e, 
    linethickness: 3, 
    linecolor: Color.DarkOrange, 
    offsetborder: 5 
    ); 
}