2015-08-03 2 views
1

Я пробовал разные решения, но мне не повезло ... Я не знаю, как с этим справиться. Следующая проблема:Изменить значение из в родительской форме из формы ребенка

У меня есть основная форма (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(); 
        } 

Теперь SplashScreen запускается, когда мой Form1 работает и показывает текущий процесс. На экране splashScreen у меня есть кнопка «Отмена». Когда я нажимаю на эту кнопку, я хочу изменить переменную «killProc» - которая находится в моем Form1- «true», так что работа в Form1 может быть остановлена ​​с помощью оператора return, когда в какой-то момент «if (killProc)» возвращается правда.

Как изменить переменную в моем Form1 через мой splashScreen или есть лучший способ?

ответ

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; 
+0

Я получаю ошибки при создании экземпляров в моей Form1. splashScreen splashObj = splashScreen.GetInstance (Form1 frm1); –

+0

Хорошо, я попробовал splashScreen splashObj = splashScreen.GetInstance (this); Теперь он отлично работает! Большое спасибо! –

Смежные вопросы