web-dev-qa-db-ja.com

Windowsフォームイベント「選択タブ上」?

Windows Forms アプリケーションをC#で構築しています。タブメニューの特定のタブが選択されたときにコードをトリガーするにはどうすればよいですか?

22
sooprise

TabControl.SelectedIndexChangedイベント。

MSDNを見てください。そこから撮りました。タブコントロールに名前を付けたとしますtabControl1。以下を使用して、このイベントをサブスクライブする必要があります。

tabContrl1.TabControl.SelectedIndexChanged += tabControl1_SelectedIndexChanged;

そして、イベントハンドラを追加します

private void tabControl1_SelectedIndexChanged(Object sender, EventArgs e) {

   MessageBox.Show("You are in the TabControl.SelectedIndexChanged event.");
}
35
Itay Karo

TabControl およびその SelectedIndexChanged イベントは、必要なことを行います。

たとえば、フォームの詳細部分にTabControlが含まれるCustomerファイルがあるとします。ユーザーがトランザクション TabPage をクリックしたときに、この顧客のトランザクションをレイジーロードして読み込みます。コードは次の疑似コードのようになります。

public partial class CustomerMgmtForm : Form {
    // Assuming the design already done, so the TabControl control exists on your form.
    public CustomerMgmtForm() {
        tabControl1.SelectedIndexChanged += new EventHandler(tabControl1_SelectedIndexChanged);
    }

    private void tabControl1_SelectedIndexchanged(object sender, EventArgs e) {
        switch((sender as TabControl).SelectedIndex) {
            case 0:
                // Do nothing here (let's suppose that TabPage index 0 is the address information which is already loaded.
                break;
            case 1:
                // Let's suppose TabPage index 1 is the one for the transactions.
                // Assuming you have put a DataGridView control so that the transactions can be listed.
                // currentCustomer.Id can be obtained through the CurrencyManager of your BindingSource object used to data bind your data to your Windows form controls.
                dataGridview1.DataSource = GetTransactions(currentCustomer.Id);
                break;
        }
    }
}

以下は、TabControlで遊ぶときにも役立ちます。

  1. TabControl.TabPages.Add();
  2. TabControl.TabPages.Contains();
  3. TabControl.TabPages.ContainsKey();
  4. TabControl.TabPages.Insert();
  5. TabControl.TabPages.Remove();
  6. TabControl.TabPages.RemoveAt();
  7. TabControl.TabPages.RemoveByKey()。

TabControl.TabPageCollection Members を使用します。

EDIT#1

特定のタブを選択する場合、タブ名ではなく、0、1、2でのみ識別できますか?

はい、特定の TabPage 選択/アクティブにするために TabControl.SelectedIndex プロパティをインクリメントまたはデクリメントすることもできます。

ただし、開始インデックスが0であるため、TabPages.Count - 1からTabPageにインデックスを付けないでください。そうしないと、 IndexOutOfRangeException スローされます。

住所情報とトランザクションの2つのページがある例を続けるには、次のようにします。

// Will automatically change the selected tab to the Transactions TabPage.
tabControl1.SelectedIndex = 1; 

// Considering there a count of two TabPages, the first is indexed at 0, and the second at 1.  
// Setting the SelectedIndex property to 2 will throw.
tabControl1.SelectedIndex = 2; 

注:TabControl.SelectedIndexプロパティを変更すると、TabControl.SelectedIndexChangedイベントがトリガーされます。

15

特定のタブを選択する場合、タブ名ではなく、0、1、2でのみ識別できますか?

これを行うには、イベントリスナーをタブコントロールではなく実際のタブに追加します。

TabHistoryというタブがある場合は、次の行をデザイナーに追加できます。

this.tabHistory.Enter += new System.EventHandler(this.tabHistory_Enter);

次に、メソッドを追加してイベントをキャッチします。

private void tabHistory_Enter(object sender, EventArgs e)
{
    MessageBox.Show("Hey! Ive got focus");
}

たとえば、3つのタブがある場合...

if (tabControl.SelectedTab == tabControl.TabPages[0])
               do something...
if (tabControl.SelectedTab == tabControl.TabPages[1])
               do something else...
if (tabControl.SelectedTab == tabControl.TabPages[2])
               do something else...
2
Nikola Glisic

これが helps あなたかどうか確認してください。 「SelectedIndexChanged」が役立つかもしれません。

MSDNの詳細は こちら です

1
Ram