0

我正在用 C# .NET 编写 WinForm 应用程序,当用户单击它时,我需要向应用程序的任何 UI 组件添加虚线/点线或任何其他类型的边框。我想在 Visual Studio 中获得类似 WinForm GUI 编辑器的东西。

我是 .NET 的新手,所以我不太清楚通过本机方法和属性可以实现什么,以及我需要自己实现什么。我试图在网上和这里找到一些东西,但我不确定要搜索什么,有不同的方法。例如可以人工绘制边框,我的意思是使用图形。但我想应该有更简单的方法。

你有什么建议?在这种情况下,最佳做法是什么?请提供部分代码。

4

1 回答 1

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();
}
于 2012-08-28T08:17:44.353 回答