gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:47 26 4
gpt4 key购买 nike

我正在尝试在 C# 中实现我自己的 ComboBox 类,因为直到 3.5 NET Framework(如果我没记错的话)建议查找是使用“StartWith”函数进行的(即,如果列表包含“Doe, John”和用户键入“John”,该项目不显示)。基本上我在文本更改事件中添加或删除项目,从列表的初始内容中获取它们。对于我正在寻找的东西,一切都很好,唯一的问题是,当单击 ComboBox 时,仍然选择了一个项目,即使它不等于插入的文本。按照我做的例子,我希望仅当用户单击它时选择“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();
}
}

如果尝试过,任何时候您尝试退出 ComboBox,文本都会突出显示,并且它的值会设置为一个项目。作为我想要的例子是:items 包含“Doe John”、“Smith John”、“Smith Marie”。如果用户键入“John”,则下拉项为“Doe John”和“Smith John”,但如果他未单击任何下拉元素并退出 ComboBox(即单击外部),则文本仍为“John”

最佳答案

有一个 bool 变量 itemClicked

  • 在 Enter 事件处理程序中将 itemClicked 设置为 false
  • 在 SelectionChangeCommitted 事件处理程序中将 itemClicked 设置为 true
  • 将 Text 属性设置为字符串。如果 itemClicked 不是在 DropDownClosed 事件处理程序中,则为空

关于c# 防止自定义组合框自动选择项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39924888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com