button - 如何处理 DDDW 的 buttonclicked 事件?
问题描述
情况:我的 DDDW 中有一个按钮,我想捕获 buttonclicked 事件。
问题:当我单击 DDDW 中的按钮时,不会触发 DW 控件的 buttonclicked 事件,并且会为 DW 控件触发 ItemChanged 事件。
问题:如何为 DDDW 中的按钮捕获 buttonclicked 事件?或者当单击特定行的删除按钮时,我有什么其他方法可以从 DDDW 中删除一行?
PowerBuilder 12.5
解决方案
根据 PB 帮助,DataWindowChild 没有事件:|
但是,这并不意味着我们仍然不能通过 DW 控件的itemchanged
事件来挂钩它。 注意:这是一个 hack,并且经过了一些非常有限的测试。但是,它证明了一点,我猜。
这是我所做的:
- 创建了一个包含
code
和name
列的 DataWindow,以及一个名为delete_button
- 创建了另一个 DataWindow 并将该 DW 绘制为 DDDW,命名为
profession
- 在我的窗口控件
open
事件中,我从 DW 获得了 DDDW 并将其粘贴在一个实例变量中:dw_1.GetChild("profession", REF idwc_profession)
itemchanged
然后,为 DW 控件编码事件:
// dw_1::itemchanged
//
// - DDDW is named "profession"
IF dwo.Name = "profession" THEN
IF IsValid(idwc_profession) THEN
string ls_clickedobject
// Get the DataWindowCHILD object where the pointer was clicked:
ls_clickedobject = idwc_profession.GetObjectAtPointer()
IF IsNull(ls_clickedObject) OR (ls_clickedobject = "") THEN RETURN
// Return from GetChild is <column name>~t<row number>; let's get
// the position of the tab character so we can parse it
long ll_tabPos
ll_tabPos = Pos(ls_clickedObject, "~t")
IF ll_tabPos > 0 THEN
string ls_clickedDddwColumn
ls_clickedDddwColumn = Trim(Left(ls_clickedObject, ll_tabPos - 1))
// Check to see if we've clicked on the computed field with the delete button
IF Lower(ls_clickedDddwColumn) = "delete_button" THEN
long ll_clickedDddwRow
// grab the row we want to delete
ll_clickedDddwRow = Long(Trim(Right(ls_clickedObject, Len(ls_clickedObject) - ll_tabPos)))
IF ll_clickedDddwRow > 0 THEN
// delete the row from the DDDW
idwc_profession.DeleteRow(ll_clickedDddwRow)
SetNull(data) // reset our data
END IF
END IF
END IF
END IF
END IF
RETURN
另请注意,您可能必须使用 from 的返回值itemchanged
才能使其执行您想要的操作。而且,如果您想在删除发生后再次自动下拉 DDDW,您可能可以使用该Send()
方法来执行此操作(不过,我不知道正确的“数字”)。
推荐阅读
- javascript - 如何在具有角度的 iframe 中找到子节点并设置它们的样式?
- excel - 为什么 Range.Find() 方法如此混乱?
- c++ - 使用 isdigit 通知任何检测到的非法字符
- django - 从 Django 模板更改表单输出
- docker - 添加 daemon.json 文件后 docker start 失败
- sql - 使用 SQL 进行双工数据准备
- html - 水平标签栏响应式引导程序/ blazor
- oracle - 使用 EXECUTE IMMEDIATE 时 PL/SQL 块不执行结束
- r - R 中的 unnest_tokens() 创建单词列,但无法在 dplyr 命令中选择单词列
- c++ - 检查数组中是否有来自字符串的值,如果没有,则添加它