2012-02-10 22 views
1

私はVB.NET WinFormsアプリケーションを持っています。 GDI +を使用して、プログラムでパネル上に多数の図形を描画しています。 今、私はそのパネルの小さな四角い部分を何らかの形で強調したいと思います。強調表示された領域は多くの動きをします。あまりにも多くの処理が関係しており、フリッカーが発生するため、パネル全体を再描画したくありません。 これを実行する最良の方法は何ですか?パネルエリアの強調表示

ありがとうございました。

+0

あなたは何を意味する「強調表示された領域は、たくさんの周りに移動しますか」?これはあなたがマウスでつかむ半透明の固定矩形のようなものですか?または、mousedown-mousemove-mouseupの操作で領域を強調していますか?もっと文脈をしてください。 – LarsTech

答えて

1

透明パネルを既存のパネルの子として追加して(ドッキングして)、透明パネルでハイライト表示できますか?ここで

は非常に初歩的な例です:

public partial class Form1 : Form 
{ 
    private Panel pan = new Panel(); 
    private Panel trans = new Panel(); 

    private bool clicked { get; set; } 
    private Point mouse { get; set; } 

    public Form1() 
    { 
     InitializeComponent(); 
     this.Load += new EventHandler(Form1_Load); 
    } 

    public void Form1_Load(object sender, EventArgs e) 
    { 
     pan.Dock = DockStyle.Fill; 
     pan.BackColor = Color.White; 

     trans.Dock = DockStyle.Fill; 
     trans.BackColor = Color.FromArgb(0, 0, 0, 0); 

     pan.Paint += new PaintEventHandler(DrawSomeShapes); 
     trans.MouseClick += new MouseEventHandler(trans_MouseClick); 
     trans.Paint += new PaintEventHandler(DrawHighlight); 

     pan.Controls.Add(trans); 
     this.Controls.Add(pan); 

     trans.BringToFront(); 
    } 

    public void DrawSomeShapes(object sender, PaintEventArgs e) 
    { 
     var g = e.Graphics; 

     var p = new Pen(Color.Black, 1F); 
     g.DrawRectangle(p, new Rectangle(0, 0, 100, 100)); 
     g.DrawRectangle(p, new Rectangle(20, 20, 50, 50)); 
     g.DrawRectangle(p, new Rectangle(10, 50, 100, 25)); 
     g.DrawRectangle(new Pen(Color.Red, 1F), new Rectangle(new Point(50, 50), new Size(50, 50))); 
    } 

    public void DrawHighlight(object sender, PaintEventArgs e) 
    { 
     if (clicked) 
     { 
      var g = e.Graphics; 
      var b = new SolidBrush(Color.FromArgb(50, 50, 50, 50)); 
      g.FillRectangle(b, mouse.X, mouse.Y, 50, 50); 

      clicked = false; 
     } 
    } 

    public void trans_MouseClick(object sender, MouseEventArgs e) 
    { 
     mouse = e.Location; 
     trans.Invalidate(); 
     clicked = true; 
    } 
} 
+0

それはうまくいった。おかげさまで – mcu

関連する問題