2011-06-10 102 views
0

我想用这种方法面板绘制:C#绘制面板中

protected override void InitOutput(object output) 
     { 
      if (output is Control) 
      { 
       Control c = (Control)output; 
       g.FillRectangle(hb, 7, 10, 30 - 19, 5); 
       ... 
      } 

用文本我可以这样做:

protected override void InitOutput(object output) 
     { 
      if (output is Control) 
      { 
       Control c = (Control)output; 
       lbl.Name = "lbl"; 
       lbl.Size = new System.Drawing.Size(10, 10); 
       lbl.TabIndex = 5; 
       lbl.Text = "test"; 

       panel.Location = new System.Drawing.Point(1, 1); 
       panel.Name = "panelSys"; 
       panel.Size = new System.Drawing.Size(20, 20); 
       panel.TabIndex = 5; 
       panel.Controls.Add(lbl); 
       c.Controls.Add(panelSys); 
      } 

希望你能帮助我 感谢

+0

g从哪里来的InitOutput方法?在绘画事件之外拿着一个图形对象可能不是最好的格式。尝试在控件的Paint事件中完成所有绘画。 – LarsTech 2011-06-10 18:21:49

回答

1

我不知道为什么你需要InitOtuput功能,但如果你想从中得出你可以做这样的:

private void InitOutput(object output) 
{ 
    if (output is Control) 
    { 
     Control c = (Control)output; 
     c.Paint += new System.Windows.Forms.PaintEventHandler(c_Paint); 
     // Invalidate needed to rise paint event 
     c.Invalidate(); 
    } 
} 
private void c_Paint(object sender, PaintEventArgs e) 
{ 
    SolidBrush hb = new SolidBrush(Color.Red); 
    e.Graphics.FillRectangle(hb, 7, 10, 30 - 19, 5); 
    e.Graphics.DrawString("test", DefaultFont, hb, new PointF(50, 50)); 
} 

Additionaly你不需要使用标签来绘制文本U可以使用Graphics.DrawSting绘制它

0

绘制到控件应该通过向控件添加一个'Paint'事件并在该事件中绘制。你将通过EventArgs得到一个'Graphics'对象。 然后,您可以使用控件的“无效”方法强制绘制控件。此外,Windows有时会自己调用Paint事件。

或者,您也可以使用'Bitmap.Create'创建一个normale。绘制到,然后将其分配给Picture控件。

+0

嘿,我必须创建一个绘画事件,并在那里是绘图代码(例如:g.DrawLine(...)),并在上面的绘制方法形式有无效? – inqui 2011-06-10 17:31:00

+0

当我回到我的Visual Studio PC时,我会为你写一些示例代码,但它会和Archibald的代码一样。 – 2011-06-10 19:44:26