вместо сохранения имени строки, почему бы не сохранить ссылку на последний элемент управления, по которому последний щелкнул?
так ваш код становится:
private Control SelectedControl;
private void label_Click(object sender, EventArgs e)
{
Control ctrl = sender as Control;
if(ctrl != null)
SelectedControl = ctrl;
}
private void setfont()
{
SelectedControl.Font = selectedfont;
}
Хранение ссылки стоит очень мало, и вы можете получить доступ к ней напрямую.
РЕДАКТИРОВАТЬ: изменяя ссылку на элемент управления, вы можете ссылаться на множество различных типов элементов управления без необходимости вписывать их.
Причина, по которой я делаю этот бит кода:
Control ctrl = sender as Control;
if(ctrl != null)
SelectedControl = ctrl;
это более безопасный тип. Если отправитель по какой-то причине не наследует от Control, то он не будет типизированным и метка будет нулевой, но исключение не будет возбуждено.
Вы можете иметь обработчик событий одним щелчком мыши для всех элементов управления, которые вы хотите изменить, выбрав их. Это будет работать намного проще, если вы создаете элементы управления в коде и подключаете события вручную.
Возможно, вы захотите изучить некоторые границы или эффекты, чтобы показать, какой элемент управления был выбран.
Это может быть выполнено следующим образом:
if(ctrl != null)
{
Deselect(SelectedControl); //Deselects the old control
SelectedControl = ctrl;
Select(SelectedControl); //Selects the new control
}
где Отмена выбора и Выбор делают некоторые необычные эффекты или границу.
Надеюсь, это поможет.