禁用和隐藏TabPage

时间:2012-10-15 11:52:50

标签: c# .net winforms tabcontrol tabpage

如何在TabPage可见/隐藏和启用/停用的情况下TabControl进行制作?

9 个答案:

答案 0 :(得分:27)

  • 启用/停用

    tabPage.Enabled似乎工作正常,但标记为“不使用”:

      

    此API支持.NET Framework基础结构,不能直接在您的代码中使用   该成员对此控件没有意义。

    因此,您应该通过禁用选项卡中的每个控件来禁用标签页。例如,请参阅this

  • 显示/隐藏

    现有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);
    

答案 1 :(得分:6)

我也有这个问题。 tabPage.Visible未按前面所述实现,这是一个很好的帮助(+1)。我发现你可以覆盖控件,这将起作用。有点necroposting,但我想在这里为别人发布我的解决方案......

    [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;
    }
}

答案 2 :(得分:5)

您可能错过了显而易见的事实,因为以下任何一项都不会删除/更改选项卡的外观

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

不要从顶部列表中删除标签。

答案 3 :(得分:4)

//Move&Add is not good answer   
this.tabPage1.Parent = null; // hide    
this.tabPage1.Parent = this.tabControl1; //show

答案 4 :(得分:2)

我不知道启用/禁用(可能尝试禁用它上面的所有控件)。如果您希望隐藏它们,只需将它们从Items集合中删除即可。如果您希望它们再次可见,您可以再次将它们添加回控件。然而,您将不得不关注他们的订单(将他们的引用存储在某个列表中,或者您可以有两个列表,其中包含对那些可见的TabPages和那些不可见的TabPages的引用。)

答案 5 :(得分:2)

我们可以使用TABPAGE.ENABLE=trueTABPAGE.ENABLE=FALSE启用或停用标签页。

但是可见属性不能应用于tabpages.we可以代替visible属性,我们可以这样做。

 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;
     }

答案 6 :(得分:0)

tabPage.EnabledtabPage.Visible属性呢?

仅供参考:http://msdn.microsoft.com/en-us/library/8fb09fh2.aspx

答案 7 :(得分:0)

// 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;

答案 8 :(得分:0)

tabpage放入panel并使用

隐藏panel
this.panel1.visible=false;

这对我有用!