我想用这种方法绘制一个面板:
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 :(得分: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));
}
另外你不需要使用标签来绘制文字你可以使用Graphics.DrawSting绘制它
答案 1 :(得分:0)
绘制到控件应该通过向控件添加“Paint”事件然后在此事件中绘制来完成。您将通过EventArgs获得“Graphics”对象。 然后,您可以使用控件的“无效”方法强制绘制控件。 Windows也会自己调用Paint事件。
或者你也可以使用'Bitmap.Create'创建一个normale。绘制到那个然后将其分配给Picture控件。