使用CallByName“代替”模式窗口

  模式窗口有时候用起来确实很方便,比如说增加一条资料的时候,弹出一个模式窗口,增加完成后继续执行下面的代码,有时候用来取得新增加的值,如:

...
frmClient.Show vbModal
If 增加成功 then
取得新值
End If
...

但是如果使用MDI窗口的话,就麻烦了,因为MDI子窗体不允许以模式窗口显示,所以用上面的方法就行不通了。

  于是我使用CallByName加一个全局的变量来实现以上功能。

Private Type SelectInfos
   blnAddNewReturn                  As Boolean                    ' 是否增加完后返回信息
   frmSource                        As Form                       ' 源调用窗口
   strFunctionName                  As String                     ' 当返回参数时要执行的函数/过程名称
End Type

Public guSelectInfos                As SelectInfos                ' 信息选择时用到

frmInfos

'// 注意一定要用Public的,否则在其他窗口里无法调用。
Public Sub LoadClientInfos(ByVal lngId as Long)
  '加载客户信息
End Sub

Private Sub AddNew()
...
         With guSelectInfos
            .blnAddNewReturn = True
            '// 设置源窗口
            Set .frmSource = Me
            '// 设置要调用的函数名称
            .strFunctionName = "LoadClientInfos"
            frmClient.Show
         End With
...
End Sub

frmClient

Private Function UpdateClient()
...
   '***************************************
   '** 判断是否为其他窗口调用时的新增,如果是则需要返回当前编号
   '***************************************
   With guSelectInfos
      If .blnAddNewReturn Then
         '// 调用源窗口内的函数返回值
         Call CallByName(.frmSource, .strFunctionName, VbMethod, lngID)
         .blnAddNewReturn = False
      End If
   End With
   '***************************************
...
End Function

  大致过程就是这样,虽然有点麻烦,不过总算也是一种解决方法。

时间: 2024-11-02 19:39:51

使用CallByName“代替”模式窗口的相关文章

如何在模式窗口关闭时刷新父窗口

父窗口|刷新 在项目经常会遇到这么一种情况,要在弹出的窗口里面修改父页面中的数据.本文以模式窗口为例,说明如何在更新模式窗口页面之后刷新父窗口的内容. 在一般的情况下,模式窗口的关闭并不会刷新父窗口,我们需要在打开模式窗口的javascript中添加额外的脚本来刷新他的父窗口.实现如下: string url = "ICManageAdd.aspx?ICID="+ICID+"&temp="+rd.Next().ToString()+"&Us

如何用请求字符串传值给用模式窗口打开的aspx页面

请求|页面|字符串|请求|字符串 模式窗口是一种方便的当前页面扩展的方式,但是aspx文件只能作为HTM文件的IFRAME才能用这种方式调用.同时,请求字符串也是一种方便常用的页面间传值的方法,那么怎么样使两者给合起来,就是实现如何用请求字符串传值给用模式窗口打开的aspx页面呢? 我们可以用JS脚本实现这种功能: 1.调用页面代码: <script language="javascript"> function GetCorrelativeItemId() { rdl =

模式窗口中提交数据的问题和解决

解决|数据|问题 在浏览器弹出的模式窗口提交数据时候遇到了这样的问题.首先模式窗口总是打开一个新的窗口,而不是刷新自身.其次关闭该模式窗口然后再打开,不能激发服务器端的 Page_Load 事件了. Google了下,解决办法如下: 1. 在弹出窗口的 标签中增加 ,这样解决了第一个问题.2. 在服务器端的 Page_Load 事件中增加下列语句: Response.Cache.SetNoServerCaching();Response.Cache.SetCacheability(System.

网页设计教程:网页模式窗口要适时使用

优点: ·减少使用空间 ·使后面的背景层模糊或者渐隐出现让用户的焦点集中在当前层. 什么时候使用(对话框等)模式窗口? ·图片/视频灯箱效果 ·联系表单窗口 ·注册.登录窗口,连贯的任务流(操作流程) ·警示对话框,直接在屏幕中央显示,用户不得不注意到他(而且页面的其他功能是置灰的,用户必须关闭其窗口才能继续下一步的操作,所以除非是对用户非常重要的信息的情况才使用)   ·帮助提示信息,使用弹出窗口,不用占据很大的页面空间,而且因为是作为页面零件的部分需要时才出现,所以并不会干扰用户浏览页面其他

[WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口

现象: 大家可以试试下面这个很有趣但会带来Defect的现象:当我们将子窗口按照ShowDialog()的方式显示出来的时候,很明显该窗口是模式化的(即主窗口等待该窗口的返回,主窗口将不相应用户输入),但如果此时将子窗口的Visibility设置成Visibility.Hidden来隐藏窗口,然后再将Visibility设置成Visibility.Visible来再次显示子窗口,此后子窗口便是非模式的了(即主窗口和子窗口一样相应用户输入) 案例: 当用户不操作软件达到一定的时间间隔后,软件会隐藏

如何使用非模式窗口打开外部程序

问题描述 如何使用非模式窗口打开外部程序 WPF调用外部键盘程序时焦点失去,现在想让键盘程序以非模式窗口打开,焦点继续存在 解决方案 参考:http://blog.csdn.net/xiaoyaofriend/article/details/7567108

网页中js弹出模式窗口并传值的问题

<script type="text/javascript"> //父窗体中打开模式窗口 function SelectClient(ctlName) { var arr = showModalDialog('ClientList.aspx?TypeSelect=ClientType_qy&ClientOwner=' +154 + '&DefaultValue=' + document.getElementById(ctlName).value, '', '

ModalPopupExtender模式窗口问题

问题描述 ModalPopupExtender此控件的作用就是弹出模式控件,但我页面中多加了一个TextBox,当弹出模式窗口时,这个文本框为什么还能输入东西呢,是哪个地方错了,请高手帮忙赐教,为谢! 解决方案 ###没有引用那个JS文件

js 模式窗口(模式对话框和非模式对话框)的使用介绍_基础知识

Javascript里面分模式对话框和非模式对话框,其实两者区别就是在对话框被关闭之前用户能否在同一页面的其他地方进行工作.比如"打开文件"对话框便是典型的模式对话框,在你对这个对话框做出动作才能对打开该对话框的程序进行其他操作,而非模式对话框则不必. 模式对话框:showModalDialog 非模式对话框:showModelessDialog vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures]