C#GDI+如何在WinForm上用鼠标来绘制图形?

lq0922 2012-10-09 08:23:34
C#GDI+如何在WinForm上用鼠标来绘制图形?
...全文
846 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
足球中国 2012-10-09
  • 打赏
  • 举报
回复
绘制的代码写到onpaint里就好了。
Trent1985 2012-10-09
  • 打赏
  • 举报
回复
这个是最简单的,你试一下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication14
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
Graphics g = this.CreateGraphics();
g.DrawEllipse(new Pen(Color.Red, 2), new Rectangle(e.X - 1, e.Y - 1, 2, 2));
g.Dispose();
}
}
}
Trent1985 2012-10-09
  • 打赏
  • 举报
回复
用鼠标事件结合窗体的绘图事件就可以了!
lq0922 2012-10-09
  • 打赏
  • 举报
回复
首先,感谢楼上的回帖! 但是还有很多问题。

第一,我需要类似于word里面插入图形之后单击鼠标左键移动绘制指定图形
第二,绘制图形的时候鼠标单击左键移动会出现很多图形
leixf2016 2012-10-09
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;

using System.Threading;
using System.Drawing.Drawing2D;

namespace Test
{
public partial class Form1 : Form
{
enum MouseState
{
None = 0,
MouseLeftDown = 1,
MouseRightDown = 2,
}

private MouseState _MouseState = MouseState.None;

public Form1()
{
InitializeComponent();

this.Load += new EventHandler(Form1_Load);
this.MouseMove += new MouseEventHandler(Form1_MouseMove);
this.MouseDown += new MouseEventHandler(Form1_MouseDown);
this.MouseUp += new MouseEventHandler(Form1_MouseUp);
}

void Form1_MouseUp(object sender, MouseEventArgs e)
{
_MouseState = MouseState.None;
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
this.Refresh();
}
}

void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
_MouseState = MouseState.MouseLeftDown;
return;
}

if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
_MouseState = MouseState.MouseRightDown;
return;
}
}

void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (_MouseState == MouseState.None)
{
return;
}

if (_MouseState == MouseState.MouseLeftDown)
{
Console.WriteLine(e.X + ", " + e.Y);

Graphics g = this.CreateGraphics();
//g.DrawEllipse(new Pen(Color.Red, 2), new Rectangle(e.X - 1, e.Y - 1, 2, 2));
g.DrawLine(new Pen(Color.Red, 2), new Point(e.X - 2, e.Y - 2), new Point(e.X, e.Y));
g.Dispose();
return;
}
}

void Form1_Load(object sender, EventArgs e)
{
this.AutoScaleBaseSize = new Size(5, 13);
this.ClientSize = new Size(800, 500);
}
}
}



实现功能:当鼠标按下左键并不松开的情况下,可以在工作区域画图,松开鼠标后停止画图,点击鼠标右键后,重新刷新界面。

BUG:当鼠标移动速度过快时,线条不连续,求解决!


110,825

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧