如果您想要,您可以为您的绘图面板创建单独的“视口”。
为此,您的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>();
下面是我如何设置列表和动画计时器:
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
,其中,就如同ForeColor
,Fonts
,然后一些,最好是一个ViewPort
类的一部分;这样的类还可以举行一个Draw
方法,你会从面板的Paint
事件打电话,传递出e.Graphics
参数..
如果你不想/需要你的输出坚持,这很可能如果是工具提示,您可以跳过Paint
事件;对于这种情况,我会传出视口,参照其中的目标面板,并使用CreateGraphics
,其代码与上面几乎相同。
来源
2017-01-19 16:50:52
TaW
我正在寻找正确的理解:您正在将鼠标悬停在面板上。你想看到一些弹出式(标签)随鼠标一起移动,显示例如鼠标的坐标,是吗? – Tatranskymedved
不完全是,因为我可以在这个面板上绘制形状,我将跟踪这些形状的坐标。后来,当我将鼠标悬停在创建的形状上时,我想创建一些弹出消息。 – mymek
回答你的问题。对的,这是可能的。请缩小问题的范围。 – TyCobb