VB怎样在两个VB程序之间传递信息?

第1章 由随意编程转变为遵循软件工程原则

1.1 规则1-1:最大限度地发挥VB编译期类型检查的潜能

1.3 规则1-3:编译期条件不同时,考虑使用#If语句

1.4 规则1-4:抛出错误以提示异常

1.5 规则1-5:有效的错误处理:局部捕获,全局处理

1.6 规则1-6:了解类型和类的区别

1.7 规则1-7:采用面向对象的设计方法

1.8 规则1-8:推荐采用用户自定义类型而不是类来定义值类型

1.9 规则1-9:一般任务的自动化

第2章 设计、构建和使用基于COM的组件

2.1 规则2-1:从接口的角度进行思考

2.2 规则2-2;使用自定义接口

2.3 规则2-3:最好使用IDL独立定义自定义接口

2.4 规则2-4:使用自定义回调避免基于类的事件的局限性

2.5 规则2-5:要谨慎保持兼容性

2.5.1 脚本客户端程序

2.5.2 已编译的客户端程序

2.5.3 版本兼容的接口

2.6 规则2-6:选用正确的COM激活技术

2.8 规则2-8:根据会话而不是实体来建模

2.9 规则2-9:除了简单的小规模应用系统,避免使用ActiveX可执行程序

3.5 规则3-5:对事务自动中止方式的思考

3.7 规则3-7:不必配置所有组件

3.8 规则3-8:避免将以后会后悔的东西编译进DLL

3.9 规则3-9:将代码从MTS向COM+移植的实践技巧

3.9.3 当事务中的次要对象返回错误时要小心;可能会获得形如"Method~of Object Failed~"的错误信息,而不是所指定的在错误传播之前返回的丰富错误信息

3.9.5 在COM+应用程序中进行进程内调用时执行声明性安全校验

3.9.6 在COM+中刷新组件命令不再是必需的

3.10 规则3-10:编写运行于MTS和COM+中的代码的实践技巧

3.10.2 使用可编程控制的安全措施对访问权限进行校验,而不要依赖于声明性安全措施

3.10.4 不要无意中将DLL安装到用户计算机上

4.1.2 提高服务器的可扩缩性

4.2 规则4-2:管理应用程序状态以达到最高效率

4.2.4 权衡各种方案的利弊

4.3 规则4-3:管理会话状态以达到最大可扩缩性

4.3.1 将会话限制在单机上

4.3.2 在客户机上存储会话信息

4.3.6 在数据库中存储状态信息

4.4.3 在分布式应用程序中不使用ASP

4.5 规则4-5:为脚本环境(如ASP)编写COM组件

4.5.2 向可编写脚本的对象传递参数

4.5.3 关于自定义接口

4.6 规则4-6:理解COM对象与ASP之间如何交互

4.6.5 直接访问ASP内置对象的好处

4.7 规则4-7:使用XML代替专有数据传输格式

4.8 规则4-8:慎重考虑表示和业务逻辑的关系

4.9 规则4-9:从数据到表示的XSLT实现

4.9.3 使用过程方法转换数据集

第5章 VB高效数据访问

5.1 规则5-1:高效访问的基础:往返开销、SQL语句和数据提供者

5.1.1 使往返开销最少

5.1.2 确定发送SQL查询的最好方法

5.1.3 选择合适的提供者

5.2 规则5-2:不要过分封装数据访问

5.2.1 纯粹的面向对象技术

5.2.2 追求纯粹OOD效果的不足之处

5.2.3 解决办法:使用存储过程

5.2.4 如果需要多个数据库服务器该如何处理

5.3 规则5-3:切莫将数据库连接当代数据成员

5.4 规则5-4:死锁是常见的-防错性程序开发

5.4.2 串行化事务和锁管理器

5.4.4 在应用程序设计中尽量减小死锁的几率

5.4.5 将事务运行时间降到最短

5.6.2 了解解决具体问题需选用哪一种方法

}

这是一个极为简单的Toy程序(呵呵,就是小玩具),不过他却体现了传值和传引用的巨大区别。

第7、10、13行分别是一个过程,这些过程都实现了同一功能,即将参数t的值减一。

在窗体的Load事件中,我们定义了一个变量x,然后调用第一个过程(A),注意到第7行中的中ByRef关键字,它代表传引用。

对于传引用,参数t 和 x其实就是一个变量。就像人有大名也可能有外号的道理一样。现在对于变量x,它的大名是x,外号是t。那么t-1其实就是x-1.最后打印出来的结果是x-1=1.

再看第10行,对于过程B,它的方式使用了ByVal关键字(即传值)

对于ByVal(传值),参数t和x根本就是不相关的两个变量。就如同两个人一样(以甲、乙为例),起初甲有两个,然后甲告诉乙,你现在也有两个苹果了,于是乙乐呵呵的拿着两个苹果去过程B中,过程B的作用是将乙的苹果数减一,那么最后程序所要打印的是甲的苹果数,显然,苹果数2。根本没发生变化。那么有的朋友会问,这时乙的苹果数是1吧。答案是错的。对于变量,它是有生命周期的(在编程中叫做变量的作用域)。

上面的代码中,变量x的有效期从Form_Load事件激活开始,到End Sub(也就是这个事件结束时)为止。而变量t的有效期从过程的第一句开始,到End Sub为止。一旦超过这个有效期,变量的值就不复存在了。所以,如果想要打印出乙的苹果数,只能在使用该变量的过程中打印,超出这个过程对该变量的任何操作都是毫无意义的。


看完上面解析是不是有一种想测试的冲动? 您可以下载:

}

好了,这里有一大堆问题。

首先: 序列化程序不支持数据行(为什么,我不知道!)。所以如果你使用"in-memory“session(),那么你就没问题了。但是,如果您曾经决定采用基于SQL的session()管理,那么该代码将开始失败。因此,要么插入ListViewDataItem,要么插入数据表来传递数据行,而不是数据行。

因此,我不会在Session()中传递"datarow“,并且避免上面可怕的.net遗漏了数据行不支持序列化的披露!(天哪!)

因此,除非使用server.transfer(),否则page.previous是无效的,也是不可用的。如果您使用的是母版页,那么您必须首先挖掘并获取母版页引用,如果您使用的是服务器传输,那么您必须首先挖掘并获取母版页引用,因此您必须使用page.PagePrevious。

编辑:以上都说过了吗?好吧,如果你在一个列表视图(或数据网格)行上有一个单击事件,那么server.transfer实际上是一个很好的用例,在这些用例中,你可以很好地考虑使用server.transfer(),因为通过使用page.PreviousPage,你可以充分利用第二个页面中的列表视图/数据网格数据。请注意,如果您使用母版页,则必须再下拉一个级别才能获得内容。

}

我要回帖

更多关于 vb点击按钮打开另一个窗体 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信