Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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#_.net_Winforms_Textbox_Copy Paste - Fatal编程技术网

C# 粘贴到多个文本框中

C# 粘贴到多个文本框中,c#,.net,winforms,textbox,copy-paste,C#,.net,Winforms,Textbox,Copy Paste,我有一个.net应用程序,其中包括搜索屏幕,该屏幕有一个面板,其中有三个文本框,每个文本框的字符长度不同 我想做的是当从第一个框中调用粘贴命令时捕获,并将剪贴板粘贴到三个框中 此功能类似于许多现代应用程序,它们接受串行键和电话号码的输入。您可以增加框的字符限制,并注册文本更改,如果已粘贴(或键入)文本跳转/剪切到下一个TextBox您可以增加框的字符限制并注册TextChanged,如果粘贴(或键入)的文本跳转/剪切到下一个TextBox您可以绑定按键事件,当您获得Ctrl+V或Ctrl+V时,

我有一个.net应用程序,其中包括搜索屏幕,该屏幕有一个面板,其中有三个文本框,每个文本框的字符长度不同

我想做的是当从第一个框中调用粘贴命令时捕获,并将剪贴板粘贴到三个框中


此功能类似于许多现代应用程序,它们接受串行键和电话号码的输入。

您可以增加框的字符限制,并注册
文本更改
,如果已粘贴(或键入)文本跳转/剪切到下一个
TextBox
您可以增加框的字符限制并注册
TextChanged
,如果粘贴(或键入)的文本跳转/剪切到下一个
TextBox

您可以绑定按键事件,当您获得
Ctrl+V
Ctrl+V
时,使用剪贴板中的值更新三个文本框的值。您可以在
TextChanged
事件关闭第一个文本框时执行此操作。

您可以绑定按键向下事件,当您获得
Ctrl+V
Ctrl+V
时,您可以使用剪贴板中的值更新三个文本框的值。您可以在第一个文本框的
TextChanged
event上执行此操作。

捕获粘贴事件:

protected override void WndProc(ref Message m) {
    // Did paste occur?
    if (m.Msg == 0x302) {
        //Paste occurred, add your logic here
    }
    base.WndProc(ref m);
}

然后,访问以获取所需的文本。

捕获粘贴事件:

protected override void WndProc(ref Message m) {
    // Did paste occur?
    if (m.Msg == 0x302) {
        //Paste occurred, add your logic here
    }
    base.WndProc(ref m);
}

然后,访问以获取所需的文本。

据我所知,除了捕获WM_粘贴事件之外,没有其他明智的方法

从TexBox派生一个类并实现此方法:

using System.Windows.Forms;
using System.ComponentModel;

class TextBoxWithOnPaste : TextBox
{

    public delegate void PastedEventHandler();

    [Category("Action")]
    [Description("Fires when text from the clipboard is pasted.")]
    public event PastedEventHandler OnPaste;

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x302 && OnPaste != null) // process WM_PASTE only if the event has been subscribed to
        {
            OnPaste();
        }
        else
        {
            base.WndProc(ref m);
        }
    }
}
然后在表单上放置三个自定义控件,并将所有三个文本框上的
OnPaste
事件指定给同一个方法,在本例中,我称之为
textPasted()


由于您暗示“像序列”,我猜您希望粘贴的字符串在文本框中拆分。上面的代码并不完美(在手动输入所有三个文本框中的数据后,尝试在第三个文本框中粘贴一个空格,因此如果您知道文本粘贴在哪个文本框中就更好了,例如通过更改事件的参数,并以这种方式将其发送给发件人),但它基本上是有效的,我想您可以找出其余的(您可以使用该属性来标识文本框)。

据我所知,除了捕获WM_粘贴事件之外,没有其他明智的方法

从TexBox派生一个类并实现此方法:

using System.Windows.Forms;
using System.ComponentModel;

class TextBoxWithOnPaste : TextBox
{

    public delegate void PastedEventHandler();

    [Category("Action")]
    [Description("Fires when text from the clipboard is pasted.")]
    public event PastedEventHandler OnPaste;

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x302 && OnPaste != null) // process WM_PASTE only if the event has been subscribed to
        {
            OnPaste();
        }
        else
        {
            base.WndProc(ref m);
        }
    }
}
然后在表单上放置三个自定义控件,并将所有三个文本框上的
OnPaste
事件指定给同一个方法,在本例中,我称之为
textPasted()


由于您暗示“像序列”,我猜您希望粘贴的字符串在文本框中拆分。上面的代码并不完美(在手动输入所有三个文本框中的数据后,尝试在第三个文本框中粘贴一个空格,因此如果您知道文本粘贴在哪个文本框中就更好了,例如通过更改事件的参数,并以这种方式将其发送给发件人),但它基本上是有效的,我想您可以找出其余的(您可以使用该属性来标识文本框)。

您可以获取捕获的文本
String txt=Clipboard.GetText()

并将其放置在另一个文本框的“Text”属性中

您可以获得捕获的文本
String txt=Clipboard.GetText()

并将其放置在另一个文本框的“Text”属性中

调用粘贴命令时要捕获的可能重复项?在复制命令上未捕获?调用粘贴命令时,是否可能要捕获的副本?在复制命令上未捕获?如何知道它是粘贴文本还是未在文本更改上?如何知道它是粘贴文本还是未在文本更改上?从关联菜单中选择粘贴如何?在这种情况下,将触发文本更改事件,如果您使用关联菜单。那么从关联菜单中选择“粘贴”如何?在这种情况下,如果您使用关联菜单,将触发文本更改事件。谢谢您的回答。接下来的问题是,你为什么说这是唯一合理的答案?它会同时捕获Ctrl+V、上下文粘贴和编辑-->粘贴吗?似乎有很多方法可以做到这一点;即使是上面James Hill先生提出的方案似乎也没有那么麻烦。@amadib这是唯一合乎逻辑的做法,因为在捕获Cltr+V时,当用户从上下文菜单中选择“粘贴”时,您不会得到通知,如果您也去捕获鼠标点击,那么它很快就会变成一个维护地狱。此外,JamesHill的代码不能简单地放在表单上:表单不会处理WM_粘贴消息。谢谢你的回答。接下来的问题是,你为什么说这是唯一合理的答案?它会同时捕获Ctrl+V、上下文粘贴和编辑-->粘贴吗?似乎有很多方法可以做到这一点;即使是上面James Hill先生提出的方案似乎也没有那么麻烦。@amadib这是唯一合乎逻辑的做法,因为在捕获Cltr+V时,当用户从上下文菜单中选择“粘贴”时,您不会得到通知,如果您也去捕获鼠标点击,那么它很快就会变成一个维护地狱。此外,JamesHill的代码不能简单地放在表单上:表单不会处理WM_粘贴消息。