【问题标题】:How to handle Windows Messages如何处理 Windows 消息
【发布时间】:2011-10-07 21:02:00
【问题描述】:

我试图阻止 ListView 中的复选框在双击事件上被选中。

我已经这样做了:

listView.SelectedItems[0].Checked = (listView.SelectedItems[0].Checked) ? false : true;

但是选中的事件被调用并且复选标记在方框内闪烁,所以我真的认为这很糟糕。

我偶然发现了这个答案: Prevent ItemChecked event on a ListView from interfering with SubItemClicked using C#

这似乎是这样做的完美方式,但我不知道如何使这项工作。我尝试阅读一些有关通知、消息等的信息,但没有发现任何东西不够稳定,无法将其应用到我的代码中。

有人可以帮我解释一下吗?

非常感谢!

【问题讨论】:

    标签: c# .net winforms listview windows-messages


    【解决方案1】:

    只需实现 ItemCheck 事件。您可以通过更改 e.NewValue 属性来取消检查。一个愚蠢的例子:

        private void listView1_ItemCheck(object sender, ItemCheckEventArgs e) {
            // Disable checking odd numbered items
            if (e.Index % 2 == 1) {
                e.NewValue = e.CurrentValue;
            }
        }
    

    【讨论】:

    • 感谢您的帮助,但我似乎在 ListView 的事件中找不到任何 ItemCheck 事件?! :-/
    • 即使我没有找到它,我还是决定将事件添加到我的 Designer.cs 文件中(this.listView.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.listView_ItemCheck );)
    • 您的代码不会阻止双击检查的发生:-/我会尝试从这个事件中解决一些问题。
    • 它并没有阻止复选框在双击时被选中:-/ 它仍在被选中。我不知道这是否与此有关,但仅供参考,我也有双击事件。
    • 如果您只给我一个“它不起作用”的诊断信息,我无法帮助您解决这些神秘问题。让我们关注缺少的 ItemCheck 事件。什么版本的VS,什么版本的.NET,什么版本的Windows?在文件共享服务上发布一个小型复制项目。
    猜你喜欢
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多