我有一个Form1,其中是combobox用来显示数据列表用的,且有一个按钮用来操作添加,当点击这个按钮的时候打开Form2(用showModal打开,TForm2.Create(Self).ShowModal;),我要在Form2中添加完数据在数据库中关闭窗口后刷新Form1中的combobox下拉显示增加的数据

解决方案 »

  1.   

    if form2.showmodel= mr_OK then
      cbb1.Items.Add('a');
      

  2.   

    有两种方法:一种:在FORM2的  close事件中直接写:   FORM1. cbb1.Items.Add(""" );
    定义全局变量:    在form2中给 全局变量赋值,FROM2 关闭后,在FORm1中引用。
             
      

  3.   

    说下思路吧:
    1、Form2负责维护数据,和Form1没关系
    2、Form2 关闭后Form1刷新下拉框的选项
    重点在这里
    Form1的按钮事件里
     Form2.Showmodal;
     Freeandnil(Form2); //Form2 将新选项添加到数据库就可以了,不要操作Form1,用完就释放掉
     ComboBox1.items.Clear; //清除旧的下拉框里的选项
     AddList事件; //此处从数据库里获取新的选项,这个事件可以在Form1.Show里使用,优化下代码清楚我的意思吗?
      

  4.   

    在Form中宣言一个刷新Combobox1的过程。
    Form2关闭时,调用Form1的 刷新Combobox1的过程。
      

  5.   

    更一般的方法可以用消息通知,Form2里保存数据到数据库成功了,发个消息通知Form1数据变化了,这样可以解耦Form2和Form1 的关联,也可以不限定Form1在什么事件里刷新数据。
    现在的Delphi支持观察者模式了(发布/订阅),很方便的。参考System.Messaging单元。
      

  6.   

    很简单啊,既然你的 Form1 uses 了 Form2,你在 Form2 的 Interface 里声明一个变量,把你需要刷新的值放在这里,Form2的OnClose里把值放到那里,Form1的 Form2.ShowModal 后就从那个变量取数据就是了
      

  7.   

    这个问题很简单,这么些就可以了:
    TForm2.Create(Self).ShowModal;
    在这里直接写你的刷新过程就行了
      

  8.   

    因为ShowModal;是模态显示,所以,关闭Form2才会执行后续代码,所以,在ShowModal;之后直接调用刷新过程即可