2017-01-19 1 views
0

私はpanelで簡単な図形を描くことができ、マウスの動きを追跡するプログラムを持っています。Visual Studioパネルマッピング

私は自分のパネルを「マップ」できる方法があるのだろうかと思っていました。 マッピングとは、この領域にマウスカーソルを合わせると、カーソル上にメッセージやポップアップ情報が表示される領域を作成することです(rectangle coords f.e.)。

このようなことは可能ですか?

編集:明確にするために、私はパネル上にシェイプを描くためにmouseEventを使用しません。私は、サイドメニューに作成されたボタンでそれらを描きます。

EDIT2: 例:矩形(10、10、20、20)を描きました。マウスをマウスの指先で動かすと、カーソルにポップアップが表示されます。好きSomethinkg:

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

私は適切な理解を求めています:パネル上にマウスを移動&ホバリングしています。そして、あなたはポップアップ(ラベル)がマウスの動きに沿って動くのを見たいと思っています。マウスのコーズ、そうですか? – Tatranskymedved

+0

正確には、私はこのパネル上に図形を描くことができるので、それらの図形の座標を追跡します。そして、後で、マウスを作成した形にマウスを置くとポップアップメッセージが表示されます。 – mymek

+0

あなたの質問に答えてください。はい、可能です。質問の範囲を狭めてください。 – TyCobb

答えて

2

あなたは、あなたがあなたの描画パネルの個々の「ビューポート」を作成することができますしたい場合。

このため、PaintイベントはGraphicsオブジェクトを設定する必要があり、それらの 'ポート'に描画できます。ここで

は最小限の例です..:私は常に(0,0)を調整するために描くことができますどのように

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); 
    } 
} 

注:

enter image description here

Paintイベントは、3つの異なるビューポートに現在のMSを描きます!ビューポートを変更

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を使用しますが、で描画しません。私はリストやアニメーションタイマーを設定する方法

ここ
List<Rectangle> ViewPorts = new List<Rectangle>(); 
List<Color> colors = new List<Color>(); 

は次のとおりです。

は、それはいくつかの変数を使用しています具体的にデータInvalidatePanelに変更すると、データが変更されるたびに ..

私はちょうどForeColorFontsその後、いくつかのように、より良いViewPortクラスの一部である必要があり、BackColorを追加しました。そのようなクラスはまた、あなたがしたくない場合は/あなたの出力はに必要

..あなたはe.Graphicsパラメータを渡して、パネルのPaintイベントから呼び出しますDraw方法を保持することができただけでなくかもしれない、を持続ツールチップの場合は、をスキップPaintイベントにすることができます。この場合、私はビューポートを渡し、ターゲットパネルへの参照を持ち、CreateGraphicsとほぼ同じコードを使用します。

0

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(); 
       } 
     }