关于c#:根据不同的标签页选择隐藏或显示文本框

Hide or show textbox based on different tab page selection

首先,我确实发现这很有用,但并不完全是我需要的
Windows 窗体事件"在选择选项卡上"?

这仅涵盖整个选项卡控件的选择更改事件,而不是每个单独的选项卡页。

我需要做的是根据我选择的标签页隐藏或显示某些文本框。示例如下,但单击事件不起作用。 ExpenseReport 和 ExpenseReview 是我的两个选项卡。任何帮助将不胜感激!

1
2
3
4
5
6
7
8
9
10
11
private void tpExpenseReport_Click(object sender, EventArgs e)
{
    txtTripNo.Visible = true;
    txtTripNo2.Visible = false;
}

private void tpExpenseReview_Click(object sender, EventArgs e)
{
    txtTripNo.Visible = false;
    txtTripNo2.Visible = true;
}


使用 TabControl 的 SelectedIndexChanged 事件。

假设只有两个标签。 (如果有更多,我会使用 switch 语句而不是 if..else)

1
2
3
4
5
6
7
8
9
10
11
12
13
tabControl1.SelectedIndex_Changed(object sender, EventArgs e)
{
   if(tabControl1.SelectedIndex == 0)
   {
      txtTripNo.Visible = true;
      txtTripNo2.Visible = false;
   }
   else
   {
      txtTripNo.Visible = false;
      txtTripNo2.Visible = true;
   }
}


你可能会这样:

1
2
3
4
5
6
7
8
9
10
11
12
private void tabControl_SelectedIndexChanged(...)
{
    int index = tabControl.SelectedIndex;
    if (index == 0) HideTextBoxes(false);
    else HideTextBoxes(true);
}

private void HideTextBoxes(bool someSelector)
{
    txtTripNo.Visible = someSelector;
    txtTripNo2.Visible = !someSelector;
}


最好使用 Selected 事件。它传递在 TabControlEventArgs 参数中选择的实际选项卡:

1
2
3
4
5
6
7
8
9
private void tabControl1_Selected(object sender, TabControlEventArgs e) {
  if (e.TabPage == tpExpenseReport) {
    txtTripNo.Visible = true;
    txtTripNo2.Visible = false;
  } else if (e.TabPage == tpExpenseReview) {
    txtTripNo.Visible = false;
    txtTripNo2.Visible = true;
  }
}