2

VisualBasicは初めてです。Microsoft VisualStudio2010をインストールしました。新しいWindowsフォームアプリケーションを作成しました。例として、エンドユーザーに2つの数値を入力して、それらを加算または最初の数値から2番目の数値を減算して、出力をテキストボックスに表示できるようにする簡単なプログラムを作成しました。

ここで、Windowsフォームの読み込み時に自動的に実行される別のサブルーチンを追加しました。これにより、出力テキストボックスの幅とフォームの幅が計算され、下部に表示されます。

現在のコードは次のようになっています。

Public Class Form1

    ' Run this Subroutine initially to display the Form and Text box width
    Private Sub Form_Load()
        Label5.Text = TextBox3.Width
        Label7.Text = Me.Width
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim a As Integer
        Dim b As Integer
        a = TextBox1.Text
        b = TextBox2.Text
        TextBox3.Text = a + b
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim a As Integer
        Dim b As Integer
        a = TextBox1.Text
        b = TextBox2.Text
        TextBox3.Text = a - b
    End Sub
End Class

足し算と引き算ではすべてが正しく機能しますが、Windowsフォームにフォームと出力テキストボックスの幅は表示されません。

Form_Load()が正しく実行されていないと思います。

Form_Activate()も試しましたが、それも機能しませんでした。

これができるようになったら、この概念を拡張して、フォームのサイズ変更とともに出力テキストボックスのサイズを変更したいと思います。ただし、理解するために、Form_Load()を正常に実行できるかどうかを確認したいと思いました。

ありがとう。

4

2 に答える 2

2

Form_Load実行されません。今のところ、それは他の方法です。このメソッドにイベントを処理させるようにVBに指示するには、次のLoadように指示する必要があります。

Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Loasd
    Label5.Text = TextBox3.Width
    Label7.Text = Me.Width
End Sub

(そして、イベントに必要なパラメーターを追加します。)

他のいくつかの意見:

  • Option Strict Onプロジェクトオプションで常に有効になっていることを確認してください。これにより、コンパイラはコードに対してより厳密になり、より多くのエラーにフラグを立てます。これらのエラーは潜在的なバグであるため、これは良いことです。特に、コードは非常に緩く、異なるデータ型間の変換が行われるため、これらを明示的にする必要があります。

  • 変数を宣言するときに変数を初期化します。別のステートメントで値を割り当てないでください。つまり、次のように記述します。

    Dim a As Integer = Integer.Parse(TextBox1.Text)
    

    (明示的な変換も追加されました。)

  • コントロールをフォームに入力させたい場合は、Dock手動でプログラムする代わりに、フォームエディタでそのプロパティを適切に設定できます。

于 2013-01-23T15:46:45.020 に答える
2

アプリが自動的に実行するように、ハンドルを追加する必要があります。

Private Sub Form_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    '...
End Sub
于 2013-01-23T15:48:49.043 に答える