我在C#.NET中编写WinForm应用程序,当用户点击它时,我需要在应用程序的任何UI组件中添加虚线/点线或任何其他类型的边框。我想在Visual Studio中获得类似WinForm GUI编辑器的东西。
我是.NET的新手,所以我不太清楚通过本机方法和属性可能实现什么,以及我需要自己实现什么。我试图在网上找到一些东西,但我不知道该搜索什么,有不同的方法。例如,可以人工绘制边框,我的意思是使用图形。但我想应该有更简单的方法。
你有什么建议?在这种情况下,最佳做法是什么?请提供部分代码。
答案 0 :(得分:3)
每个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();
}