Отключить и скрыть вкладку
Как я могу сделать TabPage
в TabControl
видимым/скрытым и включенным/отключенным?
Ответы
Ответ 1
Возможно, вам не хватает очевидного, потому что ни одно из следующих действий не удаляет/не изменяет внешний вид вкладки
tabPage1.Enabled = false; // this disables the controls on it
tabPage1.Visible = false; // this hides the controls on it.
Не удаляйте вкладку из списка вверху.
Ответ 2
-
Включить/отключить
tabPage.Enabled
, кажется, работает нормально, но помечен как "не использоваться":
Этот API поддерживает инфраструктуру .NET Framework и не предназначен для использования непосредственно из вашего кода.
Этот элемент не имеет смысла для этого элемента управления.
Таким образом, вы должны отключить вкладку, отключив каждый элемент управления на вкладке. См. .
-
Показать/скрыть
Существует существующее свойство tabPage.Visible
, но оно, похоже, не имеет никакого эффекта. Кроме того, он также помечен как "не использоваться", а msdn советует удалить вкладку из элемента управления вкладки, чтобы скрыть ее:
// Hide the tab page
tabControl.TabPages.Remove(tabPage1);
// Show the tab page (insert it to the correct position)
tabControl.TabPages.Insert(0, tabPage1);
Ответ 3
У меня также был этот вопрос. tabPage.Visible не реализован, как указано ранее, что было большой помощью (+1). Я обнаружил, что вы можете переопределить элемент управления, и это сработает. Немного о некропостинге, но я решил опубликовать свое решение здесь для других...
[System.ComponentModel.DesignerCategory("Code")]
public class MyTabPage : TabPage
{
private TabControl _parent;
private bool _isVisible;
private int _index = int.MinValue;
public new bool Visible
{
get { return _isVisible; }
set
{
if (_parent == null) _parent = this.Parent as TabControl;
if (_parent == null) return;
if (_index < 0) _index = _parent.TabPages.IndexOf(this);
if (value && !_parent.TabPages.Contains(this))
{
if (_index > 0 && _index < _parent.TabPages.Count) _parent.TabPages.Insert(_index, this);
else _parent.TabPages.Add(this);
}
else if (!value && _parent.TabPages.Contains(this)) _parent.TabPages.Remove(this);
_isVisible = value;
base.Visible = value;
}
}
protected override void InitLayout()
{
base.InitLayout();
_parent = Parent as TabControl;
}
}
Ответ 4
//Move&Add is not good answer
this.tabPage1.Parent = null; // hide
this.tabPage1.Parent = this.tabControl1; //show
Ответ 5
Я не знаю о включении/отключении (возможно, попробуйте отключить все элементы управления на нем). Если вы хотите, чтобы они были скрыты, просто удалите их из коллекции Items. Если вы хотите, чтобы они были видны снова, вы можете снова добавить их обратно в элемент управления. Тем не менее, вам нужно будет позаботиться о своем заказе (хранить ссылки в каком-либо списке или иметь два списка, которые содержат ссылки на те вкладки, которые видны, и те, которые не являются).
Ответ 6
мы можем включить или отключить вкладки с помощью TABPAGE.ENABLE=true
и TABPAGE.ENABLE=FALSE
.
но видимое свойство не может быть применено к tabpages.we может вместо видимого свойства, мы можем сделать вот так:
private void HideTabPage(TabPage tp)
{
if (tabControl1.TabPages.Contains(tp))
tabControl1.TabPages.Remove(tp);
}
private void ShowTabPage(TabPage tp)
{
ShowTabPage(tp, tabControl1.TabPages.Count);
}
private void ShowTabPage(TabPage tp , int index)
{
if (tabControl1.TabPages.Contains(tp)) return;
InsertTabPage(tp, index);
}
private void InsertTabPage(TabPage tabpage, int index)
{
if (index < 0 || index > tabControl1.TabCount)
throw new ArgumentException("Index out of Range.");
tabControl1.TabPages.Add(tabpage);
if (index < tabControl1.TabCount - 1)
do
{
SwapTabPages(tabpage, (tabControl1.TabPages[tabControl1.TabPages.IndexOf(tabpage) - 1]));
}
while (tabControl1.TabPages.IndexOf(tabpage) != index);
tabControl1.SelectedTab = tabpage;
}
private void SwapTabPages(TabPage tp1, TabPage tp2)
{
if (tabControl1.TabPages.Contains(tp1) == false ||tabControl1.TabPages.Contains(tp2) == false)
throw new ArgumentException("TabPages must be in the TabControls TabPageCollection.");
int Index1 = tabControl1.TabPages.IndexOf(tp1);
int Index2 = tabControl1.TabPages.IndexOf(tp2);
tabControl1.TabPages[Index1] = tp2;
tabControl1.TabPages[Index2] = tp1;
tabControl1.SelectedIndex = tabControl1.SelectedIndex;
string tp1Text, tp2Text;
tp1Text = tp1.Text;
tp2Text = tp2.Text;
tp1.Text=tp2Text;
tp2.Text=tp1Text;
}
Ответ 7
Как насчет свойств tabPage.Enabled
и tabPage.Visible
?
FYI: http://msdn.microsoft.com/en-us/library/8fb09fh2.aspx
Ответ 8
// Hide TabPage and Remove the Header
this.tabPage1.Hide();
this.tabPage3.Hide();
this.tabPage5.Hide();
tabControl1.TabPages.Remove(tabPage1);
tabControl1.TabPages.Remove(tabPage3);
tabControl1.TabPages.Remove(tabPage5);
// Show TabPage and Visible the Header
tabControl1.TabPages.Insert(0,tabPage1);
tabControl1.TabPages.Insert(2, tabPage3);
tabControl1.TabPages.Insert(4, tabPage5);
this.tabPage1.Show();
this.tabPage3.Show();
this.tabPage5.Show();
tabControl1.SelectedTab = tabPage1;
Ответ 9
Поместите tabpage
в panel
и скройте panel
, используя
this.panel1.visible=false;
Он работает для меня!
Ответ 10
Основываясь на ответе @Otiel, я выполнил следующие две функции:
Чтобы переключить видимость:
bool toggleTabPageVisibility(TabControl tc, TabPage tp)
{
//if tp is already visible
if (tc.TabPages.IndexOf(tp) > -1)
{
tc.TabPages.Remove(tp);
//no pages to show, hide tabcontrol
if(tc.TabCount == 0)
{
tc.Visible = false;
}
return false;
}
//if tp is not visible
else
{
tc.TabPages.Insert(tc.TabCount, tp);
//guarantee tabcontrol visibility
tc.Visible = true;
tc.SelectTab(tp);
return true;
}
}
Чтобы установить видимость:
void setTabPageVisibility(TabControl tc, TabPage tp, bool visibility)
{
//if tp is not visible and visibility is set to true
if ((visibility == true) && (tc.TabPages.IndexOf(tp) <= -1))
{
tc.TabPages.Insert(tc.TabCount, tp);
//guarantee tabcontrol visibility
tc.Visible = true;
tc.SelectTab(tp);
}
//if tp is visible and visibility is set to false
else if ((visibility == false) && (tc.TabPages.IndexOf(tp) > -1))
{
tc.TabPages.Remove(tp);
//no pages to show, hide tabcontrol
if(tc.TabCount == 0)
{
tc.Visible = false;
}
}
//else do nothing
}