如何使用按钮直播访问其他表单的属性?

问题描述 投票:0回答:1

我正在尝试为我的gui编写一个主题更换器,但它不能很好地工作,我已经尝试了我所知道的一切。我有2个表单MainUI和主题,我正在尝试按下主题表单下的一个按钮,然后它会在MainUi live下激活代码,我的意思是直播它会直接发生所以我不需要关闭主题让它生效一个例子。 。

我的主要Ui的主题代码是这样的:

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);

    }

主题:

private void button4_Click(object sender, EventArgs e)
    {
        MainUI main = new MainUI();
        main.FireEvent();
    }
c# winforms
1个回答
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();
    }
}

在主UI中使用以下代码:

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

   _theme.Show();
}
© www.soinside.com 2019 - 2024. All rights reserved.