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 コントロールに切り替える必要があります。これは基本的にワードパッドが使用するものであり、ワードパッドがメモ帳よりも真のワープロに似ている理由を説明しています。当然のことながら、その機能には多少の使いやすさの犠牲が伴います。コード内で単純な TextBox コントロールを操作するよりも、RichTextBox コントロールを操作する方が面倒です。

また、すべての行ではなく、テキストボックスの右端まで数行を埋めて、見栄えを良くしようとしています。

これは…きれいではありませんが、ある程度可能です。フォーム (または少なくともテキスト ボックス コントロール) のサイズを変更できず、フォントが変更されないと仮定すると、テキスト ボックスの右端にテキストを埋め込むために必要なスペースの数を計算し、その正確な数を挿入できます。

これを行うには、TextRenderer.MeasureTextメソッドを使用します。最も単純なオーバーロードは、指定されたフォント (テキスト ボックスで使用されるもの) で描画されたときに特定のテキスト文字列が占めるピクセル数を示します。その情報を使用して、テキスト ボックス コントロールのクライアント領域からそれを差し引きString.PadLeft、必要な数のスペースで (たとえば を使用して) 文字列をパディングします。

うーん!なんて痛い!そして明らかに、これはテキストが変更されるたびに再計算する必要があります。また、スクロール バーも慎重なレイアウトを台無しにするため、垂直線の数を変更するだけでも再計算が必要になる場合があります。

どうしても視覚的に区別する必要があり、別のコントロールに切り替えることができない場合は、行の先頭にタブを挿入してインデントします。VB.NET では、定数を使用vbTabして文字列にタブを挿入します。例えば、myTextBox.Text = vbTab & "Some text"

しかし、サンプル コードを読むと、書式設定された計算結果を表示しようとしているように見えます。そのためのテキスト コントロールはまったく必要ありません。テキスト コントロール (TextBox や RichTextBox など) が必要になるのは、ユーザー入力をサポートする必要がある場合だけです。出力を計算している場合、同じ場所で入力をサポートしていない可能性があります。したがって、代わりに ListBox または ListView コントロールを使用してみませんか? これにより、複数行のレイアウトと書式設定がすべて処理され、作業が大幅に楽になります。

于 2013-03-29T05:41:08.240 に答える
-2

パネルを使用してコントロールを含めるようにしてください。それでもテキストボックスを使用したい場合は (ラベルを使用する方が良いと思います)、それらをパネルにコントロールとして追加します。以下のように:

    '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 に答える