Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 输入按键事件处理程序_C#_Wpf_User Interface_Textbox_Maskedtextbox - Fatal编程技术网

C# 输入按键事件处理程序

C# 输入按键事件处理程序,c#,wpf,user-interface,textbox,maskedtextbox,C#,Wpf,User Interface,Textbox,Maskedtextbox,我想在按下enter键时从文本框中捕获文本。我正在使用WPF/visualstudio2010/.net4。我不知道标签中要使用什么事件处理程序?我还想对maskedtextbox执行同样的操作。可以使用KeyDown或keydup TextBox tb = new TextBox(); tb.KeyDown += new KeyEventHandler(tb_KeyDown); static void tb_KeyDown(object sender, KeyEventArgs e) {

我想在按下enter键时从文本框中捕获文本。我正在使用WPF/visualstudio2010/.net4。我不知道标签中要使用什么事件处理程序?我还想对maskedtextbox执行同样的操作。

可以使用KeyDown或keydup

TextBox tb = new TextBox();
tb.KeyDown += new KeyEventHandler(tb_KeyDown);

static void tb_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        //enter key is down
    }
}

KeyDown事件仅在标准文本框或MaskedTextBox处由“正常”输入键触发,而不是ENTER或TAB等

您可以通过覆盖IsInputKey方法获得特殊键,如ENTER:

public class CustomTextBox : System.Windows.Forms.TextBox
{
    protected override bool IsInputKey(Keys keyData)
    {
        if (keyData == Keys.Return)
            return true;
        return base.IsInputKey(keyData);
    }
}
然后可以通过以下方式使用KeyDown事件:

CustomTextBox ctb = new CustomTextBox();
ctb.KeyDown += new KeyEventHandler(tb_KeyDown);

private void tb_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
          //Enter key is down

          //Capture the text
          if (sender is TextBox)
          {
              TextBox txb = (TextBox)sender;
              MessageBox.Show(txb.Text);
          }
    }
}

您还可以在WPF中使用PreviewKeyDown:

<TextBox PreviewKeyDown="EnterClicked" />
然后在附加的类中:

void EnterClicked(object sender, KeyEventArgs e) {
    if(e.Key == Key.Return) {
        DoSomething();
        e.Handled = true;
    }
}

在WPF中,除非您不设置属性:AcceptsReturn=“True”,否则TextBox元素将没有机会使用“Enter”按钮来创建KeyUp事件

但是,它无法解决在TextBox元素中处理KeyUp事件的问题。按“回车”键后,您将在文本框中获得一个新的文本行

我已经通过使用气泡事件策略解决了使用TextBox元素的KeyUp事件的问题。它又短又简单。必须在某些(任何)父元素中附加KeyUp事件处理程序:

XAML:

结果:


对于那些在文本框或其他输入控件上捕获Enter键时遇到困难的人,如果您的表单定义了AcceptButton,您将无法使用KeyDown事件捕获Enter键

您应该做的是在表单级别捕获Enter键。将此代码添加到表单中:

protectedoverride bool ProcessCmdKey(参考消息msg,Keys keyData)
{
if((this.ActiveControl==myTextBox)&&(keyData==Keys.Return))
{
//做点什么
返回true;
}
其他的
{
返回base.ProcessCmdKey(ref msg,keyData);
}
}

如何为maskedtextbox执行此操作?它是一个radmaskedtextbox radmaskedtextbox在标签内没有提供“AcceptsReturn”选项。没有什么不同。MaskedTextBox具有相同的事件处理程序。事实上,所有控件都有它们。但是,当按下任何键时,都会触发此处理程序。我只想在按下enter键时触发事件。然后我想收集文本框中的内容。这就是它的作用。用户键入名称并按enter键。那是我想启动活动的时候。而不是当用户输入他的名字时..我希望这能解释它..你是对的。这就是为什么在我给出的示例中,有一个if语句在handler方法中检查该条件。这就是KeyEventHandler的工作原理。不幸的是,没有简单的方法来做你想做的事情,我不知道是否有。你能告诉我们你到目前为止做了什么吗?私有void maskedtxtbox_KeyDown(objectsender,System.Windows.Input.KeyEventArgs e){if(e.SystemKey==System.Windows.Input.Key.Enter){//
void EnterClicked(object sender, KeyEventArgs e) {
    if(e.Key == Key.Return) {
        DoSomething();
        e.Handled = true;
    }
}
<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>
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);
            }
        }
    }
}