文章出處
文章列表
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();
}
}
}
以上代碼通過每次把前面一次繪制的矩形框顏色涂為窗體背景色,然后在新位置繪制新的矩形,缺點是如果窗口中除了矩形框還有別的圖形,比如直線,那么這個先前繪制的之間會被擦除。
文章列表
全站熱搜