PB窗口之间传递多参数的方法

合集下载

pb传递多个参数

pb传递多个参数

消息对象Message有三个属性用于存储这些函数传递给窗口的数据(依赖于窗口操作时参数赋予的类
型)。根据parameter / returnvalue参数数据类型的不同,该参数的值保存在Message对象的不同属性
中。parameter / returnvalue参数的类型与使用的Message对象属性的对应关系如下表:
Name Character
Email Character
Homepage Character
… …
在调用脚本中,使用如下代码:
lstr_declaredstr lstr_parmtotrans
lstr_parmtotrans.id=1
在 w_wantparm 的 open 事件中访问传来的参数:
u_n_parmtostore lnv_getparam
integer li_getid
string ls_getnam
在PowerBuilder中函数OpenWithParm,CloseWithReturn,OpenSheetWithParm,
参数类型 Message对象属性
Numeric(数值) Message.DoubleParm
PowerObject(PB对象,包括用户自定义的结构数据类型) Message.PowerObjectParm
String(字符串) Message.StringParm
应用程序根据OpenWithParm()等函数的parameter / returnvalue参数类型,从Message消息对象的
integer li_getid
string ls_getname
string ls_getemail

PB程序间传递字符串变量

PB程序间传递字符串变量

PB程序间传递字符串变量我们知道可以用Send ( handle, message#, lowword, long )函数完成不同程序窗口间的消息传递,其中最后两个参数为long型,因此可以利用这两个参数来传递数字型的变量。

如果想传递的是字符串呢?由于每个进程都有自己独立的内存地址和内存空间,因此不可能直接通过访问变量地址的方法得到变量。

下面给出pb的方法:source程序:外部函数:Function ulong GetCurrentProcessId() LIBRARY "kernel32.dll"Function integer SndMsg(long hWnd, long uMsg, long url, &ref blob info) library "user32.dll" Alias For "SendMessageAconstant long PBM_CUSTOM01 = 1024程序:IF il_hTarget <= 0 THEN findTarget() //找接受变量的窗口,主要用findwindow实现IF il_hTarget > 0 THENString ls_len//组成一个要发送的字符串url+= " "+info+" "+String(srctype)+" "+String(offlinetype)//计算整个要发送字符的长度,并转化为长度为10的字符串ls_len = String(Len(url))IF Len(ls_len) < 10 THENls_len = Space(10 - Len(ls_len))+ls_lenEND IF//转化为blob并发送Blob lb_sndlb_snd = Blob(ls_len+url)SndMsg(il_hTarget, PBM_CUSTOM01 +9,getcurrentprocessID(),lb_snd)END IFtarget程序:外部函数:Function ulong OpenProcess(ulong dwDesiredAccess,ulong bInheritHandle,ulong dwProcessId) LIBRARY "kernel32.dll"Function ulong ReadProcessMemoryStr(ulong hProcess,long lpBaseAddress,ref string lpBuffer,ulong nSize,ref long lpNumberOfBytesWritten) LIBRARY "kernel32.dll" Alias for "ReadProcessMemory"Function ulong ReadProcessMemoryBlob(ulong hProcess,long lpBaseAddress,ref blob lpBuffer,ulong nSize,ref long lpNumberOfBytesWritten) LIBRARY "kernel32.dll" Alias for "ReadProcessMemory"事件pbm_custom10:If (wparam = 0) Or (lparam = 0) THEN RETURNLong ll_nullSetNull(ll_null)Long processhndCONSTANT Long PROCESS_VM_READ = 16processhnd = openprocess(PROCESS_VM_READ,0,wparam);//读取发送进程的内存数据String ls_sizeLong ll_sizels_size = Space(10) //数据的大小ReadProcessMemoryStr(processhnd,lparam,ls_size,10,ll_null)ll_size = Long(Trim(ls_size))Blob lb_datalb_data = Blob(String(Space(ll_size)))ReadProcessMemoryBlob(processhnd,lparam+10,lb_data,ll_size,ll_null)string ls_datals_data = String(lb_data)。

PB数据窗口常用函数方法

PB数据窗口常用函数方法

PB数据窗口常用函数方法1. Retrieve函数:用于从数据库中检索数据,可以通过设置检索条件过滤数据。

例如,dw_employee.Retrieve(将从数据库中检索出所有的员工数据。

2. Update函数:用于更新数据窗口中的数据到数据库中。

例如,dw_employee.Update(将更新数据窗口中的所有修改到数据库中。

3. Create功能:用于创建一个新的数据行。

例如,dw_employee.Create(将在数据窗口中新增一行空数据。

4. Modify功能:用于修改数据窗口中的数据。

例如,dw_employee.Modify(将允许用户进行修改操作。

5. InsertRow函数:用于在数据窗口中插入一行数据。

例如,dw_employee.InsertRow(1)将在第一行之前插入一行数据。

6. DeleteRow函数:用于删除数据窗口中的一行数据。

例如,dw_employee.DeleteRow(2)将删除第二行的数据。

7. SetItem函数:用于设置数据窗口中指定列的值。

例如,dw_employee.SetItem(1, "John")将设置第一列的值为"John"。

8. GetItem函数:用于获取数据窗口中指定列的值。

例如,string ls_name = dw_employee.GetItemString(1)将获取第一列的值并赋给ls_name变量。

9. GetRowCount函数:用于获取数据窗口中的行数。

例如,intli_rows = dw_employee.GetRowCount(将返回数据窗口中的行数。

10. GetColumnCount函数:用于获取数据窗口中的列数。

例如,int li_columns = dw_employee.GetColumnCount(将返回数据窗口中的列数。

11. GetRow函数:用于获取数据窗口中指定行的数据。

PB的小技巧

PB的小技巧

PB的小技巧1.如何使DataWindow中的数据只能追加新记录而不能修改。

利用Column 的Protect 属性可以很方便的做到这一点,方法如下:将每一列的Protect 属性设置为:If( IsRowNew(), 0, 1) )在PowerScript 中可以动态修改Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")2. 允许从空的非字符字段跳离string ss = this.dwDescribe(this.GetColumnName()+".coltype")//s = this.dwDescribe("#"+String(this.GetColumn())+".coltype")CHOOSE CASE sCASE "number"IF Trim(this.GetText()) = "" THENint null_numSetNull(null_num)this.SetItem(this.GetRow(),this.GetColumn(),null_num)this.SetActionCode(3)END IFCASE "date"IF Trim(this.GetText()) = "" THENdate null_dateSetNull(null_date)this.SetItem(this.GetRow(),this.GetColumn(),null_date)this.SetActionCode(3)END IFCASE "time"IF Trim(this.GetText()) = "" THENtime null_timeSetNull(null_time)this.SetItem(this.GetRow(),this.GetColumn(),null_time)this.SetActionCode(3)END IFCASE "datetime"IF Trim(this.GetText()) = "" THENdate null_datetimeSetNull(null_datetime)this.SetItem(this.GetRow(),this.GetColumn(),null_datetime)this.SetActionCode(3)END IFEND CHOOSE3. 当我们为Datawindow的每一行显示行号时可以简单的放一个表达式为GetRow() -- 计算列。

PB中协调多数据窗口数据操纵的一种解决方法

PB中协调多数据窗口数据操纵的一种解决方法

PB中协调多数据窗口数据操纵的一种解决方法PB中协调多数据窗口数据操纵的一种解决方法1、问题的提出数据窗口是PB中检索、表现和操纵数据的对象。

如果一个数据表的列不多,用单数据窗口操纵数据很易实现,但在实际应用中,数据表的列数动辄几十,甚至上百也并不少见,这时用单数据窗口滚动显然不方便,一个自然的想法是采用TAB控件和TAB页,在每个TAB页上放置一个数据窗口控件,每个数据窗口控件分门别类操纵数据表的列,但随之而来的问题是如何协调分布在这些数据窗口中录入或修改数据的存储,针对每个数据窗口发布一个UPDATE()函数的调用不可行。

我们在实际开发中经过探索,增加一个后台的数据窗口做中介,解决了多数据窗口操纵数据的问题。

2、协调多数据窗口数据操纵的一种解决方法基本思路是:在进行数据操纵的数据窗口控件之外,另外放置一个数据窗口控件,设置其不可见,并设其数据窗口对象为一个选择了数据表中所有列的数据窗口,其他数据窗口控件中录入或修改的数据实时地传送过来,对该控件的数据进行更新操作即可。

不失一般性,下面以PB自带数据库psDemoDB.db中的customer表的数据录入为例来说明。

Customer表有"id","fname","lname","address","city","state","zip","phone","com pany"九个列,其中"id"为integer类型,其余均为char类型。

(1)创建数据窗口建立三个数据窗口d_1、d_2、d_3,数据窗口d_1选"id","fname","lname"三列,d_2中选"address","city","state"三列,d_3选"zip",""phone","company_name"三列。

PB的数据窗口操作

PB的数据窗口操作

ls1= dwo.Primary[row]★SetTransObject语法:dwcontrol.SetTransObject ( transaction )功能:给数据窗口或者datastore控件dwcontrol设置事务对象transaction,缺省事务对象是SQLCA。

返回值:成功设置事务对象则返回1,执行过程中发生了错误则返回-1,有任意参数为Null时返回Null。

★Retrieve语法:dwcontrol.Retrieve ( {, argument, argument . . . } )功能:使用数据窗口控件的当前事务对象检索数据库中的数据。

如果数据窗口控件对应的数据窗口对象定义了检索参数,则应该在该函数中指定检索参数,参数的个数和数据窗口对象的检索变量个数相等,对应的数据类型相兼容。

返回值:返回数据窗口控件主缓存区(PrimaryBuffer)中的记录数,如果检索数据时发生错误则返回-1,如果任意参数为Null则返回Null*该函数的参数和数据窗口对象定义的参数的顺序要相同,类型要兼容。

个数不能少于数据窗口对象定义的参数,即可以等于和多于数据窗口对象定义的参数,多的参数忽略。

★DeleteRow语法:dwcontrol.DeleteRow ( row )功能:删除数据窗口dwcontrol中的第row行数据,如果row为0则表示删除当前行的数据。

返回值:执行成功则返回1,执行错误则返回-1,如果任意参数为Null则返回Null。

*该函数执行后只是将被删除的数据从数据窗口的主缓存区移放到Deleted缓冲区,在数据库中并没有真正删除数据,当正确执行了Update函数并且使用commit语句提交了事务后,才真正从数据库中删除该数据★InsertRow语法:dwcontrol.InsertRow ( row )功能:在数据窗口dwcontrol的第row行前插入一行空白数据。

当指定row为0时,表示在当前行之前插入一行空白数据。

PB窗口使用技巧

PB窗口使用技巧

[PB]-窗口使用技巧**在打开和关闭窗口时进行数据传递OpenWithParm(windowvar,parmeter{,parent})其中windowvar是要打开的窗口名称,可以是window画板中定义的窗口,也可以是脚本中定义的窗口变量;parameter是要传递的参数,只能是String,Numeric或者PowerObject类型,该参数根据类型保存在Message的成员变量中传递个要打开的窗口;parent是一个已经打开的窗口名称,该窗口要成为windowvar窗口的父窗口。

函数执行成功返回1,否则返回-1,如果有参数为null 则返回null。

对象Message是一个结构类型的全局变量,并有很多的成员变量。

在传递参数时三个成员变量用来读取传递的数据,它们是:Message.DoubleParm:用来传递Numeric类型的数据。

Message.PowerObjectParm:用来传递PowerObject对象类型的数据,象数据窗口、按键、列表框和拥护自定义的结构等都可以使用该变量进行传递。

Message.StringParm:用来传递String类型的数据。

当使用函数OpenWithParm打开窗口后,应该在进行其他操作之前首先读取传递过来的参数,以免其他操作修改Message中的成员变量。

CloseWithReturn(windowname,Returnvalue)其中,windowname是要关闭的窗口的名称,一般是脚本所在的窗口的名称;Returnvalue是要返回的数值,和上述函数OpenWithParm的完全相同。

函数正确执行返回1,否则返回-1,当有参数为null时则返回null。

*只要是response类型的窗口,使用该函数就能有效地传递参数;该窗口不一定非得是用OpenWithParm打开的。

在打开该response的窗口中可以读取传递过来的参数。

总之,使用CloseWithReturn函数时一定要注意,只有被关闭的窗口是response 类型才能有效地获取返回参数。

PB窗口之间传递多参数的方法

PB窗口之间传递多参数的方法

接下来在打开窗口w_3的open事件中,获取用户对象信息:
uo_para uo_Getpara
uo_Getpara = message.powerobjectparm
sle_1.Text = uo_Getpara.id
sle_2.Text = uo_
应用程序根据OpenWithParm()等函数的parameter / returnvalue参数类型,从Message消息对象的不同属性中提取该函数B中如果是传递一个参数,是很容易实现的。在调用脚本中,可以使用如下代码:
openwithparm(w_1,"独孤求败")
string name
string sex
string loca
在调用脚本中(本例使用才菜单clicked中),使用如下代码:
uo_para uo_Tranpara
uo_Tranpara = create uo_para
PowerObject(PB对象,包括用户自定义的结构数据类型) Message.PowerObjectParm
String(字符串) Message.StringParm
参数类 Message对象属性
Numeric(数值) Message.DoubleParm
sle_3.Text = uo_Getpara.sex
sle_4.Text = uo_Getpara.loca
以上两种方法比较而言,第一种方法虽然比较简单实用,但是如果遇上较复杂的数据时,便不能在一个结构数据中充分描述了;
第二种方法不但方便灵活,而且可以传送复杂的数据。当然,参数的传送不止以上的几种方法,你也可以使用全局变量或是公共可

PB窗口使用技巧

PB窗口使用技巧

[PB]-窗口使用技巧**在打开和关闭窗口时进行数据传递OpenWithParm(windowvar,parmeter{,parent})其中windowvar是要打开的窗口名称,可以是window画板中定义的窗口,也可以是脚本中定义的窗口变量;parameter是要传递的参数,只能是String,Numeric或者PowerObject类型,该参数根据类型保存在Message的成员变量中传递个要打开的窗口;parent是一个已经打开的窗口名称,该窗口要成为windowvar窗口的父窗口。

函数执行成功返回1,否则返回-1,如果有参数为null 则返回null。

对象Message是一个结构类型的全局变量,并有很多的成员变量。

在传递参数时三个成员变量用来读取传递的数据,它们是:Message.DoubleParm:用来传递Numeric类型的数据。

Message.PowerObjectParm:用来传递PowerObject对象类型的数据,象数据窗口、按键、列表框和拥护自定义的结构等都可以使用该变量进行传递。

Message.StringParm:用来传递String类型的数据。

当使用函数OpenWithParm打开窗口后,应该在进行其他操作之前首先读取传递过来的参数,以免其他操作修改Message中的成员变量。

CloseWithReturn(windowname,Returnvalue)其中,windowname是要关闭的窗口的名称,一般是脚本所在的窗口的名称;Returnvalue是要返回的数值,和上述函数OpenWithParm的完全相同。

函数正确执行返回1,否则返回-1,当有参数为null时则返回null。

*只要是response类型的窗口,使用该函数就能有效地传递参数;该窗口不一定非得是用OpenWithParm打开的。

在打开该response的窗口中可以读取传递过来的参数。

总之,使用CloseWithReturn函数时一定要注意,只有被关闭的窗口是response 类型才能有效地获取返回参数。

基于PB的窗口间参数传递

基于PB的窗口间参数传递

二 、 口间实现参数传递的基本原理及 实现过程 窗
在 窗 口 间 实 现 参 数 传 递 是 使 用 P 提供 的 预 定 义 对 象 Me— B s sg 现 的 。 Mesg 对 象 有 9个 属 性 , 前 4个 与 Wi o s ae实 sa n w 消 d 息 结 构 的前 4个 一 致 ,下 面是 Mes e对 象 的属 性 描 述 : s g a
类 :传 人参 数 和传 出参 数 。所谓 传人 参数 是将 传 人参 数被 打
开 的 窗 口 ,传 出 参 数 是 指 将 参 数 从 被 打 开 的 窗 口传 回 调 用 程
受到 了国内外广大用 户的青 睐 。
在用 P B编 写 应 用 程 序 时 ,经 常 需 要 在 窗 口 和 窗 口之 间 进 行 参 数 的 传 递 , 即 在 打 开 或 关 闭 一 个 窗 口时 可 以将 某 个 传 人 参 数 和 传 出 ,然 后 根 据 参 数 值 来 做 出 相 应 的 处 理 。 根 据 传 递 . 参 数 的 方 向 可 以 分 为 传 人 参 数 和 传 出 参 数 两 种 情 况 ,在 每 一 种 情 况 下 根 据 所 传 递 参 数 的 个 数 又 可 分 为 二 种 类 型 :传 递 一
出参 数 的 过 程 。 三个 常用函数 的功能简述如 下 : 1 pn tp — — 打 开 一 个 窗 口 ,使 其 所 有 的 属 性 、 .0 e wi 栅 h 控 件 都 可 被 脚 本 获 取 , 同 时 根 据 参 数 的 类 型 将 参 数 存 放 到 系 统 的 Mesg 象 的相 应 属 性 里 面 。其 函 数 语 法 如 下 : s e对 a
Coe tR tm 函 数 时 , 就 会 检 查 传 递 的参 数 ,如 果 传 递 的 是 l Wi eu s h

PB窗口之间传递多参数的方法

PB窗口之间传递多参数的方法

PB窗口之间传递多参数的方法(深圳:独孤求败 2003-05-19)在PowerBuilder中函数OpenWithParm,CloseWithReturn,OpenSheetWithParm,windowname.OpenUserObjectWithParm等都有一个在进行窗口操作(打开或者关闭)时存入Message消息对象的参数parameter或return value。

消息对象Message有三个属性用于存储这些函数传递给窗口的数据(依赖于窗口操作时参数赋予的类型)。

根据parameter / return value参数数据类型的不同,该参数的值保存在Message对象的不同属性中。

parameter / return value参数的类型与使用的Message对象属性的对应关系如下表:参数类型 Message对象属性Numeric(数值) Message.DoubleParmPowerObject(PB对象,包括用户自定义的结构数据类型) Message.PowerObjectParmString(字符串) Message.StringParm应用程序根据OpenWithParm()等函数的parameter / return value参数类型,从Message消息对象的不同属性中提取该函数并传送给被打开窗口的值。

在PB中如果是传递一个参数,是很容易实现的。

在调用脚本中,可以使用如下代码:openwithparm(w_wantparm,parmtotrans)接着在打开窗口w_wantparm的open事件中键入:string ls_getparmls_getparm=message.stringparm…如果需要传递多个参数,可以使用如下两种方法:方法一定义结构变量:lstr_declaredstr,其中包含你想传递的各种参数:变量名变量类型ID UnsignedlongName CharacterEmail CharacterHomepage Character……在调用脚本中,使用如下代码:lstr_declaredstr lstr_parmtotranslstr_parmtotrans.id=1lstr_="panya"lstr_paramtotrans.email="panya@"lstr_paramtotrans.homepage="";…openwithparm(w_wantparm,parmtotrans)接下来在打开窗口w_wantparm的open事件中,获取结构信息:lstr_declaredstr lstr_getparminteger li_getidstring ls_getnamestring ls_getemailstring ls_gethomepagelstr_getparm = message.powerobjectparmli_getid = lstr_getparm.idls_getname = lstr_ls_geemail = lstr_getparm.emaills_gethomepage = lstr_getparm.homepage…其中,lstr_declaredstr为用户自定义结构数据类型,是值传送的。

pb数据窗口设置操作

pb数据窗口设置操作

pb数据窗⼝设置操作1 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录⽽不能修改,利⽤ Column 的 Protect 属性可以很⽅便的做到这⼀点,⽅法如下:将每⼀列的 Protect 属性设置为:If( IsRowNew(), 0, 1) )在 PowerScript 中可以动态修改 Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")这样,DataWindow 中只有新追加的记录可修改,⽽其他记录是只读的。

2 如何在DataWindow中实现列的⾃动折⾏我们在PowerBuilder应⽤程序的开发过程中, 使⽤DataWindow时, 经常会遇到某列的数据太长, 不能同时全部显⽰的情况. 若采⽤⾃动⽔平滚动, 操作起来⼜不够简便. 下⾯介绍⼀种⽅法, 实现列数据多⾏显⽰, 即实现列数据的⾃动折⾏.具体步骤如下:1) 在DataWindow Painter中打开此DataWindow.2) 在需设定⾃动折⾏的列上双击⿏标, 弹开此列的属性窗⼝.3) 选择Position标签, 选中Autosize Height 多选框.4) 选择Edit标签, 不选中Auto Horz Scroll多选框.5) 单击OK按钮, 保存所做的修改.6) 点中Detail Band (即写有Detail的灰⾊长带), 单击⿏标右键, 选择Properties... 菜单项.7) 选中Autosize Height多选框.8) 单击OK按钮, 保存所做的修改.9) 保存此DataWindow.注意:连在⼀起的汉字(中间没有标点或空格分隔), 系统将认为是⼀个单词, 不会⾃动进⾏折⾏.3 在数据窗⼝中实现动画要实现动画,必须要有定时器,在数据窗⼝中已经有了⼀个定时器,双击数据窗⼝将弹出的对话框,在Timer Interval中定义⼤于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。

如何在PowerBuilder的窗口间实现参数传递

如何在PowerBuilder的窗口间实现参数传递

如何在PowerBuilder的窗口间实现参数传递
赵学锋;张金隆;蔡淑琴
【期刊名称】《计算机工程与应用》
【年(卷),期】2002(038)016
【摘要】窗口间的参数传递在应用程序的开发中得到了十分广泛的应用.该文介绍了在PowerBuilder的窗口间传递参数的基本原理,根据传递参数的方向及个数不同结合实例给出了不同的实现方法.
【总页数】3页(P148-149,200)
【作者】赵学锋;张金隆;蔡淑琴
【作者单位】华中科技大学管理学院,武汉,430074;华中科技大学管理学院,武汉,430074;华中科技大学管理学院,武汉,430074
【正文语种】中文
【中图分类】TP312
【相关文献】
1.基于PB的窗口间参数传递 [J], 赵学锋;张金隆
2.PowerBuilder中窗口之间的参数传递 [J], 卢守东
3.浅谈PowerBuilder应用中窗口和对象间信息传递 [J], 余鸿
4.PowerBuilder数据窗口中实现模糊查询 [J], 华逢兆
5.如何在PowerBuilder数据窗口中实现记录的动态排序 [J], 卢守东
因版权原因,仅展示原文概要,查看原文内容请购买。

PB中下拉数据窗口带参数应用

PB中下拉数据窗口带参数应用

PB中下拉数据窗口带参数应用在数据输入时,当用到下拉列表时,会发现有些数据是和别的数据相关的,这时我们会希望过滤掉那些不相关的数据。

例如生成一个入库单,某种物料有多个供应商,我们要根据物料来过滤掉和这个物料不相关的供应商,这样会加快检索和输入的速度。

入库单表:billrec1.以supply表,制作一个带参数的数据窗口,命名为d_supply_replace_list,参数列为item_id,字符型,隐藏物料代码列。

2.以billrec表,制作一个数据窗口,命名为billrec_maintain,将supply_id列的edit属性中的style type选定为DropDownDW,datawindow为d_supply_replace_list。

在窗口中放置数据窗口控件dw_1,将其与billrec_maintain数据窗口关联。

在窗口中定义实例变量datawindowchild idwc_child。

3.在dw_1的constructor事件中编写以下脚本:this.getchild("supply_id",idwc_child) //生成子数据窗口,supply_id为下拉列表列idwc_child.insertrow(0)idwc_child.settransobject(SQLCA)this.of_settransobject(SQLCA)this.insertrow(0)4.在dw_1的itemchanged事件中编写以下脚本:long ll_getcolumnll_getcolumn = this.getcolumn() //获得当前列choose case ll_getcolumncase 7 //假设item_id列是第7列dw_1.accepttext()is_id = dw_1.getitemstring(row,7) //获得物料代码idwc_child.retrieve(is_id) //检索替代供应商end choose这样在输入不同的物料时,会像下图那样,只列出相关的供应商。

pyqt5 多层窗口传递参数

pyqt5 多层窗口传递参数

《深入探讨pyqt5多层窗口传递参数》在实际的软件开发过程中,经常会遇到多层窗口之间需要传递参数的情况。

而在使用pyqt5进行界面开发时,如何高效地实现多层窗口之间的参数传递成为了一个需要解决的问题。

本文将从浅入深地探讨pyqt5多层窗口传递参数的方法和技巧,并带您深入了解这一主题。

1. 简介让我们来了解一下pyqt5。

pyqt5是一种用于创建桌面应用的python 模块,它提供了丰富的功能和灵活的界面设计,使得开发人员能够快速地创建出漂亮、易用的界面。

在pyqt5中,界面通常是通过多个窗口组成的,而这些窗口之间的参数传递就成为了一个需要解决的问题。

2. 参数传递的基本方法在pyqt5中,实现多层窗口之间的参数传递的基本方法是通过信号与槽机制。

当一个窗口需要向另一个窗口传递参数时,它可以发射一个信号,而另一个窗口则可以连接这个信号并在接收到信号时执行相应的操作。

这种方法简单直接,但在实际应用中可能会遇到一些复杂的情况,比如多层窗口之间相互传递参数。

3. 深入探讨参数传递的技巧为了更好地解决多层窗口之间的参数传递问题,我们可以采用一些技巧。

可以使用全局变量来存储参数,并在需要的时候直接访问这些全局变量;或者可以通过属性来传递参数,将参数保存在窗口对象的属性中,然后在需要的时候直接访问这些属性。

另外,也可以考虑使用事件过滤器来实现参数传递,通过在事件过滤器中捕获事件并处理参数,从而实现多层窗口之间的参数传递。

4. 深度和广度兼具的探讨从深度和广度的角度来看,我们需要深入探讨每一种方法的优缺点以及适用的场景,例如全局变量的使用可能会导致程序的可维护性变差,而属性的方式则需要考虑对象之间的关系等。

另外,我们还需要考虑不同方法之间的对比,找出最适合的方法。

5. 个人观点和理解在我看来,使用事件过滤器可能是最灵活、最适合多层窗口参数传递的方法。

通过事件过滤器,我们可以在不同层级的窗口中捕获事件并处理参数,而不需要过多地关注窗口之间的关系。

窗体间的参数传递

窗体间的参数传递
(1)构造函数参数传递
通过构造函数传递参数应该是比较基本的参数传递方式,重载构造函数,通过带参数的构造函数来实例化窗体。
在窗体类内部定义参数变量,
privateobjectmyParams;
实现构造函数,
publicOptionForm(objectparameters)
{
InitializeComponent();
语法,publicForm ActiveMdiChild {get; }
返回表示当前活动的MDI子窗口的Form,或者如果当前没有子窗口,则返回空引用。可使用此方法确定MDI应用程序中是否有任何打开的MDI子窗体。也可使用此方法从MDI子窗口的MDI父窗体或者从应用程序中显示的其他窗体对该MDI子窗口执行操作。
UserLoginInfo.CurrentUserInfo.Password ="/zhzuo";
对于Singleton模式的实现方式有很多,编写时需要考虑是否需要保证实例访问的线程安全问题,以免引发不可预料的情况,为了提高性能可以考虑惰性实例化。关于Singleton模式的更多信息可以参考另一篇文章。
DialogResult result = dialog.ShowDialog(this);
if(result == DialogResult.OK)
{
if(this.textBoxPath.Text != dialog.SelectedPath)
Form.Owner属性。获取或设置拥有此窗体的窗体。
语法,publicForm Owner {get;set; }
若要使某窗体归另一个窗体所有,可为其Owner属性分配一个对将成为所有者的窗体的引用。当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果Form2归窗体Form1所有,则关闭或最小化Form1时,Form2也会关闭或最小化。并且附属窗体从不显示在其所有者窗体后面。可以将附属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

接下来在打开窗口w_2的open事件中,获取结构信息:
lstr_para lstr_Getpara
lstr_Getpara = message.powerobjectparm
sle_1.Text = lstr_Getpara.id
sle_2.Text = lstr_
PowerObject(PB对象,包括用户自定义的结构数据类型) Message.PowerObjectParm
String(字符串) Message.StringParm
sle_3.Text = lstr_Getpara.sex
sle_4.Text = lstr_Getpara.loca
其中,lstr_Getpara为用户自定义结构数据类型,是值传送的。
方法二
首先创建一个类用户对象
uo_para
在该用户对象中将你需要传递的各种参数申明成实例变量,例如:
lstr_ = &quot;独孤求败&quot;
lstr_Tranpara.sex = &quot;男&quot;
lstr_Tranpara.loca = &quot;广东深圳&quot;
openwithparm(w_2,lstr_Tranpara)
public:
string id
string name
string sex
string loca
在调用脚本中(本例使用才菜单clicked中),使用如下代码:
uo_para uo_Tranpara
uo_Tranpara = create uo_para
uo_Tranpara.id = &quot;00000001&quot;
uo_ = &quot;独孤求败&quot;
uo_Tranpara.sex = &quot;男&quot;
uo_Tranpara.l
第二种方法不但方便灵活,而且可以传送复杂的数据。当然,参数的传送不止以上的几种方法,你也可以使用全局变量或是公共可
访问的窗口实例变量来传送参数,或者在窗口中调用一个函数,并传递所需的参数,在此就不再赘述了。
另外,用Message传递参数必须注意以下几点:
1. 最好执行完窗口操作(打开或关闭)后马上将Message消息对象的值传给变量,这是因为Message是全局使用的对象, 每一次事件被触发或传送时都会被使用,其他Script 也有可能用到Message消息对象,因此它有被覆盖的危险。
2.避免传送NULL对象,以免程序出错。
应用程序根据OpenWithParm()等函数的parameter / returnvalue参数类型,从Message消息对象的不同属性中提取该函数并传送
给被打开窗口的值。
在PB中如果是传递一个参数,是很容易实现的。在调用脚本中,可以使用如下代码:
openwithparm(w_1,&quot;独孤求败&quot;)
oca = &quot;广东深圳&quot;
OpenWithParm(w_3,uo_Tranpara)
接下来在打开窗口w_3的open事件中,获取用户对象信息:
uo_para uo_Getpara
uo_Getpara = message.po法
在PowerBuilder中函数OpenWithParm,CloseWithReturn,OpenSheetWithParm,windowname.OpenUserObjectWithParm 等都有一个在进行窗口操作(打开或者关闭)时存入Message消息对象的参数parameter或returnvalue。
Name string
Sex string
Loca string
在调用脚本中(本例使用才菜单clicked中),使用如下代码:
lstr_para lstr_Tranpara
lstr_Tranpara.id = &quot;00000001&quot;
消息对象Message有三个属性用于存储这些函数传递给窗口的数据(依赖于窗口操作时参数赋予的类型)。
根据parameter / returnvalue参数数据类型的不同,该参数的值保存在Message对象的不同属性中。
parameter / returnvalue参数的类型与使用的Message对象属性的对应关系如下表:
sle_1.Text = uo_Getpara.id
sle_2.Text = uo_
sle_3.Text = uo_Getpara.sex
sle_4.Text = uo_Getpara.loca
以上两种方法比较而言,第一种方法虽然比较简单实用,但是如果遇上较复杂的数据时,便不能在一个结构数据中充分描述了;
参数类 Message对象属性
Numeric(数值) Message.DoubleParm
接着在打开窗口w_1的open事件中键入:
sle_1.Text = message.stringparm
如果需要传递多个参数,可以使用如下两种方法:
方法一
定义结构变量:lstr_para,其中包含你想传递的各种参数:
变量名 变量类型
ID string
相关文档
最新文档