【问题标题】:Click two new points and draw a line between those two points using mouse event单击两个新点并使用鼠标事件在这两个点之间画一条线
【发布时间】:2010-09-01 07:31:20
【问题描述】:

任何建议如何通过单击两个新点然后在它们之间画一条线来创建一条线? 我正在尝试创建一个距离工具,例如 adobe acrobat 中的那个。

图片示例

【问题讨论】:

    标签: c# events graphics gdi+


    【解决方案1】:

    问题解决了!

    编辑: 代码如下:

    private Point p1, p2;
    List<Point> p1List = new List<Point>();
    List<Point> p2List = new List<Point>();
    
        private void Panel1_MouseDown(object sender, MouseEventArgs e)
        {
            if (p1.X == 0)
            {
                p1.X = e.X;
                p1.Y = e.Y;
            }
            else
            {
                p2.X = e.X;
                p2.Y = e.Y;
    
                p1List.Add(p1);
                p2List.Add(p2);
    
                Invalidate();
                p1.X = 0;
            }
        }
    
        private void Panel1_Paint(object sender, PaintEventArgs e)
        {
            using(var p = new Pen(Color.Blue, 4))
            {
                for(int x = 0; x<p1List.Count; x++){
                    e.Graphics.DrawLine(p, p1List[x], p2List[x]);
                }
            }
        }
    

    【讨论】:

    • 您不应该使用Panel1.CreateGraphics(),而应该使用面板的OnPaint 方法。
    • @TheCloudlessSky 该示例在 MouseDown() 事件中。
    • 我知道。你应该做的是“当鼠标移动时,设置你的对象的位置”,所以这意味着你移动点、线、形状等等。然后在该方法的 end 调用Refresh() 以使控件重新绘制。绘制方法由OnPaint() 处理。 是你绘制所有东西的地方(OnPaint)。您获取当前位置并绘制它们。看看我在另一篇文章中的回答,看看我的意思。如果您在控件上绘画,则应该永远需要在活动期间调用CreateGraphics()
    【解决方案2】:

    您可以处理面板上的鼠标单击事件(例如)并检索单击的位置(使用事件参数)。将此位置存储在属性中。尽可能多地这样做。 在面板绘制事件中,调用父绘制,然后在您的点之间绘制线条。

    【讨论】:

      【解决方案3】:

      应该这样做:

      Point firstPoint;
      Point seondPoint;
      
      private void panel1_MouseDown(object sender, MouseEventArgs e)
      {
          if (this.firstPoint == null) {
              this.firstPoint = e.Location;
          }
      
          if (this.secondPoint == null) {
              this.secondPoint = e.Location;
          }
      
          panel1.Invalidate();
      }
      
      private void panel1_Paint_1(object sender, PaintEventArgs e)
      {       
          Using (pn as new Pen(Color.Blue, 5))
          {
              e.Graphics.DrawLine(pn, firstPoint, secondPoint);
          }
      }
      

      编辑:你也不需要 CreateGraphics 来画线 - 在 Paint 事件中你已经有了一个图形对象。

      【讨论】:

      • 这段代码只是告诉我从a点到b点画一条线。
      • 你的问题的第一行是什么?
      • 从代码中可以看出,我在那里画了两条线。我希望第一行是一个点,然后是第二行。之后,我想将它们连接在一起以创建一条真实的线。您使用的是 Adob​​e PDF 阅读器吗?如果是这样,请尝试查看它的距离工具功能。
      猜你喜欢
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      相关资源
      最近更新 更多