如何同步两个列表框的滚动

本文关键字:列表 滚动 两个 何同步 同步 | 更新日期: 2023-09-27 18:12:11

我有一个checkkedlistbox和一个listbox,它们的高度相同,其中的项目数量相同。我使用列表框来保存checklistbox的状态。

如果有滚动条,那么滚动checklistbox也应该滚动具有相同索引的listbox。除了滚动量不同,我还能做到。

private void checkedListBox1_MouseWheel(object sender, MouseEventArgs e)
{
    int scroll = e.Delta / 120;
    if (scroll == 1)
    {
        checkedListBox1.TopIndex -= 5;
        listBox1.TopIndex = checkedListBox1.TopIndex;
    }
    else if (scroll == -1)
    {
        checkedListBox1.TopIndex += 5;
        listBox1.TopIndex = checkedListBox1.TopIndex;
    }
}

此外,我使用这段代码来获得选中的相同索引,但是在从checklistbox中进行选择之后,在列表框索引被选中之前会有轻微的延迟。无论如何,让它同时被选中?

private void checkedListBox1_MouseClick(object sender, MouseEventArgs e)
{
    if (checkedListBox1.Items.Count > 0)
    {
        int selected = checkedListBox1.SelectedIndex;
        if (checkedListBox1.GetItemChecked(selected) == false)
        {
            checkedListBox1.SetItemChecked(selected, true);
            listBox1.SetSelected(selected, true);
        }
        else if (checkedListBox1.GetItemChecked(selected) == true)
        {
            checkedListBox1.SetItemChecked(selected, false);
            listBox1.SetSelected(selected, true);
        }
    }
}

如何同步两个列表框的滚动

您可以将列表框放在Two scrollviewer中,并在viewChanged事件中编写xaml.cs部分

的代码
private void ScrollViewer1_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{        
 ScrollViewer2.ScrollToHorizontalOffset(double.Parse(ScrollViewer1.HorizontalOffset.ToString()));
}

http://www.codeguru.com/cpp/controls/listview/article.php/c4163

http://www.codeproject.com/Tips/197335/Synchronized-ListBox-objects-or-how-to-scroll-2-Li