Program:
using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Runtime.InteropServices;using System.Threading;using System.Windows.Forms;namespace SASPGCalcBookTool{public static class Program{public static int Msp { get; set; }[DllImport("user32.dll")]private static extern bool SetForegroundWindow(IntPtr hWnd);[DllImport("user32.dll")]private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);[DllImport("user32.dll")]private static extern bool IsIconic(IntPtr hWnd);private const int SW_RESTORE = 9;/// <summary>/// c# 进程窗口显示并前置/// </summary>public static void RaiseOtherProcess(){Process proc = Process.GetCurrentProcess();Process.GetProcesses();foreach (Process otherProc in Process.GetProcessesByName(proc.ProcessName)){//ignore "this" processif (proc.Id != otherProc.Id){// Found a "same named process".// Assume it is the one we want brought to the foreground.// Use the Win32 API to bring it to the foreground.IntPtr hWnd = otherProc.MainWindowHandle;if (IsIconic(hWnd)){ShowWindowAsync(hWnd, 9);}SetForegroundWindow(hWnd);break;}}}/// <summary>/// 应用程序的主入口点。/// </summary>[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);bool createdNew;Mutex instance = new Mutex(true, "MainFrm", out createdNew);if (createdNew){Application.Run(new MainFrm());instance.ReleaseMutex();//如果需要窗体重启,并出现问题,将这句改为//instance.Dispose();}else{RaiseOtherProcess();Application.Exit();}}}}
主窗体:
using SASPGCalcBookTool.SubFrms;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace SASPGCalcBookTool{public partial class MainFrm : Form{public static Form Mdifrm { set; get; }public static Form Sdfrm { set; get; }public static Form Hdfrm { set; get; }public MainFrm(){InitializeComponent();}private void toolStripMenuItem2_Click(object sender, EventArgs e){if (Mdifrm == null || Mdifrm.IsDisposed){Mdifrm = new MainDataIn{MdiParent = this};Mdifrm.Show();}else{if (Mdifrm.WindowState == FormWindowState.Minimized){Mdifrm.WindowState = FormWindowState.Normal;}}Mdifrm.Activate();}private void toolStripMenuItem3_Click(object sender, EventArgs e){if (Sdfrm == null || Sdfrm.IsDisposed){Sdfrm = new ShellData{MdiParent = this};Sdfrm.Show();}else{if (Sdfrm.WindowState == FormWindowState.Minimized){Sdfrm.WindowState = FormWindowState.Normal;}}Sdfrm.Activate();}}}
子窗体1:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.Windows.Forms;namespace SASPGCalcBookTool.SubFrms{public partial class MainDataIn : Form{public int Msp { get; set; }public MainDataIn(){InitializeComponent();}private void MainDataIn_Load(object sender, EventArgs e){MainShellPart.SelectedIndex = 0;}private void MainShellPart_SelectedIndexChanged(object sender, EventArgs e){Program.Msp= int.Parse(MainShellPart.Text);if (MainFrm.Sdfrm == null || MainFrm.Sdfrm.IsDisposed){return;}DataGridView ShlPartData = (DataGridView)MainFrm.Sdfrm.Controls["ShlPartData"];int rown = int.Parse(MainShellPart.Text), n = ShlPartData.Rows.Count;if (rown > n){for (int i = n + 1; i <= rown; i++){int index = ShlPartData.Rows.Add();ShlPartData.Rows[index].Cells[0].Value = "筒体段" + i;}}else if (rown < n){for (int i = n; i > rown; i--){ShlPartData.Rows.RemoveAt(i-1);}}}}}
子窗体2:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using SASPGCalcBookTool.SubFrms;namespace SASPGCalcBookTool.SubFrms{public partial class ShellData : Form{public ShellData(){InitializeComponent();}private void ShellData_Load(object sender, EventArgs e){for (int i = 1; i <= Program.Msp; i++){int index = ShlPartData.Rows.Add();ShlPartData.Rows[index].Cells[0].Value = "筒体段" + i;}}public void _ChangShlPartDataRow(int rown){int n = ShlPartData.Rows.Count;if (rown > n){for (int i = n+1; i <= rown; i++){int index = ShlPartData.Rows.Add();ShlPartData.Rows[index].Cells[0].Value = "筒体段" + i;}}else if (rown < n){for (int i = n; i > rown; i--){ShlPartData.Rows.RemoveAt(i);}}}}}
