Helpex - Trao đổi & giúp đỡ Đăng nhập
142

Câu hỏi này đã có câu trả lời ở đây:

Làm cách nào để ẩn TabPage khỏi TabControl trong WinForms 2.0?

142 hữu ích 3 bình luận 275k xem chia sẻ
21 trả lời 21
130

Không, điều này không tồn tại. Bạn phải xóa tab và thêm lại khi bạn muốn. Hoặc sử dụng điều khiển tab khác (bên thứ 3).

130 hữu ích 4 bình luận chia sẻ
91

Đoạn mã để ẩn TabPage

private void HideTab1_Click(object sender, EventArgs e)
{
    tabControl1.TabPages.Remove(tabPage1);
}

Đoạn mã để hiển thị TabPage

private void ShowTab1_Click(object sender, EventArgs e)
{
    tabControl1.TabPages.Add(tabPage1);
}
91 hữu ích 5 bình luận chia sẻ
35

Tôi nhận ra câu hỏi đã cũ và câu trả lời được chấp nhận là cũ, nhưng ...

Ít nhất là trong .NET 4.0 ...

Để ẩn một tab:

tabControl.TabPages.Remove(tabPage);

Để đặt lại:

tabControl.TabPages.Insert(index, tabPage);

TabPageslàm việc tốt hơn nhiều so Controlsvới điều này.

35 hữu ích 5 bình luận chia sẻ
29

Thuộc tính Visiblity chưa được triển khai trên Tabpages và cũng không có phương thức Chèn.

Bạn cần phải chèn và xóa các trang tab theo cách thủ công.

Đây là một công việc xung quanh cho cùng.

http://www.dotnetspider.com/resource/18344-Hiding-Showing-Tabpages-Tabcontrol.aspx

29 hữu ích 0 bình luận chia sẻ
19

Biến thể 1

Để tránh hiện tượng thị giác, bạn có thể cần phải sử dụng:

bindingSource.RaiseListChangeEvent = false 

hoặc là

myTabControl.RaiseSelectedIndexChanged = false

Xóa một trang tab:

myTabControl.Remove(myTabPage);

Thêm một trang tab:

myTabControl.Add(myTabPage);

Chèn một trang tab tại vị trí cụ thể:

myTabControl.Insert(2, myTabPage);

Đừng quên đảo ngược các thay đổi:

bindingSource.RaiseListChangeEvent = true;

hoặc là

myTabControl.RaiseSelectedIndexChanged = true;

Biến thể 2

myTabPage.parent = null;
myTabPage.parent = myTabControl;
19 hữu ích 4 bình luận chia sẻ
13

Các giải pháp được cung cấp cho đến nay là quá phức tạp. Đọc giải pháp đơn giản nhất tại: http://www.codeproject.com/Questions/614157/How-to-Hide-TabControl-Headers

Bạn có thể sử dụng phương pháp này để làm cho chúng vô hình trong thời gian chạy:

private void HideAllTabsOnTabControl(TabControl theTabControl)
{
  theTabControl.Appearance = TabAppearance.FlatButtons;
  theTabControl.ItemSize = new Size(0, 1);
  theTabControl.SizeMode = TabSizeMode.Fixed;
}
13 hữu ích 0 bình luận chia sẻ
5
private System.Windows.Forms.TabControl _tabControl;
private System.Windows.Forms.TabPage _tabPage1;
private System.Windows.Forms.TabPage _tabPage2;

...
// Initialise the controls
...

// "hides" tab page 2
_tabControl.TabPages.Remove(_tabPage2);

// "shows" tab page 2
// if the tab control does not contain tabpage2
if (! _tabControl.TabPages.Contains(_tabPage2))
{
    _tabControl.TabPages.Add(_tabPage2);
}
5 hữu ích 0 bình luận chia sẻ
5

Tôi đã kết hợp câu trả lời từ @Jack Griffin và câu trả lời từ @amazedsaint ( đoạn mã dotnetspider tương ứng ) thành một TabControlHelper duy nhất .

Các TabControlHelper cho phép bạn:

  • Hiển thị / Ẩn tất cả các trang tab
  • Hiển thị / Ẩn các trang tab đơn
  • Giữ vị trí ban đầu của các trang tab
  • Hoán đổi trang tab

public class TabControlHelper
{
    private TabControl _tabControl;
    private List<KeyValuePair<TabPage, int>> _pagesIndexed;
    public TabControlHelper(TabControl tabControl)
    {
        _tabControl = tabControl;
        _pagesIndexed = new List<KeyValuePair<TabPage, int>>();

        for (int i = 0; i < tabControl.TabPages.Count; i++)
        {
            _pagesIndexed.Add(new KeyValuePair<TabPage, int> (tabControl.TabPages[i], i ));
        }
    }

    public void HideAllPages()
    {
        for (int i = 0; i < _pagesIndexed.Count; i++)
        {
            _tabControl.TabPages.Remove(_pagesIndexed[i].Key);
        }
    }

    public void ShowAllPages()
    {
        for (int i = 0; i < _pagesIndexed.Count; i++)
        {
            _tabControl.TabPages.Add(_pagesIndexed[i].Key);
        }
    }

    public void HidePage(TabPage tabpage)
    {
        if (!_tabControl.TabPages.Contains(tabpage)) return;
        _tabControl.TabPages.Remove(tabpage);
    }

    public void ShowPage(TabPage tabpage)
    {
        if (_tabControl.TabPages.Contains(tabpage)) return;
        InsertTabPage(GetTabPage(tabpage).Key, GetTabPage(tabpage).Value);
    }

    private void InsertTabPage(TabPage tabpage, int index)
    {
        if (index < 0 || index > _tabControl.TabCount)
            throw new ArgumentException("Index out of Range.");
        _tabControl.TabPages.Add(tabpage);
        if (index < _tabControl.TabCount - 1)
            do
            {
                SwapTabPages(tabpage, (_tabControl.TabPages[_tabControl.TabPages.IndexOf(tabpage) - 1]));
            }
            while (_tabControl.TabPages.IndexOf(tabpage) != index);
        _tabControl.SelectedTab = tabpage;
    }

    private void SwapTabPages(TabPage tabpage1, TabPage tabpage2)
    {
        if (_tabControl.TabPages.Contains(tabpage1) == false || _tabControl.TabPages.Contains(tabpage2) == false)
            throw new ArgumentException("TabPages must be in the TabControls TabPageCollection.");

        int Index1 = _tabControl.TabPages.IndexOf(tabpage1);
        int Index2 = _tabControl.TabPages.IndexOf(tabpage2);
        _tabControl.TabPages[Index1] = tabpage2;
        _tabControl.TabPages[Index2] = tabpage1;
    }

    private KeyValuePair<TabPage, int> GetTabPage(TabPage tabpage)
    {
        return _pagesIndexed.Where(p => p.Key == tabpage).First();
    }
}
5 hữu ích 0 bình luận chia sẻ
4

Tạo một lớp trống mới và vượt qua nó bên trong nó:

using System.Windows.Forms;

namespace ExtensionMethods
{
    public static class TabPageExtensions
    {

        public static bool IsVisible(this TabPage tabPage)
        {
            if (tabPage.Parent == null)
                return false;
            else if (tabPage.Parent.Contains(tabPage))
                return true;
            else
                return false;
        }

        public static void HidePage(this TabPage tabPage)
        {
            TabControl parent = (TabControl)tabPage.Parent;
            parent.TabPages.Remove(tabPage);
        }

        public static void ShowPageInTabControl(this TabPage tabPage,TabControl parent)
        {
            parent.TabPages.Add(tabPage);
        }
    }
}

2- Thêm tham chiếu vào không gian tên ExtensionMethods trong mã biểu mẫu của bạn:

using ExtensionMethods;

3- Bây giờ bạn có thể sử dụng yourTabPage.IsVisible();để kiểm tra khả năng hiển thị của nó, yourTabPage.HidePage();để ẩn nó và yourTabPage.ShowPageInTabControl(parentTabControl);hiển thị nó.

4 hữu ích 1 bình luận chia sẻ
1
    public static Action<Func<TabPage, bool>> GetTabHider(this TabControl container) {
        if (container == null) throw new ArgumentNullException("container");

        var orderedCache = new List<TabPage>();
        var orderedEnumerator = container.TabPages.GetEnumerator();
        while (orderedEnumerator.MoveNext()) {
            var current = orderedEnumerator.Current as TabPage;
            if (current != null) {
                orderedCache.Add(current);
            }
        }

        return (Func<TabPage, bool> where) => {
            if (where == null) throw new ArgumentNullException("where");

            container.TabPages.Clear();
            foreach (TabPage page in orderedCache) {
                if (where(page)) {
                    container.TabPages.Add(page);
                }
            }
        };
    }

Sử dụng nó như thế này:

    var hider = this.TabContainer1.GetTabHider();
    hider((tab) => tab.Text != "tabPage1");
    hider((tab) => tab.Text != "tabpage2");

Thứ tự ban đầu của các tab được giữ trong Danh sách được ẩn hoàn toàn bên trong hàm ẩn danh. Giữ một tham chiếu đến thể hiện chức năng và bạn giữ lại thứ tự tab ban đầu của mình.

1 hữu ích 1 bình luận chia sẻ
1

bạn có thể đặt cha mẹ của trang tab thành null để ẩn và để hiển thị chỉ cần đặt cha mẹ trang tab thành tabcontrol

1 hữu ích 0 bình luận chia sẻ
1

Chà, nếu bạn không muốn làm rối mã hiện có và chỉ muốn ẩn một tab, bạn có thể sửa đổi mã được tạo bởi trình biên dịch để nhận xét dòng thêm tab vào điều khiển tab.

Ví dụ: Dòng sau đây thêm một tab có tên "readformatcardpage" vào Tabcontrol có tên "tabcontrol"

this.tabcontrol.Controls.Add (this.readformatcardpage);

Sau đây sẽ ngăn việc thêm tab vào tabcontrol

//this.tabcontrol.Controls.Add(this.readformatcardpage);

1 hữu ích 3 bình luận chia sẻ
1

+1 cho microsoft :-).
Tôi đã quản lý để làm theo cách này:
(giả sử bạn có một Nextnút hiển thị TabPage tiếp theo - tabStepslà tên của điều khiển Tab)
Khi khởi động, hãy lưu tất cả các tab trong danh sách phù hợp.
Khi người dùng nhấn Nextnút, hãy xóa tất cả các TabPages trong điều khiển tab, sau đó thêm nó với chỉ mục thích hợp:

int step = -1;
List<TabPage> savedTabPages;

private void FMain_Load(object sender, EventArgs e) {
    // save all tabpages in the list
    savedTabPages = new List<TabPage>();
    foreach (TabPage tp in tabSteps.TabPages) {
        savedTabPages.Add(tp);
    }
    SelectNextStep();
}

private void SelectNextStep() {
    step++;
    // remove all tabs
    for (int i = tabSteps.TabPages.Count - 1; i >= 0 ; i--) {
            tabSteps.TabPages.Remove(tabSteps.TabPages[i]);
    }

    // add required tab
    tabSteps.TabPages.Add(savedTabPages[step]);
}

private void btnNext_Click(object sender, EventArgs e) {
    SelectNextStep();
}

Cập nhật

public class TabControlHelper {
    private TabControl tc;
    private List<TabPage> pages;
    public TabControlHelper(TabControl tabControl) {
        tc = tabControl;
        pages = new List<TabPage>();
        foreach (TabPage p in tc.TabPages) {
            pages.Add(p);
        }
    }

    public void HideAllPages() {
        foreach(TabPage p in pages) {
            tc.TabPages.Remove(p);
        }
    }

    public void ShowAllPages() {
        foreach (TabPage p in pages) {
            tc.TabPages.Add(p);
        }
    }

    public void HidePage(TabPage tp) {
        tc.TabPages.Remove(tp);
    }        

    public void ShowPage(TabPage tp) {
        tc.TabPages.Add(tp);
    }
}  
1 hữu ích 0 bình luận chia sẻ
0

Là một công việc rẻ tiền xung quanh, tôi đã sử dụng một nhãn hiệu để che đi các tab tôi muốn ẩn.

Sau đó chúng ta có thể sử dụng chỗ dựa có thể nhìn thấy của nhãn thay thế. Nếu bất cứ ai đi theo con đường này, đừng quên xử lý các nét bàn phím hoặc các sự kiện hiển thị. Bạn sẽ không muốn các phím con trỏ bên trái để lộ tab bạn đang cố ẩn.

0 hữu ích 1 bình luận chia sẻ
0

Không chắc chắn về "Winforms 2.0" nhưng điều này đã được thử và chứng minh:

http: // www. mostthingsweb.com/2011/01/hiding-tab-headers-on-a-tabcontrol-in-c/

0 hữu ích 0 bình luận chia sẻ
0

Trong WPF, nó khá dễ:

Giả sử bạn đã đặt tên cho TabItem, ví dụ:

<TabItem Header="Admin" Name="adminTab" Visibility="Hidden">
<!-- tab content -->
</TabItem>

Bạn có thể có đoạn mã sau dưới dạng:

 if (user.AccessLevel == AccessLevelEnum.Admin)
 {
     adminTab.Visibility = System.Windows.Visibility.Visible;
 }

Cần lưu ý rằng một Userđối tượng có tên userđã được tạo với thuộc AccessLeveltính của nó được đặt thành một trong các giá trị enum do người dùng định nghĩa là AccessLevelEnum... bất cứ điều gì; đó chỉ là một điều kiện để tôi quyết định hiển thị tab hay không.

0 hữu ích 1 bình luận chia sẻ
0

Tôi cũng đã có câu hỏi này. tabPage.Visible không được triển khai như đã nêu trước đó, đây là một trợ giúp tuyệt vời (+1). Tôi thấy bạn có thể ghi đè lên điều khiển và điều này sẽ hoạt động. Một chút cần thiết, nhưng tôi nghĩ sẽ đăng giải pháp của mình lên đây cho người khác ...

    [System.ComponentModel.DesignerCategory("Code")]
public class MyTabPage : TabPage
{
    private TabControl _parent;
    private bool _isVisible;
    private int _index;
    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) _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;
    }
}
0 hữu ích 4 bình luận chia sẻ
0

Tôi đã sử dụng cùng một cách tiếp cận nhưng vấn đề là khi trang tab bị xóa khỏi danh sách TabPages kiểm soát tab, nó cũng bị xóa khỏi danh sách Điều khiển trang tab. Và nó không được xử lý khi hình thức được xử lý.

Vì vậy, nếu bạn có nhiều trang tab "ẩn" như vậy, bạn có thể nhận được các cửa sổ xử lý lỗi vượt quá hạn ngạch và chỉ khởi động lại ứng dụng mới khắc phục được.

0 hữu ích 0 bình luận chia sẻ
0

Nếu bạn đang nói về AjaxTabControlExtender thì hãy đặt Tab Index của mọi tab và đặt thuộc tính Hiển thị Đúng / Sai theo nhu cầu của bạn.

myTab.Tabs [1] .Visible = true / false;

0 hữu ích 0 bình luận chia sẻ
0
TabPage pageListe, pageDetay;
bool isDetay = false;

private void btnListeDetay_Click(object sender, EventArgs e)
{
    if (isDetay)
    {
        isDetay = false;
        tc.TabPages.Remove(tpKayit);
        tc.TabPages.Insert(0,pageListe);
    }
    else
    {
        tc.TabPages.Remove(tpListe);
        tc.TabPages.Insert(0,pageDetay);
        isDetay = true;
    }
}
0 hữu ích 0 bình luận chia sẻ
2
// inVisible
TabPage page2 = tabControl1.TabPages[0];
page2.Visible= false;
//Visible 
page2.Visible= true;
// disable
TabPage page2 = tabControl1.TabPages[0];
page2.Enabled = false;
// enable
page2.Enabled = true;
//Hide
tabCtrlTagInfo.TabPages(0).Hide()
tabCtrlTagInfo.TabPages(0).Show()

Chỉ cần sao chép dán và thử nó, đoạn mã trên đã được thử nghiệm trong vs2010, nó hoạt động.

2 hữu ích 2 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c# winforms tabcontrol tabpage , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading