Wie kann ich ein TabPage
in einem TabControl
sichtbar machen/ausblenden und aktivieren/deaktivieren
Möglicherweise verpassen Sie das Offensichtliche, da keines der folgenden Elemente das Aussehen der Registerkarte entfernt oder ändert
tabPage1.Enabled = false; // this disables the controls on it
tabPage1.Visible = false; // this hides the controls on it.
Entfernen Sie auch nicht die Registerkarte aus der Liste oben.
Aktivieren deaktivieren
Der tabPage.Enabled
scheint gut zu funktionieren, wird aber als "nicht verwendet" markiert:
Diese API unterstützt die .NET Framework-Infrastruktur und ist nicht für die direkte Verwendung in Code bestimmt.
Dieser Member ist für dieses Steuerelement nicht sinnvoll.
Sie sollten also die Registerkarte deaktivieren, indem Sie alle Steuerelemente auf der Registerkarte deaktivieren. Siehe dies zum Beispiel.
Anzeigen Ausblenden
Es gibt eine vorhandene tabPage.Visible
-Eigenschaft, aber es scheint keine Wirkung zu haben. Außerdem wird es als "nicht verwendet" markiert, und msdn empfiehlt, die Registerkarte aus dem Registersteuerelement zu entfernen, um sie auszublenden:
// Hide the tab page
tabControl.TabPages.Remove(tabPage1);
// Show the tab page (insert it to the correct position)
tabControl.TabPages.Insert(0, tabPage1);
Ich hatte auch diese Frage. tabPage.Visible ist nicht wie zuvor beschrieben implementiert, was eine große Hilfe war (+1). Ich habe festgestellt, dass Sie die Steuerung überschreiben können, und dies wird funktionieren. Ein bisschen Nekroposting, aber ich dachte, ich würde meine Lösung hier für andere posten ...
[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;
}
}
//Move&Add is not good answer
this.tabPage1.Parent = null; // hide
this.tabPage1.Parent = this.tabControl1; //show
Ich weiß nicht über Aktivieren/Deaktivieren (versuchen Sie möglicherweise, alle Steuerelemente zu deaktivieren). Wenn Sie sie ausblenden möchten, entfernen Sie sie einfach aus der Items-Sammlung. Wenn Sie sie wieder sichtbar machen möchten, können Sie sie wieder dem Steuerelement hinzufügen. Trotzdem müssen Sie sich um ihre Reihenfolge kümmern (speichern Sie ihre Referenzen in einer Liste oder Sie haben zwei Listen, die Verweise auf diese TabPages enthalten, die sichtbar sind und nicht.).
wir können Registerkarten mit TABPAGE.ENABLE=true
und TABPAGE.ENABLE=FALSE
aktivieren oder deaktivieren.
die sichtbare Eigenschaft kann jedoch nicht auf tabpages.we angewendet werden.
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;
}
// 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;
Setzen Sie tabpage
in panel
und verstecken Sie panel
mit
this.panel1.visible=false;
Es funktioniert für mich!
Basierend auf @ Otiels Antwort habe ich diese beiden Funktionen ausgeführt:
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
}
Was ist mit den tabPage.Enabled
- und tabPage.Visible
-Eigenschaften?