TabControl
의 탭을 프로그래밍 방식으로 재정렬하려면 어떻게합니까? 조건에 따라 탭을 정렬해야합니다.프로그래밍 방식으로 탭 순서 변경
디자이너를 통해 재정렬을 수행 할 수 있다면 런타임시 코드를 통해이를 수행 할 수 있어야합니다.
TabControl
의 탭을 프로그래밍 방식으로 재정렬하려면 어떻게합니까? 조건에 따라 탭을 정렬해야합니다.프로그래밍 방식으로 탭 순서 변경
디자이너를 통해 재정렬을 수행 할 수 있다면 런타임시 코드를 통해이를 수행 할 수 있어야합니다.
탭 페이지의 색인을 변경하려면 탭 페이지 모음을 다시 정의해야합니다.
this.TabControl1.TabPages.Remove(this.TabPage2)
this.TabControl1.TabPages.Insert(0, this.TabPage2)
탭 페이지를 제거하지 못하면 이전 위치에 계속 표시됩니다. 즉, 동일한 탭 페이지에 대해 두 개의 탭을 갖게됩니다.
thelost가 맞습니다. 다음은 간단한 샘플 코드입니다.
는 I 2 개 탭 (tabpage1, tabpag2)
그럼 I 두 tabpages을 선언하고 그 안에있는 TabControl에서 기존 탭 저장소와 탭 컨트롤을 갖는다.
abPage tbp1 = new TabPage();
TabPage tbp2 = new TabPage();
tbp1 = tabControl1.TabPages[0];
tbp2 = tabControl1.TabPages[1];
그런 다음 버튼을 나는 당신이 위에있는 순서대로 탭에 추가합니다 다음 순서를 변경하려는 경우 지금
tabControl1.TabPages.Remove(tabControl1.TabPages[0]);
를 사용하여 탭을 제거 클릭
//Order changed
tabControl1.TabPages.Add(tbp2);
tabControl1.TabPages.Add(tbp1);
참고 : 테스트되지 않은 빠른 코드입니다.
이동 내부 Designer.cs 당신은 추가 주문이있는 TabControl에 tabpages '순서입니다
/// [Your TabControl Name]
yourTabControl.Controls.Add(yourPage1);
yourTabControl.Controls.Add(yourPage2);
yourTabControl.Controls.Add(yourPage3);
찾을 수있다
파일. 원하는대로 주문을 변경하십시오. Shoban이 답변 한대로 TabControl.Controls의 기능을 제거하고 추가하면 도움이됩니다.
sendToBack 및 BringToFront는 zorder positon을 변경해야합니까? 즉,이 탭 페이지의 직접 온타리오 컨트롤이 있고 탭 페이지에서 bringToFront를했으면 이전에 탭 페이지가 아닌 이전의 탭 페이지가 표시됩니다. 이 함수는 대신 탭의 위치를 다시 지정하라는 제안을하는 것처럼 들립니다. – Chris
@Chris 내일 확인해 보겠습니다. 맞을지도 모릅니다. – icaptan
@Chris 당신 말이 맞아요. 전 BringToFront를 테스트했습니다. FlowLayoutPanel에서는 작동하지만 TabControl에서는 작동하지 않습니다. – icaptan
Initilizacomponent() 후에 시도하십시오. 이 코드는 프로그래밍 방식으로 .cs 파일에서 자유롭게 변경할 수있는 코드를 제공합니다.
또한 트릭을 할, 이러한 유형의 솔루션은 또한 정렬 직접적인 방법이 없습니다 데이터의 다른 종류의 작동 할 수있는 코드의 다음 줄
this.tabReceive.Controls.Remove(this.metroTabPage4);
this.tabReceive.Controls.Remove(this.metroTabPage5);
this.tabReceive.Controls.Add(this.metroTabPage4);
this.tabReceive.Controls.Add(this.metroTabPage5);
: 을 - 목록 로 변환 - 목록 을 정렬 - 다시 넣기
public static void Sort(TabControl tabControl)
{
var tabList = tabControl.TabPages.Cast<TabPage>().ToList();
tabList.Sort(new TabPageComparer());
tabControl.TabPages.Clear();
tabControl.TabPages.AddRange(tabList.ToArray());
}
public class TabPageComparer : IComparer<TabPage>
{
public int Compare(TabPage x, TabPage y)
{
return string.Compare(x.Text, y.Text);
}
}
정말 환상적인 솔루션입니다. –
간혹 가끔 tabProls에 여러 tabPages가 있습니다. 런타임에 탭 페이지가 나중에 추가되어 보이지 않게됩니다.
이 후에 tabPages의 순서가 잘못되었을 수 있습니다. 다음 코드를 다시 사용하여 코드를 다시 작성합니다.
public void ReorderTabPages()
{
// Demo code to reorder tabControl with tabPages
// where some tabPages may be unwanted at the moment
// caution: events like "SelectedIndexChanged" does fire!
// List of wanted tab pages
List<TabPage> wantedTabPages = new List<TabPage>();
// remember the current selected tab
TabPage currentTabPage = this.tabControl.SelectedTab;
// check if all possibly active tabs are currently visible
// check it in the order they should be displayed
// after that they are in the correct order in "wantedTabPages"
if (this.tabControl.TabPages.IndexOf(this.tabPage_01) >= 0)
wantedTabPages.Add(this.tabPage_01);
if (this.tabControl.TabPages.IndexOf(this.tabPage_02) >= 0)
wantedTabPages.Add(this.tabPage_02);
if (this.tabControl.TabPages.IndexOf(this.tabPage_03) >= 0)
wantedTabPages.Add(this.tabPage_03);
if (this.tabControl.TabPages.IndexOf(this.tabPage_04) >= 0)
wantedTabPages.Add(this.tabPage_04);
this.tabControl.SuspendLayout();
// remove all currently visible tab pages
for (int i = this.tabControl.TabPages.Count - 1; i >= 0; i--)
this.tabControl.TabPages.RemoveAt(i);
// add the tabPages in the correct order
foreach (var wantedPage in wantedTabPages)
this.tabControl.TabPages.Add(wantedPage);
// restore the currently selected tabPage
this.tabControl.SelectedTab = currentTabPage;
this.tabControl.ResumeLayout();
}
재정의 하시겠습니까? 당신은 조금을 정성 들일 수 있습니까? 내가 사용할 수있는 모든 탭을 제거한 다음 원하는 순서대로 추가해야하는 것입니까? – Aneef
다음과 같이 보았을 수도 있습니다. tabControl.Controls.Add (tabPage); 다른 컬렉션과 마찬가지로 ControllCollection의 탭 페이지 순서를 변경해야합니다. – thelost
글쎄,이게 내가 한 일이다. 내가 이전에 한 말로 그걸 제거하고 내가 원하는대로 재주문을하면, 우리는 정렬이나 smt * 한숨을 할 수 있다고 생각했다. : P, 어쨌든 고마워. – Aneef