1

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

我正在尝试将所有(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
4

2 回答 2

0

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

不幸的是,TextBox 控件不支持格式化文本。您可以更改字体,如果您愿意,可以将其设为粗体,但所有文本都将变为粗体。无法仅将部分文本设为粗体。

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

如果您需要支持条件格式,则需要改用RichTextBox 控件。这基本上是写字板使用的,它解释了为什么写字板更像是一个真正的文字处理器而不是记事本。自然,这种能力是以牺牲可用性为代价的:使用 RichTextBox 控件比在代码中使用简单的 TextBox 控件更麻烦。

而且我还试图在文本框的最右边填充几行,而不是所有的行,以使其看起来更干净。

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

为此,您将使用该TextRenderer.MeasureText方法。最简单的重载将告诉您在以指定字体(文本框使用的字体)绘制时特定文本字符串将占用的像素数。您将使用该信息,从文本框控件的客户区中减去它,然后String.PadLeft用所需数量的空格填充字符串(使用例如 )。

啊! 多么痛苦!显然,每次更改文本时都需要重新计算。滚动条也会破坏您仔细的布局,因此即使垂直线数的变化也可能需要重新计算。

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

但是通过阅读您的示例代码,在我看来,您正在尝试显示一些格式化的计算结果。你真的根本不需要或想要一个文本控件!只有当您需要支持用户输入时才需要文本控件(如 TextBox 或 RichTextBox)。如果您正在计算输出,那么您可能不支持在同一个地方输入。因此,为什么不尝试使用 ListBox 或 ListView 控件呢?这将为您处理所有多行布局和格式化内容,这将使您的生活更轻松。

于 2013-03-29T05:41:08.240 回答
-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 的文本、字体等。

于 2013-03-29T06:37:44.117 回答