0

私は C# .NET で WinForm アプリケーションを作成しています。ユーザーがクリックしたときに、アプリケーションの UI コンポーネントに破線/点線またはその他の種類の境界線を追加する必要があります。Visual Studio で WinForm GUI エディターのようなものを入手したいと思います。

私は .NET を初めて使用するので、ネイティブ メソッドとプロパティを介して何が可能で、自分で実装する必要があるのか​​よくわかりません。ネットとここで何かを見つけようとしましたが、何を検索すればよいかわかりません。さまざまなアプローチがあります。たとえば、人為的に境界線を描くことは可能です。つまり、グラフィックスを使用することです。しかし、もっと簡単なアプローチが必要だと思います。

何をアドバイスできますか?この状況でのベストプラクティスは何ですか? コードの一部を提供してください。

4

1 に答える 1

3

すべてControlPaintイベントがあります。このイベントをサブスクライブして、指定された引数を調べる必要があります。senderペイントする必要がある現在のコントロールです。メソッド内でにキャストできますControl。これで、コントロールがフォーカスされているかどうかをチェックしてチェックできます。control.Focusedそれがtrueであるかどうかは、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 に答える