C#,tabControl,每个选项卡的不同窗口大小

时间:2015-03-20 12:42:53

标签: c# winforms datagrid

我有一个带有两个标签的tabControl。当我点击tab2时,我需要更改窗口大小,通过第二个选项卡中的dataGrid的宽度。我有以下代码:

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (tabControl1.SelectedTab == tabControl1.TabPages["tabPage2"])
    {
        //FormValue.form2.Width = magical_function_return_dataGridwidth();
        txtNumber.Select();
    }
    else
    {
        FormValue.form2.Width = 580;
    }
}

还是有更优雅的方式。我正在玩dataGrid的属性...自动调整窗口大小,但我什么都没找到......

在dataGrid中我使用AutoSizeColumnMode:AllCells,因为我希望通过文本字符串长度调整单元格大小,我希望为窗口实现相同的行为。

谢谢。

1 个答案:

答案 0 :(得分:1)

我实现了magical_function_return_dataGridwidth功能。

您要查找的宽度来自RowHeadersWidthDataGridViewColumn个对象,滚动条(如果可见)和常规填充/边框等。

我使用了一个50像素的令人讨厌的常数来处理我无法解决的所有比特,但对我来说它能正常工作并处理垂直滚动条的存在。

它无论如何都不是理想的解决方案,但希望它会对你有帮助。

private int magical_function_return_dataGridwidth(DataGridView dgv)
{           
    int totalWidth = dgv.RowHeadersWidth + 50;

    foreach (var scroll in dgv.Controls.OfType<VScrollBar>())
    {
        if(!scroll.Visible)
            totalWidth -= System.Windows.Forms.SystemInformation.VerticalScrollBarWidth;
    }

    foreach (DataGridViewColumn col in dgv.Columns)
        totalWidth += col.Width;

    return totalWidth;
}