1
我有一個VB.NET WinForms應用程序。 我正在使用GDI +以編程方式在面板上繪製一堆形狀。 現在我想以某種方式突出該面板的一個小矩形部分。突出顯示的區域會移動很多。我不想重新繪製整個面板,因爲涉及的處理過多,會導致閃爍。 這是做什麼最好的方法?突出顯示面板區域
謝謝。
我有一個VB.NET WinForms應用程序。 我正在使用GDI +以編程方式在面板上繪製一堆形狀。 現在我想以某種方式突出該面板的一個小矩形部分。突出顯示的區域會移動很多。我不想重新繪製整個面板,因爲涉及的處理過多,會導致閃爍。 這是做什麼最好的方法?突出顯示面板區域
謝謝。
您可以添加透明面板作爲現有面板的子面(並停靠它),然後在透明面板上進行高亮顯示嗎?
這裏是一個非常基本的例子:
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;
}
}
工作。 謝謝。 – mcu 2012-02-11 02:42:31
你說的「加亮區域將周圍很多移動」是什麼意思?這是一種固定的矩形,是用鼠標抓住的半透明的嗎?或者你是否通過mousedown-mousemove-mouseup動作突出顯示該區域?請更多的背景。 – LarsTech 2012-02-10 17:36:17