Codice in Main () raggiungibile o irraggiungibile a seconda dell'apertura di un altro modulo

StackOverflow https://stackoverflow.com/questions/479368

  •  20-08-2019
  •  | 
  •  

Domanda

Ho alcune app per Pocket PC e sto avendo un problema serio con esso descritto qui: https://stackoverflow.com/questions / 472598 . Mentre cercavo una soluzione ho provato un codice abbastanza stupido in Main ():

[MTAThread]
        static void Main()
        {
            Application.Run(new Tasks());
            Application.Exit();
        }

e imposta il punto di interruzione all'uscita. se eseguo l'applicazione e chiudo la finestra, viene raggiunto il punto di interruzione. se eseguo l'applicazione e quindi apro un'altra finestra:

private void questButton_Click(object sender, EventArgs e)
        {
            QuestionnairesWindow questWindow = new QuestionnairesWindow();
            questWindow.Show();
            this.Hide();
}

e poi torna da esso alla finestra iniziale:

private void backButton_Click(object sender, EventArgs e)
        {
            Tasks tasksWindow = new Tasks();
            tasksWindow.Show();
            this.Close();
        }

e chiudi quello iniziale allo stesso modo della prima volta, il codice Apllication.exit () non viene mai raggiunto e ho l'impressione che l'applicazione non sia realmente chiusa (non riesco ad aprirla di nuovo). scusate se la descrizione è complicata

modifica: la domanda è: qualche idea sul perché si sta comportando diversamente?

È stato utile?

Soluzione

new Tasks() in Main() non è lo stesso oggetto con Tasks tasksWindow = new Tasks();

Hai 2 oggetti di Task, quindi chiudendo il secondo, il primo è ancora presente e non muore mai. Devi passare a QuestionnairesWindow il riferimento dell'attuale Tasks.

Puoi farlo con <=> costruttore aggiuntivo:

private Tasks tasks;

public QuestionnairesWindow(Tasks t)
{
  this.tasks = t;
}

utilizza:

new QuestionnairesWindow(this).Show(); // where this = current `Tasks` created in `Main`

Altri suggerimenti

Questa riga sembra essere il problema:

Tasks tasksWindow = new Tasks();

Se capisco correttamente il tuo codice, nel tuo backButton_Click, stai creando una nuova istanza del tuo modulo Attività, non è in grado di mostrare quello che hai originariamente nascosto. Ciò significa che l'applicazione non termina mai, perché c'è ancora una finestra aperta, ma nascosta.

Quello che probabilmente vuoi fare è passare il riferimento del modulo Attività al modulo Finestra dei questionari.

Il problema che hai è che in backButton_Click stai creando una nuova istanza della finestra Attività. La finestra Attività originale è ancora in esecuzione, è appena nascosta. Sospetto che sia necessario passare un riferimento al modulo Attività originale nella Finestra dei questionari in modo che possa scegliere di mostrarlo di nuovo.

È necessario aggiungere un metodo pubblico / interno alla finestra dei questionari in cui è stato impostato il modulo Attività che ha aperto la finestra dei questionari. Puoi chiamare questo metodo in questButton_Click con il riferimento this prima di chiamare this.Hide (). Questo riferimento verrà archiviato in una variabile privata nella finestra dei questionari.

Quindi in backButton_Click, si utilizza questa variabile privata, per chiamare il metodo .Show (), per mostrare il modulo padre.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top