2017-12-28 52 views
-2

Angenommen, ich habe eine C# -Lösung mit 3 Projekten Main, Program1, Program2.
Ich möchte ein "Hauptformular" haben, wenn ich auf "Programm1" klicke, wird das Hauptformular ausgeblendet, Programm1 wird angezeigt, und wenn ich Programm1 schließe, wird das Hauptformular zurückkommen.
Wie kann ich das tun? Ich habe versucht, Programm1 und Programm2 als Referenz auf Project Main und Code wie unten in Main, es funktioniert für Aufruf Program1, kann aber nicht behandeln Program1.closed(), weil, wenn ich versuche, Main auf Program1 zu verweisen, FehlerC# Form-Schalter und umgekehrt

Ich suchte Google und bekam nichts hilfreiches!

using System; 
using System.Windows.Forms; 

namespace Switch 
{ 
    public partial class Main : Form 
    { 
     public Main() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Program1.Form1 pf1 = new Program1.Form1(); 
      pf1.Show(); 
      this.Hide(); 
     } 
    } 
} 

my solution my main form, quite simple

+1

Do yo Du willst wirklich 3 verschiedene Anwendungen? Oder nur 1 Anwendung mit 3 Forms? –

+0

danke für den schnellen Kommentar @CamiloTerevinto, ich brauche 3 Anwendungen verursacht es kommt von 3 verschiedenen Anbietern. – LongTTH

+0

Ich denke, Sie könnten jedes Formular mit 'new Process' starten und einzelne Instanzen implementieren, um das andere Formular aufzurufen. – zcui93

Antwort

0

Danke allen für Antworten!
Nachdem sie mit Kunden bestätigt, sie müssen nicht unbedingt die „Mainform“ versteckt werden, so kam ich mit einer anderen einfacheren Lösung:
1. Für die „Kinder Form“, verwende ich ShowDiaglog() statt Show()

private void btnChildForm1_Click(object sender, EventArgs e) 
    { 
     var frm = new ChildForm1(); 
     frm.ShowDialog(); 
    } 
  1. Für die Hauptform, ich mutex verwenden sie zu zwingen, nur 1 Instanz sein:

    static class Program 
    { 
        /// <summary> 
        /// The main entry point for the application. 
        /// </summary> 
        /// 
    
    
        [STAThread] 
        static void Main() 
        { 
         var mutex = new Mutex(true, "MainForm", out var result); 
         if (!result) 
         { 
          MessageBox.Show("Running!"); 
          return; 
         } 
         Application.EnableVisualStyles(); 
         Application.SetCompatibleTextRenderingDefault(false); 
         Application.Run(new MainForm()); 
         GC.KeepAlive(mutex); 
        } 
    } 
    
1

Rund Abhängigkeiten verwenden, um passieren, wenn das Projekt arquitecture nicht gut ist. In Ihrem Fall denke ich, dass das Problem migth das Programm1 oder Programm2 Main als eine Referenz haben. Entfernen Sie die Hauptreferenz von Programm1 und Programm2. Das Hauptprojekt muss auf Programm1 und Programm2 verweisen.

+0

danke für Feedback, ich verstehe den Fehler, Sie haben meinen Punkt verpasst. Ich brauche eine Möglichkeit, das Hauptformular wieder anzuzeigen, nachdem Programm1 geschlossen wurde. – LongTTH

1

Wie zcui93 kommentiert können Sie Prozess verwenden, damit es funktioniert. Sie können entweder alle drei in gleichen Ordner haben (wenn Sie die App auf Client-Rechner einsetzen)

using System.Diagnostics; 
... 
Process process = new Process(); 
// Configure the process using the StartInfo properties. 
process.StartInfo.FileName = "process.exe"; 
process.StartInfo.Arguments = "-n"; 
process.StartInfo.WindowStyle = ProcessWindowStyle.Maximized; 
process.Start(); 
process.WaitForExit();// Waits here for the process to exit. 

In C# können Sie die Process.Exited Ereignis verwenden. Dieses Ereignis funktioniert nicht, wenn jemand die App schließt, wenn jemand die App vom Aufgabenmanager aus tötet.