9

Visual Basic Express 2008 を使用して Windows フォーム アプリケーションを開発する方法を学習しています。私のテスト/学習アプリケーションには、いくつかのテスト ページ (たとえば、3、ここでは数は関係ありません) を持つ TabControl があります。

現在、Tabcontrol で MouseClick イベントを処理していますが、クリックされたタブを取得する方法がわかりません。タブ ストリップの別の場所をクリックしても、MouseClick イベントは発生しないと思います。そのため、タブがクリックされている必要があります。問題は、どちらがタブでしたか?

どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

19

MouseClickこの目的により適した別のイベントがあるため、イベントを使用しないでください:
(注: OP がコメントを投稿した後に編集されました。)

TabControlプロパティSelectedIndexを持っています。これは、現在選択されているタブの 0 から始まる番号です。SelectedTab(選択したタブ ページ オブジェクトを直接参照するという別のプロパティもあります。)

ユーザーが別のタブを選択するたびに通知を受けるために、イベント ハンドラーをイベントにフックSelectedIndexChangedできます。

Private Sub MyTabControl_SelectedIndexChanged(ByVal sender As Object, _
                                              ByVal e As System.EventArgs) _
            Handles MyTabControl.SelectedIndexChanged

    Dim indexOfSelectedTab As Integer = MyTabControl.SelectedIndex
    Dim selectedTab As System.Windows.Forms.TabPage = MyTabControl.SelectedTab

    ...

End Sub

(たとえば、 が無効な値を持つ場合に対して、コードをさらに保護したい場合あることに注意してください。)SelectedIndex-1

編集(OPのコメントの後に追加)

SelectedIndexChangedすべてのマウス ボタンに対するユーザーのアクションをキャッチする必要があるためにうまくいかない場合は、次のようなGetTabRect方法を使用できます。TabControl

Private Sub MyTabControl_MouseClick(sender As Object, _
                                    e As System.Windows.Forms.MouseEventArgs) _
            Handles MyTabControl.MouseClick

    ...

    For tabIndex As Integer = 0 To MyTabControl.TabCount - 1
        If MyTabControl.GetTabRect(tabIndex).Contains(e.Location) Then
           ...  ' clicked on tab with index tabIndex '
        End If
    Next

    ...

End Sub
于 2010-02-12T09:12:51.700 に答える
3

これを処理するために使用する最も簡単な方法は、各タブページのイベントに対して ENTER および LEAVE イベントを使用することです。たとえば、最初のページを離れると、可視プロパティが datagridview に False に変更され、入力すると True に戻り、テーブルのデータがロードされるようにしています。

Private Sub TabPage1_Enter(sender As System.Object, e As System.EventArgs) Handles TabPage1.Enter
    DataGridView1.Visible = True
    Load_Table()
End Sub

Private Sub TabPage1_Leave(sender As System.Object, e As System.EventArgs) Handles TabPage1.Leave
    DataGridView1.Visible = False
End Sub

コントロールのテキストなどを変更したい場合は、index メソッドが最適な方法だと思いますが、どのタブがクリックされたかを知るためだけに、これら 2 つのイベントが目的です。

于 2015-07-04T13:46:16.130 に答える