![](/img/trans.png)
[英]how to disable copy/paste in textbox in windows phone using c#?
[英]how to disable copy, Paste and delete features on a textbox using C#
有人可以建議如何使用 C# 在 WinForms 中的文本框中處理剪切、復制和粘貼事件嗎?
在 WinForms 中,禁用文本框上的剪切、復制和粘貼功能的最簡單方法是將 ShortcutsEnabled 屬性設置為 false。
您必須對文本框進行子類化,然后覆蓋 WndProc 方法以在控件執行之前攔截 Windows 消息。
下面是一個示例,它說明了一個攔截 WM_PASTE 消息的 TextBox。
作為參考,這里是消息常量的定義:
您只需忽略入站消息,如下所示:
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_PASTE || m.Msg == WM_COPY || m.Msg == WM_CUT)
{
// ignore input if it was from a keyboard shortcut
// or a Menu command
}
else
{
// handle the windows message normally
base.WndProc(ref m);
}
}
假設您有一個名為textbox1
的 TextBox。 聽起來您想禁用 TextBox 的剪切、復制和粘貼功能。
試試這個快速而骯臟的概念證明片段:
private void Form1_Load(object sender, EventArgs e)
{
ContextMenu _blankContextMenu = new ContextMenu();
textBox1.ContextMenu = _blankContextMenu;
}
private const Keys CopyKeys = Keys.Control | Keys.C;
private const Keys PasteKeys = Keys.Control | Keys.V;
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if ((keyData == CopyKeys) || (keyData == PasteKeys))
{
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
為防止用戶使用鍵盤進行復制/粘貼,請將ShortcutsEnabled屬性設置為 false。 為了防止用戶從上下文菜單中復制/粘貼,將ContextMenu屬性設置為 new ContextMenu()。
if (copyPasteEnabled) {
textBox1.ShortcutsEnabled = true;
textBox1.ContextMenu = null;
} else {
textBox1.ShortcutsEnabled = false;
textBox1.ContextMenu = new ContextMenu();
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true;
}
if (e.Control == true)
{
switch (e.KeyCode)
{
case Keys.C:
case Keys.P:
case Keys.X:
e.Handled = true;
textBox1.SelectionLength = 0;
break;
}
}
}
private void textBox1_Enter(object sender, EventArgs e)
{
System.Windows.Forms.Clipboard.Clear();
}
int cusorposition = m_TextBox1.SelectionStart;
if (TextBox1.Text[0] == ' ')
{
//Trim Spaces at beginning.
m_TextBox1.Text = m_TextBox1.Text.TrimStart(' ');
m_TextBox1.Text = m_TextBox1.Text.TrimEnd(' ');
m_TextBox1.SelectionStart = cusorposition ;
}
嗨,我找到了一種如何獲取當前光標位置而不是處理名為 TextBox1 的文本框中的剪切、復制和粘貼事件的方法。並從結束位置我重新分配當前光標位置。
感謝所有幫助我解決這個問題的人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.