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" process
if (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);
}
}
}
}
}