我在焦点上有一些TextBox(光标在他身上闪烁)。 现在,从其他usercontrol(包含按钮)我想发送一个事件,当按下用户控件上的任何按钮时,会将char插入TextBox。
这需要不失去TextBox的焦点......(在TextBox上闪烁光标)
我该怎么办? (我尝试提高按键事件 - 但它不起作用)
答案 0 :(得分:1)
使您的按钮不可聚焦(Focusable = false)。
答案 1 :(得分:1)
您是否希望将此虚拟键盘与其他应用程序一起使用,还是仅在您的应用程序中使用?除此之外,如果它只是您的应用程序,您是否只想将字符插入一个特定的TextBox
或可能的任何TextBox
?
如果它是一个用于任何应用程序的虚拟键盘,那么您将需要使用像SendKeys这样的Win32 API方法。 WinForms
为using SendKeys提供了一个非常简单的界面。
如果它只需要为TextBox
添加字符,那么修改TextBox
的{{1}}属性就更容易了,而不是尝试将其上的事件提升到得到理想的行为。有Text
属性可以告诉您插入角色的位置。除此之外,它是简单的字符串连接。
答案 2 :(得分:1)
<StackPanel>
<TextBox Name="MainTextBox" />
<Button Content="A"
Focusable="False"
Click="Button_Click" />
<Button Content="B"
Focusable="False"
Click="Button_Click" />
<Button Content="C"
Focusable="False"
Click="Button_Click" />
<Button Content="D"
Focusable="False"
Click="Button_Click" />
<Button Content="E"
Focusable="False"
Click="Button_Click" />
</StackPanel>
代码:
private void Button_Click(object sender, RoutedEventArgs e)
{
MainTextBox.Text += (sender as Button).Content.ToString();
}
答案 3 :(得分:1)
var text = button.Content as string;
textbox.SelectedText = text;
textbox.SelectionLength = 0; // removing selection from inserted text
textbox.SelectionStart += text.Length;
这将在光标位置插入按钮内容(并替换所选文本) - 与用户从键盘输入的内容相同。
PS。如果textbox
未知,可以使用
var textbox = FocusManager.GetFocusedElement(FocusManager.GetFocusScope(this)) as TextBox;
而不是FocusManager.GetFocusScope(this)
,您可以放置window
。
如果您不仅需要文本框 - WinAPI函数应该有帮助。见http://www.pinvoke.net/default.aspx/user32.sendinput