У меня есть следующие функции:C# WinForms - Цитирование всех элементов управления для применения обработчика событий, не работающего в SplitContainer?
private void setupFocusControls(Control parent)
{
foreach (Control control in parent.Controls)
{
control.GotFocus += HandleFocus;
}
}
private void HandleFocus(object sender, EventArgs e)
{
Control control = (Control)sender;
thisFormName = this.Name;
thisControlName = control.Name.ToString();
if (bHelpSystemActive)
{
bHelpSystemActive = false;
if ((ModifierKeys & Keys.Control) == Keys.Control)
{
HelpSystem hs = new HelpSystem(thisFormName, thisControlName);
hs.ShowDialog();
}
else
{
showTooltipForControl(control, thisFormName);
}
return;
}
}
И я называю это в функции Form_Load:
private void Labeller_Load(object sender, EventArgs e)
{
setupFocusControls(this);
fillListBox();
}
Что это делает показать пользовательскую систему помощи, которую я написал. Если контрольный ключ не нажат, я покажу информацию в подсказке. Если нажать клавишу управления, я покажу редактор. Просто на самом деле.
Теперь этот код отлично работает в другой форме, которая использует панели в качестве контейнеров для элементов управления формы. Проблема в том, что теперь я хочу добавить эту функциональность в отдельную форму. Я добавил весь код, но ни один из элементов управления в форме не добавил к ним событие HandleFocus. Единственная разница между этой формой и рабочей состоит в том, что она использует splitContainer как контейнер.
Вопрос в том, почему функция setupFocusControls
не зацикливается через splitContainer, так как это панели на моей рабочей форме? И как я могу это исправить? У меня, очевидно, не было бы нескольких функций для выполнения этой (что я думал) простой задачи ...
Cheers.
Хотите _every_ управления на форме провести мероприятие? Или просто верхний уровень? Если вам нужен каждый элемент управления, вам нужно использовать рекурсию для назначения события каждому элементу управления. – feralin
Можете ли вы показать свой код «OnLoad» для формы контейнера с разделом, пожалуйста? – Michael
Да, каждый элемент управления должен иметь это событие, так как моя справочная система настроена на основе управления. то есть подробно описывая каждый элемент управления и для чего он предназначен. Как мне это сделать? У меня есть 50+ элементов управления в другой форме, и он отлично работает с использованием вышеуказанного метода. Я думал, что это применимо красиво :( – LokiSinclair