簡體   English   中英

如何繪制簡單的圖形

[英]How to draw simple Graphics

我想在C#程序中加載表單。 以下代碼是否必須在paint()方法中? InitializeComponent()究竟做了什么? 我問的是InitializeComponent()方法究竟做了什么。 基本上我不確定是否必須在OnPaint()方法上進行覆蓋,或者我是否可以在任何地方繪制我想要在表單上繪制內容的代碼。 loadForm調用DrawIt() ,它將在表單上繪制。 但是,paint的代碼不在任何特定的OnPaint()Paint()方法中。

    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        private void DrawIt()
        {
            System.Drawing.Graphics graphics = this.CreateGraphics();
            System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(
               50, 50, 150, 150);
            graphics.DrawEllipse(System.Drawing.Pens.Black, rectangle);
            graphics.DrawRectangle(System.Drawing.Pens.Red, rectangle);
        }

        private void Form3_Load(object sender, EventArgs e)
        {
            DrawIt();
        }
    }

InitializeComponent方法:

當您創建表單時,VS會創建兩個包含ONE類的文件(只需看看部分類):

1)Form.cs,這是你放置代碼的地方。

2)Form.Designer.cs,它是自動生成的分部類。 當您在設計視圖中將一些組件放在表單上時,VS會生成所需的代碼,以便在此類的運行時構建該組件。

InitializeComponent是Form.Designer.cs中自動生成的方法,它初始化您在表單上放置的組件。 當你從構造函數中調用它時,你只是告訴它在構造表單對象時進行初始化。

OnPaint方法:

您應該將繪圖代碼放在OnPaint方法中。 只要需要,.Net就會調用此方法。 例如,如果您的窗口落在另一個窗口后面然后再次到達前面,您的圖紙就會被清除! 因此,再次調用此方法重新繪制圖紙。

是的,你應該在paint事件中調用你的代碼。 為什么一定要這樣做? 我認為當需要更新表單時,窗口會自動調用paint事件。 如果你在form_load事件中調用你的代碼,它只調用一次,然后當表單顯示時,表單再次繪制,它覆蓋了你在form_load中的效果,所以你看不到結果。 所以,你可以在Form_paint()事件中調用你的代碼,或者你可以覆蓋OnPaint函數,它們是相同的,如下所示:

private void DrawIt()
    {
        System.Drawing.Graphics graphics = this.CreateGraphics();
        System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(
           50, 50, 150, 150);
        graphics.DrawEllipse(System.Drawing.Pens.Black, rectangle);
        graphics.DrawRectangle(System.Drawing.Pens.Red, rectangle);
        this.Update();
    }

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

    }

    private void MainWindow_Paint(object sender, PaintEventArgs e)
    {
        //DrawIt();
    }

我的測試結果是這樣的: 繪畫的結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM