每Control
有一個Paint
事件。您必須訂閱此事件並查看給定的參數。 sender
是應該繪製的當前控件。你可以在你的方法中將它投射到Control
。現在你可以通過檢查control.Focused
來檢查控件是否關注它,如果它是真的,只需在PaintEventArgs的圖形對象內做任何你喜歡的事情。這可以進一步封裝在擴展方法中,使得使用相當容易。
public static void DrawBorderOnFocused(this Control control)
{
if(control == null) throw new ArgumentNullException("control");
control.Paint += OnControlPaint;
}
public static void OnControlPaint(object sender, PaintEventArgs e)
{
var control = (Control)sender;
if(control.Focused)
{
var graphics = e.Graphics;
var bounds = e.Graphics.ClipBounds;
// ToDo: Draw the desired shape above the current control
graphics.DrawLine(Pens.BurlyWood, new PointF(bounds.Left, bounds.Top), new PointF(bounds.Bottom, bounds.Right));
}
}
在代碼中的使用將隨後是這樣的:
public MyClass()
{
InitializeComponent();
textBox1.DrawBorderOnFocused();
textBox2.DrawBorderOnFocused();
}
[這](http://stackoverflow.com/questions/42460/custom-titlebars-chrome-in-a- winforms-app)非常接近你想要的。 – mbm
您是否需要應用程序的UI元素或任何應用程序的邊框? – Oliver
@Oliver在我自己的應用程序 – haynar