2012-07-10 41 views
1

我想單擊按鈕後添加一個TabPage。對我來說,困難在於我用按鈕獲得了一個UserControl,而tabpage是一個用戶控件,我想用TabControl將它添加到現有的UserControl中。winform usercontrols之間的通信將選項卡添加到tabcontrol

這裏是用戶控件的標籤,我想補充:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Data; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Xml; 

namespace Demo 
{ 
    public partial class TabsTravel : UserControl 
    { 
     private static DateTime ArrivalStart; 
     public static DateTime arrivalStart 
     { 
      get { return ArrivalStart; } 
      set { ArrivalStart = value; } 

     } 

     private static DateTime ArrivalEnd; 
     public static DateTime arrivalEnd 
     { 
      get { return ArrivalEnd; } 
      set { ArrivalEnd = value; } 

     } 

     private static DateTime DepartureStart; 
     public static DateTime departureStart 
     { 
      get { return DepartureStart; } 
      set { DepartureStart = value; } 

     } 

     private static DateTime DepartureEnd; 
     public static DateTime departureEnd 
     { 
      get { return DepartureEnd; } 
      set { DepartureEnd = value; } 

     } 

     public TabsTravel() 
     { 
      InitializeComponent(); 
      LoadSubsidiaryXML(); 
      dtpArrivalStart.Format = DateTimePickerFormat.Custom; 
      dtpArrivalStart.CustomFormat = "ddd dd MMM yyyy hh:mm"; 
      dtpArrivalEnd.Format = DateTimePickerFormat.Custom; 
      dtpArrivalEnd.CustomFormat = "ddd dd MMM yyyy hh:mm"; 
      dtpDepartureStart.Format = DateTimePickerFormat.Custom; 
      dtpDepartureStart.CustomFormat = "ddd dd MMM yyyy hh:mm"; 
      dtpDepartureEnd.Format = DateTimePickerFormat.Custom; 
      dtpDepartureEnd.CustomFormat = "ddd dd MMM yyyy hh:mm"; 
      comboSubsidiaryTravel.SelectedIndexChanged += new EventHandler(comboSubsidiaryTravel_SelectedIndexChanged); 
     } 

     private void LoadSubsidiaryXML() 
     { 
      XmlDocument subsidiary = new XmlDocument(); 
      subsidiary.Load("Subsidiaries.xml"); 

      XmlNodeList Subname = subsidiary.SelectNodes("subsidiaries/type/name"); 
      foreach (XmlNode name in Subname) 
      { 
       comboSubsidiaryTravel.Items.Add(name.InnerText); 
      } 
     } 

     private void LoadWorkerXML(string xmlType) 
     { 
      comboWorkerType.Items.Clear(); 
      XmlDocument workerType = new XmlDocument(); 
      workerType.Load(xmlType); 

      XmlNodeList worker = workerType.SelectNodes("worker/type/name"); 
      foreach (XmlNode name in worker) 
      { 
       comboWorkerType.Items.Add(name.InnerText); 
      } 
     } 

     //Select XML which have to be populated to comboWorkerType 
     private void chooseWorker() 
     { 
      string xmlType = ""; 
      string subsidiary = ""; 
      subsidiary = comboSubsidiaryTravel.Text; 
      switch (subsidiary) 
      { 
       case "GH": 
        xmlType = "GHworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "GP": 
        xmlType = "GPworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "GN": 
        xmlType = "GNworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "GT": 
        xmlType = "GTworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 
       case "GS": 
        xmlType = "GSworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "GK": 
        xmlType = "GKworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "GBH": 
        xmlType = "GBHworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "GAS": 
        xmlType = "GASworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "Others": 
        comboWorkerType.Items.Clear(); 
        break; 
       default: 
        break; 
      } 
     } 

     private void comboSubsidiaryTravel_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      chooseWorker(); 
     } 

     private void dtpArrivalStart_ValueChanged(object sender, EventArgs e) 
     { 
      ArrivalStart = dtpArrivalStart.Value; 
      dtpArrivalEnd.MinDate = dtpArrivalStart.Value; 
     } 

     private void dtpArrivalEnd_ValueChanged(object sender, EventArgs e) 
     { 
      ArrivalEnd = dtpArrivalEnd.Value; 
      dtpDepartureStart.MinDate = dtpArrivalEnd.Value; 
     } 

     private void dtpDepartureStart_ValueChanged(object sender, EventArgs e) 
     { 
      DepartureStart = dtpDepartureStart.Value; 
      dtpDepartureEnd.MinDate = dtpDepartureStart.Value; 
     } 

     private void dtpDepartureEnd_ValueChanged(object sender, EventArgs e) 
     { 
      DepartureEnd = dtpDepartureEnd.Value; 
     } 
    } 
} 

這是用戶控件在那裏我得到了TabControl的

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Data; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using MBG.SimpleWizard; 
using System.Globalization; 

namespace Demo 
{ 
    public partial class Page3 : UserControl, IWizardPage 
    { 
     int c = 1; 
     private static DateTime WorkStart; 
     public DateTime workStart 
     { 
      get { return WorkStart; } 
      set { WorkStart = value; } 
     } 

     private static DateTime WorkEnd; 
     public DateTime workEnd 
     { 
      get { return WorkEnd; } 
      set { WorkEnd = value; } 
     } 

     public Page3() 
     { 
      InitializeComponent(); 
      dtpWorkStart.Format = DateTimePickerFormat.Custom; 
      dtpWorkStart.CustomFormat = "ddd dd MMM yyyy hh:mm"; 
      dtpWorkEnd.Format = DateTimePickerFormat.Custom; 
      dtpWorkEnd.CustomFormat = "ddd dd MMM yyyy hh:mm"; 
     } 

     #region IWizardPage Members 

     public UserControl Content 
     { 
      get { return this; } 
     } 

     public new void Load() 
     { 

     } 

     public void Save() 
     { 
     } 

     public void Cancel() 
     { 
      throw new NotImplementedException(); 
     } 

     public bool IsBusy 
     { 
      get { throw new NotImplementedException(); } 
     } 

     public bool PageValid 
     { 
      get { return true; } 
     } 

     public string ValidationMessage 
     { 
      get { throw new NotImplementedException(); } 
     } 

     #endregion 

     private void dtpWorkStart_ValueChanged(object sender, EventArgs e) 
     { 
      workStart = dtpWorkStart.Value; 
      dtpWorkStart.MinDate = dtpWorkEnd.Value; 
     } 

     private void dtpWorkEnd_ValueChanged(object sender, EventArgs e) 
     { 
      workEnd = dtpWorkEnd.Value; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      dataGridView1.DataSource = GetTable(); 

      if (c == 1) 
      { 
       DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn(); 
       dataGridView1.Columns.Add(chk); 
       chk.HeaderText = "Holiday"; 
       chk.Name = "Holiday"; 
      } 
      c++; 

     } 

     public static DataTable GetTable() 
     { 
      DataTable table = new DataTable(); 
      DateTime test = new DateTime(); 
      DateTime test2 = new DateTime(); 
      CultureInfo culture = CultureInfo.CurrentCulture; 
      int week = 0; 

      test = WorkStart; 
      table.Columns.Add("Calendarweek", typeof(int)); 
      table.Columns.Add("Day", typeof(string)); 
      table.Columns.Add("Date", typeof(DateTime)); 
      table.Columns.Add("Start work", typeof(string)); 
      table.Columns.Add("End work", typeof(string)); 
      table.Columns.Add("Total", typeof(TimeSpan)); 

      while (test <= WorkEnd) 
      { 
       test2 = test; 
       test2 = test2.AddHours(10); 
       if (test.DayOfWeek != DayOfWeek.Sunday) 
       { 
        week = culture.Calendar.GetWeekOfYear(test, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); 
        table.Rows.Add(week, test.DayOfWeek.ToString(), test.ToString("dd MMM"), test.ToString("hh:mm tt", CultureInfo.InvariantCulture), test2.ToString("hh:mm tt", CultureInfo.InvariantCulture), test2 - test); 

       } 
       test = test.AddDays(1); 
       //table.Rows.Add(); 

      } 
      //Zugriff auf Zelle zuerst zeile dann spalte 
      //string testString = table.Rows[3][2].ToString(); 


      table.RowChanged += new DataRowChangeEventHandler(table_RowChanged); 

      //MessageBox.Show(testString); 

      return table; 

     } 


     static DataRow getRow(DataTable table) 
     { 
      DataRow row = table.NewRow(); 

      return row; 

     } 

     static void table_RowChanged(object sender, DataRowChangeEventArgs e) 
     { 
      //e.Row.AcceptChanges(); 
      //throw new StackOverflowException(); 
      //throw new NotImplementedException(); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 

     } 
    } 
} 

,這是我得到了按鈕的用戶控件添加tabPage:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Data; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using MBG.SimpleWizard; 
using System.Xml; 
using System.Xml.Linq; 

namespace Demo 
{ 
    public partial class Page2 : UserControl, IWizardPage 
    { 
     private static DateTime ArrivalStart; 
     public DateTime arrivalStart 
     { 
      get { return ArrivalStart; } 
      set { ArrivalStart = value; } 

     } 

     private static DateTime ArrivalEnd; 
     public DateTime arrivalEnd 
     { 
      get { return ArrivalEnd; } 
      set { ArrivalEnd = value; } 

     } 

     private static DateTime DepartureStart; 
     public DateTime departureStart 
     { 
      get { return DepartureStart; } 
      set { DepartureStart = value; } 

     } 

     private static DateTime DepartureEnd; 
     public DateTime departureEnd 
     { 
      get { return DepartureEnd; } 
      set { DepartureEnd = value; } 

     } 

     private List<string> groupItems = new List<string>(); 

     public Page2() 
     { 
      InitializeComponent(); 
      LoadSubsidiaryXML(); 
      dtpArrivalStart.Format = DateTimePickerFormat.Custom; 
      dtpArrivalStart.CustomFormat = "ddd dd MMM yyyy hh:mm"; 
      dtpArrivalEnd.Format = DateTimePickerFormat.Custom; 
      dtpArrivalEnd.CustomFormat = "ddd dd MMM yyyy hh:mm"; 
      dtpDepartureStart.Format = DateTimePickerFormat.Custom; 
      dtpDepartureStart.CustomFormat = "ddd dd MMM yyyy hh:mm"; 
      dtpDepartureEnd.Format = DateTimePickerFormat.Custom; 
      dtpDepartureEnd.CustomFormat = "ddd dd MMM yyyy hh:mm"; 

      groupItems.Add("Customer"); 
      groupItems.Add("Intercompany"); 

      comboWorkerType.DrawMode = DrawMode.OwnerDrawFixed; 
     } 



     private void LoadSubsidiaryXML() 
     { 
      XmlDocument subsidiary = new XmlDocument(); 
      subsidiary.Load("Subsidiaries.xml"); 

      XmlNodeList Subname = subsidiary.SelectNodes("subsidiaries/type/name"); 
      foreach (XmlNode name in Subname) 
      { 
       comboSubsidiaryTravel.Items.Add(name.InnerText); 
      } 
     } 

     private void LoadWorkerXML(string xmlType) 
     { 
      comboWorkerType.Items.Clear(); 
      XmlDocument workerType = new XmlDocument(); 
      workerType.Load(xmlType); 

      XmlNodeList worker = workerType.SelectNodes("worker/type/name"); 
      foreach (XmlNode name in worker) 
      { 
       //if (name.InnerText == "Customer" || name.InnerText == "Intercompany") 
       //{ 
       // comboWorkerType.Font = new Font(comboWorkerType.Font, FontStyle.Bold); 
       //} 


       comboWorkerType.Items.Add(name.InnerText); 
      } 
     } 

     //private void comboWorkerType_DrawItem(object sender, DrawItemEventArgs e) 
     //{ 
     // e.DrawBackground(); 

     // if (e.Index > -1) 
     // { 
     //  string drawText = comboWorkerType.Items[e.Index].ToString(); 
     //  if (groupItems.Contains(drawText)) 
     //  { 
     //   using (Font font = new Font(comboWorkerType.Font, FontStyle.Bold)) 
     //    e.Graphics.DrawString(drawText, font, Brushes.Black, e.Bounds); 
     //  } 
     //  else 
     //   e.Graphics.DrawString(drawText, comboWorkerType.Font, Brushes.Black, new Rectangle(16, e.Bounds.Top, e.Bounds.Width - 16, e.Bounds.Height)); 

     //  e.DrawFocusRectangle(); 
     // } 


     //} 


     #region IWizardPage Members 

     public UserControl Content 
     { 
      get { return this; } 
     } 

     public new void Load() 
     { 

     } 

     public void Save() 
     { 
     } 

     public void Cancel() 
     { 
      throw new NotImplementedException(); 
     } 

     public bool IsBusy 
     { 
      get { throw new NotImplementedException(); } 
     } 

     public bool PageValid 
     { 
      get { return true; } 
     } 

     public string ValidationMessage 
     { 
      get { throw new NotImplementedException(); } 
     } 

     #endregion 
     private void btnAddWorker_Click(object sender, EventArgs e) 
     { 
      string title = "worker " + (tabsTravel.TabCount + 1).ToString(); 

      TabPage travel = new TabPage(); 
      TabPage work = new TabPage(); 

      tabsTravel.TabPages.Add(travel); 
      travel.Text = title; 
      travel.BackColor = Color.White; 
      travel.Controls.Add(new TabsTravel()); 



     } 

     private void btnRemoveWorker_Click(object sender, EventArgs e) 
     { 
      tabsTravel.TabPages.Remove(tabsTravel.SelectedTab); 
     } 

     // Select XML which have to be populated to comboWorkerType 
     private void chooseWorker() 
     { 
      string xmlType = ""; 
      string subsidiary = ""; 
      subsidiary = comboSubsidiaryTravel.Text; 
      switch (subsidiary) 
      { 
       case "GH": 
        xmlType = "GHworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "GP": 
        xmlType = "GPworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "GN": 
        xmlType = "GNworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "GT": 
        xmlType = "GTworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 
       case "GS": 
        xmlType = "GSworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "GK": 
        xmlType = "GKworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "GBH": 
        xmlType = "GBHworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "GAS": 
        xmlType = "GASworkerType.xml"; 
        LoadWorkerXML(xmlType); 
        break; 

       case "Others": 
        comboWorkerType.Items.Clear(); 
        break; 
       default: 
        break; 
      } 
     } 

     private void comboSubsidiaryTravel_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      chooseWorker(); 
     } 

     private void dtpArrivalStart_ValueChanged(object sender, EventArgs e) 
     { 
      ArrivalStart = dtpArrivalStart.Value; 
      dtpArrivalEnd.MinDate = dtpArrivalStart.Value; 
     } 

     private void dtpArrivalEnd_ValueChanged(object sender, EventArgs e) 
     { 
      ArrivalEnd = dtpArrivalEnd.Value; 
      dtpDepartureStart.MinDate = dtpArrivalEnd.Value; 
     } 

     private void dtpDepartureStart_ValueChanged(object sender, EventArgs e) 
     { 
      DepartureStart = dtpDepartureStart.Value; 
      dtpDepartureEnd.MinDate = dtpDepartureStart.Value; 
     } 

     private void dtpDepartureEnd_ValueChanged(object sender, EventArgs e) 
     { 
      DepartureEnd = dtpDepartureEnd.Value; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      worker test = new worker(); 
      //test.ArrivalTimeSpan(); 
      //test.DepartureTimeSpan(); 
      //test.WorkTimeSpan(); 
     } 

     private void label1_Click(object sender, EventArgs e) 
     { 

     } 

    } 
} 

隨着btnAddWorker我想添加tabPage。

如何使用button_click事件將TabPage添加到用戶控件TabControl中?

感謝所有有用的答案

格爾茨

託比

編輯:

嗨,它不運行至今。我需要一點提示。

這裏是在用戶控件一個委託:

public delegate void tabWork(TabControl tabsWork); 

在這裏我得到了按鈕,然後在用戶控件A中的addTab法:

private void btnAddWorker_Click(object sender, EventArgs e) 
     { 

      addTab(tabsTravel); 

     } 

     static void addTab(TabControl tabsTravel) 
     { 

      string title = "worker " + (tabsTravel.TabCount + 1).ToString(); 

      TabPage travel = new TabPage(); 
      tabWork work; 

      tabsTravel.TabPages.Add(travel); 
      travel.Text = title; 
      travel.BackColor = Color.White; 
      travel.Controls.Add(new TabsTravel()); 

      work = new tabWork(Page3.addTab); 



     } 

這裏我在用戶控件得到了addTab法B:

public static void addTab(TabControl tabsWork) 
     { 
      TabsWork work = new TabsWork(); 
      TabPage Tabwork = new TabPage(); 
      string title = "worker " + (tabsWork.TabCount + 1).ToString(); 

      tabsWork.TabPages.Add(Tabwork); 
      Tabwork.Text = title; 
      Tabwork.BackColor = Color.White; 
      Tabwork.Controls.Add(new TabsWork()); 

     } 

但UserControl B中的addTab永遠不會被調用。

我該如何解決這個問題?

回答

0

你應該創建一個信號給其他用戶控件創建/添加要在其他用戶控件可用的另一個選項卡沿對象傳遞與信息事件

+0

,而我「很新」到C#你能不能給我舉個例子呢? – user1414157 2012-07-10 09:17:56

+0

看看這裏,並研究它,因爲你會更多地使用它作爲一個編碼器http://msdn.microsoft.com/en-us/library/ms173171.aspx – JohnnBlade 2012-07-10 09:42:10

+0

好的謝謝你現在。我會回來,如果我有任何問題 – user1414157 2012-07-10 10:38:10

相關問題