å©ç¨WindowsFormsApplicationBaseçIsSingleInstanceæ¥æ§å¶åºç¨ç¨åºåªè½åå®ä¾è¿è¡ã
[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
static SingleInstanceManager manager;
/// <summary>
/// åºç¨ç¨åºç主å
¥å£ç¹ã
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
manager = new SingleInstanceManager(new Form5());
manager.Run(args);
}
public static void ShowForm(Form Nform, bool closeOldOne = true)
{
manager.ChangeForm(Nform, closeOldOne);
}
public class SingleInstanceManager : WindowsFormsApplicationBase
{
ApplicationContext app;
public SingleInstanceManager(Form mainForm)
{
this.IsSingleInstance = true;
app = new ApplicationContext();
app.MainForm = mainForm;
}
protected override bool OnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgs e)
{
Application.Run(app);
return false;
}
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
{
base.OnStartupNextInstance(eventArgs);
SetForegroundWindow(app.MainForm.Handle);
ShowWindow(app.MainForm.Handle, 4);
}
public void ChangeForm(Form newForm, bool closeOldOne = true)
{
if (app.MainForm == newForm) return;
Form tem = app.MainForm;
tem.Hide();
app.MainForm = newForm;
newForm.Show();
if (closeOldOne) tem.Close();
}
}
åå®ä¾çç±»ä¸æä¸ä¸ªåéApplicationContextï¼åºç¨ç¨åºçº¿ç¨çä¸ä¸æï¼è¿ä¸ªåéæ¯ä¸ºäºåæ¢çªå£è设计çãå ·ä½å®ç°ä»£ç çä¸é¢çChangeFormã
è°ç¨æ¶ï¼ä¾å¦ä¸é¢çForm5ä¸æä¸ä¸ªæé®ï¼æå¼æ°çªå£Form6ï¼åï¼
private void button1_Click(object sender, EventArgs e)
{
Program.ShowForm(new Form6());
}
åªéè¦è¿æ ·è°ç¨å°±è½å¤åæ¢çªå£ï¼å ³éForm5ï¼è约èµæºã