PB笔记之窗口之间传递多参数的方法
messageboxex("警告","确定要把删除房间["+ls_id+"]吗?",question!,yesno!)<>1 then return //=1则是确认,messageboxex点击后会有返回值,本行代码的作用是:弹出窗口提升,点击ok则继续执行后面的代码,其它选项则return出去。
if 语句可以和有返回值的函数配合使用,类似上面
窗口之间数据传输:
在PowerBuilder中函数OpenWithParm,CloseWithReturn,OpenSheetWithParm,windowname.OpenUserObjectWithParm
等都有一个在进行窗口操作(打开或者关闭)时存入Message消息对象的参数parameter或returnvalue。
消息对象Message有三个属性用于存储这些函数传递给窗口的数据(依赖于窗口操作时参数赋予的类型)。
根据parameter / returnvalue参数数据类型的不同,该参数的值保存在Message对象的不同属性中。
parameter / returnvalue参数的类型与使用的Message对象属性的对应关系如下表:
参数类型 Message对象属性
Numeric(数值) Message.DoubleParm
PowerObject(PB对象,包括用户自定义的结构数据类型) Message.PowerObjectParm
String(字符串) Message.StringParm
应用程序根据OpenWithParm()等函数的parameter / returnvalue参数类型,从Message消息对象的不同属性中提取该函数并传送
给被打开窗口的值。
在PB中如果是传递一个参数,是很容易实现的。在调用脚本中,可以使用如下代码:
openwithparm(w_1,"独孤求败")
接着在打开窗口w_1的open事件中键入:
sle_1.Text = message.stringparm
如果需要传递多个参数,可以使用如下两种方法:
方法一
定义结构变量:lstr_para,其中包含你想传递的各种参数:
变量名 变量类型
ID string
Name string
Sex string
Loca string
在调用脚本中(本例使用才菜单clicked中),使用如下代码:
lstr_para lstr_Tranpara
lstr_Tranpara.id = "00000001"
lstr_Tranpara.name = "独孤求败"
lstr_Tranpara.sex = "男"
lstr_Tranpara.loca = "广东深圳"
openwithparm(w_2,lstr_Tranpara)
接下来在打开窗口w_2的open事件中,获取结构信息:
lstr_para lstr_Getpara
lstr_Getpara = message.powerobjectparm
sle_1.Text = lstr_Getpara.id
sle_2.Text = lstr_Getpara.name
sle_3.Text = lstr_Getpara.sex
sle_4.Text = lstr_Getpara.loca
其中,lstr_Getpara为用户自定义结构数据类型,是值传送的。
方法二
首先创建一个类用户对象
uo_para
在该用户对象中将你需要传递的各种参数申明成实例变量,例如:
public:
string id
string name
string sex
string loca
在调用脚本中(本例使用才菜单clicked中),使用如下代码:
uo_para uo_Tranpara
uo_Tranpara = create uo_para
uo_Tranpara.id = "00000001"
uo_Tranpara.name = "独孤求败"
uo_Tranpara.sex = "男"
uo_Tranpara.loca = "广东深圳"
OpenWithParm(w_3,uo_Tranpara)
接下来在打开窗口w_3的open事件中,获取用户对象信息:
uo_para uo_Getpara
uo_Getpara = message.powerobjectparm
sle_1.Text = uo_Getpara.id
sle_2.Text = uo_Getpara.name
sle_3.Text = uo_Getpara.sex
sle_4.Text = uo_Getpara.loca
以上两种方法比较而言,第一种方法虽然比较简单实用,但是如果遇上较复杂的数据时,便不能在一个结构数据中充分描述了;
第二种方法不但方便灵活,而且可以传送复杂的数据。当然,参数的传送不止以上的几种方法,你也可以使用全局变量或是公共可
访问的窗口实例变量来传送参数,或者在窗口中调用一个函数,并传递所需的参数,在此就不再赘述了。
另外,用Message传递参数必须注意以下几点:
1. 最好执行完窗口操作(打开或关闭)后马上将Message消息对象的值传给变量,这是因为Message是全局使用的对象,
每一次事件被触发或传送时都会被使用,其他Script 也有可能用到Message消息对象,因此它有被覆盖的危险。
2.避免传送NULL对象,以免程序出错。
PB笔记之窗口之间传递多参数的方法的更多相关文章
- IOS开发使用委托delegate在不同窗口之间传递数据
IOS开发使用委托delegate在不同窗口之间传递数据是本文要介绍的内容,主要是来讲解如何使用委托delegate在不同窗口之间传递数据,具体内容来看详细内容.在IOS开发里两个UIView窗口之间 ...
- MFC不同窗口之间传递数据
问题的由来: 最近在学习串口通信编程,参考的例子大多数都是在一个对话框中同时完成对串口的配置及数据收发的功能.这种方式不太适合于写自己的应用程序(会使得程序界面比较混乱,无法突出程序的重点),因此想让 ...
- BASE64-客户端(js)加码-服务器端(c#)解码,URL传递“汉字参数”解决方法
HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号('+'), 在 Decode 的时候将加号转为空格, 但是浏览器是不能理解加号为空格的, 所以如果文件名包含了 ...
- Java 传递可变参数和方法重载
形式:类型... 参数名 示例:public void show(int... a) {}; 可变参数在方法中被当作数组来处理 可变参数传值的四种方式: 一个值也不传,可变参数会接收到长度为0的数组 ...
- pb中打开窗口并传递参数
try long ll_result; ll_result=1;openwithparm(w_sb_order,UserCode);catch(RuntimeError er) errorMsg=e ...
- C#中web页面之间传递数组参数
一直以来用到的都是在url地址中传递string类型,那么如果是数组类型的该怎么传递呢? ]; arryStr[] = "a"; arryStr[] = "b" ...
- <笔记>TP5的分页传递额外参数
默认生成的分页只有page一个参数,若需要提供额外的参数才能访问分页(例如查询结果的分页,需要传入查询关键字的参数才能显示结果),则需要设置额外参数query
- Delphi exe实例之间传递cmd参数
{Unit1.pas} 通过这个单元的Button,调用另一个实例: procedure TForm1.Button1Click(Sender: TObject); begin ShellExecut ...
- WinForm 中两个窗口之间传递数据
方法有很多种,这里介绍项目中使用的两种 一.通过委托+事件的方法进行传值 (点击Form2中的button1按钮,将会把Form2中的textbox.text 传给Form1中的 lable.text ...
随机推荐
- Language Modeling with Gated Convolutional Networks(句子建模之门控CNN)--模型简介篇
版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/liuchonge/article/deta ...
- 机器不学习:CNN入门讲解-为什么要有最后一层全连接
哈哈哈,又到了讲段子的时间 准备好了吗? 今天要说的是CNN最后一层了,CNN入门就要讲完啦..... 先来一段官方的语言介绍全连接层(Fully Connected Layer) 全连接层常简称为 ...
- openssl从内存中读取私钥进行签名
麻痹的找了好久,真恶心! #include <stdio.h> #include <stdlib.h> #ifdef WIN32 #include <windows.h& ...
- Js-事件分发与DOM事件流
原文地址:https://www.jianshu.com/p/dc1520327022 Js事件分发与DOM事件流 对JavaScript分发事件不熟悉,网上查阅相关资料整理后,记录一下对Javasc ...
- Xamarin图表开发基础教程(1)
Xamarin图表开发基础教程(1) 在Xamarin图表开发中,最常用的框架是OxyPlot和Microcharts.其中,OxyOPlot提供多种多样的图表类型和丰富的图表功能,可以实现各种复杂的 ...
- Flutter异步编程 http网络请求数据
import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as ht ...
- @ServeletComponentScan和@ComponentScan的区别
一.SpringBoot中使用Servlet在SpringBootApplication上使用@ServletComponentScan注解后,Servlet.Filter.Listener可以直接通 ...
- IMDB-WIKI – 500k+ face images with age and gender labels论文学习
DEX: Deep EXpectation of apparent age from a single image 这个论文我们使用深度学习解决了在静态人脸图像中面部年龄的估计.我们的卷积神经网络使用 ...
- PPT插件(islide)
https://www.islide.cc/features iSlide 主要功能模块 一键优化 将PPT中不规则的字体,段落,色彩,参考线布局,风格样式等一键化全局统一设置,构建专业和规范. ...
- Angular常用命令:
新建项目: ng new angualrdermo08 --skip-install 创建需要的组件: ng g component home