Código em Main () acessível ou inacessível dependendo abrir uma outra forma
Pergunta
Eu tenho algum aplicativo Pocket PC e eu estou tendo um problema sério com ele descrito aqui: https://stackoverflow.com/questions / 472598 . Embora a procura de uma solução que eu tentei algum código realmente muito estúpido no Main ():
[MTAThread]
static void Main()
{
Application.Run(new Tasks());
Application.Exit();
}
e ponto de interrupção conjunto na saída. se eu executar o aplicativo e em seguida, feche a janela do ponto de interrupção é atingido. se eu executar o aplicativo e, em seguida, abrir outra janela:
private void questButton_Click(object sender, EventArgs e)
{
QuestionnairesWindow questWindow = new QuestionnairesWindow();
questWindow.Show();
this.Hide();
}
e, em seguida, voltar com ele para a janela inicial:
private void backButton_Click(object sender, EventArgs e)
{
Tasks tasksWindow = new Tasks();
tasksWindow.Show();
this.Close();
}
e fechar a inicial da mesma forma que a primeira vez, o código Apllication.exit () nunca é alcançado e eu tenho a impressão de que a aplicação não está realmente fechado (eu não posso abri-lo novamente). desculpe se a descrição é complicado
edit: a questão é - alguma idéia por que é comportar de maneira diferente
?Solução
new Tasks()
em Main()
não é o mesmo objeto com Tasks tasksWindow = new Tasks();
Você tem 2 objetos de tarefas, fechando assim segundo, primeiro ainda está presente e nunca morre. Você precisa passar para QuestionnairesWindow
a referência do Tasks
atual.
Você pode fazer isso com construtor QuestionnairesWindow
adicional:
private Tasks tasks;
public QuestionnairesWindow(Tasks t)
{
this.tasks = t;
}
usando:
new QuestionnairesWindow(this).Show(); // where this = current `Tasks` created in `Main`
Outras dicas
Esta linha parece ser o problema:
Tasks tasksWindow = new Tasks();
Se eu entender o seu código corretamente, em sua backButton_Click, você está criando um new instância de suas tarefas de forma, isntead de mostrar o que você originalmente escondeu. Isso significa que o aplicativo nunca termina, porque ainda há uma janela aberta, mas oculta.
O que você provavelmente quer fazer é passar as tarefas formar referência à forma QuestionnairesWindow.
O problema que tenho é que em backButton_Click você está criando um new instância da janela Tarefas. A janela Tarefas original ainda está em execução, é apenas escondido. Eu suspeito que você precisa para passar uma referência para as tarefas originais formar no QuestionnairesWindow para que ele possa optar por mostrá-lo novamente.
Você quer necessidade de adicionar um método público / interna no seu QuestionnairesWindow onde você define quais tarefas formam causou a QuestionnairesWindow para aberto. Você chamar esse método em questButton_Click com o este de referência antes de chamar this.Hide (). Essa referência será armazenado em uma variável privada dentro do QuestionnairesWindow.
Em seguida, no backButton_Click, você usar essa variável privada, para chamar o método .Show (), para mostrar o formulário pai.