C# 模糊查询带出下拉列表的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 模糊查询带出下拉列表的问题相关的知识,希望对你有一定的参考价值。

如图,在文本框中输入内容时候,自动带出一个列表框显示符合条件的记录,请问在C# Winform 下怎么实现这个效果?如果上面能够完成,那么如何在列表中放复选框,查询的结果只显示我选中的项呢?谢谢请教

参考技术A 这里说下思路把,实现模糊查询(combobox)类似IE地址栏自动出现匹配的下拉列表建议才用自定义控件来实现,通过一个TEXTBOX+ListBOX实现,或者重写Combobox。
如果实现Combobox输入匹配,而不弹出列表的话可以通过在KeyPress中实现就可以了
至于在列表中放复选框还是重写该类把~

其实你的要求建议是重写类是最好的选择的
参考技术B 设置autocompletesource 属性就可以

如何在模糊功能之前执行点击功能

【中文标题】如何在模糊功能之前执行点击功能【英文标题】:How to execute click function before the blur function 【发布时间】:2017-01-19 05:31:34 【问题描述】:

我有一个简单的问题,但我似乎找不到任何解决方案。

基本上我有一个输入可以在聚焦时切换下拉列表,当它不再聚焦时它应该关闭下拉列表。

但是,问题是如果你点击下拉列表中的某个项目,blur函数会在该项目的click函数之前执行,导致click函数从下拉列表开始根本不运行在点击注册之前关闭。

我该如何解决这个问题?

<input onFocus="showDropdown()" onBlur="hideDropdown()">
<ul>
  <li onClick="myClickFunc()">item</li>
</ul>

【问题讨论】:

【参考方案1】:

将您的点击事件替换为 (mousedown)。 Mousedown 事件称为 before 模糊。此代码应该可以正常工作:

<input (focus)="showDropdown()" (blur)="myBlurFunc()">
<ul>
  <li *ngFor="let item of dropdown" (mousedown)="myClickFunc()">item.label</li>
</ul>

看起来点击事件的优先级比模糊低,因此模糊事件首先触发是可预测的行为。

【讨论】:

这对我来说一直是个问题。感谢您的回答。 但是他们已经抓住了它,如果我们右键单击它也会生效 这是一个简单的修复方法,但它带有一堆奇怪的边缘情况。有更好的选择:***.com/a/57983847/202875 @AkhilRJ 在这种情况下,您可以使用MouseEvent.button 来查看按下了哪个按钮以忽略该事件。【参考方案2】:

在可以接收焦点的下拉元素中设置选项 - 使用 &lt;a&gt;&lt;button&gt; 或设置 tabindex="-1"。然后,在您的onBlur 处理程序中,检查event.relatedTarget。在onBlur 处理程序中,relatedTarget 是接收焦点的元素(如果有)。如果它是您的下拉列表中的选项之一,那么您知道此时不要隐藏这些选项。

这比从onClick 切换到onMouseDown 更可取,因为实际点击并不总是紧跟鼠标按下。如果您按下鼠标,将光标移开,然后鼠标向上,您将触发鼠标按下,而不会触发点击。

const elToggle = document.querySelector('.toggle');
const elMenu = document.querySelector('.menu');
elToggle.onfocus = (event) => 
  elMenu.classList.add('open');
;
elToggle.onblur = (event) => 
  const didClickMenu = elMenu.contains(event.relatedTarget);
  if (!didClickMenu) 
    elMenu.classList.remove('open');
  
;
.menu 
  display: none;

.menu.open 
  display: block;
<button class="toggle">menu</button>
<ul class="menu">
  <li tabIndex="-1" onClick="console.log('tacos')">tacos</li>
  <li tabIndex="-1" onClick="console.log('burgers')">burgers</li>
</ul>

【讨论】:

不一定可以将选项更改为可聚焦元素。 如果不清楚:添加tabindex="-1" 将确保您的元素出现在relatedTarget 中,无论它是什么元素。所以这应该是任何方式的首选答案,因为它不会改变点击行为。【参考方案3】:

这是解决这个问题的另一种方法,它不需要JS:

.menu 
  display: none;

.toggle:focus + .menu,
.toggle + .menu:active 
  display: block;
<button class="toggle">menu</button>
<ul class="menu">
  <li onClick="console.log('tacos')">tacos</li>
  <li onClick="console.log('burgers')">burgers</li>
</ul>

秘诀在于不仅针对.toggle:focus 状态,还针对.menu:active 状态。

【讨论】:

以上是关于C# 模糊查询带出下拉列表的问题的主要内容,如果未能解决你的问题,请参考以下文章

C# winform datagridView中的下拉框如何能实现可以手录或,通过模糊查询直接定位到想要的数据

C# combobox 模糊搜索。

js如何实现模糊查询

谁有多选下拉列表含模糊搜索功能的js组件,谢谢

c#模糊查询

js实现下拉框模糊查询