只要對下面顯示的控件感到好奇,那就是旁邊有標籤的直線。我試圖爲它找到一個類似的控件,但沒有任何組件框設置,所以我只是創建了一個高度爲2的GroupBox來複制它。這是什麼控制?組盒或不!
但是,有沒有一個實際的控制或設置來做到這一點?實際的控制是什麼?
只要對下面顯示的控件感到好奇,那就是旁邊有標籤的直線。我試圖爲它找到一個類似的控件,但沒有任何組件框設置,所以我只是創建了一個高度爲2的GroupBox來複制它。這是什麼控制?組盒或不!
但是,有沒有一個實際的控制或設置來做到這一點?實際的控制是什麼?
Spy++告訴我們這些實際上是兩個單獨的STATIC
controls(類似於WinForms中的Label
)。
第一個只是一個常規的靜態文本控件,說「主頁」。
第二個設置爲SS_ETCHEDHORZ
style,這使得它繪製爲3D線。不幸的是,設置這種風格的能力沒有在WinForms中暴露給我們。
正如你在這個問題指出,有一些黑客/變通方法,使我們能夠實現類似的外觀,像垂直壓縮GroupBox
控制,或覆蓋一個Label
控制的OnPaint
方法和使用ControlPaint
類繪製一個3D邊框。他們工作,但我從來不喜歡他們。
但是你可以實際上自己設置SS_ETCHEDHORZ
樣式,以便您可以精確複製原生UI。這是一個小班,完全是這樣。將它添加到您的項目中,進行編譯,您應該看到一個新的控件出現在您的工具箱中,名爲「HorizontalRule」。像使用其他任何控件一樣使用它!
public class HorizontalRule : Control
{
private const int FixedHeight = 2;
private const int WS_CHILD = 0x40000000;
private const int WS_VISIBLE = 0x10000000;
private const int SS_ETCHEDHORZ = 0x00000010;
private const int SS_ETCHEDVERT = 0x00000011;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ClassName = "STATIC";
cp.Style = WS_CHILD | SS_ETCHEDHORZ;
if (this.Visible)
{
cp.Style |= WS_VISIBLE;
}
return cp;
}
}
protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
{
height = FixedHeight;
base.SetBoundsCore(x, y, width, height, specified);
}
}
您還可以找到更多詳細信息和附加示例代碼here on CodeProject。
我幾年前有同樣的問題,最終只是擬定的目的的線。
事實上,我甚至使用了足夠長的寬度的一個固定線圖像,以便通過顯示圖像所需的部分(寬度)可以用於所有情況。
此解決方案對我來說工作得很好。
如果未來版本的Windows中控件的樣式發生更改,則使用圖像將會出現問題。你的控制仍然會有舊的風格。 – 2011-02-04 12:05:43