2012-08-28 41 views
0

我在C#.NET中編寫WinForm應用程序,當用戶單擊它時,我需要爲應用程序的任何UI組件添加虛線/點或任何其他類型的邊框。我想在Visual Studio中獲得類似WinForm GUI編輯器的內容。在WinForm中創建邊界控件的最佳實踐

我是.NET新手,所以我不太清楚可以通過本機方法和屬性以及我需要實現的東西。我試圖在網上找到一些東西,但我不確定搜索什麼,有不同的方法。例如,可以人爲繪製邊框,我的意思是使用圖形。但我想應該有更簡單的方法。

你有什麼建議?這種情況下的最佳做法是什麼?請提供一些代碼部分。

+0

[這](http://stackoverflow.com/questions/42460/custom-titlebars-chrome-in-a- winforms-app)非常接近你想要的。 – mbm

+0

您是否需要應用程序的UI元素或任何應用程序的邊框? – Oliver

+0

@Oliver在我自己的應用程序 – haynar

回答

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(); 
} 
+0

漂亮的擴展。 – mbm

+0

很好的解決方案,但這似乎只適用於按鈕,它不適用於例如文本字段或樹木 – haynar

+0

我猜'PaintEventArgs'只能在'Paint'事件中訪問嗎? – haynar