ListBox 中的“Items.Clear()”后“SelectedIndexChanged”未触发

2023-12-22

对于列表框(选择模式设置为“一”),我希望跟踪是否有选定的项目或没有选定的项目。为此,我订阅了 SelectedIndexChanged 的​​方法并检查 SelectedIndex 是否为 -1。但是,我注意到调用 Items.Clear() 后该事件不会触发,即使 SelectedIndex 更改为 -1(如果它还不是 -1)。

为什么不火? 我知道我可以通过在清除列表之前将 -1 分配给 SelectedIndex 来解决此问题。但还有更好的办法吗?

这是复制此内容的简单代码:

using System;
using System.Windows.Forms;

namespace ns
{
    class Program
    {
        static ListBox lst = new ListBox();

        public static void Main()
        {
            lst.SelectedIndexChanged += new EventHandler(lst_SelectedIndexChanged);

            lst.Items.Add(1);

            Console.WriteLine("Setting selected index to 0...");
            lst.SelectedIndex = 0; //event fire here

            Console.WriteLine("(Selected Index == {0})", lst.SelectedIndex);

            Console.WriteLine("Clearing  all items...");
            lst.Items.Clear(); //event *should* fire here?!

            //proof that the selected index has changed
            Console.WriteLine("(Selected Index == {0})", lst.SelectedIndex);
        }

        static void lst_SelectedIndexChanged(object sender, EventArgs e)
        {
            Console.WriteLine("[!] Selected Index Changed:{0}", lst.SelectedIndex);
        }
    }
}

Edit:我正在考虑通过创建一个继承自 ListBox 的类或创建一个用户控件来创建自定义列表。但是我不知道如何解决这个问题。 关于使用继承/用户控件隐藏/覆盖清除方法有什么想法吗? 是否还需要隐藏/覆盖其他方法,或者有没有办法避免这种情况?


查看 Reflector 中的代码,Items 上的 Clear() 方法只是重置 .Net 对象的内部对象列表(并且不会像您注意到的那样触发 OnSelectedIndexChanged)。

SelectedIndex 属性返回 -1,因为该属性的 getter 中的逻辑规定,如果内部列表中没有项目,则应返回 -1。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ListBox 中的“Items.Clear()”后“SelectedIndexChanged”未触发 的相关文章

随机推荐

  • numpy.dot -> MemoryError,my_dot -> 非常慢,但有效。为什么?

    我正在尝试计算两个大小分别为 162225 10000 和 10000 100 的 numpy 数组的点积 但是 如果我调用 numpy dot A B 则会发生 MemoryError 然后 我尝试编写我的实现 def slower do
  • MySQL 间隙锁定

    我有一张桌子叫tree nodes 在那里我存储了节点的 树表示 我的主题树是在持有者的上下文中创建的 所以 有一个专栏叫做holder id 我有一个事务方法 它会从此表和其他表中进行多次读取 以确定应从树中添加 删除哪些节点 我的应用程
  • 使用 Delve 进行 vscode 调试问题

    当我在 Visual Studio Code 中调试 Go Lang 代码时 出现以下错误消息 2018 04 03 18 19 32 server go 73 Using API v1 2018 04 03 18 19 32 debugg
  • android 父 Activity 在 startActivity 上被杀死

    我有一个带有列表视图的简单应用程序 当用户点击列表项时 我开始一个新活动 Intent eventdetails new Intent HomeActivity this EventDetailsActivity class eventde
  • 基本类型的复制/赋值

    标准对基本类型的复制 赋值有何规定 对于类类型 我们有复制构造函数 赋值运算符 它们将右侧作为引用 它必须是引用 否则我们会无限递归 struct Foo Foo const Foo 这是如何定义基本类型的 看这个例子 const Foo
  • 在C++中创建模板时是否可以找到sizeof(T)?

    我正在尝试构建一个模板 让我可以使用可调整大小的数组 有没有办法找到sizeof T 我使用 malloc 而不是 new 因为我想在调整数组大小的函数中使用 realloc 这是我的类的构造函数出现错误 template
  • getElementsbyClassName 未显示[重复]

    这个问题在这里已经有答案了 我正在使用以下代码 当我现在点击按钮时
  • 使用 MVC 模型显示只读文本

    我有一个 MVC 模型 其属性定义为 DisplayName Service Version public string ServiceVersion get set 在屏幕上 我希望它显示为 服务版本 0 1 ServiceVersion
  • 删除变量的特定部分

    我想从 CMake 变量中删除特定库 Suppose LIB包含变量 A B C 的值 我知道用set像这样添加另一个变量 D 的内容 set LIB LIB D 但是我试图从中删除 C LIB喜欢关注 unset LIB C 这段代码不起
  • 如何捕获触摸板输入

    我到处寻找如何捕获笔记本电脑的触摸板输入 但我似乎找不到任何适用于 Chrome 扩展 JavaScript 的内容 问题 对于笔记本电脑上的触摸板 如何捕获向下的手指数量 不是单击 只是向下并可能像使用鼠标一样移动 相应的 x y 坐标以
  • 如何在 Python 中创建二维数组

    我试图在 Python 中创建一个索引的二维数组 但我总是以某种方式遇到错误 下面的代码 Declare Constants no real constants in Python PLAYER 0 ENEMY 1 X 0 Y 1 AMMO
  • Chrome扩展程序中使用axios和webpack时出现TypeError:adapter is not a function错误

    我正在构建一个 chrome 扩展 当从内容脚本收到某些消息时 该扩展需要进行 API 调用 我在发出 HTTP 请求时遇到困难 我相信我的 webpack 配置是罪魁祸首 我尝试过使用node fetch and axios两者都不适合我
  • 我应该使用哪个 jsf-impl?

    在哪里可以找到适用于我的 jsf 2 webapp 的 jsf impl 在 Maven 的仓库中我得到了 1 2 版本 In the http download java net maven 2 javax faces http down
  • 在全球范围内使用 reCAPTCHA

    我正在尝试按照以下网址中的说明在全球范围内使用 reCAPTCHAhttps developers google com recaptcha docs faq can i use recaptcha globally https devel
  • Log4Net RollingFileAppender 生成重复日志

    我有一个在单个服务器上运行的 WCF 服务 使用 Log4net 通过 INFO 和 WARN 级别日志条目跟踪使用情况 使用具有以下非常标准配置的 RollingFileAppender
  • 使用 FileUpload 控件一次将多个图像保存到数据库

    我正在一家公司博客网站上工作 当用户发布帖子时 他们可以将计算机中的图像添加到帖子中 我使用 FileUpload 控件来执行此操作 效果很好 但是 我正在尝试更改功能以允许用户在一篇文章中选择和上传多个图像 但我遇到了一些问题 我已将 允
  • ASP.NET MVC5 每个 Razor 页面首次加载时非常慢

    这与以下情况下的延迟体验不同 第一个请求到达 但这是每次第一次访问基于 Razor 的视图时都会遇到的延迟 可能需要一两秒 对该视图的所有后续请求都非常快 即使对于不执行任何类型的编程工作 例如访问数据库等 的简单视图 也会发生这种情况 我
  • 在添加另一个视图之前检查布局膨胀器中是否存在视图

    在我的 android 项目中 我动态地将表单添加到我的线性布局中 然后在使用按钮完成后销毁它们 但是 当我单击 添加按钮 时 它会无限添加更多表单 尽管我一次只想要一个 我如何检查我的 LinearLayout 帐户 是否已添加到视图中或
  • Elasticsearch / lucene 高亮

    我正在使用 ElasticSearch 来索引文档 我的映射是 mongodocid boost 1 0 store yes type string fulltext boost 1 0 index analyzed store yes t
  • ListBox 中的“Items.Clear()”后“SelectedIndexChanged”未触发

    对于列表框 选择模式设置为 一 我希望跟踪是否有选定的项目或没有选定的项目 为此 我订阅了 SelectedIndexChanged 的 方法并检查 SelectedIndex 是否为 1 但是 我注意到调用 Items Clear 后该事