2017-07-06 77 views
1

首先,對於上下文,我是C#的初學者,我正在玩弄表單。如何在Windows窗體中的面板中繪製矩形時刪除邊距?

我試圖畫一個矩形到一個窗體(「Form1」)上的面板(「myPanel」),但有一個邊距或某種填充,我無法刪除。

我已經將「myPanel」的「padding」和「margin」屬性設置爲0,但沒有成功。

的代碼是:

namespace Forms___Playing_with_Graphics 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void myPanel_Paint(object sender, PaintEventArgs e) 
     { 

      // rectangle, slightly smaller than size of panel 
      int topLeftx = myPanel.Location.X; 
      int topLefty = myPanel.Location.Y; 
      int width = myPanel.Size.Width - 5; 
      int height = myPanel.Size.Height - 5; 

      Graphics g = e.Graphics; 

      Rectangle r = new Rectangle(topLeftx, topLefty, width, height); 
      Pen p = new Pen(Color.Black, 5F); 

      g.DrawRectangle(p, r); 
     } 
    } 
} 

結果的截圖:

Panel with mysterious padding

如何刪除矩形和裏面左邊和頂部邊緣之間的填充?我天真的期望是矩形從最左上角開始。

任何幫助將不勝感激。

+3

面板的內部有自己座標,所以topLeftx = 0,topLefty = 0。 – LarsTech

+2

不要使用'myPanel.Location',繪圖應該在'myPanel.ClientRectangle'內。 –

回答

1

左上角的座標爲x = 0,y = 0。但是您還應該記住矩形邊框的寬度。如果你想矩形邊框正好適合其包含它的面板,那麼你應該一步半邊框寬度內:

private void myPanel_Paint(object sender, PaintEventArgs e) 
{ 
    float borderWidth = 5f; 
    float topLeftx = borderWidth/2; 
    float topLefty = borderWidth/2; 
    float width = panel2.ClientSize.Width - borderWidth; 
    float height = panel2.ClientSize.Height - borderWidth; 

    Graphics g = e.Graphics; 
    Pen pen = new Pen(Color.Black, borderWidth); 
    g.DrawRectangle(pen, topLeftx, topLefty, width, height); 
} 

結果:

enter image description here

+0

'plotWindow.ClientSize' – LarsTech

+0

@LarsTech是另一個控件,與'myPanel無關' –

+0

然後我假設OP希望'myPanel.ClientSi ze'。目前還不清楚plotWindow在哪裏發揮作用。 – LarsTech