特定のテキストボックスにペースト機能をオーバーライドする必要があります。テキストはそのテキストボックスに貼り付けると、私はそれが次のことを実行したい:テキストボックスへのペーストのオーバーライド
AddressTextBox.Text = Clipboard.GetText().Replace(Environment.NewLine, " ");
(複数行から単一に変更)
私はこれをどのように行うことができますか?テキストボックスコントロールにメッセージを傍受する
特定のテキストボックスにペースト機能をオーバーライドする必要があります。テキストはそのテキストボックスに貼り付けると、私はそれが次のことを実行したい:テキストボックスへのペーストのオーバーライド
AddressTextBox.Text = Clipboard.GetText().Replace(Environment.NewLine, " ");
(複数行から単一に変更)
私はこれをどのように行うことができますか?テキストボックスコントロールにメッセージを傍受する
を提案し、あなたはネイティブTextBox
コントロールが取得する低レベルのWindowsのメッセージを傍受することができますクリップボードからペーストするよう指示します。メッセージWM_PASTE
。キーボードでCtrl + Vキーを押すか、コンテキストメニューの[貼り付け]コマンドを使用すると、両方で生成されます。コントロールのWndProc()
メソッドをオーバーライドして、それをキャッチし、必要に応じてペーストを実行し、ではなく、をベースクラスに渡します。
プロジェクトに新しいクラスを追加し、下に示すコードをコピー/貼り付けします。コンパイル。新しいコントロールをツールボックスの上部からフォームにドロップし、既存のコントロールを置き換えます。
using System;
using System.Windows.Forms;
class MyTextBox : TextBox {
protected override void WndProc(ref Message m) {
// Trap WM_PASTE:
if (m.Msg == 0x302 && Clipboard.ContainsText()) {
this.SelectedText = Clipboard.GetText().Replace('\n', ' ');
return;
}
base.WndProc(ref m);
}
}
、TexBoxからクラスを派生し、
class MyTB : System.Windows.Forms.TextBox
{
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x302: //WM_PASTE
{
AddressTextBox.Text = Clipboard.GetText().Replace(Environment.NewLine, " ");
break;
}
}
base.WndProc(ref m);
}
}
を実装が可能だhere
私は私のForm1.cs Iでこれを置く場合次のエラーが表示されます。エラー外部型の非静的メンバにネストされた型でアクセスできません。Program.csに挿入すると、現在のコンテキストにAddressTextBoxが存在しないことが示されます。 – cb1295
新しいクラスをプロジェクト - >新規アイテムの追加 - クラス名 'MyTb'で追加します。プロジェクトをビルドすると、MyTBがツールボックスに表示されます。フォームに配置することができます。 –
詳細な説明をお寄せいただきありがとうございます。しかし、あなたのコードはトリックをやっていないか、正しく使用しませんでした。とにかく、ありがとう! – cb1295
チェックこの1:http://stackoverflow.com/questions/3446233/hook-on-default-paste-event-of-winforms-textbox-control –