在键盘按钮名称上,因为BackSpace不能用作多个文本框的退格键。
对于单个文本框我会成功编写此代码。
textbox.text = textbox.Text.Remove(textbox.Textlength-1,1);
但不适用于多个文本框。
答案 0 :(得分:-1)
编辑请注意,这是一个WPF答案,但问题是关于winforms。我现在就留下答案,万一有人用WPF寻找相同的东西。
您可以使用FocusManager.IsFocusScope
属性:
<StackPanel>
<StackPanel x:Name="tbElements" FocusManager.IsFocusScope="True">
<TextBox x:Name="tb1" Margin="3" VerticalAlignment="Top"/>
<TextBox x:Name="tb2" Margin="3" VerticalAlignment="Top"/>
</StackPanel>
<Button Content="Test" Margin="3" Height="26" Click="Button_Click"/>
</StackPanel>
然后在单独的逻辑焦点范围中管理文本框
private void Button_Click(object sender, RoutedEventArgs e)
{
var test1 = FocusManager.GetFocusedElement(this);
var test2 = FocusManager.GetFocusedElement(tbElements);
}
结果将是test1
引用单击的按钮,因为它具有当前焦点,但test2
引用最后一个焦点文本框,因为它在其单独的逻辑焦点范围内具有局部焦点
另一种方法是将Button
属性Focusable
设置为False
,因此如果单击按钮时文本框具有焦点,则焦点将保留在文本框中。这可以防止键盘导航到按钮,但由于按钮是屏幕键盘的一部分,这可能是可接受的甚至是期望的行为。
答案 1 :(得分:-1)
我很确定OP不想在多个文本框上执行退格,而是希望Backspace按钮影响当前关注的文本框,所以:
要模拟键盘敲击,请使用SendKeys.Send(string keys)而不是当前实现。这将对具有焦点的控件执行BACKSPACE
:
private void backspace_Click(object sender, EventArgs e)
{
//{BACKSPACE}, {BS}, or {BKSP}
SendKeys.Send("{BACKSPACE}");
}