我用GDI画个图形,怎么我选不中它.我想画后选中?

sky_97 2007-04-27 05:00:53
private void pictureBox1_Click(object sender, EventArgs e)
{
this.pictureBox1.Refresh();
Graphics g = this.pictureBox1.CreateGraphics();
g.DrawRectangle(new Pen(Brushes.White , 20), 20, 20, 20, 20);
...全文
243 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghl2312 2008-06-30
  • 打赏
  • 举报
回复
你要做了选种的处理,才能选中呀!
基本思路:判断当前鼠标是否在所画图形之上,如果是则用其他颜色重画!
lpcjj1122 2008-06-30
  • 打赏
  • 举报
回复
我顶.
lpcjj1122 2008-06-30
  • 打赏
  • 举报
回复

System.Drawing.Drawing2D.GraphicsPath gp;
Region region;
Pen pen = new Pen(Color.Red, 20);
Rectangle rc = new Rectangle(20, 20, 150, 200);
Rectangle rc1 = new Rectangle(150, 200, 400, 400);

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
}

private void Form1_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
g.DrawRectangle(new Pen(Brushes.Blue, 20), rc);
g.DrawRectangle(new Pen(Brushes.Blue, 20), rc1);
gp = new System.Drawing.Drawing2D.GraphicsPath();
gp.AddRectangle(rc);
gp.AddRectangle(rc1);
gp.Widen(pen);
region = new Region(gp);
g.Dispose();
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (region != null && region.IsVisible(e.Location) == true)
{
Graphics g = this.CreateGraphics();
g.DrawRectangle(new Pen(Brushes.Red, 20), rc);
g.Dispose();
gp = null;
region = null;
}
}



现在的情况是,移到两个矩形上都是亮的一个...我现在要移到了那个大的矩形上时...红色部分也亮着高亮的部分...讨论讨论...有什么好方法...大家研究一下啊..
lpcjj1122 2008-06-30
  • 打赏
  • 举报
回复
我来顶一下.如果有画了多个图形...怎么和要高亮的那个对应起来呢..
seot_chen 2008-06-30
  • 打赏
  • 举报
回复
GraphicsPath areaPath;
Pen areaPen;
Region areaRegion;
private void pictureBox1_Click(object sender, EventArgs e)
{
this.pictureBox1.Refresh();
Graphics g = this.pictureBox1.CreateGraphics();
g.DrawRectangle(new Pen(Brushes.White , 20), 20, 20, 20, 20);
areaPath = new GraphicsPath();
areaPen = new Pen(Color.Red, 20);
areaPath.AddRectangle(20, 20, 20, 20);
areaPath.Widen(areaPen);
areaRegion = new Region(areaPath);
}
然后在鼠标的移动事件中
private void Form_MouseMove(object sender, MouseEventArgs e)
{
if (areaRegion.IsVisible(e) == true)
{
Graphics g = this.pictureBox1.CreateGraphics();
g.DrawRectangle(new Pen(Brushes.Red , 20), 20, 20, 20, 20);
}
}
只是给个思路,具体你自己看着办吧,本人菜鸟一个,不敢说太多了.
GentleCat 2008-06-30
  • 打赏
  • 举报
回复
Math.Abs(p.X - 2) 改为 Math.Abs(p.X - 20)
GentleCat 2008-06-30
  • 打赏
  • 举报
回复
在MouseDown事件里面加入:

if (Math.Abs(p.X - 2) <= 1 || Math.Abs(p.X - 40) <= 1 ||
Math.Abs(p.Y - 20) <= 1 || Math.Abs(p.Y - 40) <= 1)
{
MessageBox.Show("帅哥,你选中你自己画的矩形啦~ 麻烦你画的时候把所有的矩形记录在一个List里面,这样才好判断啊!");
}
sky_97 2007-04-29
  • 打赏
  • 举报
回复
没有人说下吗?
sky_97 2007-04-28
  • 打赏
  • 举报
回复
怎么没有人?顶

110,561

社区成员

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

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

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