Если я не создаю пункт меню «Правка-> Копировать» и назначаю ему сочетания клавиш «CTRL + C», то я могу выбрать элемент управления (RichTextBox, DataGridView и т. Д.) и нажмите «CTRL + C», и сам элемент управления будет обрабатывать копию. Я могу скопировать текст и вставить его в блокнот и т. Д.
Теперь на протяжении всей моей формы у меня много контроля. Но у меня есть пользовательский элемент управления, который я хочу прояснить, для которого я работаю с функцией копирования. Поэтому я добавил сочетание клавиш ShortcutKey CTRL + C в меню «Правка-> Копировать», и по умолчанию оно установлено на «Включено».
Теперь мне нужно реализовать обработчик событий для события «щелчок» в этом пункте меню. Если я явно введу код для обработки копии, то это сработает:
public void menuEditCopy_Click(object sender, EventArgs e)
{
myCustomControl.Copy();
}
Однако, теперь копирование не работает на любом другом типе управления. Мое первое желание состояло в том, чтобы выяснить тип элемента управления, который имеет фокус, и реализовать ограниченный набор кода копирования для каждого из них:
public void menuEditCopy_Click(object sender, EventArgs e)
{
if (this.ActiveControl is MyCustomControl)
{
((MyCustomControl)this.ActiveControl).Copy();
}
else if (this.ActiveControl is RichTextBox)
{
((RichTextBox)this.ActiveControl).Copy();
}
}
и т.д ...
Однако мои элементы управления добавляются в SplitContainer, и отладка показывает, что this.ActiveControl установлен на экземпляр splitcontainer, а не на элемент управления, даже если я знаю, что этот элемент управления выбран.
Итак, моя последняя мысль - буквально проверить, имеет ли фокус каждый элемент управления:
public void menuEditCopy_Click(object sender, EventArgs e)
{
if (myCustomControl.Focused)
{
myCustomControl.Copy();
}
else if (richTextBox1.Focused)
{
richTextBox1.Copy();
}
}
Я бы хотел избежать этого, если это возможно, так как много элементов управления, и если я добавлю новый элемент управления, мне нужно будет его обновить. Есть ли лучший способ сделать это?
Спасибо