文章出處

C#中用GDT+的一系列方式,可以繪制各種圖形:點,直線,圓形,矩形......

C#中這些圖形的繪制,一般教程的demo中給出的代碼,是在Form1_Paint(object sender, PaintEventArgs e)函數中完成繪圖。這個函數是窗口一出來就調用。

如果我希望GUI界面上某個事件發生后再繪圖(而不是窗口一上來就繪制),那就在對應的事件處理函數中調用繪圖的函數代碼。一般的事件處理函數不帶PaintEventArgs參數,通過定義Graphics類型的全局變量g并調用窗體的CreateGraphics函數來解決。

下面給出一個簡單的例子:一個簡單窗體,界面上只有一個按鈕btn,點擊btn會在窗口指定位置產生一個綠色矩形框,并向右移動一定距離。
通過前述方式+timer控件,可以實現這個操作,代碼如下:

    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            g = this.CreateGraphics();
            rect = new Rectangle(x, y, width, height);
            timer1.Tick += new System.EventHandler(timer1_Tick);
            timer1.Interval = 100;
        }
        private Timer timer1 = new Timer();

        private Pen pen = new Pen(Color.Lime, 2); //綠色畫筆
        private Pen DefaultPen = new Pen(Control.DefaultBackColor, 2); //顏色和窗體背景色相同的畫筆

        int x = 100, y = 100;
        int width = 60, height = 60;
        private Rectangle rect;

        private Graphics g;

        private void button1_Click(object sender, EventArgs e) {
            //move2right();
            timer1.Enabled = true;
        }

        //整個矩形框整體向右移動兩個距離
        private void move2right() {
            g.DrawRectangle(DefaultPen, rect);
            rect.X += 2;
            g.DrawRectangle(pen, rect);
            Invalidate(rect);
        }

        //計時器,用來讓矩形持續移動
        public void timer1_Tick(object sender, EventArgs e) {
            if (rect.X < 410) {
                move2right();
            }
        }
    }

以上代碼通過每次把前面一次繪制的矩形框顏色涂為窗體背景色,然后在新位置繪制新的矩形,缺點是如果窗口中除了矩形框還有別的圖形,比如直線,那么這個先前繪制的之間會被擦除。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()