簡體   English   中英

在 c# winform 中設置面板邊框厚度

[英]set panel border thickness in c# winform

我進行了搜索,結果無法解決我的情況。 實際上我有一個面板,我希望面板的邊框比 Windows 給出的邊框更厚。 我需要邊框樣式

BorderStyle.FixedSingle

更厚。。謝謝之前

您必須使用一些自定義繪畫來自定義您自己的Panel

//Paint event handler for your Panel
private void panel1_Paint(object sender, PaintEventArgs e){ 
  if(panel1.BorderStyle == BorderStyle.FixedSingle){
     int thickness = 3;//it's up to you
     int halfThickness = thickness/2;
     using(Pen p = new Pen(Color.Black,thickness)){
       e.Graphics.DrawRectangle(p, new Rectangle(halfThickness,
                                                 halfThickness,
                                                 panel1.ClientSize.Width-thickness,
                                                 panel1.ClientSize.Height-thickness));
     }
  }
}

這是厚度為30的面板的屏幕截圖:

邊框厚度為 30 的面板的屏幕截圖

注意Rectangle的大小是在繪制線的中間計算的,假設您繪制的線的粗細為4 ,則外部偏移量為 2 ,內部偏移量為 2 。

我沒有測試Hans先生給出的案例,要修復它,只需像這樣為您的panel1處理SizeChanged事件:

private void panel1_SizeChanged(object sender, EventArgs e){
   panel1.Invalidate();
}

您還可以使用Reflection設置ResizeRedraw = true而不必像上面這樣處理SizeChanged事件:

typeof(Control).GetProperty("ResizeRedraw", BindingFlags.NonPublic | BindingFlags.Instance)
               .SetValue(panel1, true, null);

調整大小時您可能會看到一些閃爍,只需添加此代碼即可為您的 panel1 啟用 doubleBuffered:

typeof(Panel).GetProperty("DoubleBuffered",
                          BindingFlags.NonPublic | BindingFlags.Instance)
             .SetValue(panel1,true,null);

要創建帶邊框的面板,我將面板放置在面板中。 “邊框面板”具有所需邊框顏色和填充的背景顏色,而padding大小是所需邊框thickness

這種解決方案的優點是沒有閃爍,也沒有調整大小的問題。

在此處輸入圖片說明

在此處輸入圖片說明

這可以非常簡單地在設計器中或在代碼后面創建。

后面的代碼:

Panel panel_Border = new Panel();
Panel panel_Embedded = new Panel();

panel_Border.BackColor = Color.Green;
panel_Border.Controls.Add(panel_Embedded);
// this is the border thickness
panel_Border.Padding = new System.Windows.Forms.Padding(6);
panel_Border.Size = new System.Drawing.Size(200, 100);
        
panel_Embedded.BackColor = System.Drawing.SystemColors.Control;
panel_Embedded.Dock = System.Windows.Forms.DockStyle.Fill;

創建一個新的、稍大的面板並將背景顏色設置為黑色(或其他顏色)。 將原始面板放在較大的面板內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM