簡體   English   中英

Visual Studio面板映射

[英]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 ,就像ForeColorFonts以及某些一樣,它最好是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM