#c# #webforms
#c# #веб-формы
Вопрос:
У меня есть несколько меток, которые я пометил iconName
и использовал foreach
, чтобы скрыть их, что отлично работает. Теперь я хотел бы запустить оператор if, чтобы при наведении курсора мыши на значки iconName
отображались. Но я не знаю, как это написать.
private void MainForm_Load(object sender, EventArgs e)
{
foreach (Label iconName in this.Controls.OfType<Label>())
{
if (iconName.Visible)
{
iconName.Hide(); // this works fine
}
if (iconName.MouseHover = new EventHandler()) // This line I don't know how to make it work
{
iconName.Show();
}
}
}
PS Я тоже не понимаю =
или -=
в выделенном синтаксисе? Означает ли это, какая кнопка мыши правильная, если пользователь переключил правую кнопку мыши?
Комментарии:
1. Разве в вашей книге по C # не обсуждаются и не объясняются обработчики событий и как их использовать? «Если» — это не «когда».
2. Э-э …
MouseHover
это событие, как вы думаете, что вы пытаетесь проверить с этимif
? В Winforms вы обрабатываете все такие взаимодействия с помощью обратных вызовов, вы не проверяете повторно в цикле3. У меня нет книги по C #, я смотрел обучающие видео, но не сталкивался с тем, как использовать. Вторая часть Я не понимаю, почему я не могу проверить это с помощью if? Я понимаю вашу точку зрения, это событие, которое кажется еще одной частью языка, но почему я не могу использовать if, чтобы проверить, выполняется ли определенное условие в C #? например, если мышь. значение hover равно true / false, C # не может определить? мне это кажется странным…
Ответ №1:
Вы могли бы использовать что-то вроде
iconName.MouseHover = new EventHandler((object iconName, EventArgs e) => {
((Label)iconName).Show();
});
Однако это не сработает, поскольку событие наведения курсора мыши не сработает для скрытой метки.
Если вы поместите метки внутри панелей (невидимых контейнеров), то вы могли бы использовать что-то вроде;
foreach (Panel p in this.Controls.OfType<Panel>())
{
foreach (Label iconName in p.Controls.OfType<Label>())
{
iconName.Hide();
}
p.MouseHover = new EventHandler((object p, EventArgs e) => {
foreach (Label iconName in ((Panel)p).Controls.OfType<Label>())
{
iconName.Show();
}
});
}
Я предполагаю, что вы хотите, чтобы метка исчезла после того, как вы покинете ее, вам нужно будет добавить событие MouseLeave на панель, чтобы снова скрыть метку после того, как мышь выйдет из области панели