如何确定tabControl中的活动控件

时间:2014-01-21 22:01:17

标签: c# winforms richtextbox tabcontrol contextmenustrip

我有一个制表符控件,用户可以通过该控件在一些richTextBox中右键单击。 textBoxes使用相同的contextMenuStrip控件,我需要确定contextMenuStripCopyPaste_Opening事件中哪个textBox是活动的。我认为确定这个的代码将是 tabControl1.SelectedTab.ActiveControl.NameActiveControl属性不可用。 this.ActiveControl.Name只是给我tabControl的名称。

如何确定哪个textBox是tabControl中的活动控件?

2 个答案:

答案 0 :(得分:1)

您可以使用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;
}

此代码只是将sender对象转换为ContextMenuStrip,如果这是null则返回。 (虽然永远不应该)。下一行捕获SourceControl并将控件转换为RichTextBox

如果源控件不是RichTextBox,那么结果将为null并且我们取消,因为除非您将上下文菜单绑定到其他控件,否则它不应为null。

答案 1 :(得分:0)

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

列出rtbList =新列表{RichTextBox1,RichTextBox2,RichTextBox3,RichTextBox4}

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

开关(FocusedRTB.Name)

{为每个RichTextBox执行代码 }