程式中需要用到文字框或者RichTextBox進行文字輸入或顯示,對於一般使用者,可能連快速鍵Ctrl+C複製,Ctrl+V粘貼都不會用,作為開發人員就必須做一個右鍵菜單,以顯示“複製”,“粘貼”。
可以將一個操作功能表(ContextMenuStrip,也叫右鍵菜單、捷徑功能表)分配給幾個控制項使用,方法是將這幾個控制項的ContextMenuStrip屬性設定為需要顯示的菜單。
在菜單事件中,如何判斷是在哪個控制項點擊的呢?答案是此操作功能表的SourceControl屬性,以下是複製、粘貼的代碼:
private void 複製ToolStripMenuItem_Click(object sender, EventArgs e)
{
string selectText = ((RichTextBox)menuSend.SourceControl).SelectedText;
if (selectText != "")
{
Clipboard.SetText(selectText);
}
}
private void 粘貼ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (Clipboard.ContainsText())
{
RichTextBox txtBox = (RichTextBox)menuSend.SourceControl;
int index = txtBox.SelectionStart; //記錄下粘貼前的游標位置
string text = txtBox.Text;
//刪除選中的文本
text = text.Remove(txtBox.SelectionStart, txtBox.SelectionLength);
//在當前游標輸入焦點插入剪下板內容
text = text.Insert(txtBox.SelectionStart, Clipboard.GetText());
txtBox.Text = text;
//重設游標位置
txtBox.SelectionStart = index;
}
}
為了使右鍵菜單更顯智能,沒有選中文本時“複製”先效;剪下板無內容時,“粘貼”無效,特在其Opened事件中增加以下代碼。
private void menuSend_Opened(object sender, EventArgs e)
{
//沒有選擇文本時,複製菜單禁用
string selectText = ((RichTextBox)menuSend.SourceControl).SelectedText;
if (selectText != "")
複製ToolStripMenuItem.Enabled = true;
else
複製ToolStripMenuItem.Enabled = false;
//剪下板沒有常值內容時,粘貼菜單禁用
if (Clipboard.ContainsText())
{
粘貼ToolStripMenuItem.Enabled = true;
}
else
粘貼ToolStripMenuItem.Enabled = false;
}