C# 绘制图形时遇到的问题

C# 绘制图形时遇到的问题,c#,gdi+,C#,Gdi+,我在简单的表单上绘制图形时遇到问题。我的代码编译并运行,但预期的红色框不会显示 我正在Visual Studio 2010中使用完整的.NET Framework 4 出了什么问题,如何解决 private void Form1_Load(object sender, EventArgs e) { System.Drawing.Graphics graphicsObj; graphicsObj = this.CreateGraphics(); Pen myPen = ne

我在简单的表单上绘制图形时遇到问题。我的代码编译并运行,但预期的红色框不会显示

我正在Visual Studio 2010中使用完整的.NET Framework 4

出了什么问题,如何解决

private void Form1_Load(object sender, EventArgs e)
{
    System.Drawing.Graphics graphicsObj;
    graphicsObj = this.CreateGraphics();
    Pen myPen = new Pen(System.Drawing.Color.Red, 5);
    Rectangle myRectangle = new Rectangle(20, 20, 250, 200);
    graphicsObj.DrawRectangle(myPen, myRectangle);
}
编辑:工作但代码速度慢

    void BatteryPaint(object sender, EventArgs e)
    {
        TabPage page = (TabPage)sender;
        if (!controlsSetup)
        {
            populateBatteryTab(page);
            controlsSetup = true;
        }
        //Create the items
        Rectangle busBar = new Rectangle();
        Rectangle batPack = new Rectangle();
        Rectangle pack1Outline = new Rectangle();
        Rectangle pack2Outline = new Rectangle();
        Rectangle pack3Outline = new Rectangle();
        Rectangle pack4Outline = new Rectangle();

        Color GreenZone = Color.FromArgb(150, 0, 255, 0);
        Color YellowZone = Color.FromArgb(150, 255, 255, 0);
        Color RedZone = Color.FromArgb(150, 255, 0, 0);
        Color greyZone = Color.FromArgb(200, 200, 200, 200);

        Graphics graphicControl = page.CreateGraphics();

        SolidBrush busBarBrush = new SolidBrush(Color.Peru);
        SolidBrush GreenBrush = new SolidBrush(GreenZone);
        SolidBrush GreyBrush = new SolidBrush(greyZone);

        Pen packPen = new Pen(Color.LightGray, (float)8);


        Point busBarTop = new Point(page.Width / 64, page.Height / 32);
        Point busBarBottom = new Point(busBarTop.X, busBarTop.Y + page.Height / 6);

        //change the properties
        //Bus Bar Top
        busBar.Width = page.Width*153 / 640;
        busBar.Height = page.Height / 64;
        busBar.Location = busBarTop;
        graphicControl.FillRectangle(busBarBrush, busBar);

        //Bus Bar Bottom
        busBar.Location = busBarBottom;
        graphicControl.FillRectangle(busBarBrush, busBar);



        //Pack 1
        batPack.Width = page.Width / 20;
        batPack.Height = (busBarBottom.Y + busBar.Height) - busBarTop.Y;
        batPack.Location = new Point(busBarTop.X + page.Width / packSpacingMultiplier, busBarTop.Y);
        pack1Outline.Width = batOutlineWidth;
        graphicControl.FillRectangle(GreenBrush, batPack);
        pack1Outline.Height = (3 * (Battery.Width + page.Width / batSpacingMultiplier) + page.Width / batSpacingMultiplier);
        pack1Outline.Location = new Point(BatPack1.X - (page.Width / batSpacingMultiplier), BatPack1.Y - (page.Width / batSpacingMultiplier));
        for(int numBats = 0; numBats < 30; numBats++)
        {
            Battery.Location = new Point(BatPack1.X + ((numBats % 10) * (Battery.Width + page.Width / batSpacingMultiplier)), BatPack1.Y + ((numBats / 10) * (Battery.Width + page.Width / batSpacingMultiplier)));
            graphicControl.FillEllipse(new SolidBrush(BatteryZone(0.00)), Battery);
        }

        //Pack 2
        batPack.Location = new Point(batPack.Location.X + batPack.Width + page.Width / packSpacingMultiplier, batPack.Location.Y);
        graphicControl.FillRectangle(GreenBrush, batPack);
        pack2Outline.Width = batOutlineWidth;
        pack2Outline.Height = (3 * (Battery.Width + page.Width / batSpacingMultiplier) + page.Width / batSpacingMultiplier);
        pack2Outline.Location = new Point(BatPack2.X - (page.Width / batSpacingMultiplier), BatPack2.Y - (page.Width / batSpacingMultiplier));
        for(int numBats = 0; numBats < 30; numBats++)
        {
            Battery.Location = new Point(BatPack2.X + ((numBats % 10) * (Battery.Width + page.Width / batSpacingMultiplier)), BatPack2.Y + ((numBats / 10) * (Battery.Width + page.Width / batSpacingMultiplier)));
            graphicControl.FillEllipse(new SolidBrush(BatteryZone(0.00)), Battery);
        }

        //Pack 3
        batPack.Location = new Point(batPack.Location.X + batPack.Width + page.Width / packSpacingMultiplier, batPack.Location.Y);
        graphicControl.FillRectangle(GreenBrush, batPack);
        pack3Outline.Width = batOutlineWidth;
        pack3Outline.Height = (3 * (Battery.Width + page.Width / batSpacingMultiplier) + page.Width / batSpacingMultiplier);
        pack3Outline.Location = new Point(BatPack3.X - (page.Width / batSpacingMultiplier), BatPack3.Y - (page.Width / batSpacingMultiplier));
        for(int numBats = 0; numBats < 30; numBats++)
        {
            Battery.Location = new Point(BatPack3.X + ((numBats % 10) * (Battery.Width + page.Width / batSpacingMultiplier)), BatPack3.Y + ((numBats / 10) * (Battery.Width + page.Width / batSpacingMultiplier)));
            graphicControl.FillEllipse(new SolidBrush(BatteryZone(0.00)), Battery);
        }

        //Pack 4
        batPack.Location = new Point(batPack.Location.X + batPack.Width + page.Width / packSpacingMultiplier, batPack.Location.Y);
        graphicControl.FillRectangle(GreyBrush, batPack);
        pack4Outline.Width = batOutlineWidth;
        pack4Outline.Height = (3 * (Battery.Width + page.Width / batSpacingMultiplier) + page.Width / batSpacingMultiplier);
        pack4Outline.Location = new Point(BatPack4.X - (page.Width / batSpacingMultiplier), BatPack4.Y - (page.Width / batSpacingMultiplier));
        for(int numBats = 0; numBats < 30; numBats++)
        {
            Battery.Location = new Point(BatPack4.X + ((numBats % 10) * (Battery.Width + page.Width / batSpacingMultiplier)), BatPack4.Y + ((numBats / 10) * (Battery.Width + page.Width / batSpacingMultiplier)));
            graphicControl.FillEllipse(new SolidBrush(BatteryZone(0.00)), Battery);
        }


        //add the controls
        graphicControl.DrawRectangle(packPen, pack1Outline);
        graphicControl.DrawRectangle(packPen, pack2Outline);
        graphicControl.DrawRectangle(packPen, pack3Outline);
        graphicControl.DrawRectangle(packPen, pack4Outline);
    }
void BatteryPaint(对象发送方,事件参数e)
{
TabPage=(TabPage)发送方;
如果(!controlsSetup)
{
populateBatteryTab(第页);
controlsSetup=true;
}
//创建项目
矩形母线=新矩形();
矩形电池组=新矩形();
矩形pack1Outline=新矩形();
矩形pack2Outline=新矩形();
矩形pack3Outline=新矩形();
矩形pack4Outline=新矩形();
颜色绿区=Color.FromArgb(150,0,255,0);
Color YellowZone=Color.FromArgb(150,255,255,0);
Color RedZone=Color.FromArgb(150,255,0,0);
Color greyZone=Color.FromArgb(200200200200200);
Graphics Graphics Control=page.CreateGraphics();
SolidBrush busBarBrush=新的SolidBrush(颜色:秘鲁);
SolidBrush绿刷=新的SolidBrush(绿区);
SolidBrush灰刷=新的SolidBrush(灰刷);
钢笔包装纸=新钢笔(颜色为浅灰色,(浮动)8);
点busBarTop=新点(第页宽度/64,第页高度/32);
点busBarBottom=新点(busBarTop.X,busBarTop.Y+页面高度/6);
//更改属性
//母线顶部
母线宽度=页宽*153/640;
母线高度=第页高度/64;
母线位置=母线端;
图形控制。填充矩形(母线槽、母线);
//母线底部
母线位置=母线槽;
图形控制。填充矩形(母线槽、母线);
//包1
蝙蝠包宽度=页宽/20;
蝙蝠包高度=(busBarBottom.Y+Bush.Height)-busBarTop.Y;
batPack.Location=新点(busBarTop.X+page.Width/packPacking乘数,busBarTop.Y);
pack1Outline.Width=batOutlineWidth;
graphicControl.FillRectangle(绿色画笔、蝙蝠包);
pack1轮廓高度=(3*(Battery.Width+page.Width/batSpacingMultiplier)+page.Width/batSpacingMultiplier);
pack1 outline.Location=新点(BatPack1.X-(page.Width/batSpacingMultiplier),BatPack1.Y-(page.Width/batSpacingMultiplier));
用于(int numBats=0;numBats<30;numBats++)
{
Battery.Location=新点(BatPack1.X+((numBats%10)*(Battery.Width+page.Width/batSpacingMultiplier)),BatPack1.Y+((numBats/10)*(Battery.Width+page.Width/batSpacingMultiplier));
graphicControl.FillEllipse(新的SolidBrush(BatteryOne(0.00)),电池);
}
//包2
batPack.Location=新点(batPack.Location.X+batPack.Width+page.Width/packPacking乘数,batPack.Location.Y);
graphicControl.FillRectangle(绿色画笔、蝙蝠包);
pack2Outline.Width=batOutlineWidth;
pack2Outline.Height=(3*(Battery.Width+page.Width/batSpacingMultiplier)+page.Width/batSpacingMultiplier);
pack2 outline.Location=新点(BatPack2.X-(page.Width/batSpacingMultiplier),BatPack2.Y-(page.Width/batSpacingMultiplier));
用于(int numBats=0;numBats<30;numBats++)
{
Battery.Location=新点(BatPack2.X+((numBats%10)*(baterty.Width+page.Width/batSpacingMultiplier)),BatPack2.Y+((numBats/10)*(baterty.Width+page.Width/batSpacingMultiplier));
graphicControl.FillEllipse(新的SolidBrush(BatteryOne(0.00)),电池);
}
//包3
batPack.Location=新点(batPack.Location.X+batPack.Width+page.Width/packPacking乘数,batPack.Location.Y);
graphicControl.FillRectangle(绿色画笔、蝙蝠包);
pack3Outline.Width=batOutlineWidth;
pack3轮廓高度=(3*(Battery.Width+page.Width/batSpacingMultiplier)+page.Width/batSpacingMultiplier);
pack3 outline.Location=新点(BatPack3.X-(page.Width/batSpacingMultiplier),BatPack3.Y-(page.Width/batSpacingMultiplier));
用于(int numBats=0;numBats<30;numBats++)
{
Battery.Location=新点(BatPack3.X+((numBats%10)*(Battery.Width+page.Width/batSpacingMultiplier)),BatPack3.Y+((numBats/10)*(Battery.Width+page.Width/batSpacingMultiplier));
graphicControl.FillEllipse(新的SolidBrush(BatteryOne(0.00)),电池);
}
//包4
batPack.Location=新点(batPack.Location.X+batPack.Width+page.Width/packPacking乘数,batPack.Location.Y);
graphicControl.FillRectangle(灰褐色、蝙蝠包);
pack4Outline.Width=batOutlineWidth;
pack4轮廓高度=(3*(Battery.Width+page.Width/batSpacingMultiplier)+page.Width/batSpacingMultiplier);
pack4Outline.Location=新点(BatPack4.X-(page.Width/batSpacingMultiplier),BatPack4.Y-(page.Width/batSpacingMultiplier));
用于(int numBats=0;numBats<30;numBats++)
{
Battery.Location=新点(BatPack4.X+((numBats%10)*(baterty.Width+page.Width/batSpacingMultiplier)),BatPack4.Y+((numBats/10)*(baterty.Width+page.Width/batSpacingMultiplier));
graphicControl.FillEllipse(新的SolidBrush(BatteryOne(0.00)),电池);
}
//添加控件
graphicControl.DrawRectangle(包装箱、包装箱轮廓);
graphicControl.DrawRectangle(packPen、pack2Outline);
graphicControl.DrawRectangle(packPen、pack3Outline);
graphicControl.DrawRectangle(packPen、pack4Outline);
}

您不应该在
加载
事件中进行绘图,该事件甚至在表单第一次显示之前触发。窗户正在重新粉刷
private void Form1_Paint(object sender, PaintEventArgs e)
{
    System.Drawing.Graphics graphicsObj = e.Graphics;
    Pen myPen = new Pen(System.Drawing.Color.Red, 5);
    Rectangle myRectangle = new Rectangle(20, 20, 250, 200);
    graphicsObj.DrawRectangle(myPen, myRectangle);
}
protected override void OnPaint(PaintEventArgs e)
{
    Graphics g = e.Graphics;
    Pen myPen = new Pen(Color.Red, 5);
    g.DrawRectangle(myPen, 20, 20, 250, 200);
}