Windows Forms アプリケーションをC#で構築しています。タブメニューの特定のタブが選択されたときにコードをトリガーするにはどうすればよいですか?
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.");
}
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
で遊ぶときにも役立ちます。
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
イベントがトリガーされます。
特定のタブを選択する場合、タブ名ではなく、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...