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

解决方案 »

  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.   

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

  8.   


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

  9.   

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

  10.   

    在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;
    }
      

  11.   

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

  12.   

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

  13.   

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

  14.   

    用委托,委托就是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;
    }
    如果你是初学者是很难理解委托的,其实很多笨方法也是可以实现的,多想想
      

  15.   


    呵呵;我没仔细看;SORRY