2

プログラムにテーブルを追加および削除できるようにするレストラン用のプログラムを作成しようとしています。私の考えでは、「テーブルの追加」と呼ばれるボタンがあり、その名前がテーブル番号としてボタンを生成し、新しく作成されたボタンには関数またはサブが含まれます(これについてはまだよくわかりませんが、進行中の作業)

問題は、ボタンを動的に追加する方法を見つけたということですが、AdressOf の部分で混乱しています。

目的のメソッドまたは別の方法でリンクするために、addressOf 部分を使用する必要がありますか?

Public Class Form_Create_Button

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    CreateButton(TextBox1.Text, TextBox2.Text)
End Sub

Private Sub CreateButton(TableNr As String, PersonNr As String)
    Dim Button As New Button With {.Left = 10, .Top = 10, .Text = TableNr, .Name = "Button" & TableNr}
    AddHandler Button.Click, AddressOf '...
    Main_Form.GroupBox1.Controls.Add(Button)
End Sub

クラス終了

4

2 に答える 2

4

AddressOf演算子r を使用して、プログラムでイベント ハンドラーを追加できます。したがって、すべてのボタンに対して 1 つのハンドラーを使用できます。Sender引数を使用してボタンを識別できます。

Private Sub CreateButton(TableNr As String, PersonNr As String)
    Dim Button As New Button With {.Left = 10, .Top = 10, .Text = TableNr, .Name = "Button" & TableNr}
    AddHandler Button.Click, AddressOf TableClicked
    Main_Form.GroupBox1.Controls.Add(Button)
End Sub

Private Sub TableClicked(sender As Object, e As EventArgs )
    Dim button = DirectCast(sender, Button)
    Dim tableNumber As String = button.Name.Substring(6)
    ' ...
End Sub
于 2013-09-23T20:44:47.173 に答える
0

で同じメソッドを使用することに不安がAddHandlerあり、そのメソッドが呼び出されたときに、どのボタンがクリックされたかを知る必要があります。これsenderは、イベント ハンドラーの引数です。

Private Sub CreateButton(TableNr As String, PersonNr As String)
    Dim Button As New Button With {.Left = 10, .Top = 10, .Text = TableNr, .Name = "Button" & TableNr}
    AddHandler Button.Click, AddressOf Table_Click
    Main_Form.GroupBox1.Controls.Add(Button)
End Sub

Private Sub Table_Click(sender As Object, e As EventArgs)
    Dim button As Button = TryCast(sender, Button)
    '...
End Sub

ここで欠けているのは PersonNr と TableNr のデータだけですが、この時点で、これらをボタン自体に簡単に添付できるはずです。プッシュが必要な場合、オプションの 1 つは、これらの追加フィールドを使用してボタンから独自のコントロールを継承することです。

于 2013-09-23T20:51:35.067 に答える