需求:公司有一个产品库表单(ProductForm),可以让出仓单(Form1),客户订单(Form2),发货单(Form3)选择公司产品使用.我现在的做法:在产品库表单(ProductForm)中设一个静态变量产品ID,当Form1(或Form2,Form3)用下面的代码.
{
....
//打开产品库选择子窗体
Form ProductForm = new ProductForm();
ProductForm.ShowDialog();   在ProductForm中选择产品,得到ID后关闭ProductForm窗体.再用Form1(或Form2,Form3)的某个方法增把ID加到选择的产品列表中.
}产生的问题:选择产品后要关闭ProductForm模态窗体后才能刷新父窗体产品列表.
如何设计才能一边可以择选产品列表,不关闭子窗体ProductForm,又可以增加产品到父窗体呢?谢谢!

解决方案 »

  1.   

    交窗体不需要公共方法,只用private声明一个方法就可以了。在调用子窗体的时候这样写
    Form ProductForm = new ProductForm();
    ProductForm.ShowDialog(this);   
    在子窗体需要调用父窗体的方法时:
    父窗体 newform1 = (父窗体)this.Owner ;
    newform1.父窗体的方法。
      

  2.   

    “用private声明一个方法”?newform1.父窗体的方法。既然是private的,上面这句又如何调用呢?
      

  3.   

    谢谢两位.
    T0  s5689412(华君),你正说中要害.其实我就是不想把一个实例传递过去,这样的话相当于一个Form要对应一个子窗体.想偷偷懒,省点事.能让多个表单共享,当然也不仅就是我上面所说的三个窗体来调用.To  ybbigepl() ,你所说的已是把父表单的全部对象已传过去.这样可能也不能多个(不固定)父窗体使用同一个产品选择子窗体了.不知道有没有更好的方法.可以只有一个产品库表单(ProductForm),供多个其他窗体使用的.
      

  4.   

    可能我对需求没有讲得太清楚,再补充说明一下:如果有十个窗体要用到产品选择,那我不得要做十个产品选择子窗体了?子窗体一但有问题,我得修改十遍了?
    我目的就是不想做那么多相同的产品选择产品库表单(ProductForm). 只用一个供其他的使用就可以了.
      

  5.   

    很简单,在你的 ProductForm 创建一个属性或声明一个变量,你可以通过调用 ProductForm 时给这个变量fu值, 然后在你的 ProductForm 中再用 switch()的方式进行运行不同的代码段实现。
    switch(myValue)
    {
    case 0:
    frmMain frmMain1 = (frmMain)this.Owner ;
    frmMain1.showData ();
    case 1:
    frmMain1 frmMain1 = (frmMain1)this.Owner ;
    frmMain1.showData ();
    }
      

  6.   

    不好意思,需要把方法声明为: public,因为在我的程序中采用了一个抽象我自己没注意,谢谢 s5689412(华君) 提醒。
      

  7.   

    到目前,现在可能是按 ybbigepl() 的CASE方法去做是最好的选择了.增加一个调用表单就增加一个CASE.