Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VisualStudio面板映射_C#_Visual Studio_Mapping_Panel - Fatal编程技术网

C# VisualStudio面板映射

C# VisualStudio面板映射,c#,visual-studio,mapping,panel,C#,Visual Studio,Mapping,Panel,我有一个程序,我可以在面板上画简单的形状,它可以跟踪我的鼠标移动 private void DrawingPanel_MouseMove(object sender, MouseEventArgs e) { toolStripStatusLabel1.Text= e.X + "," + e.Y; } 我想知道是否有什么方法可以“映射”我的面板。 通过映射,我的意思是创建区域(使用矩形坐标f.e.),当我将鼠标悬停在该区域上时,该区域将在光标上显示一些消息或弹出信息 有可能做那样

我有一个程序,我可以在
面板上画简单的形状,它可以跟踪我的鼠标移动

 private void DrawingPanel_MouseMove(object sender, MouseEventArgs e)
 {
     toolStripStatusLabel1.Text= e.X + "," + e.Y;
 }
我想知道是否有什么方法可以“映射”我的面板。 通过映射,我的意思是创建区域(使用
矩形坐标
f.e.),当我将鼠标悬停在该区域上时,该区域将在光标上显示一些消息或弹出信息

有可能做那样的事吗

编辑:要清楚-我不使用mouseEvent在面板上绘制形状。我用侧菜单上创建的按钮绘制它们

编辑2: 示例:我画了矩形(10,10,20,20)。当我将鼠标悬停在这些坐标上时,我想在光标处弹出一个窗口。比如:

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

如果需要,可以为图形面板创建单独的“视口”

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

以下是一个最简单的示例..:

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>();
您将不使用
计时器
,而是通过更改特定于视口的数据并在
面板
上调用
无效
来绘制数据

我添加了一个
背景色
,它与
前景色
字体
以及一些字体一样,最好是
视口
类的一部分;这样的类还可以保存一个
Draw
方法,您可以从面板的
Paint
事件调用该方法,并传递
e.Graphics
参数


如果您不想/不需要将输出持久化,工具提示可能就是这样,您可以跳过
绘制事件;在这种情况下,我将传递视口,在其中引用目标面板,并使用与上面几乎相同的代码使用
CreateGraphics

如果需要,可以为图形面板创建单独的“视口”

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

以下是一个最简单的示例..:

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>();
您将不使用
计时器
,而是通过更改特定于视口的数据并在
面板
上调用
无效
来绘制数据

我添加了一个
背景色
,它与
前景色
字体
以及一些字体一样,最好是
视口
类的一部分;这样的类还可以保存一个
Draw
方法,您可以从面板的
Paint
事件调用该方法,并传递
e.Graphics
参数


如果您不想/不需要将输出持久化,工具提示可能就是这样,您可以跳过
绘制事件;在这种情况下,我将传递视口,在其中引用目标面板,并使用与上述代码几乎相同的
CreateGraphics

我认为制作ma面板“地图”的最简单方法是在
MouseMove事件中创建区域,如果鼠标移动到该区域上,将创建带有文本的标签。例如,一个区域的坐标为100150200250,如下所示:

 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();
                }
        }
public void DrawingPanel2\u MouseMove(对象发送器,MouseEventArgs e)
{

如果(e.X>=100&&e.X=200&&e.Y我认为制作ma面板“地图”的最简单方法是在
MouseMove event
中创建区域,如果鼠标移动到该区域上,将创建带有文本的标签。例如,一个区域的坐标为100150200250,如下所示:

 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();
                }
        }
public void DrawingPanel2\u MouseMove(对象发送器,MouseEventArgs e)
{

如果(e.X>=100&&e.X=200&&e.Y,我正在寻找正确的理解:您正在将鼠标移动并悬停在面板上。您希望看到一些弹出窗口(标签)随着鼠标移动显示例如鼠标的坐标,对吗?不完全正确,因为我可以在此面板上绘制形状,我将跟踪这些形状的坐标。稍后我想在将鼠标悬停在创建的形状上时创建一些弹出消息。回答您的问题。是的,这是可能的。请缩小问题的范围。我给出了一个EDIT2中的示例。另外,您使用的是win forms/GDI+?还是通过WPF完成的?我正在寻找正确的理解:您正在将鼠标移动并悬停在面板上。您希望看到一些弹出窗口(标签)随着鼠标移动显示例如鼠标的坐标,对吗?不完全正确,因为我可以在此面板上绘制形状,我将跟踪这些形状的坐标。稍后我想在将鼠标悬停在创建的形状上时创建一些弹出消息。回答您的问题。是的,这是可能的。请缩小问题的范围。我给出了一个还有,您是使用win forms/GDI+?还是通过WPF完成的?