3

keydown イベントが正しく機能していません。エンターキーが押されたときにボタンと同じイベントを発生させたい。ここにc#があります

    public partial class Search : Control
    {
        public SearchRevision()
        {
            InitializeComponent();
        }


        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            SearchViewModel vm = this.DataContext as SearchViewModel;
            if (vm != null)
                vm.Refresh();
        }

        private void myTextBox_KeyDown(Object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                SearchViewModel vm = this.DataContext as SearchViewModel;
                if (vm != null)
                    vm.Refresh();
            }
        }

        private void myTextBox_Escape(Object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Escape)
            {
                txtName.Text = "";
            }
        }
    }
4

4 に答える 4

8

wpf には keycode や keys.enter はありません。代わりに次を使用できます。

private void myTextBox_KeyDown(Object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        SearchViewModel vm = this.DataContext as SearchViewModel;
        if (vm != null)
            vm.Refresh();
    }
}
于 2014-04-23T06:32:40.930 に答える
2

WPF では、TextBox 要素は、プロパティ AcceptsReturn="True" を設定しない限り、KeyUp イベントを作成するために「Enter」ボタンを使用する機会を得られません。

ただし、TextBox 要素での KeyUp イベントの処理の問題は解決しません。「ENTER」を押すと、TextBox に新しいテキスト行が表示されます。

Bubbleイベント戦略を使用して、TextBox要素のKeyUpイベントを使用する問題を解決しました。短くて簡単です。一部の(任意の)親要素に KeyUp イベント ハンドラをアタッチする必要があります。

XAML:

<Window x:Class="TextBox_EnterButtomEvent.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TextBox_EnterButtomEvent"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid KeyUp="Grid_KeyUp">
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height ="0.3*"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Row="1" Grid.Column="1" Padding="0" TextWrapping="WrapWithOverflow">
            Input text end press ENTER:
        </TextBlock>
        <TextBox Grid.Row="2" Grid.Column="1" HorizontalAlignment="Stretch"/>
        <TextBlock Grid.Row="4" Grid.Column="1" Padding="0" TextWrapping="WrapWithOverflow">
            You have entered:
        </TextBlock>
        <TextBlock Name="txtBlock" Grid.Row="5" Grid.Column="1" HorizontalAlignment="Stretch"/>
    </Grid>
</Window>

C# 論理部分 (KeyUp イベント ハンドラーはグリッド要素にアタッチされています):

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Grid_KeyUp(object sender, KeyEventArgs e)
    {
        if(e.Key == Key.Enter)
        {
            TextBox txtBox = e.Source as TextBox;
            if(txtBox != null)
            {
                this.txtBlock.Text = txtBox.Text;
                this.txtBlock.Background = new SolidColorBrush(Colors.LightGray);
            }
        }
    }
}

結果:

結果が表示されたアプリケーションのメイン ウィンドウ

于 2015-12-03T17:47:06.823 に答える
-4

コードを 2 回記述する必要はありません。あなたもこのようにすることができます。

private void myTextBox_KeyDown(Object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        //you may pass the parameters if you need
        Button_Click_1(null,null);
    }
}
于 2013-03-18T22:30:01.837 に答える