如何动态的选择点(point)画线?

cisidi3138 2008-04-10 09:54:35
例如

Graphics g = this.CreateGraphics();
Point[] points ={ new Point(0, 0), new Point(300, 150), new Point(200, 200), new Point(400, 400) };
g.DrawLines(new Pen(Color.Blue), points);

如果其中不确定画哪个点? 如何动态的选择呢?
...全文
255 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
cisidi3138 2008-04-11
  • 打赏
  • 举报
回复
请结贴
cisidi3138 2008-04-11
  • 打赏
  • 举报
回复
搞定了
kkme88 2008-04-10
  • 打赏
  • 举报
回复
是啊 比如你不想画p1和p2,只画 p3,p4的话
你就把 p1 = cp3,p2 = cp3就可以了p3 = cp3,p4 = cp4就可以了
viewstar 2008-04-10
  • 打赏
  • 举报
回复
绘图操作要放在窗体或控件的paint事件中

很久不用C#了,C#的数组应该支持insert或者append方法的吧,根据需要生成一个新数组就可以了
cisidi3138 2008-04-10
  • 打赏
  • 举报
回复
但是这样的话
Point p1,cp1 = new Point(50, 200);
p1这个点就必须画了
按照我的思路,P1应该也是可选的。。。
谢谢回复,还有其他的方法吗??
kkme88 2008-04-10
  • 打赏
  • 举报
回复
如果用g.DrawLines方法的话,你必须得重建一个数组.

看看这个方法可以吗?用一组临时点和常量点来实现,画的时候把一个点重合画出来的就是一条线了

Point p1,cp1 = new Point(50, 200);
Point p2,cp2 = new Point(300, 150);
Point p3,cp3 = new Point(200, 200);
Point p4,cp4 = new Point(400, 200);
bool b = true;
if (b == true)
{
p2 = cp1;
p3 = cp1;
}
Point[] points = { p1, p2, p3, p4 };
g.DrawLines(new Pen(Color.Blue), points);
dancingbit 2008-04-10
  • 打赏
  • 举报
回复
画一个小圆圈(小矩形),当鼠标点击的位置落在这个圆圈内的时候,就执行一个该点的取消/选择操作,画线的时候就根据哪些点被选择来画线。

画线的代码应该放在Paint事件处理方法,需要绘制的时候会自动调用它,比如你提到的就是一种情况。需要强制更新的话可以调用Invalidate()。
cisidi3138 2008-04-10
  • 打赏
  • 举报
回复
还有一个问题:g.DrawLines画的线如果不在当前窗体后怎么就没了。。。。???
求解中。。。
cisidi3138 2008-04-10
  • 打赏
  • 举报
回复
Point p1 = new Point(50, 200);
Point p2 = new Point(300, 150);
Point p3 = new Point(200, 200);
Point p4 = new Point(400, 200);
bool b = true;
if (b == true)
{
p2 = Point.Empty;
p3 = Point.Empty;
}
Point[] points ={ p1, p2, p3, p4 };
g.DrawLines(new Pen(Color.Blue), points);

我暂时是用Point.Empty来实现,但是Point.Empty会把点画到(0,0)处,而我需要的是如果我不需要哪点,哪点就不显示出来?哪位还有更好的解决办法??
cisidi3138 2008-04-10
  • 打赏
  • 举报
回复
请问具体做法?
ericzhangbo1982111 2008-04-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dancingbit 的回复:]
Point可以动态生成,比如在MouseDown中,每次发生这个事件就生成一个点,加点到某个集合中,然后根据这些点来画线。
[/Quote]
cisidi3138 2008-04-10
  • 打赏
  • 举报
回复
我的点已经固定了,只是选择这些点哪个画哪个不画?
请问还有没有其他的方法??
谢谢
dancingbit 2008-04-10
  • 打赏
  • 举报
回复
Point可以动态生成,比如在MouseDown中,每次发生这个事件就生成一个点,加点到某个集合中,然后根据这些点来画线。
liqngjun123 2008-04-10
  • 打赏
  • 举报
回复
public Point[] m_lstPt;
public void OnMouseUp(object sender, MouseEventArgs e)
{
m_lstPt.Add(new Point(e.X, e.Y));
}
public void OnPaint(object sender, PaintEventArgs e)
{
if (m_lstPt.Length <= 1) return;

e.Graphics.DrawLines(new Pen(Color.Red), m_lstPt);
}
dancingbit 2008-04-10
  • 打赏
  • 举报
回复
添加和删除的时候通过ArrayList来进行,需要绘制的时候就转换为数组就是了。
cisidi3138 2008-04-10
  • 打赏
  • 举报
回复
自己顶一下
cisidi3138 2008-04-10
  • 打赏
  • 举报
回复
我现在也搞不清楚数组和这个points怎么对应啊?
能不能说的详细一点呀?
kkme88 2008-04-10
  • 打赏
  • 举报
回复
我也不知道了,
当选择不同点的时候,为什么不重建一个数组呢?
cisidi3138 2008-04-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 viewstar 的回复:]
绘图操作要放在窗体或控件的paint事件中

很久不用C#了,C#的数组应该支持insert或者append方法的吧,根据需要生成一个新数组就可以了
[/Quote]
怎么引入数组啊?
point点和string型好像没办法转换啊。。
或者把point转换成string之后,就没法搞回来了啊。。。
继续求高手解答?
cisidi3138 2008-04-10
  • 打赏
  • 举报
回复
这样的话,必须有一个点肯定要画出来才行啊
不然没有办法参照啊,而且要求最好应该是参照相邻的点,不然就又退回去了。。。
非常感谢回复,还有更好的方法吗?

110,539

社区成员

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

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

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