2018年1月31日 星期三

[Window Form] 學習日記 - 把Form 加入 TabControl 的 TabPage中

答案先來
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
 switch ((sender as TabControl).SelectedIndex)
 {
  case 0:
   var formBig = new FormBig();
   formBig.FormBorderStyle = FormBorderStyle.None;
   formBig.TopLevel = false;
   formBig.Visible = true;
   formBig.Top = 0;
   formBig.Left = 0;
   tabPage1.Controls.Add(formBig);
   tabPage1.Show();
   break;
  case 1:
   //do page1
   break;
  case 2:
   //do page2
   break;
 }
}


股票程式寫了一些

零零散散的寫了各種Form

包括大盤顯示、今日排行過濾、收藏、對帳單等

每次測試都是在Main()裡面調整要呼叫的Form打開來看

切換效率很差,又要一直改程式

於是今天把所有的Form整合成一個大Form

第1個Tab顯示大盤走勢


第2個Tab是我個人蒐藏的個股

第3個Tab顯示虛擬自動程式交易的對帳單,未來下面要放報酬率圖表

拉一個tabControl近來,調整大小

預設會給兩個tabPage,看實際需要幾個tab就增加幾個索引標籤

產生SelectedIndexChanged方法

  1. 選取tabControl1
  2. 打開事件屬性
  3. 在SelectedIndexChanged右邊的空白處點兩下,然後就會自動產生SelectedIndexChanged方法


先確認每個tab要做的事兒與呼叫的form
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
 switch ((sender as TabControl).SelectedIndex)
 {
  case 0:
   //顯示大盤走勢form
   break;
  case 1:
   //顯示收藏個股form
   break;
  case 2:
   //顯示歷史對帳單form
   break;
 }
}
然後把實際呼叫form的方法寫在case中,說明如下
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
 switch ((sender as TabControl).SelectedIndex)
 {
  case 0:
   var formBig = new FormBig();
   //不要顯示Title
   formBig.FormBorderStyle = FormBorderStyle.None;

   //非最上層
   formBig.TopLevel = false;

   //顯示From,要加上去才會顯示Form
   formBig.Visible = true;

   //設定From位置
   formBig.Top = 0;
   formBig.Left = 0;

   //將Form加入tabPage中
   tabPage1.Controls.Add(formBig);

   //顯示tabPage
   tabPage1.Show();
   break;
  case 1:
   //do page1
   break;
  case 2:
   //do page2
   break;
 }
}
其中有幾個設定特別重要
//非最上層
formBig.TopLevel = false;
formBig.Visible = true;
沒有設定formBig.TopLevel = false,是沒有辦法把Form加到tabPage中的

會發生System.ArgumentException: '無法將最上層控制項加入控制項。' 


沒有設定formBig.Visible = false,會看不到Form

至於其他的就是一些UI的位置跟要不要顯示而已



沒有留言:

張貼留言