主页 > 游戏开发  > 

c#仿ppt案例

画曲线 namespace ppt2024 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //存放所有点的位置信息 List<Point> lstPosition = new List<Point>(); //控制开始画的时机 bool isDrawing = false; //鼠标点击开始画 private void Form1_MouseDown(object sender, MouseEventArgs e) { isDrawing = true; } //鼠标弹起不画 private void Form1_MouseUp(object sender, MouseEventArgs e) { isDrawing = false; } /// <summary> /// pait 方法不会随时调用 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Paint(object sender, PaintEventArgs e) { //画家 Graphics g = e.Graphics; //画线 if(lstPosition.Count>1) { g.DrawLines(Pens.Pink, lstPosition.ToArray()); } } private void Form1_MouseMove(object sender, MouseEventArgs e) { if(isDrawing) { lstPosition.Add(e.Location); //使得paint方法生效 this.Invalidate(); } } } } 使用封装实现 画多条线,不连接 namespace ppt2024 { class HwFreeLine { //线的颜色 public Color color = Color.Pink; //线的宽度 public int width = 2; //存放线的集合(线由点构成,传入点的位置) public List<Point> lstPoints = new List<Point>(); public void Draw(Graphics g) { //画笔 Pen pen = new Pen(color, width); //两点确定一条直线 if(lstPoints.Count>1) { //画家画线 g.DrawLines(pen, lstPoints.ToArray()); } } } } namespace ppt2024 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //用集合存放线的位置信息 List<HwFreeLine> lstFreeLine = new List<HwFreeLine>(); //控制开始画的时机 bool isDrawing = false; //鼠标点击开始画 private void Form1_MouseDown(object sender, MouseEventArgs e) { isDrawing = true; //创建线对象 HwFreeLine freeLine = new HwFreeLine(); //设置线的样式----使用随机函数 Random r = new Random(); freeLine.color = Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)); freeLine.width = r.Next(1,10); //集合添加 lstFreeLine.Add(freeLine); } //鼠标弹起不画 private void Form1_MouseUp(object sender, MouseEventArgs e) { isDrawing = false; } private void Form1_Paint(object sender, PaintEventArgs e) { //画家 Graphics g = e.Graphics; //绘制填充 for(int i=0;i<lstFreeLine.Count;i++) { lstFreeLine[i].Draw(g); } } private void Form1_MouseMove(object sender, MouseEventArgs e) { if(isDrawing) { //替换掉集合的最后一个点的位置 lstFreeLine[lstFreeLine.Count - 1].lstPoints.Add(e.Location); //使得paint方法生效 this.Invalidate(); } } } } 画矩形 可以画多个矩形 namespace ppt2024 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //存放矩形的位置信息 List<Rectangle> lstRect = new List<Rectangle>(); //控制开始画的时机 bool isDrawing = false; Rectangle rect; //鼠标点击开始画 private void Form1_MouseDown(object sender, MouseEventArgs e) { isDrawing = true; rect = new Rectangle(); //矩形起点 rect.X = e.X; rect.Y = e.Y; lstRect.Add(rect); } //鼠标弹起不画 private void Form1_MouseUp(object sender, MouseEventArgs e) { isDrawing = false; } private void Form1_Paint(object sender, PaintEventArgs e) { //画家 Graphics g = e.Graphics; for(int i=0;i<lstRect.Count;i++) { g.DrawRectangle(Pens.Blue, lstRect[i]); } } private void Form1_MouseMove(object sender, MouseEventArgs e) { if(isDrawing) { rect.Width = e.X - rect.X; rect.Height = e.Y - rect.Y; lstRect[lstRect.Count - 1] = new Rectangle(rect.X, rect.Y, (e.X - rect.X), (e.Y - rect.Y)); //使得paint方法生效 this.Invalidate(); } } private void timer1_Tick(object sender, EventArgs e) { } } } 画带颜色的矩形 namespace ppt2024 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //存放矩形的位置信息 List<Rectangle> lstRect = new List<Rectangle>(); //存放矩形填充颜色 Color reactFill = Color.Pink; //矩形边框颜色 Color reactFrame = Color.Gray; //矩形边框宽度 int frameSize = 10; //控制开始画的时机 bool isDrawing = false; Rectangle rect; //鼠标点击开始画 private void Form1_MouseDown(object sender, MouseEventArgs e) { isDrawing = true; rect = new Rectangle(); //矩形起点 rect.X = e.X; rect.Y = e.Y; lstRect.Add(rect); } //鼠标弹起不画 private void Form1_MouseUp(object sender, MouseEventArgs e) { isDrawing = false; } private void Form1_Paint(object sender, PaintEventArgs e) { //画家 Graphics g = e.Graphics; //画笔 Pen pen = new Pen(reactFrame, 10); //纯色画刷 SolidBrush solidBrush = new SolidBrush(reactFill); //画矩形 for(int i=0;i<lstRect.Count;i++) { g.DrawRectangle(pen, lstRect[i]); } //绘制填充 for(int i=0;i<lstRect.Count;i++) { g.FillRectangle(solidBrush, lstRect[i]); } } private void Form1_MouseMove(object sender, MouseEventArgs e) { if(isDrawing) { rect.Width = e.X - rect.X; rect.Height = e.Y - rect.Y; lstRect[lstRect.Count - 1] = new Rectangle(rect.X, rect.Y, (e.X - rect.X), (e.Y - rect.Y)); //使得paint方法生效 this.Invalidate(); } } private void timer1_Tick(object sender, EventArgs e) { } } } 使用封装 namespace ppt2024 { class HwReactangle { //存放矩形填充颜色 public Color reactFill = Color.Pink; //矩形边框颜色 public Color reactFrame = Color.Gray; //矩形边框宽度 public int frameSize = 10; //起始点 public int x; public int y; //矩形宽高 public int w; public int h; //存放矩形数组 public List<Rectangle> lstRect = new List<Rectangle>(); public void Draw(Graphics g) { //画笔 Pen pen = new Pen(reactFrame, frameSize); //纯色画刷 SolidBrush solidBrush = new SolidBrush(reactFill); //画矩形 g.DrawRectangle(pen, x, y, w, h); //绘制矩形填充颜色 g.FillRectangle(solidBrush, x, y, w, h); } } } namespace ppt2024 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //用集合存放矩形的位置信息 List<HwReactangle> lstRects = new List<HwReactangle>(); HwReactangle rect; //控制开始画的时机 bool isDrawing = false; //鼠标点击开始画 private void Form1_MouseDown(object sender, MouseEventArgs e) { isDrawing = true; rect = new HwReactangle(); //矩形起点 rect.x = e.X; rect.y = e.Y; //随机函数 Random r = new Random(); rect.reactFill = Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)); rect.frameSize = r.Next(1, 10); lstRects.Add(rect); } //鼠标弹起不画 private void Form1_MouseUp(object sender, MouseEventArgs e) { isDrawing = false; } private void Form1_Paint(object sender, PaintEventArgs e) { //画家 Graphics g = e.Graphics; for(int i=0;i<lstRects.Count;i++) { lstRects[i].Draw(g); } } private void Form1_MouseMove(object sender, MouseEventArgs e) { if(isDrawing) { rect.w = e.X - rect.x; rect.h = e.Y - rect.y; lstRects[lstRects.Count - 1] = rect; //使得paint方法生效 this.Invalidate(); } } } } 画椭圆

仿造之前的矩形

private void Form1_Paint(object sender, PaintEventArgs e) { //画家 Graphics g = e.Graphics; //画笔 Pen pen = new Pen(reactFrame, 5); pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; //纯色画刷 SolidBrush solidBrush = new SolidBrush(reactFill); //画矩形 for(int i=0;i<lstRect.Count;i++) { g.DrawEllipse(pen, lstRect[i]); } //绘制填充 for(int i=0;i<lstRect.Count;i++) { g.FillEllipse(solidBrush, lstRect[i]); } } 画三角形

封装类

namespace ppt2024 { class HwTriangle { //存放填充颜色 public Color reactFill = Color.Pink; //三角形边框颜色 public Color reactFrame = Color.Gray; //三角形边框宽度 public int frameSize = 10; //起始点 public int x; public int y; //三角形宽高 public int w; public int h; //存放矩形数组 //public List<HwTriangle> lstRect = new List<HwTriangle>(); public void Draw(Graphics g) { //画笔 Pen pen = new Pen(reactFrame, frameSize); //纯色画刷 SolidBrush solidBrush = new SolidBrush(reactFill); //确定三角形三个顶点 Point p1 = new Point(x + w / 2, y); Point p2 = new Point(x, y - h); Point p3 = new Point(x + w, y - h); Point[] pArr = new Point[3] { p1, p2, p3 }; g.FillPolygon(solidBrush, pArr); g.DrawPolygon(pen, pArr); } } } 仿ppt实现不同形状的图形选择

using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace ppt2024 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //用枚举 public enum GeoType { None, FreeLine, Rect, Tri }; public GeoType type = GeoType.None; //用集合存放图形的位置信息 List<HwFreeLine> lstFreeLine = new List<HwFreeLine>(); List<HwReactangle> lstRect = new List<HwReactangle>(); List<HwTriangle> lstTri = new List<HwTriangle>(); //控制开始画的时机 bool isDrawing = false; // 点击不同按钮实现画不同图形效果 private void button1_Click(object sender, EventArgs e) { type = GeoType.Tri; } private void button2_Click(object sender, EventArgs e) { type = GeoType.Rect; } private void button3_Click(object sender, EventArgs e) { type = GeoType.FreeLine; } //鼠标点击开始画 private void Form1_MouseDown(object sender, MouseEventArgs e) { isDrawing = true; //添加涂鸦线 if (type == GeoType.FreeLine) { HwFreeLine freeLine = new HwFreeLine(); Random r = new Random(); freeLine.color = Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)); freeLine.width = r.Next(1, 10); lstFreeLine.Add(freeLine); } //添加矩形 else if (type == GeoType.Rect) { HwReactangle rect = new HwReactangle(); rect.x = e.Location.X; rect.y = e.Location.Y; //随机函数 Random r = new Random(); rect.reactFill = Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)); rect.frameSize = r.Next(1, 10); lstRect.Add(rect); } //添加三角形 else if (type == GeoType.Tri) { HwTriangle tri = new HwTriangle(); tri.x = e.Location.X; tri.y = e.Location.Y; //随机函数 Random r = new Random(); tri.reactFill = Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)); tri.frameSize = r.Next(1, 10); lstTri.Add(tri); } } //鼠标弹起不画 private void Form1_MouseUp(object sender, MouseEventArgs e) { isDrawing = false; } //每次重绘 private void Form1_Paint(object sender, PaintEventArgs e) { //画家 Graphics g = e.Graphics; //画涂鸦线 for (int i = 0; i < lstFreeLine.Count; i++) { lstFreeLine[i].Draw(e.Graphics); } //画矩形 for (int i = 0; i < lstRect.Count; i++) { lstRect[i].Draw(e.Graphics); } //画三角形 for (int i = 0; i < lstTri.Count; i++) { lstTri[i].Draw(e.Graphics); } } //鼠标移动记录信息 private void Form1_MouseMove(object sender, MouseEventArgs e) { if (isDrawing) { //更新涂鸦线 if (type == GeoType.FreeLine) { lstFreeLine[lstFreeLine.Count - 1].lstPoints.Add(e.Location); this.Invalidate(); } //矩形 if (type == GeoType.Rect) { lstRect[lstRect.Count - 1].w = e.Location.X - lstRect[lstRect.Count - 1].x; lstRect[lstRect.Count - 1].h = e.Location.Y - lstRect[lstRect.Count - 1].y; this.Invalidate(); } //三角形 if (type == GeoType.Tri) { lstTri[lstTri.Count - 1].w = e.Location.X - lstTri[lstTri.Count - 1].x; lstTri[lstTri.Count - 1].h = e.Location.Y - lstTri[lstTri.Count - 1].y; this.Invalidate(); } } } } } `` # 使用封装,继承,改造上述代码 > 继承类 ```c namespace ppt2024 { class HwGeometry { //图形填充颜色 public Color fillColor = Color.Blue; //图形边框颜色 public Color borderColor = Color.Black; //图形边框宽度 public int borderWidth = 6; //图形边框样式 public DashStyle ds = DashStyle.Dash; //公共的抽象方法 public virtual void Draw(Graphics g) { } } }

子类

namespace ppt2024 { class HwReactangle:HwGeometry { //起始点 public int x; public int y; //矩形宽高 public int w; public int h; //存放矩形数组 public List<Rectangle> lstRect = new List<Rectangle>(); public override void Draw(Graphics g) { //画笔 Pen pen = new Pen(borderColor, borderWidth); //纯色画刷 SolidBrush solidBrush = new SolidBrush(fillColor); //样式 pen.DashStyle = ds; //画矩形 g.DrawRectangle(pen, x, y, w, h); //绘制矩形填充颜色 g.FillRectangle(solidBrush, x, y, w, h); } } }

三角形,涂鸦线参照之前代码

主类

namespace ppt2024 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //用枚举 public enum GeoType { None, FreeLine, Rect, Tri }; public GeoType type = GeoType.None; //用集合存放图形的位置信息 List<HwGeometry> lstGeo = new List<HwGeometry>(); //控制开始画的时机 bool isDrawing = false; // 点击不同按钮实现画不同图形效果 private void button1_Click(object sender, EventArgs e) { type = GeoType.Tri; } private void button2_Click(object sender, EventArgs e) { type = GeoType.Rect; } private void button3_Click(object sender, EventArgs e) { type = GeoType.FreeLine; } //鼠标点击开始画 private void Form1_MouseDown(object sender, MouseEventArgs e) { isDrawing = true; //添加涂鸦线 if (type == GeoType.FreeLine) { HwFreeLine freeLine = new HwFreeLine(); Random r = new Random(); freeLine.borderColor = Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)); freeLine.borderWidth = r.Next(1, 10); lstGeo.Add(freeLine); } //添加矩形 else if (type == GeoType.Rect) { HwReactangle rect = new HwReactangle(); rect.x = e.Location.X; rect.y = e.Location.Y; //随机函数 Random r = new Random(); rect.borderColor = Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)); rect.borderWidth = r.Next(1, 10); rect.fillColor= Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)); lstGeo.Add(rect); } //添加三角形 else if (type == GeoType.Tri) { HwTriangle tri = new HwTriangle(); tri.x = e.Location.X; tri.y = e.Location.Y; //随机函数 Random r = new Random(); tri.borderColor = Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)); tri.borderWidth = r.Next(1, 10); tri.fillColor= Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)); lstGeo.Add(tri); } } //鼠标弹起不画 private void Form1_MouseUp(object sender, MouseEventArgs e) { isDrawing = false; } //每次重绘 private void Form1_Paint(object sender, PaintEventArgs e) { //画家 Graphics g = e.Graphics; //画图形 for (int i = 0; i < lstGeo.Count; i++) { lstGeo[i].Draw(g); } } //鼠标移动记录信息 private void Form1_MouseMove(object sender, MouseEventArgs e) { if (isDrawing) { //更新涂鸦线 if (type == GeoType.FreeLine) { //更新 ((HwFreeLine)lstGeo[lstGeo.Count - 1]).lstPoints.Add(e.Location); } //矩形 if (type == GeoType.Rect) { ((HwReactangle)lstGeo[lstGeo.Count - 1]).w = e.Location.X - ((HwReactangle)lstGeo[lstGeo.Count - 1]).x; ((HwReactangle)lstGeo[lstGeo.Count - 1]).h = e.Location.Y - ((HwReactangle)lstGeo[lstGeo.Count - 1]).y; } //三角形 if (type == GeoType.Tri) { ((HwTriangle)lstGeo[lstGeo.Count - 1]).w = e.Location.X - ((HwTriangle)lstGeo[lstGeo.Count - 1]).x; ((HwTriangle)lstGeo[lstGeo.Count - 1]).h = e.Location.Y - ((HwTriangle)lstGeo[lstGeo.Count - 1]).y; } //开启重绘 this.Invalidate(); } } } }
标签:

c#仿ppt案例由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“c#仿ppt案例