做了一套系统,一个是配置数据库程序:databaseSet.exe 窗体名称: 数据库配置
一个是主程序: LifeManage.exe 窗体名称:日用管理系统完成功能:
当配置数据库程序启动时,检测如果发现"日用管理系统"现在运行,则提示“日用管理系统,请关闭后再运行本程序”如果使用FindWindow实现,是可以发现"日用管理系统"这样的窗体名称的,但是LifeManage.exe运行时作为父窗体,点了其他的功能后就会出现这样的窗体标题:日用管理系统-分类管理
日用管理系统-数据录入
日用管理系统-......
..................因为子模块有很多,能否很方便地实现上面这个功能呢,请大家帮助。
一个是主程序: LifeManage.exe 窗体名称:日用管理系统完成功能:
当配置数据库程序启动时,检测如果发现"日用管理系统"现在运行,则提示“日用管理系统,请关闭后再运行本程序”如果使用FindWindow实现,是可以发现"日用管理系统"这样的窗体名称的,但是LifeManage.exe运行时作为父窗体,点了其他的功能后就会出现这样的窗体标题:日用管理系统-分类管理
日用管理系统-数据录入
日用管理系统-......
..................因为子模块有很多,能否很方便地实现上面这个功能呢,请大家帮助。
解决方案 »
- DataGridview 是winform的如何给DataGridview最后一行加上合计或者统计行呢?统计总金额?
- 用C# WPF 怎么做像迅雷那样的悬浮工具条,有大侠出来指点一下吧:
- 如何判定datagridview中用户输入的字符类型
- 一个奇怪的现象,大家实验下,谁能解释为什么
- 麻烦问一下:在C#中怎样获得当前运行行的行号??????
- smtp问题
- 朋友们,谁有c#中windows程序(c/s程序)水晶报表的原代码
- 128MB内存能不能玩得起C#???
- 非托管函数的调用?
- 关于C#的问题
- 在VS2005 WinForm中,用户自定义控件的属性(返回一个自定义类<可序列化>),怎样在拖动到新窗体中时,不自动向窗体的资源文件中添加资源?
- NUnit问题一则
for(int i=0;i<curProcesses.Length;i++)
{
if(curProcesses[i].Name = "LifeManage")
{
MessageBox.Show("“日用管理系统,请关闭后再运行本程序”");
return ;
}
}
public static Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
//判断进程里是否有该执行文件的进程
foreach (Process process in processes)
{
if (process.Id != current.Id)
{
//确定不是当前exe的进程
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
{
//返回进程名
return process;
}
}
}
//没有发现
return null;
}
写个打开子窗体的函数:
/// <summary>
/// 打开子窗体
/// </summary>
/// <param name="ChildTypeString"></param>
private void OpenWindow( string ChildTypeString )
{
Form myChild = null;
if( !ContainMDIChild( ChildTypeString ) )
{
// 获得当前进程集合
Assembly assembly = Assembly.GetExecutingAssembly();
// 用string类型来创建data类型
Type typForm = assembly.GetType( ChildTypeString );
// 用"InvokeMember"类型方法来创建对象
Object obj = typForm.InvokeMember(
null,
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.CreateInstance,
null,
null,
null );
// show子窗体
if( obj != null )
{
myChild = obj as Form;
myChild.MdiParent = this;
myChild.Show();
myChild.Focus();
}
}
}
/// <summary>
/// 用特定字符串查询子窗体
/// </summary>
/// <param name="ChildTypeString"></param>
/// <returns></returns>
private bool ContainMDIChild( string ChildTypeString )
{
Form myMDIChild = null;
foreach(Form f in this.MdiChildren)
{
if( f.GetType().ToString() == ChildTypeString )
{
// 找到
myMDIChild = f;
break;
}
} // 显示已存在窗体
if( myMDIChild != null)
{
myMDIChild.TopMost = true;
myMDIChild.Show();
myMDIChild.Focus();
return true;
}
else
return false;
}然后打开子窗体用:
OpenWindow(typeof(你的子窗体名称).ToString());
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/cpref6/html/T_System_Diagnostics_Process_Members.htm