【问题标题】:Restrict keypress in wpf textbox限制 wpf 文本框中的按键
【发布时间】:2015-09-10 11:23:13
【问题描述】:

我在 WPF 中有 TextBox,我只需要通过粘贴 (ctrl +v) 而不是键入来填充该框。所以我需要限制除 ctrl+v 之外的整个按键。由于 WPF 没有按键事件,我面临限制按键的问题

【问题讨论】:

  • 好吧,我实际上还没有尝试过,但也许您可以设置一个“按键”处理程序来检查输入字符串的长度。所以 If(input.length() > 1) // 接受输入 else // input = "";
  • @JohnAugust 如果他一次只粘贴 1 个字符会怎样?
  • 谢谢兄弟,但是如果我粘贴内容,那么长度会增加并且会限制内容
  • ...啊,是的,所有要点都非常好,尤其是在只粘贴一个字符的情况下。在这种情况下,请查看“修饰符”属性:stackoverflow.com/questions/25135505/… 然后将其添加到 if 语句检查中。所以换句话说,如果你看到 if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control) 则接受输入,否则输入 = "";

标签: c# wpf keypress keyboard-events


【解决方案1】:

使用 WPF 样式并使用 ApplicationCommands.Paste 并将文本框设为只读。

【讨论】:

  • @jeevan_jk 试着回来寻求帮助......让人为你编写代码可不是件好事。
  • @Wouter 非常感谢我已经实现了它
【解决方案2】:

您可以将此 Key_Down 处理程序添加到文本框:

  private void textBox1_KeyDown(object sender, KeyEventArgs e)
   {
      if (e.Modifiers == Keys.Control && e.Key==Key.V)
       {
         //Logic here
       }
      else
        e.handled=true;
   }

【讨论】:

    【解决方案3】:

    如果您不允许 Right Click + Paste,而只允许 Ctrl + V,我会简单地检查是否按下了 Ctrl 键修饰符并阻止其他所有操作。

    【讨论】:

    • 使用 WPF 样式并使用 ApplicationCommands.Paste 并将文本框设为只读。
    【解决方案4】:

    所以试试这个:

     myTextBox.KeyDown += new KeyEventHandler(myTextBox_KeyDown);
    
     private void myTextBox_KeyDown(object sender, KeyEventArgs e)
     {
          if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
          {
                input = myTextBox.Text;
          }
          else
          {
                input = "";
          }
    
      }
    

    【讨论】:

      【解决方案5】:
      <TextBox IsReadOnly="True" Name="Policy_text">
         <TextBox.CommandBindings>
             <CommandBinding Command="ApplicationCommands.Paste" CanExecute="PasteCommand_CanExecute" Executed="PasteCommand_Executed" />
         </TextBox.CommandBindings>
      </Textbox>
      

      在后面的代码中

      private void PasteCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
          {
              e.CanExecute = Clipboard.ContainsText();
          }
      
      private void PasteCommand_Executed(object sender, ExecutedRoutedEventArgs e)
          {
              Policy_text.Paste();
          }
      

      【讨论】:

        猜你喜欢
        • 2014-06-06
        • 1970-01-01
        • 2016-01-13
        • 2012-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-31
        • 1970-01-01
        相关资源
        最近更新 更多