2015-03-18 4 views
0

У меня есть проблемы с доступом к ProgressBar и определенной метке из моего экрана splashScreen. Я создал собственную форму для экрана. В моем Form1 у меня есть следующий метод:Splashscreen - Доступ к ярлыку и прогрессу

private void sign_Click(object sender, EventArgs e) 
    { 
     splashScreen splScreen = new splashScreen(); 
     Thread thrd = new Thread(new ThreadStart(loadingScreenStart)); 
     thrd.Start(); 
     splScreen.percentage.Text = "0%"; 
     var logIn = new LogIn(this); 
     logIn.checkUserInput(this); 

     thrd.Abort(); 
    } 

     public void loadingScreenStart() 
    { 
     Application.Run(new splashScreen()); 
    } 

В моем Логин классе я сделал:

 public String checkUserInput(object sender) 
    { 
     splashScreen splScreen = new splashScreen(); 
     //won't change my Label and PrpgressBar 

Я знаю, что это, вероятно, потому, что я создаю новый экземпляр формы так пусто, но как это сделать это право? Я не знаю ... Надеюсь, кто-то может мне помочь.

+0

Да это было бы, наверное, то же самое. У меня вообще не было проблем с этим. Здесь в этом случае я создаю новый поток. Это моя проблема. Так что, я думаю, это немного отличается от простого доступа к элементам управления другой формы? – Takeda15

+0

Вы пытаетесь получить доступ к progressBar из любой формы, кроме формы, которую вы создали, экрана Splash – Sayka

+0

Да. Вот так – Takeda15

ответ

1

То же требование, что и мне, когда мне нужно использовать один и тот же объект, но имел ограничение, когда я не могу использовать статический класс. Для этого я создал статический объект класса и использовал блокировку. Попробуйте, если оно решит ваше требование.

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

И всякий раз, когда вы хотите создать объект или получить доступ к уже созданному объекту, вам просто нужно дать как:

SomeClass someobj= SomeClass.GetInstance(); 
+0

Куда это вставить? Зачем мне нужен замок? Я не знаю, что такое SomeClass. Попробовал поместить это в класс, где он мне нужен, но он что-то меняет – Takeda15

+0

Вы можете иметь его в своем классе Form. –

+0

Можете ли вы привести мне пример моего кода? Вы имеете в виду форму SplashScreen? Тогда SomeClass будет формой SplashScreen? Теперь я помещаю код в свою форму splashScreen и в моем классе LogIn, который я сделал: SomeClass someobj = SomeClass.GetInstance(); но это ничего не меняет. Экземпляр splashScreen по-прежнему равен нулю. – Takeda15