[C#] テキストボックスへの貼り付けを禁止する
このページのタグ:[C#] [TextBox]
テキストボックスへの貼り付けを禁止する方法を紹介します。

ShortcutsEnabled プロパティを利用する方法

ShortcutsEnabled プロパティをFalseにすることで、貼り付けやコピーを禁止できます。詳細はこちらの記事を参照してください。

WM_PASTE ウィンドウメッセージを無視する

WM_PASTEウィンドウメッセージを無視することでペーストを禁止できます。この方法を用いる場合はテキストボックスのコンポーネントを作成する必要があります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace NotPasteTextBox
{
  public partial class InvalidPasteTextBox : TextBox
  {
    const int WM_PASTE = 0x0302;
    const int WM_CONTEXTMENU = 0x007B;

    public InvalidPasteTextBox()
    {
      InitializeComponent();
    }

    public InvalidPasteTextBox(IContainer container)
    {
      container.Add(this);

      InitializeComponent();
    }
    
    protected override void WndProc(ref Message message)
    {
      switch (message.Msg) {
        case WM_PASTE:
          message.Result = IntPtr.Zero;
          return;
        case WM_CONTEXTMENU:
          message.Result = IntPtr.Zero;
          return;
      }
      base.WndProc(ref message);
    }
  }
}

(参考) ProcessCmdKey メソッドでキー入力を無視する

ProcessCmdKeyメソッドをオーバーライドし、"Ctrl+V"キーを無効化して貼り付けを禁止する方法があります。ただし、コンテキストメニューからの貼り付けではペーストできてしまします。この方法を用いる場合はテキストボックスのコンポーネントを作成する必要があります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace NotPasteTextBox
{
  public partial class InvalidPasteTextBox : TextBox
  {
    const int WM_PASTE = 0x0302;
    const int WM_CONTEXTMENU = 0x007B;

    public InvalidPasteTextBox()
    {
      InitializeComponent();
    }

    public InvalidPasteTextBox(IContainer container)
    {
      container.Add(this);

      InitializeComponent();
    }

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
      Keys cntf = keyData & Keys.Control;
      Keys vf = keyData & Keys.V;

      //if (cntf == Keys.Control && vf == Keys.V) { //でもOK
      if (cntf != 0 && vf != 0) {
        return true;
      }

      return base.ProcessCmdKey(ref msg, keyData);
    }
  }
}
登録日 :2012-06-20    最終更新日 :2012-06-22
このページのタグ:[C#] [TextBox]
このエントリーをはてなブックマークに追加
Japanese
プライバシー    iPentecについて
iPentec all rights reserverd.