2017-01-19 30 views
0

我有一个程序,我可以在panel上绘制简单的形状,并跟踪我的鼠标移动。Visual Studio面板映射

private void DrawingPanel_MouseMove(object sender, MouseEventArgs e) 
{ 
    toolStripStatusLabel1.Text= e.X + "," + e.Y; 
} 

我想知道是否有某种方法可以“映射”我的面板。 通过映射我的意思是创建区域(使用rectangle coords f.e.),当我将鼠标悬停在此区域上时,会在光标上显示一些消息或弹出信息。

是否有可能做这样的事情?

编辑:要清楚 - 我不使用mouseEvent绘制我的面板上的形状。我用侧面菜单上创建的按钮绘制它们。编号2: 示例:我绘制了矩形(10,10,20,20)。当我将鼠标悬停在这些坐标上时,我想在我的光标处弹出一个对话框。 Somethinkg like:

System.Windows.Forms.ToolTip Rect = new System.Windows.Forms.ToolTip(); 
      ToolTip1.SetToolTip(this.Rect, "Reactangle 100 m2"); 
+0

我正在寻找正确的理解:您正在将鼠标悬停在面板上。你想看到一些弹出式(标签)随鼠标一起移动,显示例如鼠标的坐标,是吗? – Tatranskymedved

+0

不完全是,因为我可以在这个面板上绘制形状,我将跟踪这些形状的坐标。后来,当我将鼠标悬停在创建的形状上时,我想创建一些弹出消息。 – mymek

+0

回答你的问题。对的,这是可能的。请缩小问题的范围。 – TyCobb

回答

2

如果您想要,您可以为您的绘图面板创建单独的“视口”。

为此,您的Paint事件需要设置Graphics对象,然后可以绘制到这些“端口”中。

下面是一个小例子..:

enter image description here

Paint活动吸引了当前的MS分为三个不同的视口:

private void drawPanel1_Paint(object sender, PaintEventArgs e) 
{ 
    foreach (var v in ViewPorts) 
    { 
     int i = ViewPorts.IndexOf(v); 
     e.Graphics.ResetClip(); 
     e.Graphics.ResetTransform(); 

     e.Graphics.SetClip(v); 
     e.Graphics.TranslateTransform(v.X, v.Y); 
     e.Graphics.Clear(colors[i]); 
     e.Graphics.DrawString(DateTime.Now.Millisecond + "' - " +i, 
           Font, Brushes.Black, 0,0); 
    } 
} 

注意我怎么总能得出协调(0,0)

它使用几个变量:

List<Rectangle> ViewPorts = new List<Rectangle>(); 
List<Color> colors = new List<Color>(); 

下面是我如何设置列表和动画计时器:

colors.Add(Color.LightCoral); 
colors.Add(Color.LightCyan); 
colors.Add(Color.LightGreen); 
ViewPorts.Add(new Rectangle( 0, 0, 200, 250)); 
ViewPorts.Add(new Rectangle(100, 100, 100, 50)); 
ViewPorts.Add(new Rectangle(210, 200, 100, 50)); 

Timer t = new Timer(); 
t.Interval = 250; 
t.Tick += (ss, ee) => { drawPanel1.Invalidate(); }; 
t.Start(); 

你不会使用Timer绘制改变视具体的数据并且在Panel上调用Invalidate只要数据发生变化 ..

我添加了一个BackColor,其中,就如同ForeColorFonts,然后一些,最好是一个ViewPort类的一部分;这样的类还可以举行一个Draw方法,你会从面板的Paint事件打电话,传递出e.Graphics参数..

如果你不想/需要你的输出坚持,这很可能如果是工具提示,您可以跳过Paint事件;对于这种情况,我会传出视口,参照其中的目标面板,并使用CreateGraphics,其代码与上面几乎相同。

0

我认为制作ma面板的“地图”的最简单方法是在MouseMove event中创建区域,并且如果鼠标移过该区域,则会创建带有文本的标签。例如,一个区域的坐标为100,150,200,250,看起来像这样:

public void DrawingPanel2_MouseMove(object sender, MouseEventArgs e) 

    { 
      if (e.X >= 100 && e.X <= 150 && e.Y >= 200 && e.Y <= 250) 
       { 
        toolStripStatusLabel1.Text = "Point A"; 

        Label lblA = new Label(); 
        lblA.Text = "Point A"; 
        lblA.Location = new System.Drawing.Point(e.X, e.Y); 

        lblA.AutoSize = true; 
        DrawingPanel2.Controls.Add(lblA); 
       } 

       else 
       { 
        toolStripStatusLabel1.Text = e.X + "," + e.Y; 
        DrawingPanel2.Controls.Clear(); 
       } 
     } 
相关问题