1

奇妙な行動!Metro アプリのボタンをクリックするとすべて正常に動作しますが、enter (KB のボタン) をクリックすると、すべてがクリアされるだけです!

これは失敗します

private void TextBox_KeyDown_1(object sender, KeyRoutedEventArgs e)
    {
        if (e.Key == VirtualKey.Enter)
        {
            textBlock.Text = textBox1.Text;
           // textBox1.Text = "";
        }
    }

これは期待どおりに機能します

    private void Send_Click(object sender, RoutedEventArgs e)
    {

        textBlock.Text = textBox1.Text;
        textBox1.Text = "";
    }

私は何を間違っていますか?

ありがとう

4

2 に答える 2

1

テキスト ボックスで Enter キーを押すと、実際にボタンのクリックをシミュレートして、両方のアクションが実際に同じであることを確認するのが最善です。

private void TextBox_KeyDown_1(object sender, KeyRoutedEventArgs e)
{
    if (e.Key == VirtualKey.Enter)
    {
        this.Send.PerformClick();
    }
}

private void Send_Click(object sender, RoutedEventArgs e)
{
    textBlock.Text = textBox1.Text;
    textBox1.Text = "";
}

また、Chris が述べたように、この場合でも KeyDown を実際に処理するべきではありません。フォームの AcceptButton プロパティを送信ボタンに設定できます。これは、Enter キーを押すと、ボタンが押されなくても押されることを意味します。集中した。この種の問題は、AcceptButton プロパティを使用する理由の良い例です。

于 2012-08-26T02:52:55.680 に答える
0

ユーザーが Enter キーを押したときにフォーカスを処理しようとしていると思います。これは、アプリケーションの一般的な要件です。あなたの奇妙な行動については、私には説明できません。しかし、それが問題を解決することと同じくらい重要であることを説明することもわかりません。それでは、Enter と Focus を処理する簡単な実装をお見せしましょう。

<StackPanel>
    <TextBlock FontSize="20" Foreground="White">One</TextBlock>
    <TextBox x:Name="T1" Width="1000" Height="100" KeyDown="T1_KeyDown_1" />
    <TextBlock FontSize="20" Foreground="White">Two</TextBlock>
    <TextBox x:Name="T2" Width="1000" Height="100" KeyDown="T2_KeyDown_1" />
</StackPanel>

private void T1_KeyDown_1(object sender, KeyRoutedEventArgs e)
{
    if (e.Key == Windows.System.VirtualKey.Enter)
        T2.Focus(Windows.UI.Xaml.FocusState.Programmatic);
}

private void T2_KeyDown_1(object sender, KeyRoutedEventArgs e)
{
    if (e.Key == Windows.System.VirtualKey.Enter)
        T1.Focus(Windows.UI.Xaml.FocusState.Programmatic);
}

その結果、完璧なフォーカス制御が実現します。

于 2012-08-29T22:32:45.300 に答える