分享一下實用代碼,希望能給大家帶來幫助。
設定剪貼闆的字元無法向TextBox粘貼的方法。
設定「Ctrl + V」和文本菜單無效的方法
[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中使用的快捷鍵都無法使用。而且,文本菜單也無法表示。是以,字元串粘貼也無法使用。
但是,所有的快捷方式也都無效,複制等操作也無法使用。