加粗文本用于选项卡控件

6
我希望在某些条件下(不一定是GotFocus),能够加粗选项卡页面的文本。是否只有通过覆盖选项卡控件的DrawItem事件来实现这一点?似乎应该有更简单的方法。比如说,tabControl.TabPages(index).Font = New Font(Me.Font, FontStyle.Bold),但显然这不起作用。详情请参阅:http://www.vbforums.com/showthread.php?t=355093
3个回答

5
当您在TabPage上设置Font属性时,您正在为该选项卡页面上的所有控件设置默认字体。但是,您没有为页眉设置它。
当您执行以下代码时:
tabControl.TabPages(index).Font = New Font(Me.Font, FontStyle.Bold)

任何页面上的控件现在默认为粗体,这不是您想要的(我假设)。
标题的字体(即选项卡本身)由TabControl的Font属性控制。如果您更改代码为:
tabControl.Font = New Font(Me.Font, FontStyle.Bold)

你会看到它的效果。但是,它会改变所有显示标签的字体,这也不是你想要的,我猜想。因此,使用默认的WinForms选项卡控件,您(我相信)受限于您发布的链接中的技术。或者,您可以开始查看第三方控件,例如在这些 问题 上讨论的那些控件,在StackOverflow上也有相关内容。

请注意,Font 实现了 IDisposable 接口,因此当不再需要它时,应始终调用其 Dispose 方法。出于这个原因,您应该将 Font 创建为一个字段,并确保在 FormDispose 方法中调用它的 Dispose 方法。 - Adam Ralph

2

根据字段值为选项卡控件提供不同标签的简单方法是更改标题本身:

例如:

Private Sub Form_Current()
    If IsNull(Me.Subform.Form.Field_Name) Then
        Me.Tab_Name.Caption = "Tab One"
    Else
        Me.Tab_Name.Caption = "Tab One +++"
    End If
End Sub

1
private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
{
    Font BoldFont = new Font(tabControl1.Font, FontStyle.Bold);
    e.Graphics.DrawString(tabControl1.TabPages[e.Index].Text, BoldFont, Brushes.Black, e.Bounds);
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
    tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接