Koo*_*bin 35 vb.net tabcontrol tabpage
I am trying to show or hide tabpages as per user choice. If user selects gender male then form for male in a tabpage "male" should be displayed and if user selects female then similar next form should be displayed in next tab "female"
I tried using
tabControl1.TabPages.Remove(...)
Run Code Online (Sandbox Code Playgroud)
and
tabControl1.TabPages.Add(...)
Run Code Online (Sandbox Code Playgroud)
It adds and removes the tabpages but doing so will loose my controls on tabpages too... i can't see them back. what's the problem here?
小智 37
我认为答案要容易得多.
要隐藏选项卡,您可以使用已经尝试过的方式或使用TabPage本身.
TabControl1.TabPages.Remove(TabPage1) 'Could be male
TabControl1.TabPages.Remove(TabPage2) 'Could be female
Run Code Online (Sandbox Code Playgroud)
ASO
删除TabPage不会破坏它及其上的控件.要再次显示相应的选项卡,只需使用以下代码
TabControl1.TabPages.Insert(0, TabPage1) 'Show male
TabControl1.TabPages.Insert(1, TabPage2) 'Show female
Run Code Online (Sandbox Code Playgroud)
Han*_*ant 35
您可以从TabControl.TabPages集合中删除选项卡页面并将其存储在列表中.例如:
private List<TabPage> hiddenPages = new List<TabPage>();
private void EnablePage(TabPage page, bool enable) {
if (enable) {
tabControl1.TabPages.Add(page);
hiddenPages.Remove(page);
}
else {
tabControl1.TabPages.Remove(page);
hiddenPages.Add(page);
}
}
protected override void OnFormClosed(FormClosedEventArgs e) {
foreach (var page in hiddenPages) page.Dispose();
base.OnFormClosed(e);
}
Run Code Online (Sandbox Code Playgroud)
小智 7
改进Hans Passant的优秀解决方案我决定根据他的解决方案编写扩展方法并添加其他内容.我很惊讶,即使在.NET 4中,这个基本功能还没有修复.
public static class TabPageExtensions
{
private struct TabPageData
{
internal int Index;
internal TabControl Parent;
internal TabPage Page;
internal TabPageData(int index, TabControl parent, TabPage page)
{
Index = index;
Parent = parent;
Page = page;
}
internal static string GetKey(TabControl tabCtrl, TabPage tabPage)
{
string key = "";
if (tabCtrl != null && tabPage != null)
{
key = String.Format("{0}:{1}", tabCtrl.Name, tabPage.Name);
}
return key;
}
}
private static Dictionary<string, TabPageData> hiddenPages = new Dictionary<string, TabPageData>();
public static void SetVisible(this TabPage page, TabControl parent)
{
if (parent != null && !parent.IsDisposed)
{
TabPageData tpinfo;
string key = TabPageData.GetKey(parent, page);
if (hiddenPages.ContainsKey(key))
{
tpinfo = hiddenPages[key];
if (tpinfo.Index < parent.TabPages.Count)
parent.TabPages.Insert(tpinfo.Index, tpinfo.Page); // add the page in the same position it had
else
parent.TabPages.Add(tpinfo.Page);
hiddenPages.Remove(key);
}
}
}
public static void SetInvisible(this TabPage page)
{
if (IsVisible(page))
{
TabControl tabCtrl = (TabControl)page.Parent;
TabPageData tpinfo;
tpinfo = new TabPageData(tabCtrl.TabPages.IndexOf(page), tabCtrl, page);
tabCtrl.TabPages.Remove(page);
hiddenPages.Add(TabPageData.GetKey(tabCtrl, page), tpinfo);
}
}
public static bool IsVisible(this TabPage page)
{
return page != null && page.Parent != null; // when Parent is null the tab page does not belong to any container
}
public static void CleanUpHiddenPages(this TabPage page)
{
foreach (TabPageData info in hiddenPages.Values)
{
if (info.Parent != null && info.Parent.Equals((TabControl)page.Parent))
info.Page.Dispose();
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我更喜欢制作扁平风格的外观: /sf/answers/1763450741/
tabControl1.Appearance = TabAppearance.FlatButtons;
tabControl1.ItemSize = new Size(0, 1);
tabControl1.SizeMode = TabSizeMode.Fixed;
Run Code Online (Sandbox Code Playgroud)
但是每个选项卡页上都会显示一个像素,因此如果删除每个选项卡页的所有文本,那么选项卡在运行时将完全不可见。
foreach (TabPage tab in tabControl1.TabPages)
{
tab.Text = "";
}
Run Code Online (Sandbox Code Playgroud)
之后,我使用树视图来更改选项卡页面...单击节点。
| 归档时间: |
|
| 查看次数: |
132350 次 |
| 最近记录: |