2015. 6. 10. 16:15ㆍCoders
SplitContainer 를 모르시면 우선.
System.Windows.Forms.SplitContainer 는, 두 개의 컨트롤(패널 등)을 올려서 양 쪽의 사이즈를 조절할 수 있게 해 줍니다. 이거 말고, Splitter 라는 단독으로 사용하는 컨트롤도 있으나, 이는, 용도가 약간 다르며, 주로 사용되어지는(제 경우) 컨트롤은 SplitContainer 라고 할 수 있겠습니다.
SplitContainer는, 컨트롤을 2개 다 보여주고, 양 쪽의(위.아래 또는 좌.우) 컨트롤의 사이즈를 조절해 가며 보기 위해 사용하는 것이 대부분이지만, 때로는 어떤 조건에 따라 어느 하나의 컨트롤만 화면에 표시해 줄 경우, Panel1Collapsed, Panel2Collapsed 의 속성(Boolean)을 세팅하여 적절하게 사용할 수 있습니다.
※ 덧붙이자면, Panel1Collapsed, Panel2Collapsed 속성은 둘 다 false 가 될 수는 있어도, 둘 다 true가 될 수는 없습니다.(혹시 되나요?) 어느 한 속성을 true로 세팅하면, 다른 하나는 false 가 됩니다.
단순히 그거 설명하는 글이라면 필요 없겠죠.
패널을 접을 때, 좀 뭔가 움직이는 것 같은 효과를 주는 코드 입니다.(Animatedly? Simultaneously? Smoothly?) 아무튼, 이름은 그냥 ~Animatedly 로 지었습니다.
소스 입니다.(응용하여, SplitContainer를 상속받은 컨트롤을 만들어 쓸 수도 있겠죠.)
using System.Windows.Forms; /// </summary> /// 스플리터를 스무스하게 Collapse /// </summary> /// </param name="splitter">대상 스플리터</param> /// </param name="panel1Collapse">Panel1 을 접을 지 여부</param> /// </param name="stepDivider">사이즈 Divider (클 수록 접는 시간 길어짐)</param> public static void SplitterCollapseAnimatedly( SplitContainer splitter, bool panel1Collapse, int stepDivider) { try { Cursor.Current = Cursors.WaitCursor; int maxSize = splitter.Orientation == Orientation.Vertical ? splitter.Width : splitter.Height; int stepSize = (int)(maxSize / stepDivider); splitter.Panel1Collapsed = false; splitter.Panel2Collapsed = false; if (panel1Collapse) { splitter.SplitterDistance = maxSize; while (splitter.SplitterDistance > 0) { int oldDistance = splitter.SplitterDistance; int newDistance = oldDistance; newDistance -= stepSize; if (newDistance < 0) { splitter.Panel1Collapsed = true; break; } splitter.SplitterDistance = newDistance; Application.DoEvents(); if (oldDistance == splitter.SplitterDistance) { splitter.Panel1Collapsed = true; break; } } } else { splitter.SplitterDistance = 0; while (splitter.SplitterDistance < maxSize) { int oldDistance = splitter.SplitterDistance; int newDistance = oldDistance; newDistance += stepSize; if (newDistance >= maxSize) { splitter.Panel2Collapsed = true; break; } splitter.SplitterDistance = newDistance; Application.DoEvents(); if (oldDistance == splitter.SplitterDistance) { splitter.Panel2Collapsed = true; break; } } splitter.Panel2Collapsed = true; } } catch (System.Exception ex) { throw ex; } finally { Cursor.Current = Cursors.Default; } }
사용법은 간단합니다.
//직접 어떤 걸 접을 지 정해주는 경우 SplitterCollapseAnimatedly(this.mySplitContainer, true, 20); //그냥 토글로 하고 싶을 경우 SplitterCollapseAnimatedly(this.mySplitContainer, (this.mySplitContainer.Panel1Collapsed == false), 20);
즐거운 코딩 생활 되셔요. ㅋ
'Coders' 카테고리의 다른 글
[C#] ClosedXML, Spire.XLS 무료 버전 사용 시 AutoFitColumns 버그 (0) | 2015.08.12 |
---|---|
인치를 쓰는 미쿡놈들. (0) | 2015.05.14 |
[ASP.NET] Page_Load 에서 Response 종료하는 코드 (0) | 2015.02.17 |