0

スタートアップフォームのボタンのイベントハンドラーからインスタンス化された別のクラスから、アプリケーションスタートアップフォームのコントロールを変更しようとしています。

これは、メインフォームのクリックリスナーです。

Sub Button1Click(sender As Object, e As EventArgs)
    Dim changer As New Changer()
    changer.dochange

End Sub

これはクラスチェンジャーです:

Public Class Changer
Sub dochange
    'ignore this part
    Dim window As Form1
    window = New Form1()
    window.Show

          'this is where i have a problem:
    Dim bunz As MainForm
    bunz = New MainForm()
    bunz.label1.Text = "sometext"
End Sub
 End Class

label1を公開するように設定しましたが、テキストは変更されません。なにが問題ですか?

4

3 に答える 3

2

発生している問題は、2番目のメインフォームを作成し、元のメインフォームではなく2番目のメインフォームのラベルテキストを変更しているためです。あなたがする必要があるのは、チェンジャークラスのイベントを作成し、それをMainFormでサブスクライブし、それを使用してラベルのテキストを変更することです。

メインテキスト

Public Class MainForm

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim changer As New Changer()
        AddHandler changer.ChangeText, AddressOf ChangeTextHandler
        changer.dochange()
    End Sub

    Private Sub ChangeTextHandler(value As String)
        Label1.Text = value
    End Sub

End Class

チェンジャークラス

Public Class Changer
    Public Event ChangeText(value As String)
    Sub dochange()
        'ignore this part
        Dim window As Form1
        window = New Form1()
        window.Show()
        RaiseEvent ChangeText("SomeText")
    End Sub
End Class
于 2012-12-07T05:29:37.047 に答える
1

以下のコード例が機能するはずです。VBでは、変更しようとしているフォームを明示的に宣言したり、参照したりする必要はありません。メインフォームとして開かれている場合、またはShared ShowDialogメソッドを使用して開かれている場合は、この場合、フォームの共有プロパティとしてLabel1を参照できます。別のインスタンスを作成する必要はありません。

Public Class MainForm
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim changer As New Changer()
        changer.dochange()
    End Sub
End Class

Public Class Changer
    Sub dochange()
        'ignore this part
        Dim window As Form1
        window = New Form1()
        window.Show()

        'this is where i have a problem:
        MainForm.Label1.Text = "sometext"
    End Sub
End Class

上記は2つの別々のファイルにあります。1つはWindowsフォームを追加してVisualStudioから作成されたMainForm.vbファイルで、もう1つはクラスを追加して作成されたファイルです。

于 2012-12-07T03:14:47.373 に答える
1

これはまさに私が探していたものでした。別のクラスのフォームのステータスストリップラベルをクリアしたかったのです。フォームに、AddHandler otherClass.ChangeText、AddressOf ChangeTextHandler、およびサブChangeTextHandlerを追加しました。otherClassでは、RaiseEvent ChangeText( "")を実行し、機能しました。ありがとう!ありがとう!一つには、私は共有へのアクセスについて暖かくなり続けました...無視されるでしょう。Public Shared Event ChangeText(value As String)のようなイベントを定義しましたが、これ以上の問題はありません。ここには非常に優秀な人々がいます。

于 2012-12-10T17:18:19.217 に答える