web-dev-qa-db-ja.com

TabPageを無効にして非表示にします

TabPage内のTabControlを表示/非表示および有効/無効にするにはどうすればよいですか?

17
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インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。
    このメンバーは、このコントロールには意味がありません。

    したがって、タブ内のすべてのコントロールを無効にして、タブページを無効にする必要があります。 this を参照してください。

  • 表示/非表示

    既存の tabPage.Visible propertyですが、効果はないようです。また、「使用しない」としてマークされており、msdnはタブコントロールを非表示にするためにタブコントロールから削除することを推奨しています。

    // Hide the tab page
    tabControl.TabPages.Remove(tabPage1);
    // Show the tab page (insert it to the correct position)
    tabControl.TabPages.Insert(0, tabPage1);
    
27
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
5
user3304385

有効化/無効化については知りません(おそらく、すべてのコントロールを無効化しようとします)。それらを非表示にする場合は、Itemsコレクションから削除するだけです。それらを再び表示したい場合は、コントロールに再び追加できます。それでも、それらの順序に注意する必要があります(参照を何らかのリストに保存するか、表示されているタブページと表示されていないタブページへの参照を保持する2つのリストを持つことができます)。

2

TABPAGE.ENABLE=trueおよびTABPAGE.ENABLE=FALSEを使用して、タブページを有効または無効にできます。

しかし、visibleプロパティを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;
     }
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

tabpagepanelに入れ、panelを非表示にします

this.panel1.visible=false;

それは私のために働いています!

0
THE INN-VISIBLE

@Otielの回答に基づいて、これら2つの機能を実行しました。

可視性を切り替えるには:

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.