You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C# DotNetBar双ListBoxAdv滚动同步失效问题求助

解决ListBoxAdv滚动同步问题

我来帮你搞定这个滚动同步的问题!你之前的代码只动了滚动条但内容没更新,核心原因是直接操作滚动条Value或者手动触发Scroll事件,并没有触发ListBoxAdv内部的内容滚动逻辑。DotNetBar的ListBoxAdv继承自标准ListBox,我们可以通过控制TopIndex属性来实现真正的同步——这个属性直接决定了控件显示的第一个项的索引,设置它会自动同步滚动条位置和显示内容。

下面是修正后的可用代码:

private void listBoxAdv1_Scroll(object sender, ScrollEventArgs e)
{
    // 加判断避免两个控件的Scroll事件互相触发循环调用
    if (listBoxAdv2.TopIndex != listBoxAdv1.TopIndex)
    {
        listBoxAdv2.TopIndex = listBoxAdv1.TopIndex;
    }
}

private void listBoxAdv2_Scroll(object sender, ScrollEventArgs e)
{
    if (listBoxAdv1.TopIndex != listBoxAdv2.TopIndex)
    {
        listBoxAdv1.TopIndex = listBoxAdv2.TopIndex;
    }
}

补充说明

  • 为什么之前的代码无效?
    • 直接设置VScrollBar.Value只是修改了滚动条的外观位置,但ListBoxAdv并没有把这个值和内部的项显示逻辑关联起来,所以内容不会跟着滚动。
    • 手动调用listBoxAdv2_Scroll方法只是触发了事件处理函数,但没有实际改变控件的滚动状态,自然也不会更新显示内容。
  • 额外优化:如果你的ListBoxAdv加载了大量数据,可以在设置TopIndex前先调用listBoxAdv2.SuspendLayout()暂停绘制,设置完成后调用listBoxAdv2.ResumeLayout()恢复,能减少滚动时的界面闪烁。

内容的提问来源于stack exchange,提问作者PEYMAN

火山引擎 最新活动