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

C#, tabControl, different window size of each tab

我有一个带有两个选项卡的 tabControl。单击 tab2 时,我需要根据第二个选项卡中 dataGrid 的宽度更改 window 大小。我有以下代码:

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 的属性...自动调整大小 windows,但我什么也没发现...

在 dataGrid 中,我使用 AutoSizeColumnMode: AllCells,因为我想根据其中的文本字符串长度调整单元格大小,并且我想为 window.

实现相同的行为

谢谢。

我尝试实现了您的 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;
}