簡體   English   中英

C#tabControl DrawFixed

[英]C# tabControl DrawFixed

我正在使用TabControl,並且已經有了DrawFixed。 我只希望僅繪制選項卡,而不繪制其下方的面板。

tab控制面板

如何刪除?

我也想問一下,我可以更改標簽的大小嗎? 我有很長的文本,如果選中它,我想查看全部,但是如果它不處於活動狀態,我希望看到它被裁剪。

我在繪制事件中一直關注,但是它始終以相同的大小繪制選項卡。

if (e.State == DrawItemState.Selected)
{
    e.Graphics.FillRectangle(Brushes.White, e.Bounds.Left, e.Bounds.Top, e.Bounds.Width, e.Bounds.Height);
}
else
{
    e.Graphics.FillRectangle(Brushes.LightGray, e.Bounds.Left, e.Bounds.Top, e.Bounds.Width, e.Bounds.Height);
    text = text.Length > 10 ? text.Substring(0, 10) + "..." : text;
}

e.Graphics.DrawString(text, e.Font, Brushes.Black, e.Bounds.Left + 17, e.Bounds.Top + 3);

提前致謝。

按時間順序排列,您已經問過如何擺脫頂部的那個酒吧。 如果您堅持使用“人造”選項卡頁面,其中選項卡僅控制固定控件集的內容,那么將選項卡控件的高度縮小到不可見的程度可能是可以接受的解決方案。 我只是嘗試了一下,並進行了一些調整,看起來基本上就像我認為的那樣。 對於記錄,我建議實際上按預期使用選項卡頁,即將其用作控件的宿主,即使您制作了一個自定義控件,該控件將希望顯示的所有控件組合在一起。 這將更好地適應選項卡范式。

第二點,您想調整標簽的大小。 不可能。 該框架為DrawStyle提供了兩個選項:Normal和OwnerDrawFixed Normal允許Windows根據文本和字體設置選項卡大小, OwnerDrawFixed表示選項卡大小是完全固定的。 對此沒有更多控制權。 但是, OwnerDrawFixed使您可以訪問OnDrawItem事件,該事件是您用來繪制選項卡本身的方式。

現在看來,您已經把項目符號設置為True了,這意味着您正在繪制所有圖形。 我建議此時將DrawStyle設置回Normal ,然后可以合並一些幕后文字,以使Windows自動控制標簽寬度。 我會警告說,由於每個人的字體設置都不同,並且像素數變少,因此沒有任何效果。

因此,在這里我將指出TabControl.GetTabRect(index As Integer) ,該方法可用於獲取給定選項卡的邊界矩形。 我在所有選項卡索引中循環使用了此選項,然后在每個選項卡提供的矩形內完成了該選項卡所需的所有繪圖。 這意味着我不需要使用OwnerDrawFixed即可在其中繪制邊界。

但是,如果仍然希望獲得更好的控制,則可以從ControlUserControl開始,完全實現要查看的任何控件,都可以達到80%的方法。 重疊的按鈕具有某種邏輯,可以繪制和布局它們,可以實現類似的外觀。 然后,您還可以獲得所需的所有文本外觀。 我本人也考慮過同樣的問題,但沒有考慮,因為我仍在托管TabPages 既然您擺脫了困境,那將變得更加容易...

只需使用頁面文本默認屬性,它將根據文本的大小為您自動修復標簽的大小..然后自行繪制文本..如果您仍然需要額外的空間來繪制圖像或其他東西,請使用填充標簽控件的屬性,而不是標簽頁。 希望對您有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM