我有一个制表符控件,用户可以通过该控件在一些richTextBox中右键单击。 textBoxes使用相同的contextMenuStrip控件,我需要确定contextMenuStripCopyPaste_Opening
事件中哪个textBox是活动的。我认为确定这个的代码将是
tabControl1.SelectedTab.ActiveControl.Name
但ActiveControl
属性不可用。 this.ActiveControl.Name
只是给我tabControl的名称。
如何确定哪个textBox是tabControl中的活动控件?
答案 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执行代码 }