如何使用实时按钮访问另一个表单的属性?

时间:2018-09-09 11:42:50

标签: c# winforms

我正在尝试将主题更改程序编码为gui,但效果不佳,我已经尝试了所有我知道的东西。我有2种表单MainUI和主题,我试图按主题表单下的按钮,然后它将在MainUi live下触发代码,我的意思是live将直接发生,所以我不需要关闭主题以使其生效为例。

我的主要Ui主题代码为:

{natural: 1}

主题:

private void button7_Click(object sender, EventArgs e)
    {
        bool Isopen = false;
        foreach(Form f in Application.OpenForms)
        {
            if (f.Text == "Themes")
            {
                Isopen = true;
                f.BringToFront();
                break;
            }
        }

        if (Isopen == false)
        { 
            Themes theme = new Themes();
            theme.Show();
        }
    }

    public void FireEvent()
    { //Example
        BackColor = Color.FromArgb(255, 255, 255);

    }

1 个答案:

答案 0 :(得分:1)

每次选择主题时,您都在创建MainUI的新实例,因此您在错误的表单实例上调用FireEvent。您需要传递对Themes表单的引用。例如,创建一个接收MainUI实例的构造函数。

class Themes : Form
{
    private readonly MainUI _main;

    public Themes(MainUI main) : this()
    {
        _main = main;
    }

    private void button4_Click(object sender, EventArgs e)
    {
        _main.FireEvent();
    }
}

在主界面中,使用以下代码:

private Themes _theme;
private void button7_Click(object sender, EventArgs e)
{
   if(_theme == null)
       _theme = new Themes(this);

   _theme.Show();
}