1

Windowsフォームを設計しています。フォーム自体に表示される出力があります。印刷を使用しようとしましたが、機能していません。それ、どうやったら出来るの?

フォームを印刷していません。

追加: 各数字の横にテキスト文字列を含む 3 つの数字を表示する必要があります。以前の結果を上書きせずに、フォームまたはフォームのラベルに表示されるようにしたいと考えています。

例:

    3 (wrong) 1 (right) 8 (wrong)
    2 (wrong) 1 (right) 5 (right)
    9 (right) 1 (right) 5 (right)

追加: 助けてくれてありがとう。もう1つ質問があります。私は良いと思います。

私はループ内でこのようなことをすることを考えていました.問題は、文字列と整数を一緒に追加して新しい変数を作成できないことです: Xnum1 = Xnum1 + 50

    Xnum2 = Xnum1 + ".0F"

    Ynum1 = Ynum1 + 50

    Ynum2 = Ynum1 + ".0F"
4

2 に答える 2

1

PrintVB6 では、ステートメントを使用してフォームの表面に描画できます。ただし、VB.NET では、 メソッドを使用して、フォームの表面への描画に使用できるForm.CreateGraphics新しいオブジェクトを作成する必要があります。Graphics例えば:

Private Sub PrintText(text As String, x As Single, y As Single)
    Dim g As Graphics = Me.CreateGraphics()
    g.DrawString(text, New Font("Arial", 16), New SolidBrush(Color.Black), New PointF(x, y))
End Sub

Printこれは、そのような VB6 ステートメントを使用することに最も近いものです。

ただし、コントロールを使用してデータを表示することを強くお勧めします。表示する必要があるデータについては、単純な複数行のテキスト ボックスまたはラベルで十分です。例えば:

Private Sub AppendResult(index As Integer, right As Boolean)
    If right Then
        TextBox1.Text = TextBox1.Text & " " & index.ToString() & " (right)"
    Else
        TextBox1.Text = TextBox1.Text & " " & index.ToString() & " (wrong)"
    End If
End Sub

もっと凝ったものにしたい場合は、代わりにデータ グリッド、リスト ボックス、リスト ビュー、さらにはテーブル レイアウト コントロールの使用を検討できます。

于 2012-12-10T16:09:27.203 に答える
1

最も効率的な方法は、6 列のtableLayoutPanelを使用することだと思います。各セルに、最初のセルに番号を示すラベルを追加し、2 番目のセルにその番号のインジケーター (正しい/間違っている) を追加します。2 番目と 3 番目の数字も同様に行います (2 番目の数字 = 3 番目と 4 番目のセル、3 番目の番号 = 5 番目と 6 番目のセル)。

次の数値セットについては、各セルにラベルを付けて新しい行を追加できます。

私の答えをより専門的にするためにいくつかのコードを追加します。

まず、フォームに tableLayoutPanel を追加します。好きなようにサイズを変更します(データを処理するのに十分な長さの幅にします)lastRowを削除してから、列を追加します(6列にしたい)。列のサイズをパーセンテージ = 16.67% になるように編集します。

Public Class Form1

Private rowIndex
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    For i = 0 To 4 Step 2
        Dim val As Integer = 3
        AddLabels(val, i, 0)
    Next
    For i = 1 To 5 Step 2
        Dim val As String = "right"
        AddLabels(val, i, 0)
    Next
End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    rowIndex = rowIndex + 1


    Me.TableLayoutPanel1.RowStyles.Add(New RowStyle(SizeType.Absolute, 30))
    Me.TableLayoutPanel1.Height = Me.TableLayoutPanel1.Height + 30
    For i = 0 To 4 Step 2
        Dim val As Integer = 3 'here you have to put your number
        AddLabels(val, i, rowIndex)
    Next
    For i = 1 To 5 Step 2
        Dim val As String = "right" 'here you have to put your indicator
        AddLabels(val, i, rowIndex)
    Next

End Sub


Private Sub AddLabels(ByVal lblValue As String, ByVal column As Integer, ByVal row As Integer)
    Dim lblHeader As New Label
    lblHeader.AutoSize = True
    lblHeader.Margin = New Padding(0)
    lblHeader.BackColor = Color.Transparent
    lblHeader.TextAlign = ContentAlignment.MiddleLeft
    lblHeader.Dock = DockStyle.None
    lblHeader.Text = lblValue

    'Put the lblHeader in the right cell
    Dim lblHeaderPos As New TableLayoutPanelCellPosition(column, row)
    TableLayoutPanel1.SetCellPosition(lblHeader, lblHeaderPos)
    TableLayoutPanel1.Controls.Add(lblHeader)

End Sub

問題が発生した場合はお知らせください。

また、追加する行数がわからない場合は、tableLyoutPanel をパネル内に配置します。パネルのプロパティ AutoScroll=True を作成すると、新しい行を無限に追加できます。

于 2012-12-10T16:24:50.683 に答える