【问题标题】:changing "Tab Control" color更改“选项卡控件”颜色
【发布时间】:2010-09-20 12:54:36
【问题描述】:

如何更改选项卡控件背景颜色。我更改了表单颜色,但选项卡保持不变。

谢谢。

【问题讨论】:

  • 请指定您使用的语言/环境。

标签: ms-access forms


【解决方案1】:

检查选项卡控件的返回样式。如果是正常的。你会得到一个灰色的背景(使用正常的 Windows 设置)。如果它是透明的,那么它将继承表单的背景颜色。

如果您希望它是完全不同的颜色,您可能需要在表单中添加一个矩形(使背景不透明),在选项卡中最大化它,然后设置矩形的颜色。

至于它们本身的标签,我没有看到独立设置它们颜色的方法。

【讨论】:

    【解决方案2】:

    据我所知,在 Access 2000/2002/2003 中,既不能更改背景色,也​​不能更改选项卡的前景色。

    所以,如果你想改变整个标签控件的外观,我觉得你运气不好。

    但是,如果您的真正目标是对选项卡控件的页面进行某种颜色编码,那么当我遇到此问题时,我会这样做:

    • 我在选项卡控件的每个页面上放置了一个彩色矩形,为不同的页面提供不同的背景颜色。

    • 至于标签本身。幸运的是它们可以包含图像,所以我创建了一些简单的图像文件,每个图像文件都是一个小的彩色子弹(正方形、矩形、圆形 - 任何你觉得更好看的东西)并将它们放在标签上,靠近文本标签。

    因此,整个控件仍然保持灰色(或 Windows 当前主题中的当前“按钮颜色”),但每个选项卡和每个页面都与我需要它们具有的任何颜色相关联。

    【讨论】:

      【解决方案3】:

      在 Access 2010 中,设置选项卡控件对象中“Pressed Color”属性的颜色允许您设置选项卡页的背景颜色。

      对于 Access 2013,还需要设置选项卡控件的“背景颜色”属性的颜色(与“按下的颜色”相同)。

      【讨论】:

      • 这对我有用!我花了一段时间才找到“标签”控件。您必须单击包含选项卡的条带,而不是选项卡本身。
      【解决方案4】:

      CodeSlave 提出了非常好的建议:

      如果你想让它完全 不同的颜色,你可能需要 在表单中添加一个矩形(使 背景不透明),最大化 它在选项卡中,然后设置 矩形的颜色。

      如果您希望背景相对于标签尺寸大于标签允许的尺寸(有一个不能超过的硬边框),还有另一种解决方案(尽管它有点复杂——当您调整外观以使其无法按照默认环境的设计方式工作时通常会发生这种情况)。

      将选项卡控件设置为透明。在选项卡后面,放置一个不透明的框。然后在选项卡的OnChange事件中,改变选项卡后面框的背景颜色。

      有点乱,是的,但它允许您拥有与整个选项卡一样大的背景(或者更大,以防您可能希望在相同颜色字段内离开选项卡的项目)。

      【讨论】:

        【解决方案5】:

        您可以使用一些代码来模拟它。将选项卡控件的 Style 属性设置为 None,并使用任何其他具有单击事件的控件来创建您自己的彩色选项卡(您甚至可以拥有图像)。您的代码可以更改选项卡,也可以更改子表单的内容。

        更换标签:

         Me.NameOfTabControlPage.SetFocus
        

        更改子窗体控件内容:

         Me.NameOfSubformControl.SourceObject = "NameOfSuitableForm"
        

        【讨论】:

          【解决方案6】:

          我开发了一个子程序来将选项卡右侧的小矩形设置为透明。我使用 Access 2003 和 2007 对其进行了测试。

          Private Const GWL_EXSTYLE = -20
          Private Const WS_EX_TRANSPARENT = &H20&
          
          Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
          Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
          Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
          
          Public Sub PatchTabControl(ByVal f As Form)
             Dim hwnd As Long
             hwnd = FindWindowEx(f.hwnd, 0, "OFormSub", vbNullString)
             If hwnd = 0 Then Exit Sub
             hwnd = FindWindowEx(f.hwnd, hwnd, "OFormSub", vbNullString)
             If hwnd = 0 Then Exit Sub
             hwnd = FindWindowEx(hwnd, 0, "OTabControl", vbNullString)
             If hwnd = 0 Then Exit Sub
             SetWindowLong hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_TRANSPARENT
             End Sub
          

          【讨论】:

            【解决方案7】:

            扩展 Duane Rochelle 对 Access 2010 的有用答案:

            问题似乎在于 Microsoft 为控制选项卡颜色的属性赋予的名称是违反直觉的。

            基本上,可以使用 Pressed Color 属性控制选项卡的颜色。在整个选项卡对象的属性中查找它,而不是在单个选项卡的属性中。

            这意味着,将 Pressed Color 设置为 - 例如 - 某种蓝色(例如,#8EA3BD)会使所有选项卡变为蓝色。由于“按下”实际上意味着“选项卡区域位于其他选项卡的顶部”,因此这或多或少等同于对选项卡区域进行着色。

            (对我个人而言,“按下的颜色”是一个误导性名称。在选项卡对象中的所有选项卡中,一个默认可见,即使没有任何人“按下”选项卡。更好的名称是“背景颜色可见标签”。)

            对于一个标签对象的其他元素,人们想要绘制:

            对于选项卡头上的文本(单击以选择选项卡)的颜色,请使用 Pressed Fore Color 属性。

            对于不可见的选项卡(或“隐藏在当前打开的选项卡后面”)的背景颜色,请使用 Back Color 属性。

            对于隐藏标签顶部的文本,请使用 Fore Color 属性。

            因此,我会发现以下名称更直观:

            • 可见选项卡的背景颜色(现在为“按下颜色”)

            • 可见标签的文本颜色(现在是“Pressed Fore Color”)

            • 隐藏标签的背景颜色(现在是“背景颜色”)

            • 隐藏标签的文本颜色(现在为“前景色”)

            【讨论】:

              猜你喜欢
              • 2018-02-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-04-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多