2011-02-06 51 views
4

如何製作不顯示標籤標題的標籤管理器?如何創建沒有標籤頁眉的TabControl?

這是一個winforms應用程序,並且使用標籤管理器的目的是顯示內容只能通過代碼進行更改。對於各種菜單選項更改屏幕內容的菜單很有用。

+1

是它的WinForms或Web應用程序? – JPReddy 2011-02-06 08:33:57

+1

@JPReddy你怎麼知道你應該添加** infragistics **標籤? – alex 2011-02-06 08:47:59

+1

沒有足夠的信息。這是什麼類型的應用程序(WinForms,WPF,Web,...)?您是否使用第三方標籤控件(如@ JPReddy的標籤建議)或內置的標籤控件? – 2011-02-06 08:56:09

回答

15

隱藏標準TabControl上的標籤非常簡單,只要您知道該技巧即可。當需要調整標籤大小時,標籤控件會發送一個TCM_ADJUSTRECT message,所以我們只需要捕獲該消息。 (我確信之前已經回答了這個問題,但發佈代碼比搜索代碼容易)。

將以下代碼添加到項目中的新類中,重新編譯並使用CustomTabControl類代替構建的代碼-in控制:

class CustomTabControl : TabControl 
{ 
    private const int TCM_ADJUSTRECT = 0x1328; 

    protected override void WndProc(ref Message m) 
    { 
     // Hide the tab headers at run-time 
     if (m.Msg == TCM_ADJUSTRECT && !DesignMode) 
     { 
      m.Result = (IntPtr)1; 
      return; 
     } 

     // call the base class implementation 
     base.WndProc(ref m); 
    } 
} 

(代碼示例最初是從Dot Net Thoughts拍攝。)

注意,這不會對位於兩側或底部的標籤頭正常工作。但是,這不僅看起來很奇怪,反而無法在運行時看到選項卡。把他們放在他們所屬的頂端。

1

對,如果是網絡應用程序,您可以根據自己的需要構建自己的DIV,並隱藏/顯示。

0

編輯和註釋使問題更清晰後,我認爲處理這個問題的正常方法是使用多個面板而不是製表符。

1

與其他人一起,我發現你的問題有點混亂。我以前用這個方法找到了here。通過這種方式,您可以更改一個屬性,以確定是否要顯示標籤標題。

0

我想,使用面板是最簡單的解決方案。此外,我建議使用我的(免費,開源)VisualStateManager來簡化切換並消除大量的.Enabled = true恐怖。

包裝可用on Nuget

只要寫這樣的代碼:

// Contains and propagates information about current page 
private SwitchCondition<int> settingPageCondition; 
// Controls state of specific controls basing on given SwitchCondition 
private VisualStateSwitchController<int> settingPageController; 

// (...) 

private void InitializeActions() 
{ 
    // Initialize with possible options 
    settingPageCondition = new SwitchCondition<int>(0, 1); 

    settingPageController = new VisualStateSwitchController<int>(
     null,     // Enabled is not controlled 
     null,     // Checked is not controlled 
     settingPageCondition, // Visible is controller by settingPageCondition 
     new SwitchControlSet<int>(0, pGeneral), // State 0 controls pGeneral 
     new SwitchControlSet<int>(1, pParsing)); // State 1 controls pParsing 
} 

// (...) 

public void MainForm() 
{ 
    InitializeComponent(); 
    InitializeActions(); 
} 

// (...) 

// Wat to set specific page 
settingPageCondition.Current = 0;