Как реализовать смену цвета кнопки в разных файлах (c# winforms)?

Для реализации смены цвета кнопки в разных файлах в C# WinForms, можно воспользоваться событиями и делегатами. Давайте разберем подход на примере.

Предположим, у нас есть основная форма MainForm.cs, на которой располагается кнопка buttonChangeColor. Нам нужно изменить цвет этой кнопки из другого файла.

1. Создайте новый класс, например, ColorChanger.cs, в котором будет метод для смены цвета кнопки:

using System;
using System.Windows.Forms;

public class ColorChanger
{
    public static event Action<Color> OnColorChange;

    public static void ChangeButtonColor(Button button, Color color)
    {
        OnColorChange?.Invoke(color);
    }
}

2. В MainForm.cs подпишемся на событие OnColorChange и обработаем его для изменения цвета кнопки:

using System;
using System.Drawing;
using System.Windows.Forms;

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        ColorChanger.OnColorChange += ChangeButtonColor;
    }

    private void ChangeButtonColor(Color color)
    {
        buttonChangeColor.BackColor = color;
    }
}

3. Теперь, из другого места вашего кода, например, из другой формы OtherForm.cs, вызовем метод ChangeButtonColor из класса ColorChanger для изменения цвета кнопки:

using System.Drawing;
using System.Windows.Forms;

public partial class OtherForm : Form
{
    public OtherForm()
    {
        InitializeComponent();
    }

    private void ChangeButtonColorOnClick(object sender, EventArgs e)
    {
        Color color = Color.Red; // Новый цвет для кнопки
        ColorChanger.ChangeButtonColor(mainForm.buttonChangeColor, color);
    }
}

Таким образом, при вызове метода ColorChanger.ChangeButtonColor из любой части вашего кода, событие OnColorChange будет вызвано, и цвет кнопки на форме MainForm изменится соответственно. Важно отметить, что для данного подхода все формы должны быть доступны друг другу, например, через свойства или параметры конструктора. Также следует учитывать ситуации, связанные с многопоточностью при обновлении элементов управления WinForms из разных потоков.