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

我是一只小小小的菜鸟 2008-11-24 09:05:47
C#
程序开始运行有一主窗体:MainForm,在MainForm窗体上有个按钮叫做“新建”,点击“新建”就弹出一个新建数据库的窗体AddFile。在AddFile窗体上有两个按钮,“确定”和“取消”,点击“确定”,就新建数据库成功,成功之后MainForm窗体上的所有控件将激活,(原先是灰色的!不能用)。如果点击AddFile窗体上的“取消”呢!则MainForm窗体上的其他按钮是灰色的不变!
不知道我这样描述各位能不能看的明白!我在线等!有点着急!如果看不明白我可以当场给你解释!
拜托各位高手帮帮忙啊!
...全文
230 点赞 收藏 27
写回复
27 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
arraychen 2008-11-28
各位都是高手啊
回复
covis 2008-11-24
你可以为主窗体设置属性,AddFile窗体里面来设置这个属性即可。
回复
3tzjq 2008-11-24

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);
//...
}
}
}

回复
建立的是ACCESS数据库!
回复
我忘记说了!MainForm是主窗体。AddFile是子窗体!,怎么样点击子窗体的事件来控制主窗体的按钮是否可用啊 !
回复
啊兵 2008-11-24
连接数据成功
按钮可以使用
如果连接数据库不成功
按钮仍是灰色
回复
xu_2007 2008-11-24
楼主也可以把这里改成你说的:
点击新建按钮:
if(this.connection!=null)
this.connection(1);
点击取消按钮:
if(this.connection!=null)
this.connection(0);




回复
xu_2007 2008-11-24
楼主看好了,代码如下:

首先在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();

关键代码就在这里了,不知楼主是不是需要这样的代码!
回复
xinyun80 2008-11-24
判断frm.ShowDialog(this)==DialogResult.OK 就行了,后面就是激活控件了
回复
wesleyluo 2008-11-24
通过AddFile窗体上按钮的返回值DialogResult实现,当按"确定"时返回OK;按下"取消"时返回cancel.然后在MainForm中判断窗体的返回值,操作控件是否激活。
好像显示AddFile要用ShowDialog();
回复
3tzjq 2008-11-24
你有没有新建数据库的方法实现?用的什么数据库(是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;//也是示例,设置一些菜单,按钮的可用状态.
//...
}
}


回复
cpio 2008-11-24
AddFile窗体里面

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

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

MainForm里面

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

回复
fengyupeng 2008-11-24
[Quote=引用 23 楼 xu_2007 的回复:]
引用 21 楼 fengyupeng 的回复:
委托 不会用委托 请楼主跟帖说明


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

呵呵;我没仔细看;SORRY
回复
编号27149 2008-11-24
用委托,委托就是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;
}
如果你是初学者是很难理解委托的,其实很多笨方法也是可以实现的,多想想
回复
dai78 2008-11-24
可以直接给各对话框,根据选择返回的布尔值进行控件激活;
也可在AddFileForm中定义个可外部访问的布尔变量
在显示AddFileForm后选择并把结果给变量,然后隐藏窗体,取变量值给主窗体激活控件,然后关闭AddFileForm;
也可在主窗体定义事件,在AddFileForm窗体触发事件,激活控件;
第一个最简单实用
回复
xu_2007 2008-11-24
[Quote=引用 21 楼 fengyupeng 的回复:]
委托 不会用委托 请楼主跟帖说明
[/Quote]

我写的方法就是委托啊,可是那个楼主似乎连听都没听过委托似的!
回复
yistudio 2008-11-24
参考一下blog.csdn.net/yistudio
回复
fengyupeng 2008-11-24
委托 不会用委托 请楼主跟帖说明
回复
谢谢了!是我的错误!嘿嘿!不好意思!
回复
wangping_li 2008-11-24
你在窗体加载的时候赋这个啊
我所有窗体控制都这么做的,我不信还有问题
回复
加载更多回复
相关推荐
发帖
C#
创建于2007-09-28

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2008-11-24 09:05
社区公告

让您成为最强悍的C#开发者