将上下文菜单添加到选项卡中的 richtextbox

Adding context menu to richtextbox in a tab

这是创建一个带有富文本框的新标签并选择当前富文本框的代码。

 private RichTextBox GetRichTextBox()
    {
        RichTextBox rtb = null;
        TabPage tp = tabControl1.SelectedTab;

        if (tp != null)
        {
            rtb = tp.Controls[0] as RichTextBox;
        }

        return rtb;
    }

    private void newToolStripMenuItem_Click(object sender, EventArgs e)
    {
        TabPage tp = new TabPage("New Document");
        RichTextBox rtb = new RichTextBox();
        rtb.Dock = DockStyle.Fill;

        tp.Controls.Add(rtb);
        tabControl1.TabPages.Add(tp);
    }

我需要能够向 richtextbox 添加上下文菜单,以及我可能需要的剪切、复制、粘贴和其他控件。我不知道该怎么做。

通常您可以将 ContextMenuStrip 添加到表单,使用设计器定义菜单项,然后转到 RichTextBox 属性并将 ContextMenuStrip 实例分配给 RichTextBox 的 ContextMenuStrip 属性。

但是您可以使用代码动态创建相同的界面:

TabPage tp = new TabPage("New Document");
RichTextBox rtb = new RichTextBox();
rtb.Dock = DockStyle.Fill;
ContextMenuStrip ctx = new ContextMenuStrip();
ctx.Items.Add(new ToolStripMenuItem("Cut",null, cutClick));
ctx.Items.Add(new ToolStripMenuItem("Copy", null, copyClick))
ctx.Items.Add(new ToolStripMenuItem("Paste", null, pasteClick));
// Add other menu items as you need

rtb.ContextMenuStrip = ctx;
.....



void cutClick(object sender, EventArgs e)
{
    RichTextBox rtb = sender as RichTextBox;
    if(rtb.SelectedText.Length > 0)
        rtb.Cut();
}
void copyClick(object sender, EventArgs e)
{
    RichTextBox rtb = sender as RichTextBox;
    if(rtb.SelectedText.Length > 0)
       rtb.Copy();
}
void pasteClick(object sender, EventArgs e)
{
    RichTextBox rtb = sender as RichTextBox;
    DataFormats.Format textFormat = DataFormats.GetFormat(DataFormats.Text);
    if(rtb.CanPaste(textFormat))
        rtb.Paste();
}