繁体   English   中英

画一个矩形

[英]Draw a rectangle

出于某种原因,当我运行程序时,矩形不会显示。 但代码运行没有任何错误。 我究竟做错了什么?

(我使用csc.exe编译代码,我用notepad ++编写)

绘图代码:

Graphics g = myform.CreateGraphics();
Pen selPen = new Pen(Color.Blue);
g.DrawRectangle(selPen, 10, 10, 50, 50);
g.Dispose();

完整代码:

using System;
using System.Windows.Forms;
using System.Drawing;

public class Hello1
{

    public static void Main()
    {

        Form myform = new Form();

        myform.Text = "Main Window";
        myform.Size = new Size(640, 400);
        myform.FormBorderStyle = FormBorderStyle.FixedDialog;
        myform.StartPosition = FormStartPosition.CenterScreen;


        Graphics g = myform.CreateGraphics();
        Pen selPen = new Pen(Color.Blue);
        g.DrawRectangle(selPen, 10, 10, 50, 50);
        g.Dispose();

        myform.ShowDialog();

    }

}

您可以在Form.OnPaint方法覆盖中或仅在Form.Paint事件处理程序中绘制表单。
所以你需要创建一个从Form继承的新类:

public class MyForm : Form
{
}

将以下代码添加到您的表单:

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);

    Graphics g = e.Graphics;
    using (Pen selPen = new Pen(Color.Blue))
    {
        g.DrawRectangle(selPen, 10, 10, 50, 50);
    }
}

或者,您可以按如下方式订阅myform.Paint事件:

myform.Paint += (o, e) => {
    Graphics g = e.Graphics;
    using (Pen selPen = new Pen(Color.Blue))
    {
        g.DrawRectangle(selPen, 10, 10, 50, 50);
    }
};

这是因为表单在显示时(在您调用ShowDialog的情况下)会被绘制,并且会擦除您绘制的矩形。

你必须绘制矩形:

  • 表格显示后。 例如,在表单的Shown事件中 - 但要注意当表单再次被绘制时,矩形将消失(例如,当您最小化/最大化表单时),
  • 或者更好的是,在绘制表单时(在Paint事件中,请参阅Dmitry的答案)。

如果重新排列代码以将绘图代码放在显示部分之后,则可以看到矩形。 由于在ShowDialog()之后没有读取任何行,直到显示的表单关闭,您可能需要调用Show()方法。

public static void Main()
{

    Form myform = new Form();

    myform.Text = "Main Window";
    myform.Size = new Size(640, 400);
    myform.FormBorderStyle = FormBorderStyle.FixedDialog;
    myform.StartPosition = FormStartPosition.CenterScreen;

    myform.Show();    //  ->  First Show

    //  -> Then Draw

    Graphics g = myform.CreateGraphics();
    Pen selPen = new Pen(Color.Blue);
    g.DrawRectangle(selPen, 10, 10, 50, 50);
    g.Dispose();   

}

通过这样做,您可以看到矩形。 但除非您在其OnPaint事件处理程序上添加绘图部分,否则它不会保留在那里。 当您尝试最小化或移动包含矩形的边时,或者无论窗体是否需要由OS绘制时,绘制的矩形都将消失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM