如何使用戶可以看到拆分面板拆分器,而不是僅在鼠標懸停時更改光標才能看到拆分面板拆分器?使拆分器對拆分面板可見
回答
嘗試設置邊框到Fixed3D
的一種方法是改變分配器的BackColor
和Width/Height
性質(取決於分路器的方向)
除了使得其邊框Fixed3D作爲@BlueMonkMN建議我經常發現splitContainer對象的默認SplitterWidth值爲4,有點窄。
如果你把它增加到6,用3D邊框,對用戶來說就更加明顯了。
您可以通過將以下事件處理程序添加到splitcontainer繪畫事件來繪製您自己的分隔欄。
private void SplitterPaint(object sender, PaintEventArgs e)
{
SplitContainer s = sender as SplitContainer;
if (s != null) {
int top = 5;
int bottom = s.Height - 5;
int left = s.SplitterDistance;
int right = left + s.SplitterWidth - 1;
e.Graphics.DrawLine(Pens.Silver, left, top, left, bottom);
e.Graphics.DrawLine(Pens.Silver, right, top, right, bottom);
}
}
賈爾斯巴斯蓋特的回答改進型:
private void ds_SplitContainer_Paint(object sender, PaintEventArgs e)
{
SplitContainer l_SplitContainer = sender as SplitContainer;
if (l_SplitContainer != null)
{
Rectangle ll_ShrinkedSplitterRectangle = l_SplitContainer.SplitterRectangle;
ll_ShrinkedSplitterRectangle.Offset(0, 2);
ll_ShrinkedSplitterRectangle.Height = ll_ShrinkedSplitterRectangle.Height - 2;
e.Graphics.FillRectangle(Brushes.Silver, ll_ShrinkedSplitterRectangle);
}
}
這個問題的出現是由於SplitContainer
控制具有設置可拖動分割條本身的樣式,沒有直接的財產。
有幾種方法可以做到這一點,即使這裏發佈的其他答案有效,下面與我分享的答案最終也是快速,可靠和最簡單的方法。
@BluMonkMN建議使用3D邊框的方法,但如果您不想要任何邊框?
@Giles Bathgate建議添加一個Paint事件處理程序,儘管它確實很優雅並且可以工作,但它的性能成本很低,需要您向C#級別執行的項目添加更多代碼,並且可能有一天會成爲維護問題。
@Philip Fourie建議更改SplitContainer.BackColor
屬性值;然而,最初導致控件的整個背景改變顏色,而不僅僅是分隔條,導致沒有顏色對比。
所以,我的解決方案是@Philip Fourie的增強。
首先,我會提及的是,SplitContainer
實際上有兩個不同的子容器,它們都被分隔條隔開。這兩個屬性由Panel1
和Panel2
屬性表示。除了其他幾個屬性外,它們中的每一個本質上都是一個具有自己的BackColor
屬性的Panel容器。
該SplitContainer
有它的自己BackColor
財產,使共有三種獨特的可能顏色。
現在,如果你要設置這個SplitContainer.BackColor
屬性,則Panel1
和Panel2
「子控件」將自動繼承顏色值,而現在他們全是一樣的,沒有造成視覺反差!當Panel1.BackColor
和/或Panel2.BackColor
屬性有尚未明確由您定
這[可能不受歡迎]屬性值繼承只發生(儘管在未來的時間Visual Studio的屬性窗口中查看其屬性值就會顯露「控制」)
因此,您所設置的屬性的順序很重要:
- 同時設置了「孩子」
Panel1.BackColor
和Panel2.BackColor
屬性,其他的東西比「精讀的默認值trol「強制一個明確的值(即使你真的想要」控制「;我們稍後會修復。) - 將「父」
SplitContainer.BackColor
設置爲您希望分隔條所需的顏色。 - 最後,返回並設置
Panel1.BackColor
和Panel2.BackColor
屬性,你希望他們爲彩色(也許回「控制」。)
而作爲@Philip福裏回答,您不妨設置Width屬性,實際上是統一進行命名SplitterWidth
,無論的[水平與垂直] Orientation
財產。
下面是一些有用的提示:
雖然在Visual Studio窗體設計器的工作,如果你在SplitContainer
點擊分隔欄的兩側,你會選擇那Panel1
或Panel2
「孩子」子容器。但是,如果您單擊分隔欄本身,您將選擇「父」SplitContainer
。
與@Stuart Helwig建議的相關,默認SplitterWidth
將導致分隔欄在其焦點處被勾勒出來,從而模糊了您選擇的顏色。將值提高到5
,6
或更高,這也使得最終用戶更容易抓取拖動。
完成。快樂編碼!
這是一個快速實現的水平分割器,它填充了一種顏色,有一個頂部和底部邊界(類似於Visual Studio分割器),中間是抓手點。
private void splitContainer_Paint(object sender, PaintEventArgs e)
{
SplitContainer s = sender as SplitContainer;
if (s != null)
{
int gripLineWidth = 9;
// Fill Splitter rectangle
e.Graphics.FillRectangle(SystemBrushes.ControlDark,
s.SplitterRectangle.X, s.SplitterDistance, s.SplitterRectangle.Width, s.SplitterWidth);
// Draw Single Line Border on Top and Bottom
e.Graphics.DrawLine(Pens.LightSlateGray,
s.SplitterRectangle.X, s.SplitterDistance, s.SplitterRectangle.Width, s.SplitterDistance);
e.Graphics.DrawLine(Pens.LightSlateGray,
s.SplitterRectangle.X, s.SplitterDistance + s.SplitterWidth - 1, s.SplitterRectangle.Width, s.SplitterDistance + s.SplitterWidth - 1);
// Draw gripper dots in center
e.Graphics.DrawLine(_dashedPen,
((s.SplitterRectangle.Width/2) - (gripLineWidth/2)),
s.SplitterDistance + s.SplitterWidth/2,
((s.SplitterRectangle.Width/2) + (gripLineWidth/2)),
s.SplitterDistance + s.SplitterWidth/2);
}
}
您可以創建一個筆在類執行,這將在類似於畫虛線繪製一個成員變量:
private static Pen _dashedPen = new Pen(Color.DarkRed, 1);
_dashedPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
您是否可以包含初始化虛線筆的代碼? – 2017-04-24 21:34:34
設置SplitContainer
的BackColor
屬性不同顏色。讓我們說黑色。然後每個SpliterPanel
,將其BackColor
屬性更改爲不同的顏色。說白了。然後你會注意到SplitLine會變得更加明顯。 :)
這與GlobalSoftwareSociety的回答相同 – TheLethalCoder 2016-02-08 11:32:11
分隔線實際上是可見的。真正的問題是很難區分與其他控制。
一個想法是爲拆分容器設置新的背景色,並使其與子面板不同。
也許有時我們可以從設計者的角度解決問題,而不是開發人員的問題。 :-)
這與GlobalSoftwareSociety的回答相同 – TheLethalCoder 2016-02-08 11:31:34
您可以在設計器中使用SplitterColor來更改分隔線邊框顏色。
public class SplitContainerCustomSplitter : SplitContainer
{
[DefaultValue(typeof(Color), "Black")]
public Color SplitterColor { get; set; } = Color.Black;
protected override void OnPaint(PaintEventArgs pevent)
{
Graphics g = pevent.Graphics;
Rectangle rect = SplitterRectangle;
using (Pen pen = new Pen(SplitterColor))
{
if (Orientation == Orientation.Vertical)
{
g.DrawLine(pen, rect.Left, rect.Top, rect.Left, rect.Bottom - 1);
g.DrawLine(pen, rect.Right - 1, rect.Top, rect.Right - 1, rect.Bottom - 1);
}
else
{
g.DrawLine(pen, rect.Left, rect.Top, rect.Right - 1, rect.Top);
g.DrawLine(pen, rect.Left, rect.Bottom - 1, rect.Right, rect.Bottom - 1);
}
}
}
}
嘗試一些在這裏,而不是建議會哄我的方法後,我決定把在PANEL1和是Panel2薄的標籤,對齊到分離器,一切都OK。
(label's.Autosize=false, label's.Text = "", label's.Color=SystemColor.Selected, label1.Dock=left; label2.Dock=right)
- 1. 可可PDF頁面拆分
- 2. JSF頁面拆分
- 3. 如何在EXT-GWT中拆分面板?
- 4. 拆分可變參數模板參數
- 5. SIGSEGV類拆分器
- 6. FreeIPA拆分容器
- 7. 拆分
- 8. 拆分
- 9. 在html/css中「硬」字拆分/拆分
- 10. 拆分已拆分窗格(MFC)
- 11. 拆分文本與拆分功能
- 12. 如何在頁面拆分時停止拆分表格邊框?
- 13. 使用SQL拆分
- 14. 水平分割面板在GWT中的拆分位置
- 15. 將頁面拆分爲2個部分
- 16. vimrc拆分欄可移動
- 17. 保持一個拆分容器面板的固定寬度?
- 18. 如何讓TextBox控件填充拆分容器面板?
- 19. 如何更改DevExpress拆分容器控件面板名稱?
- 20. 拆分的對象屬性
- 21. 拆分窗格gui對象
- 22. 拆分對象陣列
- 23. 拆分和非拆分數據框分爲四部分
- 24. 拆分頁面垂直使用CSS
- 25. SSIS使用條件拆分或腳本在平面文件中拆分行
- 26. itertools tee()迭代器拆分
- 27. Java掃描器拆分ArrayOutOfBounds
- 28. 拆分相關還原器
- 29. 拆分PHP生成器
- 30. HornetQ消息拆分器
這適用於分離器垂直取向時,代碼可以改進爲無論方向如何工作。 – 2012-05-02 11:02:47
是的,它可以簡化爲:'e.Graphics.FillRectangle(Brushes.LightGray,s.SplitterRectangle);' – Brett 2017-06-13 20:29:05