请C#高手帮忙解决两个的窗体之间的问题!在线等!万分火急,请各位高手帮帮忙!谢谢了!

时间:2021-05-14 20:44:23
C#
程序开始运行有一主窗体:MainForm,在MainForm窗体上有个按钮叫做“新建”,点击“新建”就弹出一个新建数据库的窗体AddFile。在AddFile窗体上有两个按钮,“确定”和“取消”,点击“确定”,就新建数据库成功,成功之后MainForm窗体上的所有控件将激活,(原先是灰色的!不能用)。如果点击AddFile窗体上的“取消”呢!则MainForm窗体上的其他按钮是灰色的不变!
 不知道我这样描述各位能不能看的明白!我在线等!有点着急!如果看不明白我可以当场给你解释!
拜托各位高手帮帮忙啊!

27 个解决方案

#1


AddFile窗体里面

确定按钮事件里面建数据库
如果建成功了,调用DialogResult = DialogResult.OK;
如果没成功,可以提示重新键,或者用DialogResult = DialogResult.Cancel;

取消按钮里面用DialogResult = DialogResult.Cancel;

MainForm里面

AddFile frm = new AddFile();
if (frm.DialogResult == DialogResult.OK)
{
激活所有控件
}

#2


你有没有新建数据库的方法实现?用的什么数据库(是SQL还是ACCESS...)?

void btnNewDB_Click(object sender,EventArgs e)
{
 this.SetEnabled(false);
 AddFileForm frm = new AddFileForm()
 using(frm)
 {
  if(frm.ShowDialog(this)==DialogResult.OK)
  {
    string dbFile = frm.GetDBFile;//你的AddFileForm 选择一个数据库名,想想应该来自TextBox.Text
    if(System.IO.File.Exists(dbFile)==false)return;//可以抛错误;

    //...创建数据库的代码,由于不知道你用的什么数据库,这里不写代码.
    this.SetEnabled(true);
    //...
  }
 }

 void SetEnabled(bool state)
 {
   this.mainMenu.MenuItems[0].Enabled = state;//也是示例,设置一些菜单,按钮的可用状态.
    //...
 }
}


#3


通过AddFile窗体上按钮的返回值DialogResult实现,当按"确定"时返回OK;按下"取消"时返回cancel.然后在MainForm中判断窗体的返回值,操作控件是否激活。
好像显示AddFile要用ShowDialog();

#4


判断frm.ShowDialog(this)==DialogResult.OK 就行了,后面就是激活控件了

#5


楼主看好了,代码如下:

首先在ADDFILE窗体文件中定义一个委托:public delegate void eventinfo(int i);
再定义一个事件:public event eventinfo connection;
这里如果你的建立数据库的函数如果有返回值的话(比如成功返回1不成功返回0)那么:
if(新建数据库函数==1)
{
if(this.connection!=null)
this.connection(1);
}
else
{
if(this.connection!=null)
this.connection(0);
}

接下来在MAIN窗体中的新建按钮的单击事件中:

AddFile addfile=new AddFile();
addfile.eventinfo+=delegate(int i)
{
if(i==1)
激活所有窗体;
else
窗体继续保持灰色不可用状态;
};
addfile.show();

关键代码就在这里了,不知楼主是不是需要这样的代码!

#6


楼主也可以把这里改成你说的:
点击新建按钮: 
if(this.connection!=null) 
this.connection(1);  
点击取消按钮:
if(this.connection!=null) 
this.connection(0); 




#7


连接数据成功
  按钮可以使用
如果连接数据库不成功
  按钮仍是灰色

#8


我忘记说了!MainForm是主窗体。AddFile是子窗体!,怎么样点击子窗体的事件来控制主窗体的按钮是否可用啊 !
 

#9


建立的是ACCESS数据库!

#10



void btnNewDB_Click(object sender,EventArgs e)
{
this.SetEnabled(false);
AddFileForm frm = new AddFileForm()
frm.MdiParent= this;
frm.Show();
}

public void SetEnabled(bool state)
 {
   this.mainMenu.MenuItems[0].Enabled = state;//也是示例,设置一些菜单,按钮的可用状态.
    //...
 }

public class AddFile : Form
{
  //...

 void btnOK_Click(object sender,EventArgs e)
 {
    string dbFile = this.GetDBFile;//选择的数据库名,想想应该来自TextBox.Text
    if(System.IO.File.Exists(dbFile)==false)return;//可以抛错误;

    //...创建数据库的代码,由于不知道你用的什么数据库,这里不写代码.
    //if(this.CreateDB()==true)
    ((mainForm)this.MdiParent).SetEnabled(true);
    //...
  }
 }
}

#11


你可以为主窗体设置属性,AddFile窗体里面来设置这个属性即可。

#12


引用 8 楼 zjh104517300 的回复:
我忘记说了!MainForm是主窗体。AddFile是子窗体!,怎么样点击子窗体的事件来控制主窗体的按钮是否可用啊 ! 


我写的那个方法不就是你要的功能吗?

#13


在AddFile窗体加载时声明:
确定按钮.DialogResult = DialogResult.OK
取消按钮.DialogResult = DialogResult.Cancel
在MainForm新建按钮事件里面
AddFile f=new AddFile()
f.ower=this;
f.ShowDialog();
if(f.DialogResult ==DialogResult .ok)
{
//你AddFile点击确定时要执行的东西
//根据你的要求可以判断
if(创建成功)
MainForm上的所有控件的Enabled=false;
else
MainForm上的所有控件的Enabled=true;

}
else
{
//AddFile点击取消时执行的东西
//根据你的要求可以让MainForm上的所有控件的Enabled=true;
}

#14


楼主按我上面的步骤做,可以实现你要的功能

#15


设置那个属性才是呀!都快急死了!都尝试了!就是不行!各位!帮帮忙啊 !

#16


给你说了,按我13楼的方法做,可以实现的,我也这么做的

#17


你的可以吗!
我的运行怎么就这句话就过不了!
确定按钮.DialogResult = DialogResult.OK ---无法对属性所引起赋值---只读,
取消按钮.DialogResult = DialogResult.Cancel ---无法将类型隐式 转换等错误啊 !哥哥!



#18


 BtnOK.DialogResult = DialogResult.OK;
BtnCancel.DialogResult = DialogResult.Cancel;

#19


你在窗体加载的时候赋这个啊
我所有窗体控制都这么做的,我不信还有问题

#20


谢谢了!是我的错误!嘿嘿!不好意思!

#21


委托  不会用委托 请楼主跟帖说明

#22


参考一下blog.csdn.net/yistudio

#23


引用 21 楼 fengyupeng 的回复:
委托  不会用委托 请楼主跟帖说明


我写的方法就是委托啊,可是那个楼主似乎连听都没听过委托似的!

#24


可以直接给各对话框,根据选择返回的布尔值进行控件激活;
也可在AddFileForm中定义个可外部访问的布尔变量
在显示AddFileForm后选择并把结果给变量,然后隐藏窗体,取变量值给主窗体激活控件,然后关闭AddFileForm;
也可在主窗体定义事件,在AddFileForm窗体触发事件,激活控件;
第一个最简单实用

#25


用委托,委托就是C#处理这种情况而创造的
AddFile窗体代码
private void button1_Click(object sender, System.EventArgs e)
{
this.receive();
}

// 创建一个委托接收数据
   public delegate void Receive();
   // 将创建的委托和特定事件关联,在这里特定的事件为receiver
   public event Receive receive;

MainForm窗体代码
Form2 f=new Form2();
f.Show();
f.receive+=new Form2.Receive(f_receive);
private void f_receive()
{
this.button1.Enabled=false;
}
如果你是初学者是很难理解委托的,其实很多笨方法也是可以实现的,多想想

#26


引用 23 楼 xu_2007 的回复:
引用 21 楼 fengyupeng 的回复:
委托  不会用委托 请楼主跟帖说明 
 

我写的方法就是委托啊,可是那个楼主似乎连听都没听过委托似的!


呵呵;我没仔细看;SORRY

#27


各位都是高手啊

#1


AddFile窗体里面

确定按钮事件里面建数据库
如果建成功了,调用DialogResult = DialogResult.OK;
如果没成功,可以提示重新键,或者用DialogResult = DialogResult.Cancel;

取消按钮里面用DialogResult = DialogResult.Cancel;

MainForm里面

AddFile frm = new AddFile();
if (frm.DialogResult == DialogResult.OK)
{
激活所有控件
}

#2


你有没有新建数据库的方法实现?用的什么数据库(是SQL还是ACCESS...)?

void btnNewDB_Click(object sender,EventArgs e)
{
 this.SetEnabled(false);
 AddFileForm frm = new AddFileForm()
 using(frm)
 {
  if(frm.ShowDialog(this)==DialogResult.OK)
  {
    string dbFile = frm.GetDBFile;//你的AddFileForm 选择一个数据库名,想想应该来自TextBox.Text
    if(System.IO.File.Exists(dbFile)==false)return;//可以抛错误;

    //...创建数据库的代码,由于不知道你用的什么数据库,这里不写代码.
    this.SetEnabled(true);
    //...
  }
 }

 void SetEnabled(bool state)
 {
   this.mainMenu.MenuItems[0].Enabled = state;//也是示例,设置一些菜单,按钮的可用状态.
    //...
 }
}


#3


通过AddFile窗体上按钮的返回值DialogResult实现,当按"确定"时返回OK;按下"取消"时返回cancel.然后在MainForm中判断窗体的返回值,操作控件是否激活。
好像显示AddFile要用ShowDialog();

#4


判断frm.ShowDialog(this)==DialogResult.OK 就行了,后面就是激活控件了

#5


楼主看好了,代码如下:

首先在ADDFILE窗体文件中定义一个委托:public delegate void eventinfo(int i);
再定义一个事件:public event eventinfo connection;
这里如果你的建立数据库的函数如果有返回值的话(比如成功返回1不成功返回0)那么:
if(新建数据库函数==1)
{
if(this.connection!=null)
this.connection(1);
}
else
{
if(this.connection!=null)
this.connection(0);
}

接下来在MAIN窗体中的新建按钮的单击事件中:

AddFile addfile=new AddFile();
addfile.eventinfo+=delegate(int i)
{
if(i==1)
激活所有窗体;
else
窗体继续保持灰色不可用状态;
};
addfile.show();

关键代码就在这里了,不知楼主是不是需要这样的代码!

#6


楼主也可以把这里改成你说的:
点击新建按钮: 
if(this.connection!=null) 
this.connection(1);  
点击取消按钮:
if(this.connection!=null) 
this.connection(0); 




#7


连接数据成功
  按钮可以使用
如果连接数据库不成功
  按钮仍是灰色

#8


我忘记说了!MainForm是主窗体。AddFile是子窗体!,怎么样点击子窗体的事件来控制主窗体的按钮是否可用啊 !
 

#9


建立的是ACCESS数据库!

#10



void btnNewDB_Click(object sender,EventArgs e)
{
this.SetEnabled(false);
AddFileForm frm = new AddFileForm()
frm.MdiParent= this;
frm.Show();
}

public void SetEnabled(bool state)
 {
   this.mainMenu.MenuItems[0].Enabled = state;//也是示例,设置一些菜单,按钮的可用状态.
    //...
 }

public class AddFile : Form
{
  //...

 void btnOK_Click(object sender,EventArgs e)
 {
    string dbFile = this.GetDBFile;//选择的数据库名,想想应该来自TextBox.Text
    if(System.IO.File.Exists(dbFile)==false)return;//可以抛错误;

    //...创建数据库的代码,由于不知道你用的什么数据库,这里不写代码.
    //if(this.CreateDB()==true)
    ((mainForm)this.MdiParent).SetEnabled(true);
    //...
  }
 }
}

#11


你可以为主窗体设置属性,AddFile窗体里面来设置这个属性即可。

#12


引用 8 楼 zjh104517300 的回复:
我忘记说了!MainForm是主窗体。AddFile是子窗体!,怎么样点击子窗体的事件来控制主窗体的按钮是否可用啊 ! 


我写的那个方法不就是你要的功能吗?

#13


在AddFile窗体加载时声明:
确定按钮.DialogResult = DialogResult.OK
取消按钮.DialogResult = DialogResult.Cancel
在MainForm新建按钮事件里面
AddFile f=new AddFile()
f.ower=this;
f.ShowDialog();
if(f.DialogResult ==DialogResult .ok)
{
//你AddFile点击确定时要执行的东西
//根据你的要求可以判断
if(创建成功)
MainForm上的所有控件的Enabled=false;
else
MainForm上的所有控件的Enabled=true;

}
else
{
//AddFile点击取消时执行的东西
//根据你的要求可以让MainForm上的所有控件的Enabled=true;
}

#14


楼主按我上面的步骤做,可以实现你要的功能

#15


设置那个属性才是呀!都快急死了!都尝试了!就是不行!各位!帮帮忙啊 !

#16


给你说了,按我13楼的方法做,可以实现的,我也这么做的

#17


你的可以吗!
我的运行怎么就这句话就过不了!
确定按钮.DialogResult = DialogResult.OK ---无法对属性所引起赋值---只读,
取消按钮.DialogResult = DialogResult.Cancel ---无法将类型隐式 转换等错误啊 !哥哥!



#18


 BtnOK.DialogResult = DialogResult.OK;
BtnCancel.DialogResult = DialogResult.Cancel;

#19


你在窗体加载的时候赋这个啊
我所有窗体控制都这么做的,我不信还有问题

#20


谢谢了!是我的错误!嘿嘿!不好意思!

#21


委托  不会用委托 请楼主跟帖说明

#22


参考一下blog.csdn.net/yistudio

#23


引用 21 楼 fengyupeng 的回复:
委托  不会用委托 请楼主跟帖说明


我写的方法就是委托啊,可是那个楼主似乎连听都没听过委托似的!

#24


可以直接给各对话框,根据选择返回的布尔值进行控件激活;
也可在AddFileForm中定义个可外部访问的布尔变量
在显示AddFileForm后选择并把结果给变量,然后隐藏窗体,取变量值给主窗体激活控件,然后关闭AddFileForm;
也可在主窗体定义事件,在AddFileForm窗体触发事件,激活控件;
第一个最简单实用

#25


用委托,委托就是C#处理这种情况而创造的
AddFile窗体代码
private void button1_Click(object sender, System.EventArgs e)
{
this.receive();
}

// 创建一个委托接收数据
   public delegate void Receive();
   // 将创建的委托和特定事件关联,在这里特定的事件为receiver
   public event Receive receive;

MainForm窗体代码
Form2 f=new Form2();
f.Show();
f.receive+=new Form2.Receive(f_receive);
private void f_receive()
{
this.button1.Enabled=false;
}
如果你是初学者是很难理解委托的,其实很多笨方法也是可以实现的,多想想

#26


引用 23 楼 xu_2007 的回复:
引用 21 楼 fengyupeng 的回复:
委托  不会用委托 请楼主跟帖说明 
 

我写的方法就是委托啊,可是那个楼主似乎连听都没听过委托似的!


呵呵;我没仔细看;SORRY

#27


各位都是高手啊