TextBoxにペースト(貼り付け)できないようにするTextBoxにクリップボードから文字列の貼り付けをできないようにする方法を考えます。 「Ctrl + V」とコンテキストメニューを無効にする方法まず、キーボードの「Ctrl + V」を無効にし、TextBoxにコンテキストメニューが表示されないようにする方法があります。これは、「Disabling clipboard related operations in multiline text box in a windows forms application」(リンク切れ)で紹介されている方法です。 キーボードの「Ctrl + V」を無効にする方法は、「Windows Forms FAQ - 27.2 How do I disable pasting into a TextBox (via Ctrl + V and the context menu)?」にあります。また、TextBoxにコンテキストメニューが表示されないようにする方法は、こちらで紹介しています。これらのやり方を合体させて作成したクラスを以下に示します。これを通常のTextBoxの代わりに使用してください。 注意:新しく作成したクラスを、基のコントロールクラスの代わりに使用するという意味が分からないという方は、こちらをご覧ください。 [VB.NET] ''' <summary> ''' マウスやキーボードによるペーストを無効にしたTextBox ''' </summary> Public Class MyTextBox Inherits TextBox Private pasteKeys As Keys = Keys.V Or Keys.Control Public Sub New() 'コンテキストメニューを非表示にする Me.ContextMenu = New ContextMenu End Sub Protected Overrides Function ProcessCmdKey( _ ByRef msg As Message, ByVal keyData As Keys) As Boolean 'Ctrl+Vを無効にする If (keyData Or pasteKeys) = pasteKeys Then Return True Else Return MyBase.ProcessCmdKey(msg, keyData) End If End Function End Class [C#] //using System.Windows.Forms; //がソースファイルの一番上に書かれているものとする /// <summary> /// マウスやキーボードによるペーストを無効にしたTextBox /// </summary> public class MyTextBox : TextBox { const Keys pasteKeys = Keys.V | Keys.Control; public MyTextBox() : base() { //コンテキストメニューを非表示にする this.ContextMenu = new ContextMenu(); } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { //Ctrl+Vを無効にする if ((keyData | pasteKeys) == pasteKeys) return true; else return base.ProcessCmdKey(ref msg, keyData); } } WM_PASTEメッセージを無視する方法また、WM_PASTEメッセージを無視するという方法も考えられます。以下にこの方法によるコードを示します。 [VB.NET] ''' <summary> ''' マウスやキーボードによるペーストを無効にしたTextBox ''' </summary> Public Class MyTextBox Inherits TextBox Private WM_PASTE As Integer = &H302 Protected Overrides Sub WndProc(ByRef m As Message) If m.Msg = WM_PASTE Then Return End If MyBase.WndProc(m) End Sub End Class [C#] //using System.Windows.Forms; //がソースファイルの一番上に書かれているものとする /// <summary> /// マウスやキーボードによるペーストを無効にしたTextBox /// </summary> public class MyTextBox : TextBox { const int WM_PASTE = 0x302; protected override void WndProc(ref Message m) { if (m.Msg == WM_PASTE) return; base.WndProc(ref m); } } .NET Framework 2.0以降で、ShortcutsEnabledプロパティを使用する方法.NET Framework 2.0からは、TextBoxクラスにShortcutsEnabledプロパティが追加されました。このプロパティをfalseにすることにより、TextBoxで使用できるすべてのショートカットキーを無効にできます。また、コンテキストメニューも表示されなくなります。よって、文字列の貼り付けもできなくなります。 しかし、すべてのショートカットが無効となるため、コピーなどの操作もできなくなります。
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。
|
|
Copyright 2002-2008 DOBON!. All rights reserved.
|