代码之家  ›  专栏  ›  技术社区  ›  Len Tango Ben

动态多个图形在一个页面?

  •  1
  • Len Tango Ben  · 技术社区  · 15 年前

    我对绘制形状、图形、位图等很陌生。我在谷歌上搜索了几天,但仍然不知道该怎么做,所以请帮助我:

    我想画一个平面图,上面有一些物体(用圆圈表示)在移动。 当我单击一个对象时,它需要显示一些东西。

    到目前为止,我已经能够在一个图形上画一些圆,并且能够通过每次清除图形来移动点。当然,这不是一个真正的解决方案,因为我无法跟踪平面图上的不同对象(我的ClickEvent和Movings需要这些对象)。

    希望我能在这里解释一下我的问题。

    这是每秒调用的(剥离版本)源代码: (dev(属于device类型)是我要绘制的对象)

            Graphics gfx = FloorplanTabPage.CreateGraphics();
            gfx.Clear(Color.White);
            foreach (Device dev in _deviceList)
            {
                Pen myPen = new Pen(Color.Black) { Width = 10 };
                if(dev.InRoom != null)
                {
                    myPen.Color = Color.DarkOrchid;
                    int x = dev.InRoom.XPos + (dev.InRoom.Width / 2) - 5;
                    int y = (dev.InRoom.YPos + (dev.InRoom.Height / 2) - 5;
                    if (dev.ToRoom != null)
                    {
                        x = (x + (dev.ToRoom.XPos + (dev.ToRoom.Width / 2)) / 2;
                        y = (y + (dev.ToRoom.YPos + (dev.ToRoom.Height / 2)) / 2;
                    }
                    gfx.DrawEllipse(myPen, x, y, 10, 10);
                    gfx.DrawString(dev.Name, new Font("Arial", 10), Brushes.Purple, x, y - 15);
                }   
          }
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Gerrie Schenck    15 年前

    我认为最简单的解决方案是使用WPF。

    如果您不想使用wpf,那么我建议您为楼层平面图上所需的每个对象编写自己的自定义winforms控件,并在控件绘制自身时绘制一个圆。这将使您能够完全控制控件的外观和行为。

    更新:例如,有很多关于这个的教程 http://www.codeproject.com/KB/miscctrl/ScrollingTextControlArtic.aspx