Fejl i .Net? Problemer med TabControl's
Jeg har været ved at arbejde lidt med nogle TabControl's og det har givet mig en del problemer. Jeg er meget i tvivl om, om jeg gør noget forkert eller der er nogle fejl i .Net Frameworket.Nedenfor er et eksempel, hvor jeg har en Form med 2 TabControl's (den ene inden i den anden). På begge TabControl's ønsker jeg at få tilføjet nogle TabPage'. Dette gør jeg ved at kalde "tabControl.TabPages.Insert( 1, tabPage );", da jeg gerne vil kontrollere, hvor min TabPage bliver placeret.
Det har dog givet mig nogle problemer. Når jeg gør, som i nedenstående eksempel, så ser jeg ikke mine tabs, når vinduet åbner.
Hvis jeg så klikker på "Reload"-knappen, så kommer de frem. Knappen kalder ellers samme metode som constructor'en, så jeg kan ikke lige se, hvad forskellen er. Har jeg gjort noget forkert?
Hvis jeg i stedet for "Insert" bruger "Add", så virker det hele fint. Hvad skyldes det?
Hvis jeg igen skifter tilbage til "Insert" og derefter fjerner stregerne foran "tabControl2.TabPages.Clear();", så ser det ud til, at det nu virker for tabControl2. Det samme sker, hvis man gør det med tabControl1. Men hvorfor er det nødvendigt, at TabPages er tom inden man bruger "Insert"??
Hvis man igen går tilbage til den oprindelige kode og så kalder "tabPage.Visible = true;", hver gang der bliver oprettet en TabPage, så kommer DataGridView'et op og stå i toppen, hvor overskiften ellers skulle have stået i TabPage'en. Hvordan kan det lade sig gøre bare fordi man kalder "Visible" på "TabPage"??
Af en eller anden grund, så har Microsoft valgt at skjule "Visible" på "TabPage" fra IntelliSense.
using System;
using System.Windows.Forms;
namespace TabControlTest
{
public partial class TestView : Form
{
public TestView()
{
InitializeComponent();
button1_Click( null, null );
}
private void button1_Click( object sender, EventArgs e )
{
while( tabControl1.TabPages.Count > 1 )tabControl1.TabPages.RemoveAt( 1 );
while( tabControl2.TabPages.Count > 1 )tabControl2.TabPages.RemoveAt( 1 );
// tabControl1.TabPages.Clear();
// tabControl2.TabPages.Clear();
foreach (String tab in new String[] { "Tab1", "Tab2", "Tab3", "Tab4", "Tab5", "Tab6", "Tab7" }) SetUpTabAndGrid( tab, tabControl1, 1 );
SetUpTabAndGrid( "SubTab1", tabControl2, 0 );
SetUpTabAndGrid( "SubTab2", tabControl2, 0 );
SetUpTabAndGrid( "SubTab3", tabControl2, 0 );
}
private void SetUpTabAndGrid( String name, TabControl tabControl, int pos )
{
TabPage tabPage = new TabPage( name );
DataGridView grid = new DataGridView();
tabControl.TabPages.Insert( 1, tabPage );
tabPage.Controls.Add( grid );
grid.Dock = DockStyle.Fill;
// tabPage.Visible = true;
}
private void InitializeComponent()
{
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPageSubTab1 = new System.Windows.Forms.TabPage();
this.tabControl2 = new System.Windows.Forms.TabControl();
this.button1 = new System.Windows.Forms.Button();
this.tabControl1.SuspendLayout();
this.tabPageSubTab1.SuspendLayout();
this.SuspendLayout();
this.tabControl1.Controls.Add( this.tabPageSubTab1 );
this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabPageSubTab1.Controls.Add( this.tabControl2 );
this.tabPageSubTab1.Text = "Test";
this.tabControl2.Dock = System.Windows.Forms.DockStyle.Fill;
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.button1.Location = new System.Drawing.Point( 604, 0 );
this.button1.Size = new System.Drawing.Size( 59, 22 );
this.button1.Text = "Reload";
this.button1.Click += new System.EventHandler( this.button1_Click );
this.ClientSize = new System.Drawing.Size( 663, 563 );
this.Controls.Add( this.button1 );
this.Controls.Add( this.tabControl1 );
this.Text = "Test";
this.tabControl1.ResumeLayout( false );
this.tabPageSubTab1.ResumeLayout( false );
this.ResumeLayout( false );
}
private System.Windows.Forms.TabPage tabPageSubTab1;
private System.Windows.Forms.TabControl tabControl2;
private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.Button button1;
}
}
