C# WinForm TabControl 格式化问题

C# WinForm TabControl Formatting Issue

当以编程方式将控件添加到选项卡控件时,我一直在使用 Form_Load 事件来创建数据网格视图之类的东西并将其嵌入到我的 UI 中。我做了一个继承自 DataGridView

的 class
class DBDataGridView : DataGridView
{
    public DBDataGridView()
    {
        DoubleBuffered = true;
        AllowUserToAddRows = false;
        AllowUserToDeleteRows = false;
        AllowUserToResizeRows = false;
        AllowUserToOrderColumns = false;
        AllowUserToResizeColumns = false;
        RowHeadersVisible = false;
        AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
        ReadOnly = true;
        Dock = DockStyle.Fill;
        SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        TabStop = false;
    }
}

我稍后在 Form_Load 事件中这样调用它

    private void MainDesignerForm_Load(object sender, EventArgs e)
    {
        DBDataGridView _DGV = new DBDataGridView();

        var listOfOverlays = new List<OverlaySelectionList>()
        {
            new OverlaySelectionList { Description = "Description 1", PartNumber = "123-R1"},
            new OverlaySelectionList { Description = "Description 2", PartNumber = "456-R1"}
        };
        var overlayList = new BindingList<OverlaySelectionList>(listOfOverlays);
        _DGV.DataSource = overlayList;
        Tab_Overlay.Controls.Add(_DGV);
        _DGV.ClearSelection();
    }

此 gridview 位于 TabControl 的第三个选项卡上,除了 ClearSelection() 之外,一切都按预期工作。无论我在哪里调用它,它都不会清除 DGV 的初始行选择。但是,如果我从第三个选项卡上的按钮触发相同的代码块,格式和 ClearSelection() 将按预期运行。

是什么导致了这种行为?

感谢 41686d6564 和 Jimi 深入了解发生这种情况的具体原因。

重申他们在评论中所说的话:属性的分配似乎被缓存,无论它们所属的控件是否处于活动状态(因此,为什么所有的大小和格式属性都在 运行 时间出现).但是,需要句柄的操作(如 ClearSelection())需要显示控件并使其处于活动状态才能观察到预期的行为。

在调用 ClearSelection() 之前将选定的选项卡设置到 DataGridView 所在的位置是解决方案(或者在我的情况下,我有嵌套的选项卡,所以我必须按照选项卡树找到 DataGridView 所在的特定选项卡上)

所以现在,Load_Form 逻辑的一部分是检查控件所在的位置,使该选项卡处于活动状态,然后格式化并清除要添加的每个控件的选择。这允许 ClearSelection() 按预期工作。