C# 如何确定tabControl中的活动控件
我有一个选项卡控件,用户可以通过它在几个RichTextBox中的一个框中单击鼠标右键。文本框使用相同的contextMenuStrip控件,我需要确定哪个文本框是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
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,除非您将上下文菜单也绑定到其他控件