我怎样才能使 WinForms TabPage 标题宽度适合它的标题?
Posted
技术标签:
【中文标题】我怎样才能使 WinForms TabPage 标题宽度适合它的标题?【英文标题】:How can i make WinForms TabPage header width fit it's title? 【发布时间】:2011-10-08 09:08:12 【问题描述】:如何使 WinForms TabPage 标题宽度适合其标题? 这是问题所在。
【问题讨论】:
【参考方案1】:谢谢,汉斯。 我没有创建类就使用了你的代码
//InitializeComponent
this.tabPresentations.HandleCreated += new System.EventHandler(TabControl_HandleCreated);
void TabControl_HandleCreated(object sender, System.EventArgs e)
// Send TCM_SETMINTABWIDTH
SendMessage((sender as TabControl).Handle, 0x1300 + 49, IntPtr.Zero, (IntPtr)4);
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
【讨论】:
【参考方案2】:您需要测量字体。
试试这样的:
Dim tabPage As New TabPage
Dim width As Integer = 0
Dim valueToMeasure As String = <Your title Here>
Dim g As Graphics = tabPage.CreateGraphics()
width = CType(g.MeasureString(valueToMeasure, tabPage.Font).Width, Integer)
可能会为填充添加一个额外的机器人(宽度 = 宽度 +10)
已编辑:
<tab>.width = GetTabWidth(<Title>)
Private Function GetTabWidth (Byval title as String) as Integer
Dim widthValue as Integer = 10 'Padding (Optional)
Dim tabPage as New tabPage
Dim g as Graphics = tabPage.CreateGraphics()
widthValue += Ctype(g.measureString(title, tabPage.Font).Width, Integer)
Return widthValue
End Function
【讨论】:
好的,我测过了,接下来呢? TabPage 没有宽度属性。 对不起,我习惯了氪星导航器!试试...本机 Windows 选项卡控件允许覆盖默认的最小选项卡宽度。遗憾的是,该功能并未在 TabControl 包装类中公开。不过这是可以解决的。向您的项目添加一个新类并粘贴如下所示的代码。编译。将新控件从工具箱顶部拖放到表单上。
using System;
using System.Windows.Forms;
class MyTabControl : TabControl
protected override void OnHandleCreated(EventArgs e)
base.OnHandleCreated(e);
// Send TCM_SETMINTABWIDTH
SendMessage(this.Handle, 0x1300 + 49, IntPtr.Zero, (IntPtr)10);
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
【讨论】:
以上是关于我怎样才能使 WinForms TabPage 标题宽度适合它的标题?的主要内容,如果未能解决你的问题,请参考以下文章
C# Winforms:没有 AutoScroll 的滚动条
.Net WinForms TabControl Steals 专注于表单激活