c# - 调用 TextBox.AppendText() 后显示自动完成列表
问题描述
我在 winforms 对话框(在 .net4.5 上)中有一系列按钮,它们将文本片段附加到名为 的文本框中FieldDescription
,如下所示:
private void SnippetButton_Click(object sender, EventArgs e)
{
var btn = sender as Button;
FieldDescription.AppendText(btn.Text);
FieldDescription.Focus();
}
文本框有一个自动完成源,我希望在附加文本后打开自动完成功能。这个想法是让用户可以轻松地用最常用文本的开头字符预先填充文本框。在许多情况下,这意味着他们只需在单击按钮后从自动完成列表中选择一个条目,而无需使用键盘。
像这样以编程方式附加文本后,有没有办法触发自动完成窗口?
解决方案
令人惊讶的是,我找不到一种方法来很好地做到这一点。
如果在 .NET 中找不到方法,可以通过 ap/invoke 进行。
[DllImport("user32.dll", CharSetCharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam);
private const int CB_SHOWDROPDOWN = 0x014F;
SendMessage(FieldDescription.Handle, CB_SHOWDROPDOWN, (IntPtr)1, (IntPtr)0);
您可以将其放入OnFocus
事件中。
推荐阅读
- javascript - 网页过期时自动重新加载
- junit - Java - JDBC 连接的 JUnit 测试用例 - Oracle
- amazon-s3 - 用于使用代理服务器上传到 S3 的 aws 请求标头中的 Java Proxy-Authorization
- logging - 如何将 Azure DataFactory 日志存储到 ApplicationInsights
- javascript - 如何使用特定索引列表视图添加选项
- excel - 将excel范围作为图片粘贴到ppt中的最佳方法是什么
- javascript - 将复选框动态添加到 DOM 的有线问题
- sql - SQL Server - 跨行汇总日期范围,同时保留间隙
- laravel - 工厂的增量编号,Laravel
- python - gitlab runner pytest 失败,但显示工作成功