2

VB の新規ユーザーとして、このコードがあるプロジェクトでは機能するのに別のプロジェクトでは機能しない理由を理解するのに苦労しています。このコードは、新しいプロジェクトと 2 つの新しいフォームを作成すると正常に動作しますが、プロジェクトに配置すると、左クリックでも右クリックでもまったく起動しません。

try/catch ステートメントを試しましたが、エラーは報告されていません。エラーを見つけるためにこれをトラブルシューティングするにはどうすればよいですか。コードを削除して各コメントの後に実行しようとしましたが、それでも同じです。私はフォーム上の他のすべてのコードを削除しようとしましたが、2つのサブだけを残しましたが、喜びはありません. どんな助けでも大歓迎です。

fromMain

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        'TODO: This line of code loads data into the 'StorageDataSet1.Customers' table. You can move, or remove it, as needed.
        Me.CustomersTableAdapter.Fill(Me.StorageDataSet1.Customers)
        'TODO: This line of code loads data into the 'StorageDataSet.User' table. You can move, or remove it, as needed.
        Me.UserTableAdapter.Fill(Me.StorageDataSet.User)

        'Dim frmDepartmentsLive As New frmDepartment
        'frmDepartmentsLive.Owner = Me
        'frmDepartmentsLive.ShowDialog()


        lblDate.Text = Now

        Timer1.Start()

        rdoCustomer.Enabled = False
        rdoCustomer.Checked = True
        rdoDepartment.Enabled = False
        rdoDepartment.Checked = False

        For Each ctrl In Me.Controls
            If TypeOf ctrl Is Button Then
                AddHandler CType(ctrl, Button).MouseDown, AddressOf btn_MouseDown
            End If
        Next

    End Sub

Private Sub btn_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)

        If (e.Button = MouseButtons.Right) Then
            Dim btn = CType(sender, Button)
            frmRacks.buttonName = btn.Name.Replace("btn", "")
            frmRacks.Show()
        ElseIf (e.Button = MouseButtons.Left) Then
            MessageBox.Show("To be coded")
        End If
    End Sub

frmラック

Public Class frmRacks
    Public buttonName As String
    Private Sub racksfrm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        lblRacks.Text = buttonName

    End Sub

    Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
        Me.Close()
    End Sub



End Class
4

1 に答える 1

1

コントロールはパネル上にあるため、フォームのコントロール配列ではなく、そのパネルのコントロール配列のメンバーです。これ (およびその他のこと) は、フォームのデザイナー (ソリューション エクスプローラーで [すべて表示] をクリックし、[開く] をクリックしますformXXX.designer.vb) を見ると明らかです。何も変更しませんが、コントロールがどのように作成および追加されるかを示しています。そう...

    For Each ctrl In thepanelName.Controls
        If TypeOf ctrl Is Button Then
            AddHandler CType(ctrl, Button).MouseDown, AddressOf btn_MouseDown
        End If
    Next

パネル上のこれらのボタンのみの場合は、ショートカットできます。

  For Each btn As Button In thepanelName.Controls
       AddHandler CType(ctrl, Button).MouseDown, AddressOf btn_MouseDown
  Next
于 2013-10-27T15:01:58.880 に答える