我有一个启用了垂直滚动条的虚拟DataGridView (DGV)。DGV 是只读的。事件CellValueNeeded
得到正确处理。一开始,行数少于可以显示的行数,并且未绘制滚动条。那是对的。
在第二个线程(线程...->开始)中,我添加了新行。仍然在这个线程中,我DGV->RowCount
根据总行数进行更新并调用DGV->Invalidate( true )
,希望在必要时绘制滚动条。
然后我观察到一个奇怪的行为:虽然CellValueNeeded
仍然被正确调用,但滚动条的区域并没有失效。它显示为“未重绘”区域。如果我最小化表单然后恢复它,滚动条将显示为黑色矩形。就像滚动条本身有Visible=false
.
我什至尝试将a 和 a 之间的值放在DGV->RowCount
aDGV->ScrollBars=ScrollBars::None;
和 aDGV->ScrollBars=ScrollBars::Vertical;
之间DGV->SuspendLayout()
,DGV->ResumeLayout()
但两次尝试的行为仍然相同。
许多问题:
- 更新
DGV->RowCount
处理是否正确?我在第二个线程中执行此操作,而不是在主线程中,因为我天真地认为 DGV 是纯只读的,它不会引起任何冲突。也许我错了? - Invalidate() (也在第二个线程中调用,因为它只在队列中添加一条消息,不是吗?)足以使滚动条出现吗?
我在网上看到了几条关于 DataGridView 滚动条问题的消息。此功能有错误吗?