如何更改所选 TabPage 的字体和/或颜色?

Posted

技术标签:

【中文标题】如何更改所选 TabPage 的字体和/或颜色?【英文标题】:How to change the Font and/or Color of a selected TabPage? 【发布时间】:2011-03-17 11:15:38 【问题描述】:

我已经用谷歌搜索、测试等几个小时了,我的出发点是正确的。 WinForms TabControl 糟透了...有没有人有提示或代码可以做到,所以当我选择 TabPage 时,字体或颜色会发生变化?

我弄乱了绘图命令,虽然它确实有效,但它会绘制边框/背景,因此它们看起来非常旧/过时。

这基本上是针对我正在使用的简单选项卡文本编辑器,当控件中的 TextBox 发生更改时,我可以使用红色字体更新关联选项卡,或者将其加粗以指示 @ 上的 TextBox 987654325@已修改。

我绝对愿意接受替代 TabControl,只要它们是免费的并且带有 VB.Net 示例。

这是在 VB.Net 2008 Express 中。

【问题讨论】:

这是 Winforms、ASP、AjaxControlToolkit、WPF 还是其他?您可以谈论许多不同的选项卡控件... 很抱歉,它是为 Winforms 设计的(它是一个 Windows 应用程序) 【参考方案1】:

将选项卡控件的 DrawMode 设置为 OwnerDrawFixed 并自己绘制选项卡以响应 DrawItem 事件。

【讨论】:

【参考方案2】:

将 TabControl 绘制模式设置为 OwnerDrawFixed,然后创建一个事件处理程序来绘制选项卡以响应 DrawItem 事件。 例如

Private Sub TabControl1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles TabControl1.DrawItem
  Dim tabctl As TabControl = DirectCast(sender, TabControl)
  Dim g As Graphics = e.Graphics
  Dim font As Font = tabctl.Font
  Dim brush As New SolidBrush(Color.Black)
  tabTextArea = RectangleF.op_Implicit(tabctl.GetTabRect(e.Index))
  If tabctl.SelectedIndex = e.Index Then
    font = New Font(font, FontStyle.Bold)
    brush = New SolidBrush(Color.Red)
  End If
  g.DrawString(tabctl.TabPages(e.Index).Text, font, brush, tabTextArea)
End Sub

【讨论】:

效果很好,但它也重新设置了实际选项卡的外观(使其看起来像 1995 年的样式),而不是默认的 2005 年选项卡样式。无论如何只更改文本而不是实际的选项卡? 不容易,据我所知,没有一个选项只会影响文本。一旦将 Drawmode 设置为 OwnerDrawFixed,则事件处理程序负责选项卡的外观,我不知道如何让它使用 XP 主题。

以上是关于如何更改所选 TabPage 的字体和/或颜色?的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse Neon:如何更改所选线条的颜色?

如何在可可的 nstextfield 上设置字体和颜色?

如何更改绑定到 Razor 页面上模型的特定文本的字体颜色?

如何使用 react 和 javascript 每秒更改部分文本的字体颜色?

设置 TabPage 标题颜色

如何更改材质ui表中所选行的文本颜色