2010-03-25 93 views
4

我想在TabControl中创建动态TabPages。在每个tabPage中,我创建了dataGridView,并且我想用这个dataGrid填充每个tabPage的整个空间。下面是代码,其中我这样做:Winforms中的动态创建TabPages的问题TabControl

private void tabControlMutants_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DataGridView dgw = new DataGridView(); 

    DataGridViewTextBoxColumn testCaseCol = new System.Windows.Forms.DataGridViewTextBoxColumn(); 
    DataGridViewTextBoxColumn resultCol = new System.Windoows.Forms.DataGridViewTextBoxColumn(); 
    // 
    // dataGridView1 
    // 
    dgw.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; 
    dgw.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { 
    testCaseCol, 
    resultCol}); 
    dgw.Location = new System.Drawing.Point(3, 3); 
    dgw.Name = "dataGridView1"; 
    dgw.AutoSize = true; 
    dgw.Dock = System.Windows.Forms.DockStyle.Fill; 
    dgw.TabIndex = 0; 
    // 
    // TestCaseColumn 
    // 
    testCaseCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; 
    testCaseCol.HeaderText = "Test Case"; 
    testCaseCol.Name = "TestCaseColumn"; 
    // 
    // ResultColumn 
    // 
    resultCol.HeaderText = "Result"; 
    resultCol.Name = "ResultColumn"; 

    tabControlMutants.TabPages[(sender as TabControl).SelectedIndex].Controls.Add(dgw); 
    ((System.ComponentModel.ISupportInitialize)(dgw)).EndInit(); 

    //fill dataGridView 

} 

但它不工作,becouse当我调整主窗口中,数据的GridView doesn.t改变其大小(虽然Dock属性设置为填补)。有任何想法吗?

回答

1

移动dgw.Dock = System.Windows.Forms.DockStyle.Fill;声明下面tabControlMutants.TabPages[...].Controls.Add(dgw);线。也许在EndInit()下面,我不确定。

并删除dgw.Location = ...行,因为它不需要。

编辑:

我只是跑了一个小测试,这基本上应该工作。这意味着错误在其他地方,代码未显示。也许在'填充行部分'。
我建议您开始删除部分代码以消除错误。

而且您确实意识到您每次都创建了一个Dgv 选中了一个选项卡,是吗?我假设这是演示代码。

+0

是的,你是正确的,错误的是别的地方,即在主窗体构造函数中我调用SuspendLayout方法(我不不知道为什么),这会暂停此表单的布局逻辑。当我删除这个方法时,一切都开始工作。求助:) – mirt 2010-03-25 11:23:02

1

删除dgw.AutoSize = true;

+0

它并没有解决问题 – mirt 2010-03-25 09:36:09

1

首先尝试添加控件,然后设置Dock属性