2013-03-23 4 views
0

У меня есть форма под названием MyForm, и я хочу отредактировать ее свойства в середине выполнения программы, вне ее самого.Изменение содержимого формы извне?

Вот что я получил:

static void Main() 
{ 
    MyForm main = new MyForm(); 
    main.ShowDialog(); 
    main.Text = "Hello"; 
} 

Однако, похоже, ShowDialog() просто замораживает программу, пока я не закрыть форму, поэтому main.Text = "Hello"; не будет выполняться, пока не закрыть форму.

Я также пробовал использовать main.Show(), но он просто закрывает форму после того, как я выполнил весь код в моей функции Main(), поэтому текст "Hello" будет мигать только быстро.

Мне понадобится это, чтобы я мог открывать форму во все времена и изменять ее элементы управления в середине выполнения программы извне самого класса.

Как я могу это достичь? Должен ли я запускать форму в другом потоке или что-то еще?

ответ

1

Прежде всего, я не знаю, каков ваш конкретный сценарий. Возможно, мое решение хорошо для вас, но если это не так, попробуйте рассказать нам, чего именно вы пытаетесь достичь.

static void Main() 
{ 
    var main = new MyForm(); 
    //Initialize a new thread with the `DoSomething()` method 
    //and pass the form as a parameter 
    var thread = new Thread(() => DoSomething(main)) {IsBackground = true}; 
    thread.Start(); 
    main.ShowDialog(); 
} 

static void DoSomething(MyForm main) { 
    //Update the form title 
    main.Text = "Hello"; 
    //Wait one second 
    Thread.Sleep(1000); 
    //Update the form title again 
    main.Text = "World"; 
} 
3

Здесь есть несколько вопросов, вы должны попытаться сосредоточиться на одном за раз, поэтому позвольте мне выделить вопросы.

  1. Почему моя программа закрывается, когда Main выходит?
  2. Как я могу избежать «замораживания» программы при показе формы?
  3. Как я могу получить доступ к содержимому формы из другого места?

Ответы:

  1. Это дизайн, как время жизни программы. Когда основной поток (выполняется основной метод) завершается, программа закрывается. Любые открытые формы закрываются в процессе. Решение состоит в том, чтобы не позволить Main выйти, обычно используя Application.Run(main); в вашем случае, показывая форму и ожидая ее закрытия.
  2. Вы используете Show, а не ShowDialog, но поскольку у вас нет другой формы, поддерживающей открытую программу, ваша программа закрывается. Показывать результаты после отображения формы, возвращаясь к тому, что делала программа. В вашем случае программе нечего делать, поэтому она завершается.
  3. Вам нужно сохранить ссылку на вашу форму где-нибудь, к чему может обратиться ваша программа, вы можете использовать статическое поле/свойство где-нибудь, или вы можете передать форму вокруг различных частей, которые в ней нуждаются.
+0

К сожалению, я уже знал все это, и это не отвечает на один вопрос. Хороший ответ, но по неправильному вопросу. Я поставил свой вопрос более ясным, возможно, теперь вы поймете мою проблему лучше. –

+0

Кажется, это довольно солидный ответ. –

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