c#+Winform實現自訂的“複製、粘貼”右鍵捷徑功能表,多個控制項共用使用一個右鍵菜單。

來源:互聯網
上載者:User

程式中需要用到文字框或者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;

}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.