2016-10-26 48 views
0

enter image description here如何按鈕名稱退格工作作爲退格鍵多個文本框

在鍵盤按鈕名稱退格不作爲退格鍵多個文本框工作。

對於單個文本框我寫這個代碼併成功。

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

但不適用於多個文本框。

+0

我不明白你的多個文本框的意思,但看看[的SendKeys(https://msdn.microsoft.com/en-us /library/system.windows.forms.sendkeys.send(v=vs.110).aspx) – Pikoh

+1

在用戶單擊按鈕之前,您必須知道哪個TextBox具有焦點*。使用他們的Enter事件來更新名爲LastTextBox的變量。如果這應該是一個觸摸屏界面,那麼可以考慮在用戶單擊文本框時彈出鍵盤。 –

+0

考慮讓你的屏幕鍵盤[非可聚焦](https://msdn.microsoft.com/en-us/library/system.windows.iinputelement.focusable.aspx),所以你可以檢查按鈕點擊。這是合理的,因爲按鈕焦點主要用於鍵盤導航,並且不需要在屏幕鍵盤中進行鍵盤導航。 – grek40

回答

-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,因此如果單擊按鈕時文本框具有焦點,焦點將保留在文本框內。這可以防止鍵盤導航到按鈕,但由於按鈕是屏幕鍵盤的一部分,因此這可能是可以接受的甚至是所需的行爲。

+0

嗨..grek40 ..當我專注於條碼文本框,然後退格工作條碼。當我專注於名稱,然後退格不起作用..... –

+0

@MuhammadIrfan動態確定活動文本框的重要性,不僅僅是使用一個特定文本框元素的變量。這就是爲什麼我在這個答案中使用焦點經理。 – grek40

-1

我敢肯定,OP不希望執行多個文本框退格,而想退格按鈕影響當前重點的文本框,所以:

要模擬的,而不是當前實現鍵盤筆畫使用SendKeys.Send(string keys)。這將在具有集中控制執行BACKSPACE

private void backspace_Click(object sender, EventArgs e) 
{ 
    //{BACKSPACE}, {BS}, or {BKSP} 
    SendKeys.Send("{BACKSPACE}"); 
}