Member 14782009 Ответов: 1

C# - от статического метода - запуск таймера, изменение обратного цвета кнопки и т. д


Я пытаюсь запустить таймер и изменить задний цвет кнопки (из статического метода). Я попробовал этот код, но он не сработал :

Что я уже пробовал:

Приложение.Открытые формы.OfType<form1>().Last().buttonName.BackColor = Color.LimeGreen; //Цвет Задней Кнопки

Приложение.Открытые формы.OfType<form1>().Last()?.timerName.Начать();
// Запуск Таймера

Приложение.Открытые формы.OfType<form1>().Last().timerName.Интервал = 1000;
// Изменение Интервала Таймера

0x01AA

"но это не сработало" означает? Есть ли сообщение об ошибке/исключении?

Или, может быть, просто форма не существует, и вы терпите неудачу здесь?
Приложение.Открытые формы.OfType<form1>()?.Last().buttonName.BackColor = цвет.Черный;
а здесь
Приложение.Открытые формы.OfType<form1>().Last()?.timerName.Интервал = 1000;

Member 14782009

просто ничего не произошло, и он выдает ошибку, когда я ставлю "?"

0x01AA

И это дает ошибку... pleeeaaase, ошибка в чем?

BillWoodruff

установите интервал таймера перед вызовом 'Start

как OxO1AA спрашивает:L опишите ошибку

0x01AA

"установите интервал таймера перед вызовом Start"
Хороший улов, я его упустил

Member 14782009

я попробовал это.. :/ и я использую турецкий vs, так что ошибка тоже турецкая, и я не могу ее перевести.

0x01AA

Вы знаете об этом? Google Translate[^]

Member 14782009

Вот в чем ошибка : левая часть присваивания должна быть переменной, свойством или индексатором

0x01AA

ладно, попробуй вот это

form1 theForm= Application.OpenForms.OfType<form1>().Last();
if (theForm != null)
{
// Do here all the form related stuff
}
else
{
throw new Exception("Form not available. Need to dive deeper into the problem");
}


Кстати: я предлагаю вам внимательно прочитать предложение в решении 1

BillWoodruff

не видя кода для статического метода и не понимая, как он используется, я сомневаюсь, что мы сможем вам помочь. использование 'Last возвращает последний элемент коллекции: это не обязательно текущая активная форма. Турецкий ? Почему вы говорите по-турецки, если не понимаете его ?

опишите, что вы хотите, чтобы произошло

1 Ответов

Рейтинг:
1

OriginalGriff

в принципе, не использовать static метод. Вам нужен экземпляр формы, сделайте метод членом этой формы и используйте предоставленный экземпляр.

Если вы пытаетесь сделать это из другой формы, то вам не следует этого делать - вы делаете это для (или статического кода) слишком хорошо осведомлены о механике работы Form1, и это очень плохая идея.
Вместо этого вы должны использовать события, чтобы заставить Form1 справиться с ним сам (если он этого захочет). Таким образом, OOPs удовлетворяется, и ваш код становится намного более ремонтопригодным.

Как именно, зависит от "отношения" между этими двумя формами.
Взгляните на них, один из них будет соответствовать вашим обстоятельствам.
Форма, которая создает экземпляр другого:

MyForm mf = new MyForm();
mf.Show();
Это "родитель", другая форма - "Ребенок".
(Это не подразумевает никаких формальных отношений MDI)

Передача информации между двумя формами, Часть 1: Родитель-Ребенок[^]
Передача информации между двумя формами, Часть 2: Ребенок-Родитель[^]
Передача информации между двумя формами, Часть 3: Ребенок ребенку[^]