我有一个启用了Vertical ScrollBar的虚拟 DataGridView(DGV)。 DGV是ReadOnly。事件CellValueNeeded
已正确处理。开始时,行计数小于可显示的行数,并且不绘制滚动条。那是正确的。
在第二个帖子(Thread ... - > Start)中,我添加了新行。仍然在这个帖子中,我根据行的总数更新DGV->RowCount
并调用DGV->Invalidate( true )
,希望在必要时绘制滚动条。
然后我发现了一个奇怪的行为:当CellValueNeeded
仍被正确调用时,滚动条的区域不会失效。它看起来像是一个“没有重绘”的区域。如果我最小化表单然后恢复它,滚动条显示为黑色矩形。就好像滚动条本身有Visible=false
。
我甚至尝试将DGV->RowCount
置于DGV->ScrollBars=ScrollBars::None;
和DGV->ScrollBars=ScrollBars::Vertical;
之间,然后介于DGV->SuspendLayout()
和DGV->ResumeLayout()
之间,但行为保持不变两次尝试。
很多问题:
DGV->RowCount
次更新?我在第二个线程中,而不是在主线程中,因为我天真地认为DGV纯粹是ReadOnly,它不会引起任何冲突。也许我错了?我在网上看到了一些关于DataGridView滚动条有问题的消息。这个功能有错误吗?
答案 0 :(得分:0)
以下是解决方案:
DGV->RowCount
无法在第二个帖子上完成。我想因为滚动条将在此线程上而不是在主(GUI)线程上实例化。这很糟糕。
所以,我写了一个像这样的小方法:
void MyClass::UpdateRC( void )
{
DGV->RowCount = ...;
}
然后我从第二个帖子中调用它:
Invoke( gcnew MethodInvoker( this, &MyClass::UpdateRC ) );
一切正常!
瞧!我希望这将有助于所有未来面临同样问题的人。