从子表单中更改父表单中的值

时间:2015-08-03 01:25:38

标签: c# forms winforms events

我尝试了不同的解决方案,但没有运气......我不知道如何处理这个问题。以下问题:

我有一个主窗体(Form1)和一个子窗体(splashScreen)。

我的splashScreen中的代码:

    public splashScreen()
    {
        InitializeComponent();
    }

    public splashScreen(Form1 frm1)
    {
        form1 = frm1;
        InitializeComponent();

    }

    private static splashScreen m_instance = null;
    private static object m_instanceLock = new object();

    public static splashScreen GetInstance()
    {

        lock (m_instanceLock)
        {
            if (m_instance == null)
            {
                m_instance = new splashScreen();
            }
        }

        return m_instance;
    }

在我的Form1中,我创建了一个新线程并启动了splashScreen。我在splashScreen中调用控件的方式如下:

    splashScreen splashObj = splashScreen.GetInstance();

                if (splashObj.InvokeRequired)
                   {
                       splashObj.Invoke((MethodInvoker)delegate()
                       {
                           splashObj.Show();
                       }
                       );
                   }
                   else
                   {
                       splashObj.Show();
                   }

现在,当我的Form1正在工作时,splashScreen会启动并显示当前进程。在splashScreen上我有一个按钮"取消"。当我点击那个按钮时,我想要改变一个变量" killProc" - 在我的Form1-到" true"因此,在某些时候,可以通过return语句停止Form1中的工作" if(killProc)"返回true。

如何通过splashScreen更改Form1中的变量,还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

GetInstance方法中,使用splashScreen(Form1 frm1)构造函数构造实例。他们从SplashScreen引用了您的父级,您可以使用set属性。

public static splashScreen GetInstance(Form1 frm1)
    {

        lock (m_instanceLock)
        {
            if (m_instance == null)
            {
                m_instance = new splashScreen(frm1);
            }
        }

        return m_instance;
    }

所以,来自SplashScreen

form1.killProc = true;