To Henry:关闭对话框后如何刷新主窗口?

lawboy 2002-09-27 11:42:30
您可能误解我的意思了,我的问题具体如下:
在主窗口中,单击“添加”,出现对话框,成功添加数据后(数据库中已有该信息,说明已经成功添加),自动关闭对话框,回到主窗口,然后主窗口没有显示出最新的数据行。
请问关闭对话框后,如何自动刷新主窗口?
不知我是否说清楚了,希望得到您的解答!谢谢!
------------------------------------
[学习无忧网]----IT人的网上学院
http://www.51study.net
------------------------------------
...全文
56 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdspace 2002-10-12
  • 打赏
  • 举报
回复
Latitude(Henry) 的方法不通用,而且从lawboy(杰瑞) 的困惑可以看出,该程序似乎存在实例引用方面的问题。
其实这样的问题,首先要考虑的是FORM1的刷新问题要自己解决,不能依赖FORM2的调用,因此需要构造如下的调用结构:

FORM2:
Public Function Run(Para) AS int32
(
'init para
检查参数,如果参数不符合条件,退出去,这样FORM2不会被显示
ME.ShowDialog

if OK
Run = 0
else
Run = 其他用户自定义的返回码,如错误码,未更新任何操作等等
处理其他返回参数,如装配字典
)

在FORM1中的调用

Dim oForm as New FORM2
Dim nRet = oForm.Run()

select case nRet
case 0
DataGrid.Refresh
case else
Msgbox

这样,FORM2对调用者就不关心了,他只关心自己实现的是什么功能

如果调用者需要FORM2返回更多的参数,在RUN的参数表中包含一些BYREF的参数,通常,用一个字典类最好


这种思路常用于:

1. 弹出一个对话框让用户从一个列表中确定一个或多个选择
2. 调用一个特定的FORM来完成特殊的编辑
lawboy 2002-09-29
  • 打赏
  • 举报
回复
非常感谢您的解答!问题我已经解决了,但是又出现了一个新的问题,具体情况如下:
我实际上是用了3个Form,主窗体Form1、DataGrid窗体Form2、对话框Form3,
在Form1中调用Form2,调用Form3,之后关闭Form3,在Form1中显示最新的结果。是否要再来一遍上述的用法?有没有其他的方法?非常感谢!!!
Private Sub MShowTutor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MShowTutor.Click
Dim Form2 As New Form2()
'Form2.MdiParent = Me
'Form2.Show()
'用上述2行,显示的最新数据在另一窗口中,若用下述2行,最新的数据仍没有显示
Form2.DefInstance.MdiParent = Me
Form2.DefInstance.Show()
End Sub
lawboy 2002-09-29
  • 打赏
  • 举报
回复
又认真看了一遍您的文章,测试自己的程序,发现如下问题:
第一次添加后的数据可以显示出,
之后在添加的数据不能显示出来,不知为什么?
在初始化之后我也加入了如下语句:
'清除数据集
Me.dsTutor1.Clear()
'填充数据集
Me.daTutor.Fill(Me.dsTutor1.TutorInfo)
另外,使用Form2.DefInstance.Show()、Form2.DefInstance.Refresh()、Form2.DefInstance.Update()都可以显示最新的数据,不知又什么区别?
Latitude 2002-09-29
  • 打赏
  • 举报
回复
我的文章里不是这样写的//hehe
不用再定义dim form2 as new form2()了
而是直接用Form2.Definstance代替vb6中那个form2全局实例化的作用。
再看一下文章,再试一下。

----
 Good Luck!
by Henry
Latitude 2002-09-28
  • 打赏
  • 举报
回复
这有什么不明白的?
弹出的那个对话框设为form2吧,主窗体设为form1。
我想你form1中的数据是存放在form1中定义的dataset/datatable中的吧?
那么,你是要用form2的命令去更改form1中的dataset的值,不然就反映不到form1中去对吧?
如果是这样,你就应该把我给你的链接中的三篇文章都看一下。这牵扯到类与对象的问题。
dataset是局部变量,你不可能在另一类中直接控制另一个类中的局部变量。
解决方法是:
1.用我文章中的第二种方法将你的程序变为单件模式,就可以在form2中直接引用form1中的dataset了。
2.或者将dataset变为全局变量,到一个module里去定义。这种方式应该简单一点。


----
有问题请继续回复。
                by Henry
lawboy 2002-09-28
  • 打赏
  • 举报
回复
还是不太明白!
有没有具体的列子?
谢谢!
Latitude 2002-09-27
  • 打赏
  • 举报
回复
知道了,是两个窗口中传递数据或消息的问题,对吧。
那么看一下我的一篇文档先:
http://www.csdn.net/develop/Article/15/15147.shtm
会得到解决的思路的,有问题请回复。

--
by Henry
Montaque 2002-09-27
  • 打赏
  • 举报
回复
关闭之前调用一句Datagrid.refresh之类的话

---------------------------------------------------------
Feeling

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧