Iは、様々な文字の長さ3つのテキストボックス、それぞれを有しているとパネルを有する検索画面を含む.NETアプリケーションを有しています。ペーストは、
は、最初のボックスからを呼び出され、3つのボックスに私のクリップボードに貼り付けると、私は何をしたいのですがキャプチャときペーストコマンドです。
この機能は、シリアルキーや電話番号の入力を受け付け、多くの近代的なアプリケーションと同様です。
Iは、様々な文字の長さ3つのテキストボックス、それぞれを有しているとパネルを有する検索画面を含む.NETアプリケーションを有しています。ペーストは、
は、最初のボックスからを呼び出され、3つのボックスに私のクリップボードに貼り付けると、私は何をしたいのですがキャプチャときペーストコマンドです。
この機能は、シリアルキーや電話番号の入力を受け付け、多くの近代的なアプリケーションと同様です。
は、私の知る限りが見つけることができるようWM_PASTEイベントをキャプチャするよりも、これを行うのは他の賢明な方法はありません。
が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);
}
}
}
その後、私はこのケースでは、フォーム上のこれらのカスタムコントロールの3を入れて、同じ方法にすべての3つのテキストボックスにOnPaste
イベントを割り当てますtextPasted()
それを呼ばれる:
private void textPasted()
{
String input = Clipboard.GetText();
int l1 = textBoxWithOnPaste1.MaxLength;
int l2 = textBoxWithOnPaste2.MaxLength;
int l3 = textBoxWithOnPaste3.MaxLength;
try
{
textBoxWithOnPaste1.Text = input.Substring(0, l1);
textBoxWithOnPaste2.Text = input.Substring(l1, l2);
textBoxWithOnPaste3.Text = input.Substring(l2, l3);
}
catch (Exception)
{ }
}
あなたは「シリアルのような」暗示するので、私はあなたが貼り付けられた文字列がテキストボックス間で分割することにしたい推測しました。上記のコードでは、テキストがイベントのパラメータを変更することにより、例えば、貼り付けたテキストボックスている知っていたならば、それはいいだろうので、すべての3つに手動でデータを入力した後、3番目のテキストボックスに単一のスペースを貼り付けてみてください(そのために完全ではありませんその方法で送信者を送信する)、それは基本的に動作し、残りの部分を把握することができます(Tag
プロパティを使用してテキストボックスを識別できます)。
あなたの答えをありがとう。あなたがそれが唯一の賢明な答えだと言うのはなぜですか? Ctrl + V、コンテキストペースト、編集 - >ペーストの両方をキャプチャしますか? これにはさまざまな方法があるようです。ジェームズ・ヒル氏が上で提案したものでさえ、仕事が少ないようである。 – amadib
@amadib Cltr + Vをキャプチャしているときに、コンテキストメニューからPasteを選択したときに通知を受け取ることができないため、マウスクリックをキャプチャしても非常に迅速にメンテナンスされるためです。さらに、JamesHillのコードは単にフォームに置くことはできません。フォームはWM_PASTEメッセージを処理しません。 [コントロールとコンボボックスの編集](http://msdn.microsoft.com/en-us/library/windows/desktop/ms649028(v = vs.85).aspx)を参照してください。 – CodeCaster
ボックスの文字数制限を増やしてTextChanged
に登録し、貼り付けた(または入力した)テキストを次のTextBox
にジャンプ/切断すると長くすることができます。
テキストが貼り付けられているかどうかを知る方法textchanged? –
JamesやCodeCastersが答えます... – ChrFin
キーダウンイベントをバインドして、Ctrl + V
またはCtrl + v
を取得したときに、3つのテキストボックスの値をclipboadの値で更新します。最初のテキストボックスからイベントをTextChanged
にすることができます。
コンテキストメニューから貼り付けを選択するのはどうですか? – CodeCaster
この場合、コンテキストメニューを使用するとText_Changeイベントが発生します。 –
pasteイベントキャプチャ:必要なテキストを取得するためにClipboard objectにアクセスし、その後
protected override void WndProc(ref Message m) {
// Did paste occur?
if (m.Msg == 0x302) {
//Paste occurred, add your logic here
}
base.WndProc(ref m);
}
を。
あなたが撮影したテキスト String txt = Clipboard.GetText();
を取得し、他のテキストボックスの「テキスト」プロパティ
の可能性のある重複http://stackoverflow.com/questions/1156975/copy-paste-event-に配置することができますlistener-in-c-sharp – ean5533
貼り付けコマンドが呼び出されたときにキャプチャしますか?コピーコマンドでキャプチャしませんか? – Liron