C# 如何确定tabControl中的活动控件

C# 如何确定tabControl中的活动控件,c#,winforms,richtextbox,tabcontrol,contextmenustrip,C#,Winforms,Richtextbox,Tabcontrol,Contextmenustrip,我有一个选项卡控件,用户可以通过它在几个RichTextBox中的一个框中单击鼠标右键。文本框使用相同的contextMenuStrip控件,我需要确定哪个文本框是contextMenuStripCopyPaste_Opening事件中的活动文本框。我认为确定这一点的代码应该是 tabControl1.SelectedTab.ActiveControl.Name但是ActiveControl属性不可用this.ActiveControl.Name只给出tabControl的名称 如何确定tabC

我有一个选项卡控件,用户可以通过它在几个RichTextBox中的一个框中单击鼠标右键。文本框使用相同的contextMenuStrip控件,我需要确定哪个文本框是
contextMenuStripCopyPaste_Opening
事件中的活动文本框。我认为确定这一点的代码应该是
tabControl1.SelectedTab.ActiveControl.Name
但是
ActiveControl
属性不可用
this.ActiveControl.Name
只给出tabControl的名称


如何确定tabControl中哪个文本框是活动控件?

默认情况下,我找不到任何文本框。我将创建一个富文本框列表,然后使用LINQ语句,因为LINQ Select语句将只返回具有焦点的富文本框。像这样的

List rtbList=新列表{RichTextBox1、RichTextBox2、RichTextBox3、RichTextBox4}

var FocusedRTB=rtbList.Select(x=>x.Focused==true)

开关(FocusedRTB.Name)

{为每个RichTextBox执行代码
}

您可以使用
sender
参数获取
ContextMenuStrip
,然后调用
ContextMenuStrip.SourceControl
属性获取打开上下文菜单的控件

在这种情况下,您可以尝试以下代码

private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
    var ctxStrip = sender as ContextMenuStrip;
    if (ctxStrip == null)
        return;

    var rtb = ctxStrip.SourceControl as RichTextBox;
    if (rtb == null)
        return;
}
此代码仅将
发送方
对象强制转换为
上下文列表
,如果此值为
null
,则返回。(尽管永远不应该如此)。下一行捕获
SourceControl
,并将控件强制转换为
RichTextBox

如果源代码控件不是
RichTextBox
,那么结果将为null,我们将取消,因为这不应该为null,除非您将上下文菜单也绑定到其他控件