[英]Visual Studio Panel mapping
我有一個程序,可以在panel
上繪制簡單的形狀,它可以跟蹤鼠標的移動。
private void DrawingPanel_MouseMove(object sender, MouseEventArgs e)
{
toolStripStatusLabel1.Text= e.X + "," + e.Y;
}
我想知道是否可以通過某種方式“映射”面板。 映射是指創建區域(具有rectangle coords
fe),當我將鼠標懸停在該區域時,該區域將在光標上顯示一些消息或彈出信息。
可以做這樣的事情嗎?
編輯:要清楚-我不使用mouseEvent在面板上繪制形狀。 我用側面菜單上創建的按鈕繪制它們。
EDIT2:示例:我畫了矩形(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>();
這是我設置列表和動畫計時器的方法:
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
。
我認為制作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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.