如何在 WPF、C# 中按 CTRL+V 粘贴

Posted

技术标签:

【中文标题】如何在 WPF、C# 中按 CTRL+V 粘贴【英文标题】:How can I paste by CTRL+V in WPF, C# 【发布时间】:2021-12-10 07:16:32 【问题描述】:

我有 C# WPF 项目,我有 4 个单元格,我尝试将一些代码粘贴到这些单元格(如 PIN 码),但是当我单击 CTRL+V 时,它只将第一个数字复制到第一个单元格。 我该如何解决?

.xaml 文件

<StackPanel Style="DynamicResource HorizontalPanel" >
                    <Menu>
                        <MenuItem Command="ApplicationCommands.Paste" />
                    </Menu>
                    <Border Style="DynamicResource DigitBorder">
                        <TextBox Style="DynamicResource Digit1Text" Name="Digit1" TextChanged="Digit1_TextChanged" />
                    </Border>
                    <Border Style="DynamicResource DigitBorder">
                        <TextBox Style="DynamicResource Digit2Text" Name="Digit2" TextChanged="Digit2_TextChanged"/>
                    </Border>
                    <Border Style="DynamicResource DigitBorder">
                        <TextBox Style="DynamicResource Digit3Text" Name="Digit3" TextChanged="Digit3_TextChanged"/>
                    </Border>
                    <Border Style="DynamicResource DigitBorder">
                        <TextBox Style="DynamicResource Digit4Text" Name="Digit4" TextChanged="Digit4_TextChanged"/>
                    </Border>
</StackPanel>

.xaml.cs 文件:



        public PasswordScreen(object object1, object object2, ConnectorAction connectorAction)
        
            InitializeComponent();
            Digit1.Focus();            
            Object1 = object1;
            Object2 = object2;
            ConnectorAction = connectorAction;          
            MenuItem pasteMenuItem = new MenuItem();          
            pasteMenuItem.Command = ApplicationCommands.Paste;                      
        

private void Digit1_TextChanged(object sender, TextChangedEventArgs e)
        
            if (Digit1.Text.Length == 1)
            
                Digit2.Focus();
                      
        

Digit2_TextChanged、Digit3_TextChanged、Digit4_TextChanged 相同

我不明白我是如何在此处捕获密码并将每个数字的数字粘贴到不同单元格上的? 强调文字

【问题讨论】:

【参考方案1】:

如果我理解正确,您想将 4 位密码和每个数字粘贴到一个 TextBox 中。

一种方法是在文本框的文本更改中处理它(例如第一个文本框,如果所有文本框都应支持拆分,则需要其他文本框修改):

private void Digit1_TextChanged(object sender, TextChangedEventArgs e)
    
        if (Digit1.Text.Length <= 1)
            return;
        
        string text = Digit1.Text;
        Digit2.Text = text[1].ToString();
        if (text.Length > 2)
            Digit3.Text = text[2].ToString();
        if (text.Length > 3)
            Digit4.Text = text[3].ToString();

        Digit1.Text = text[0].ToString();
    

或者编写一个自己的粘贴命令,可以通过单击按钮或快捷方式调用:

private void MenuItem_Click(object sender, RoutedEventArgs e)
    
        if (!Clipboard.ContainsText())
            return;

        string clipboardText = Clipboard.GetText();

        if (string.IsNullOrEmpty(clipboardText))
            return;

        int length = clipboardText.Length;
        if (length > 0)
            Digit1.Text = clipboardText[0].ToString();
        if (length > 1)
            Digit2.Text = clipboardText[1].ToString();
        if (length > 2)
            Digit3.Text = clipboardText[2].ToString();
        if (length > 3)
            Digit4.Text = clipboardText[3].ToString();
    

【讨论】:

menuitem_click 是如何处理 Ctrl+V 的? @Andy 正如我上面提到的,这也是为了与按钮单击一起使用。如果文本大于 1 个字符,则文本框事件应拆分文本。

以上是关于如何在 WPF、C# 中按 CTRL+V 粘贴的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 模拟 CTRL+V 击键(粘贴)

如何在C#中,文本框不能粘贴功能

C#:如何在文本框中按下回车键触发按钮,但仍然允许“Ctrl+A”等快捷键通过?

如何使用 JavaScript 检测 Ctrl+V、Ctrl+C?

如何使用 JavaScript 检测 Ctrl+V、Ctrl+C?

c# textbox 限制输入长度大于等于2小于等于10(汉子算两个长度)且不能ctrl+v和右键粘贴