首页 > 解决方案 > 调用 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();
}

文本框有一个自动完成源,我希望在附加文本后打开自动完成功能。这个想法是让用户可以轻松地用最常用文本的开头字符预先填充文本框。在许多情况下,这意味着他们只需在单击按钮后从自动完成列表中选择一个条目,而无需使用键盘。

像这样以编程方式附加文本后,有没有办法触发自动完成窗口?

标签: c#.netwinformsautocomplete

解决方案


令人惊讶的是,我找不到一种方法来很好地做到这一点。

如果在 .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事件中。


推荐阅读