У меня есть форма, содержащая кнопку, и я пытаюсь изменить цвет кнопки из другого потока, который находится в другом классе (от желтого до красного) но цвет остается прежним.Изменить цвет кнопки из другой темы
создания объекта (это в Form1):
Button b = new Button();
b.Location = new Point(gameBoard[playerPosX,playerPosY].m_lbl.Location.X, gameBoard[playerPosX, playerPosY].m_lbl.Location.Y);
b.Parent = gameBoard[playerPosX, playerPosY].m_lbl;
b.BackColor = Color.Black;
b.Size = new Size(17, 17);
b.FlatStyle = FlatStyle.Flat;
b.Enabled = false;
b.Text = "BASIC";
this.Refresh();
b.BringToFront();
buildings.Add(new Structure("basic", b,playerPosX,playerPosY));
Controls.Add(buildings[buildings.Count - 1].m_btn);
и это метод, который нить объекта делает:
public void basicOperation()
{
while (true)
{
Form1.ChangeControlColor(Color.Yellow,m_btn);
Thread.Sleep(1000);
Form1.ChangeControlColor(Color.Red,m_btn);
}
}
и здесь form1.ChangeControlColor:
delegate void SetColorCallBack(Color c,Button b);
public static void ChangeControlColor(Color c,Button b)
{
if (b.InvokeRequired)
{
SetColorCallBack d = new SetColorCallBack(ChangeControlColor);
b.Invoke(d, new object[] { c,b });
}
else
{
b.BackColor = c;
b.BringToFront();
b.Refresh();
}
}
Следующий код не работает, а цвет кнопки остается желтым. Я ценю ваше время.
Любые ошибки, вы шаг через код, делает 'else' положение никогда не срабатывает? – CodingGorilla
Нет ошибок, когда я отлаживал код в ChangeControlColor, когда срабатывает условие if, кроме того, во время отладки я увидел, что b.BackColor был однажды Color.Red и один раз Color.Yellow. но я не видел никаких изменений в форме. –
Также, если сработает инструкция else, почему вы ожидаете увидеть красный цвет, когда сразу измените его на Желтый. Положите задержку после установки на красный. – TYY