2014-01-21 4 views
1

У меня есть элемент управления вкладкой, через который пользователь может щелкнуть правой кнопкой мыши в одном из нескольких richTextBoxes. В текстовых блоках используется один и тот же элемент управления contextMenuStrip, и мне нужно определить, какой textBox является активным в событии contextMenuStripCopyPaste_Opening. Я бы подумал, что код для определения этого будет tabControl1.SelectedTab.ActiveControl.Name, но свойство ActiveControl не доступно. this.ActiveControl.Name просто дает мне имя tabControl.Как определить активный элемент управления в tabControl

Как определить, какой textBox является активным элементом управления в tabControl?

ответ

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, тогда результат будет нулевым, и мы отменим его, поскольку это не должно быть пустым, если вы не привязываете контекстное меню к другим элементам управления.

+0

спасибо, ваше решение сработало для меня. – RoastBeast

+0

@RoastBeast Замечательно! – Nico

0

Я не нахожу ничего, что есть по умолчанию. Я бы создал список богатых текстовых полей, а затем использовал оператор LINQ, поскольку оператор LINQ Select возвращал только богатое текстовое поле с фокусом. Что-то вроде этого.

Список rtbList = новый список {RichTextBox1, RichTextBox2, RichTextBox3, RichTextBox4}

вар FocusedRTB = rtbList.Select (х => x.Focused == TRUE);

переключателя (FocusedRTB.Name)

{Выполнить код для каждого RichTextBox }

 Смежные вопросы

  • Нет связанных вопросов^_^