【问题标题】:Scrolling text in form title bar在表单标题栏中滚动文本
【发布时间】:2013-06-19 12:14:14
【问题描述】:

我编写了一个简单的代码来滚动表单标题栏中的文本。它工作正常,直到文本的长度达到 159。之后,标题栏中的文本剪切。它没有到达标题栏的末尾,而是在标题栏的中间切断。为什么会这样? tempheader 是一个在表单加载时存储 me.text 值的变量。

这是时间间隔为 100 的计时器滴答事件中的代码

 Me.Text = " " & Me.Text
        If Len(Me.Text) = 159 Then Me.Text = tempheader

【问题讨论】:

  • 这取决于你的表格有多大。
  • 这不取决于你的表格有多宽吗?我的猜测是您的表单比您在代码中包含的 159 个字符的限制要宽。在它运行时减小宽度,看看会发生什么。
  • 我的表单是 MDIform 并且它被最大化了。我的表格比 159 宽,但就像我说的那样,它的长度为 159 ,这就是我包含上述代码的原因。没有上面的代码,当len达到159时,文字消失。
  • 向我们展示其余的代码。您为解决某些问题而输入的代码行没有用 - 被破坏的代码很有用! tempHeader 是什么?另外,您在这里运行的是哪个版本的 Windows,这是 WinForms 还是 WPF?
  • 有趣的是,我可以在 WinForms 应用程序中复制它 - 但我的标题被截断的长度是 255 个字符。这似乎(通过眼睛)是适合我屏幕上最大化窗口的最大文本长度 - 但如果我在两个显示器上调整窗口大小,它不会超过该限制。

标签: vb.net


【解决方案1】:

试试这个..

Dim g As Graphics = Me.CreateGraphics()

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Static sPace As String

    sPace &= " "
    Me.Text = sPace & Me.Text
    If g.MeasureString(Me.Text, Me.Font).Width >= Me.Width Then
        Me.Text = tempheader
        sPace = ""
    End If

End Sub

【讨论】:

  • @Nelsons .. 我已经在我的 VS 2005 中尝试过它并且它有效! ..你有什么结果?
  • 它仍然没有走到表格的末尾。它在位置 159 处切断。
  • @Nelsons .. 文本一直运行到表单的右侧,然后用其他文本更改.. 在我的 VS 2005 中.. 现在,我不太确定这里真正的问题..
【解决方案2】:

大声笑我知道这是一篇旧帖子,但我在寻找其他内容时遇到了它,我只是使用自定义标题栏来滚动文本。只需创建一个空表单,双击它删除所有代码并从下面添加代码。返回并从项目中删除表单并将其保存为 dll。您只需将其导入回来并将其添加到您的工具栏,您就可以在任何项目中使用它。


Imports System.Drawing
Public Class CustomTitlebar
Inherits Windows.Forms.Panel
  Public Sub ColourTitleText(ByRef panelBG As Color, ByRef txtBG As Color, ByRef txtFC As Color)
    Dim textbox1 As New Windows.Forms.TextBox
    Dim Psize As New Point(26, 200)
    Me.Size = New Point(26, 200)
    Me.BackColor = panelBG
    Me.BorderStyle = Windows.Forms.BorderStyle.None
    Me.Dock = Windows.Forms.DockStyle.Top
    Me.Font = New System.Drawing.Font("Tahoma", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
    textbox1.Name = "Textbox1"
    textbox1.BackColor = txtBG
    If Not txtFC = Nothing Then
        textbox1.ForeColor = txtFC
    End If
    textbox1.BorderStyle = Windows.Forms.BorderStyle.None
    textbox1.Size = New Size(Psize.X - 4, 20)
    textbox1.Location = New Point(3, 3)
    textbox1.Font = New System.Drawing.Font("Tahoma", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
    textbox1.Multiline = False
    textbox1.Text = "Coded by tHE_alCHMist 2010"
    Me.Controls.Add(textbox1)
  End Sub
End Class

把它放在一个计时器里 "CustomTitlebar1.Text = MarqueeLeft(CustomTitlebar1.Text)"


然后把这个函数放在某个地方

Public Function MarqueeLeft(ByVal Text As String)
    Dim Str1 As String = Text.Remove(0, 1)
    Dim Str2 As String = Text(0)
    Return Str1 & Str2
End Function

最后记得把它停靠在表单的顶部,希望有人觉得这段代码有用。

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多