在文本框中粗体化特定行并向右侧缩进

时间:2013-03-29 04:44:16

标签: .net vb.net winforms textbox formatting

我试图在文本框中加粗某些行,而不是所有输出。而且我还试图在文本框的最右边填充几行,而不是所有行,以使其看起来更清晰。

我正在尝试加粗所有(txtBoxCourse文本框)并尝试将所有(txtBoxGrades文本框)缩进到右侧。

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click

    Dim semester, Newline As String
    Dim totalGPA As Double = QualityPoints / txtBoxTotalHours.Text

    Newline = System.Environment.NewLine
    semester = CStr(txtBoxResults.Text)
    txtBoxTotalGPA.Text = CStr(totalGPA)
    txtBoxTotalGPA.Text = Math.Round(totalGPA, 3)

    If radButtonFall.Checked Then
        semester = "Fall"
    ElseIf radButtonSpring.Checked Then
        semester = "Spring"
    ElseIf radButtonSummer.Checked Then
        semester = "Summer"
    End If


    txtBoxResults.Text = (semester & " " & "Semester : ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & "Total Hours : " & txtBoxTotalHours.Text)
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & "Total Qualit Points : " & txtBoxTotalQualityPoints.Text)
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & "Total " & semester & " " & "GPA : " & txtBoxTotalGPA.Text)
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & "Enrolled Courses : ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & txtBoxCourse1.Text & "     " & txtBoxGrade1.Text)
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & txtBoxCourse2.Text & "     " & txtBoxGrade2.Text)
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & txtBoxCourse3.Text & "     " & txtBoxGrade3.Text)
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & txtBoxCourse4.Text & "     " & txtBoxGrade4.Text)
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & txtBoxCourse5.Text & "     " & txtBoxGrade5.Text)
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & txtBoxCourse6.Text & "     " & txtBoxGrade6.Text)
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & txtBoxCourse7.Text & "     " & txtBoxGrade7.Text)
    txtBoxResults.Text = (txtBoxResults.Text & Newline & " ")
    txtBoxResults.Text = (txtBoxResults.Text & Newline & txtBoxCourse8.Text & "     " & txtBoxGrade8.Text)

End Sub

2 个答案:

答案 0 :(得分:0)

  

我试图在文本框中加粗某些行,而不是所有输出。

不幸的是,TextBox控件不支持格式化文本。您可以更改字体,如果您愿意,可以将其设置为粗体,但所有文本都将为粗体。没有办法只将文本的某些加粗。

您将在Windows记事本中看到相同的限制,它只是一个TextBox控件,其上附有一个菜单以支持加载和保存文件。您可以更改记事本使用的字体,但这是一个万能的事情。无法将条件格式应用于特定行或字符。

如果您需要支持条件格式,则需要切换到RichTextBox control。这基本上是Wordpad使用的,它解释了为什么Wordpad更像是一个真正的文字处理器而不是记事本。当然,这种功能有点可用性:使用RichTextBox控件比在代码中使用简单的TextBox控件更麻烦。

  

并且我还尝试将几行填充到文本框的最右侧,而不是所有行,以使其看起来更清晰。

这是......有点可能,虽然它并不漂亮。假设您的表单(或至少文本框控件)不可调整大小,并且字体永远不会更改,您可以计算将文本填充到文本框最右侧所需的空格数,并插入该确切数字。

为此,您将使用TextRenderer.MeasureText方法。 The simplest overload将告诉您当以指定字体(文本框使用的字体)绘制时,特定文本字符串将占用的像素数。您将使用该信息,从文本框控件的client area中减去该信息,然后使用所需的空格数填充字符串(例如String.PadLeft)。

唉!太痛苦了!显然,每次更改文本时都需要重新计算。滚动条也会破坏你仔细的布局,所以即使改变垂直线也需要重新计算。

如果您确实需要创建一些视觉区别并且无法切换到其他控件,只需在行的开头插入一个选项卡以缩进它们。在VB.NET中,使用常量vbTab将制表符插入字符串中;例如,myTextBox.Text = vbTab & "Some text"

但是从阅读示例代码开始,我觉得你试图显示一些计算的格式化结果。你根本不需要或想要一个文本控件!您需要支持用户输入时,唯一需要文本控件(如TextBox或RichTextBox)的时间。如果您正在计算输出,则可能不支持在同一位置输入。因此,为什么不尝试使用ListBox或ListView控件呢?这可以为您处理所有多行布局和格式化内容,这将使您的生活更轻松。

答案 1 :(得分:-2)

尝试使用Panel来包含控件,如果您仍想使用文本框(我认为最好使用标签),请在Panel中将它们添加为控件。如下所示:

    'create textbox
    Dim tx, tx2 As New TextBox

    'set font style, location, and text
    tx.Font = New System.Drawing.Font(tx.Font, FontStyle.Bold)        
    tx2.Font = tx.Font
    tx2.Location = New System.Drawing.Point(tx.Location.X, tx.Location.Y + 25)
    tx.text = "here"
    tx2.text = "here"

    'add them into Panel
    Panel1.Controls.Add(tx)
    Panel1.Controls.Add(tx2)

您可以修改tx的文字,字体等。