C# winform开发:Graphics、pictureBox同时画多个矩形
生活随笔
收集整理的這篇文章主要介紹了
C# winform开发:Graphics、pictureBox同时画多个矩形
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C#的System.Drawing?命名空間提供了對 GDI+ 基本圖形功能的訪問
?
重點在于獲取Graphics對象,例如:
?Graphics?g =?panel1.CreateGraphics
?
事實上CreateGraphics繼承自Control, 即基本每一種控件都有這個方法
Control.CreateGraphics
?
在pannel、form上畫圖都一樣,這里以pictureBox為例。DrawRectangle函數為例畫矩形,其他形狀不在這里考慮,自己嘗試很簡單
?
畫圓是畫橢圓,只需g.DrawEllipse后兩個int參數width,height要設置相等,同時前兩個int參數并不是圓心而是左上角的坐標,沒有自帶的circle函數只能自己封裝
?
回到正題:
網上給的都是MouseDown ?MouseMove?MouseUp ?Paint事件相關的代碼,非常的簡單。
?
using System.Drawing;bool bDrawStart = false;Point pointStart = Point.Empty;Point pointContinue = Point.Empty;private void pictureBox1_MouseDown(object sender, MouseEventArgs e){if (bDrawStart){bDrawStart = false;}else{bDrawStart = true;pointStart = e.Location;}}private void pictureBox1_MouseMove(object sender, MouseEventArgs e){if (bDrawStart){pointContinue = e.Location;Refresh();}}private void pictureBox1_MouseUp(object sender, MouseEventArgs e){if (bDrawStart){dicPoints.Add(pointStart, pointContinue);}bDrawStart = false;}private void pictureBox1_Paint(object sender, PaintEventArgs e){if (bDrawStart){//實時的畫矩形 Graphics g = e.Graphics;g.DrawRectangle(pen, pointStart.X, pointStart.Y, pointContinue.X -pointStart.X, pointContinue.Y - pointStart.Y);}pen.Dispose();}?
?
用完就發現很明顯的問題了,一次只能畫一個圖形
如何才能一次畫多個呢?不少都說的重寫Paint事件,override之類的函數,多麻煩。
試驗修改Paint事件代碼即可,定義一個字典表記錄畫過的矩形(根據對角兩個點確定一個矩形,對應字典表的key, value,不考慮矩形相交重疊之類的情況),如下:
?
Dictionary<Point, Point> dicPoints = new Dictionary<Point, Point>();private void pictureBox1_Paint(object sender, PaintEventArgs e){System.Drawing.Pen pen = new System.Drawing.Pen(Color.LimeGreen);pen.Width = 2;if (bDrawStart){//實時的畫矩形 Graphics g = e.Graphics;g.DrawRectangle(pen, pointStart.X, pointStart.Y, pointContinue.X - pointStart.X, pointContinue.Y -pointStart.Y);}//實時的畫之前已經畫好的矩形foreach (var item in dicPoints){Point p1 = item.Key;Point p2 = item.Value;e.Graphics.DrawRectangle(pen, p1.X, p1.Y, p2.X - p1.X, p2.Y - p1.Y);}pen.Dispose();}?
總結
以上是生活随笔為你收集整理的C# winform开发:Graphics、pictureBox同时画多个矩形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 杂想
- 下一篇: 1050 循环数组最大子段和