C#在面板中绘图

时间:2011-06-10 16:33:12

标签: c# winforms drawing label

我想用这种方法绘制一个面板:

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);
            }
希望你能帮助我 感谢

2 个答案:

答案 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控件。