C# 防止自定义组合框自动选择项目

2024-01-13

我正在尝试在 C# 中实现我自己的 ComboBox 类,因为直到 3.5 NET Framework(如果我没有记错的话),建议使用“StartWith”函数进行查找(即,如果列表包含“Doe,John”和用户类型“ John”,该项目不显示)。基本上,我在文本更改事件中添加或删除项目,从列表的初始内容中获取它们。对于我正在寻找的内容来说,一切都工作得很好,唯一的问题是,当单击 ComboBox 时,即使项目不等于插入的文本,仍然会选择一个项目。按照我所做的示例,我希望仅当用户单击“Doe,John”时才选择“Doe,John”(并设置为 ComboBox.Text 属性),如果用户只是键入“John”并且没有项目严格等于它(不仅仅是包含它),那么 Text 属性必须保留为用户插入的状态。这是我的派生类的代码

public class customTB : ComboBox
{
    private object[] startlist;
    public customTB() : base()
    {
        this.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.None;
        this.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.None;
        this.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown;
        this.Sorted = true;
        this.KeyPress += customTB_KeyPress;
        this.TextChanged += customTB_TextChanged;
        this.Enter += customTB_Enter;
    }

    void customTB_Enter(object sender, EventArgs e)
    {
        this.DroppedDown = (this.Items.Count > 0);
    }

    void customTB_TextChanged(object sender, EventArgs e)
    {
        UpdateList();
    }

    void customTB_KeyPress(object sender, KeyPressEventArgs e)
    {
        this.DroppedDown = (this.Items.Count>0);
    }

    void UpdateList()
    {
        if (this.startlist == null)
        {
            //get starting lists elems
            this.startlist = new Object[this.Items.Count];
            this.Items.CopyTo(this.startlist, 0);
        }
        this.BeginUpdate();
        foreach (object o in startlist)
        {
            if (o.ToString().Contains(this.Text))
            {
                if (!this.Items.Contains(o))
                    this.Items.Add(o);
            }
            else if (this.Items.Contains(o))
                this.Items.Remove(o);
        }
        this.EndUpdate();
    }
}

如果尝试过,每当您尝试退出组合框时,文本都会突出显示,并且其值将设置为一个项目。 我想要的例子是: 项目包含“Doe John”、“Smith John”、“Smith Marie”。 如果用户输入“John”,则下拉项为“Doe John”和“Smith John”,但如果他没有单击任何下拉元素并退出组合框(即单击外部),则文本仍为“John”


有一个布尔变量 itemClicked

  • 在 Enter 事件处理程序中将 itemClicked 设置为 false
  • 在 SelectionChangeCommited 事件处理程序中将 itemClicked 设置为 true
  • 如果 DropDownClosed 事件处理程序中没有 itemClicked,则将 Text 属性设置为 string.Empty
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 防止自定义组合框自动选择项目 的相关文章

随机推荐

  • Nightwatch 中的 setValue 方法不起作用

    我正在尝试设置一个新的 Nightwatch 项目 以便自动化简单的 Google 搜索页面 我的断言页面上存在的搜索框通过 但我无法对元素执行任何鼠标 键盘操作 Searchbox or SearchButton Note 我正在运行夜巡
  • 将 S3 对象访问限制为来自特定域的请求

    我在 S3 中有视频文件 还有一个通过 src 属性加载文件的简单播放器 我希望只能通过我的网站查看视频 而不是直接通过 S3 URL 这可能在页面的源代码中可见或通过右键单击访问 浏览 AWS 文档 我似乎可以通过 HTTP 执行此操作的
  • Polymer core-ajax跨域问题

    我正在尝试使用 Polymer 进行跨域调用核心ajax http www polymer project org docs elements core elements html core ajax成分 我不断收到请求的资源上没有 Acc
  • 防止 ModalPopupExtender 在回发期间/之后关闭

    如何防止我的 asp ModalPopupExtender 在回发到服务器之后或期间关闭 这是我的代码 脚本语言 Confirm popup Ok button function OnOk confirmPopup hide ClickSa
  • 如何禁用网络音频分析仪过滤高频

    I am studying the html5 audio API I have noticed the analysis module has problems processing high frequencies It is as i
  • 单个 UILabel 中的粗体和非粗体文本?

    如何在 uiLabel 中同时包含粗体和非粗体文本 我不想使用 UIWebView 我也读过使用 NSAttributedString 可能可以实现这一点 但我不知道如何使用它 有任何想法吗 Apple achieves this in s
  • Mongo查询在mongo shell中有效,但在bash mongo --eval中无效?

    这是一个示例查询 db readings find id s ISODate 2012 11 01T00 05 00Z count 查询在 mongo shell 中工作 但是 在 bash 脚本中或直接在 Ubuntu shell 中 m
  • 龙目岛定制SuperBuilder

    我有两个这样的课程 Builder public class Parent final int a final int b public class static ParentBuilder public ParentBuilder set
  • Bootstrap 3:表格响应式内部显示:表格单元格不起作用

    我有一个场景 在 2 个 div 内有一个 Bootstrap 3 表响应式 一个 div 设置为 display table 另一个设置为 diaplay table cell 这似乎破坏了响应表 这是一个简单的例子 div style
  • 为什么我不能在 XML 文件中对 EditText 的宽度使用 fill_parent?

    当我在 EditText 的宽度上使用 fill parent 时 AndroidStudio 的自动填充显示它被划掉了 如果我仍然尝试使用它 它会将 EditText 扔出屏幕 从而弄乱它的位置 我只想有一个简单的文本字段 旁边有一个输入
  • 如何使用 MATLAB 检查一个椭圆是否在另一个椭圆内部?

    我试图找到两个椭圆的状态 我尝试使用以下代码找到两个椭圆的交集 syms x y a 4 b 2 ellipse1 x 10 2 a 2 y 2 b 2 1 a1 6 b1 5 ellipse2 x 10 2 a1 2 y 2 b1 2 1
  • 在 Linux 上找不到主类 - 类路径问题

    我在 Linux 机器上运行一些 jar 时遇到一些问题 基本上 我收到一个错误 说它找不到我的主 jar 的主类 该类确实存在 因此它一定是类路径问题 我不太擅长Linux 所以我正在寻找一些关于我可能遗漏的地方的建议 首先 我在用户 b
  • 检查一个对象数组是否是另一个对象数组的子集[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 这就是我正在尝试的 var object1 name one psno 34 var object2 name two psno 34 va
  • 在 C# 中禁用屏幕保护程序和电源选项

    我正在用 C 编写一个播放电影的应用程序 我需要弄清楚如何使用 C 禁用屏幕保护程序和电源选项 我知道 Windows SDK API 有一个名为 SetThreadExecutionState 的函数 可以用来执行此操作 但是 我不知道是
  • 如何在 MS Graph API 中组合 NOT 过滤器

    我想在图形 API 用户中搜索名字符合的每个人not从一些值开始 I tried https graph microsoft com v1 0 users filter NOT startswith displayName J https
  • 使用 Typescript 扩展传单标记

    我正在开发一个使用 Typescript 和 Leaflet 的项目 扩展传单标记的记录 JS 方法如下 L Marker Foo L Marker extend 然而 Typescript 抱怨道 Property Foo does no
  • Facebook API 不支持 get 请求

    我正在使用 PHP SDK 发布开放图操作 这些操作中大约有二十分之一会像平常一样出现在墙上 但我无法通过 API 访问或删除它 尝试执行此操作时会出现 不支持的 GET 请求 或 不支持的删除请求 错误 因此 除非用户使用 Faceboo
  • 在 Vim 中覆盖粘贴

    我希望能够从缓冲区粘贴一些东西 可能使用p 但我不想将其插入文本中 而是想替换之前的内容 就像R命令 我搜索了 Google vim 文档和 Stack Overflow 但找不到任何有关此问题的信息 我想这只是一个我不知道的命令 任何帮助
  • Javascript 库能够可靠地加载 Java Applet?

    Flash用户有精彩Swf对象 http code google com p swfobject JavaScript 库 抽象浏览器差异以可靠地将 swf 嵌入到其网页中 有没有像这样的 Java Applet 的 JavaScript
  • C# 防止自定义组合框自动选择项目

    我正在尝试在 C 中实现我自己的 ComboBox 类 因为直到 3 5 NET Framework 如果我没有记错的话 建议使用 StartWith 函数进行查找 即 如果列表包含 Doe John 和用户类型 John 该项目不显示 基