You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET转C#后ListControl点击事件无法向父窗体文本框传值如何解决

问题根因
  • VB.NET默认开启后期绑定,允许对Object类型的sender直接访问Name属性,运行时自动解析类型;C#是强类型语言,编译阶段就会检查类型成员,Object类没有Name属性,所以直接写sender.name会报编译错误。
  • 原转换代码里的ToString(sender.name)是错误写法,C#中ToString()是实例方法,不能这么调用,同时C#属性名大小写敏感,控件的名称属性是Name不是name。
  • VB.NET中事件可以通过Handles关键字自动绑定,C#需要手动订阅事件,转换时很容易漏掉这一步导致事件不触发。
  • 你之前测试的代码里混用了VB.NET的DirectCast语法,C#不支持该写法。
解决方案

第一步:修正ItemClicked方法代码

private void ItemClicked(object sender, EventArgs e)
{
    // 模式匹配安全转换sender为Control类型
    if (sender is Control clickedItem)
    {
        int itemIndex = flpListBox.Controls.IndexOfKey(clickedItem.Name);
        ItemClick?.Invoke(this, itemIndex);
    }
}

第二步:检查两个必现配置项

  • 检查ListControl1.Add()方法的实现,确认添加列表项时,已经给每个列表项的Name属性显式赋值,IndexOfKey方法是匹配控件的Name属性来查找索引的,没有赋值会返回-1导致后续逻辑异常。
  • 确认你已经手动订阅了ItemClick事件,在Form1的构造函数或者Form1_Load方法中添加如下代码:
ListControl1.ItemClick += ListControl1_ItemClick;

按以上步骤修改后即可正常运行。

内容的提问来源于stack exchange,提问作者WiiLF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:57:00