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

时间:2011-10-23 02:17:51

标签: c# winforms

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

如果有滚动条,则滚动checkedlistbox也应滚动具有相同索引的列表框。我有点工作,除了他们滚动的金额不同。

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;
    }
}

此外,我正在使用此代码来选择相同的索引,但是在从checkedlistbox中选择后选择列表框索引之前会有轻微的延迟。无论如何要同时选择它?

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);

        }
    }
}

2 个答案:

答案 0 :(得分:2)

您可以将列表框放在两个scrollviewer中,并在viewChanged事件中编写xaml.cs部分的代码

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

答案 1 :(得分:0)