按钮名称如Backspace如何用作多个文本框的Backspace

时间:2016-10-26 07:55:11

标签: c# winforms

enter image description here

在键盘按钮名称上,因为BackSpace不能用作多个文本框的退格键。

对于单个文本框我会成功编写此代码。

textbox.text = textbox.Text.Remove(textbox.Textlength-1,1);

但不适用于多个文本框。

2 个答案:

答案 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}");
}