同时滚动两个列表框(Windows窗体)

乔治·安东诺夫(Georgi Antonov)

基本上,我在Form(Windows窗体应用程序)上有两个列表框syncListView1和syncListView2,我试图使其滚动条同步

我已经用谷歌搜索了一些,我发现了这个类,但是它似乎不起作用:

 class SyncListBox : System.Windows.Forms.ListBox
    {
        [Category("Action")]
        private const int WM_HSCROLL = 0x114;
        private const int WM_VSCROLL = 0x115;
        public event ScrollEventHandler OnHorizontalScroll;
        public event ScrollEventHandler OnVerticalScroll;

        private const int SB_LINEUP = 0;
        private const int SB_LINELEFT = 0;
        private const int SB_LINEDOWN = 1;
        private const int SB_LINERIGHT = 1;
        private const int SB_PAGEUP = 2;
        private const int SB_PAGELEFT = 2;
        private const int SB_PAGEDOWN = 3;
        private const int SB_PAGERIGHT = 3;
        private const int SB_THUMBPOSITION = 4;
        private const int SB_THUMBTRACK = 5;
        private const int SB_PAGETOP = 6;
        private const int SB_LEFT = 6;
        private const int SB_PAGEBOTTOM = 7;
        private const int SB_RIGHT = 7;
        private const int SB_ENDSCROLL = 8;
        private const int SIF_TRACKPOS = 0x10;
        private const int SIF_RANGE = 0x1;
        private const int SIF_POS = 0x4;
        private const int SIF_PAGE = 0x2;
        private const int SIF_ALL = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS;
        [DllImport("user32.dll", SetLastError = true)]
        private static extern int GetScrollInfo(
        IntPtr hWnd, int n, ref ScrollInfoStruct lpScrollInfo);

        private struct ScrollInfoStruct
        {
            public int cbSize;
            public int fMask;
            public int nMin;
            public int nMax;
            public int nPage;
            public int nPos;
            public int nTrackPos;
        }
        protected override void WndProc(ref System.Windows.Forms.Message msg)
        {
            if (msg.Msg == WM_HSCROLL)
            {
                if (OnHorizontalScroll != null)
                {
                    ScrollInfoStruct si = new ScrollInfoStruct();
                    si.fMask = SIF_ALL;
                    si.cbSize = Marshal.SizeOf(si);
                    GetScrollInfo(msg.HWnd, 0, ref si);
                    if (msg.WParam.ToInt32() == SB_ENDSCROLL)
                    {
                        ScrollEventArgs sargs = new ScrollEventArgs(
                        ScrollEventType.EndScroll,
                        si.nPos);
                        OnHorizontalScroll(this, sargs);
                    }
                }
            }
            if (msg.Msg == WM_VSCROLL)
            {
                if (OnVerticalScroll != null)
                {
                    ScrollInfoStruct si = new ScrollInfoStruct();
                    si.fMask = SIF_ALL;
                    si.cbSize = Marshal.SizeOf(si);
                    GetScrollInfo(msg.HWnd, 0, ref si);
                    if (msg.WParam.ToInt32() == SB_ENDSCROLL)
                    {
                        ScrollEventArgs sargs = new ScrollEventArgs(
                        ScrollEventType.EndScroll,
                        si.nPos);
                        OnVerticalScroll(this, sargs);
                    }
                }
            }
            base.WndProc(ref msg);
        }

        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // scrolled
            // 
            this.Size = new System.Drawing.Size(120, 95);
            this.ResumeLayout(false);
        }
    }

并在后面的代码中:

private void syncListView2_OnVerticalScroll(object sender, ScrollEventArgs e)
        {
            syncListView1.TopIndex = syncListView2.TopIndex;
        }

        private void syncListView1_OnVerticalScroll(object sender, ScrollEventArgs e)
        {
            syncListView2.TopIndex = syncListView1.TopIndex;
        }
雷纳塔斯M.

从文章复制/粘贴代码,甚至不花时间阅读有关代码和用户评论的所有内容,这确实是一种不好的做法您不是第一个被困在这个地方的人。...因为一个用户已经评论了该问题

因此,您可能错过的是订阅事件。有两个选项可以做到这一点:

  1. 在设计器窗口中,选择第一个列表框。然后在属性窗口中选择事件选项卡(1.),然后查找OnVerticalScroll事件。找到它后,单击下拉按钮(2.)。该列表应至少包含2个选项syncListView1_OnVerticalScroll和syncListView1_OnVerticalScroll。因此,选择syncListView1_OnVerticalScroll使用第二个列表框执行相同的操作,但选择syncListView1_OnVerticalScrol2

在此处输入图片说明

  1. 在具有列表框的窗体中,打开代码视图。应该在InitializeComponent()调用方法的地方有构造函数在该方法之后,添加以下代码行。

    syncListView1.OnVerticalScroll + = this.syncListView1_OnVerticalScroll; syncListView2.OnVerticalScroll + = this.syncListView2_OnVerticalScroll;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

同步两个列表框的滚动条

来自分类Dev

如何比较两个列表框

来自分类Dev

同步。两个多选列表框的 SelectedIndex

来自分类Dev

C#两个列表框和两个列表

来自分类Dev

通过从另一个列表框中选择一个列表框项目来选择两个列表框项目

来自分类Dev

将两个列表框中的项目组合到第三个列表框中

来自分类Dev

Windows窗体列表框按日期排序

来自分类Dev

Microsoft Access 表单 - 列表框、文本框(两个表格)

来自分类Dev

将两个linq查询放入一个列表框

来自分类Dev

一个容器div中两个宽度相等的列表框

来自分类Dev

WPF-两个相同的列表框,仅显示一个

来自分类Dev

垂直同时滚动两个表

来自分类Dev

单击按钮时仅填充两个列表框之一

来自分类Dev

Streamwriter:在同一行上写入两个列表框

来自分类Dev

比较两个列表框并显示差异(VB.net)

来自分类Dev

小部件在tkinter中显示两个窗格的列表框

来自分类Dev

将数据从文本文件导入两个列表框

来自分类Dev

如何为两个c#列表框使用foreach?

来自分类Dev

如何在两个列表框之间同步选择索引

来自分类Dev

VBA 在表格中插入两个列表框值

来自分类Dev

将列表框项目分成两部分并将它们粘贴到两个列表框

来自分类Dev

MVC两个列表框,为什么将选定值移到第二个列表框并消失?

来自分类Dev

两个具有相同值的列表框,我需要从一个列表框中删除相同的值

来自分类Dev

Tkinter滚动列表框

来自分类Dev

列表框的滚动事件

来自分类Dev

自定义两个列表框的样式,一个在另一个内部

来自分类Dev

CSS有两个列表,同步它们的垂直滚动,同时允许一个水平滚动

来自分类Dev

Python同时遍历两个列表

来自分类Dev

同时更改两个列表

Related 相关文章

  1. 1

    同步两个列表框的滚动条

  2. 2

    如何比较两个列表框

  3. 3

    同步。两个多选列表框的 SelectedIndex

  4. 4

    C#两个列表框和两个列表

  5. 5

    通过从另一个列表框中选择一个列表框项目来选择两个列表框项目

  6. 6

    将两个列表框中的项目组合到第三个列表框中

  7. 7

    Windows窗体列表框按日期排序

  8. 8

    Microsoft Access 表单 - 列表框、文本框(两个表格)

  9. 9

    将两个linq查询放入一个列表框

  10. 10

    一个容器div中两个宽度相等的列表框

  11. 11

    WPF-两个相同的列表框,仅显示一个

  12. 12

    垂直同时滚动两个表

  13. 13

    单击按钮时仅填充两个列表框之一

  14. 14

    Streamwriter:在同一行上写入两个列表框

  15. 15

    比较两个列表框并显示差异(VB.net)

  16. 16

    小部件在tkinter中显示两个窗格的列表框

  17. 17

    将数据从文本文件导入两个列表框

  18. 18

    如何为两个c#列表框使用foreach?

  19. 19

    如何在两个列表框之间同步选择索引

  20. 20

    VBA 在表格中插入两个列表框值

  21. 21

    将列表框项目分成两部分并将它们粘贴到两个列表框

  22. 22

    MVC两个列表框,为什么将选定值移到第二个列表框并消失?

  23. 23

    两个具有相同值的列表框,我需要从一个列表框中删除相同的值

  24. 24

    Tkinter滚动列表框

  25. 25

    列表框的滚动事件

  26. 26

    自定义两个列表框的样式,一个在另一个内部

  27. 27

    CSS有两个列表,同步它们的垂直滚动,同时允许一个水平滚动

  28. 28

    Python同时遍历两个列表

  29. 29

    同时更改两个列表

热门标签

归档