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完成的?