c#仿ppt案例
- 游戏开发
- 2025-07-22 00:03:01
画曲线
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(); } } } }下一篇
谷粒商城实战(008缓存)