it-roy-ru.com

Отключить и скрыть вкладку

Как я могу сделать TabPage в TabControl видимым/скрытым и включенным/отключенным?

16
Aan

Вы, возможно, упускаете очевидное, потому что ни одно из следующего не удаляет/не изменяет внешний вид вкладки

        tabPage1.Enabled = false; // this disables the controls on it
        tabPage1.Visible = false; // this hides the controls on it.

Также не удаляйте вкладку из списка вверху.

5
BugFinder
  • Включить выключить

    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);
    
26
Otiel

У меня тоже был этот вопрос. 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;
    }
}
6
John S.
//Move&Add is not good answer   
this.tabPage1.Parent = null; // hide    
this.tabPage1.Parent = this.tabControl1; //show
4
user3304385

Я не знаю о включении/отключении (возможно, попробуйте отключить все элементы управления на нем). Если вы хотите, чтобы они были скрыты, просто удалите их из коллекции Предметов. Если вы хотите, чтобы они снова были видны, вы можете снова добавить их в элемент управления. Тем не менее, вам придется позаботиться об их порядке (сохранить их ссылки в каком-либо списке, или у вас может быть два списка, которые содержат ссылки на те вкладки, которые видны, и те, которые нет).

2
Nikola Davidovic

мы можем включить или отключить вкладки с помощью 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;
     }
2
sindhu jampani
// 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;
0
ISB

Поместите tabpage в panel и скройте panel, используя

this.panel1.visible=false;

Это работает для меня!

0
THE INN-VISIBLE

Основываясь на ответе @ 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
}
0
kokbira

А как насчет свойств tabPage.Enabled и tabPage.Visible?

К вашему сведению: http://msdn.Microsoft.com/en-us/library/8fb09fh2.aspx

0
Gianni B.