Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tabs PowerBuilder在选项卡式数据窗口中的粘贴_Tabs_Powerbuilder - Fatal编程技术网

Tabs PowerBuilder在选项卡式数据窗口中的粘贴

Tabs PowerBuilder在选项卡式数据窗口中的粘贴,tabs,powerbuilder,Tabs,Powerbuilder,我最近在一家公司开始了一份新工作,我的第一项任务是为他们更新一些非常旧的软件 有一个很大的背景故事,但基本上该软件是用PB8编写的(大约在1997年),公司内没有人(包括我)在使用PowerBuilder之前有过任何经验,作为一名新手,我的任务是更新和维护它,直到更换件获得批准并可以开发 我们有PowerBuilder 12.5的许可证,所以我使用PB12.5 Classic来做所有事情。无法联系原始开发人员以获得支持,并且不存在任何文档 我想了解的一件事是,如何确定函数的定义位置和变量的取值位

我最近在一家公司开始了一份新工作,我的第一项任务是为他们更新一些非常旧的软件

有一个很大的背景故事,但基本上该软件是用PB8编写的(大约在1997年),公司内没有人(包括我)在使用PowerBuilder之前有过任何经验,作为一名新手,我的任务是更新和维护它,直到更换件获得批准并可以开发

我们有PowerBuilder 12.5的许可证,所以我使用PB12.5 Classic来做所有事情。无法联系原始开发人员以获得支持,并且不存在任何文档

我想了解的一件事是,如何确定函数的定义位置和变量的取值位置,这将对未来有很大帮助

我目前正在处理的示例是以下场景。 有一个带有选项卡的数据窗口,名为
tab\u detail
每个选项卡显示树列表中不同的橙色小人物

其中一个称为
dw_detail
,它允许粘贴数据。其他选项卡都不允许粘贴数据,但我希望它们可以
dw_detail
有一个事件
rbuttondown()
,其中包含以下代码:

    Window  w_parentwin

    If ib_add_mode Or ib_chg_mode Then
        w_parentwin = Parent.GetParent().GetParent()

        m_dwpaste   m_pop_paste
        m_pop_paste = CREATE m_dwpaste

        m_pop_paste.idw_data = This

        If ii_agent_code > 0 And Not IsNull(id_period) And Clipboard() <> "" Then
            m_pop_paste.m_popup.m_paste.Enabled = TRUE
        Else
            m_pop_paste.m_popup.m_paste.Enabled = FALSE
        End If

        m_pop_paste.m_popup.PopMenu(w_parentwin.PointerX(), w_parentwin.PointerY())        

        DESTROY(m_pop_paste)
    End If
我修改了函数以使用windows
SelectedTab
属性。数据现在将粘贴到选项卡中,但粘贴到错误的输入字段中。我进一步查看,发现
ImportClipboard
函数的数据列没有对齐

更改所选数据库列顺序的最佳方法是什么

以下是我所说的选项卡的屏幕截图:

因此,在主程序窗口中,有上面的选项卡,在每个选项卡(输入字段所在的位置)中有一个标有
dw\uu
前缀的数据窗口


非常感谢您的帮助。

我认为您首先应该做一些简短的教程。请查看以下内容:

这些都是简短而有用的

另一方面,您可以在自己的“监视变量”列表中选择特定变量,因此不必搜索多个变量。您可以右键单击变量名并进行快速监视,也可以在监视窗口中插入变量名


比尔。Gábor

带有上下文菜单的操作分为两次:

  • 处理鼠标右键单击以显示上下文菜单
  • 在弹出菜单提供的一个或多个操作中执行一个操作
如果剪贴板(
clipboard()“”
)中有内容,则显示了使用
PopMenu()
显示菜单的pbscript,但您可能没有注意到粘贴操作在其他地方

查看
m_弹出窗口
:其中必须有一些代码可能是硬编码的,以便粘贴到
dw_详细信息
。如果是这样,您可以在窗口实例变量中存储对上下文菜单当前处理的dw的引用

比如:

  • 实例变量中的数据窗口idw\U当前
  • 然后在
    rbuttondown()
    事件
    idw\u current=this
    (这是
    rbuttondown()事件所属的数据窗口)
  • 最后,在菜单中重新使用当前的
    id\u
    而不是硬编码的
    dw\u细节
关于修改变量的位置的问题:您可以通过名称搜索变量(右键单击目标或单个pbl或对象,然后单击“搜索”),并在受影响的行上放置断点。如果在调试模式下运行(CtrlDCtrlT而不是CtrlR),则可以在修改变量时进行跟踪。

粘贴问题 通过1 很难确定,但我会查看m_dwpaste.m_popup.m_paste.Clicked的代码。更糟糕的情况是dw_细节硬编码到脚本中;稍微好一点的情况是,它有一个更灵活的例程,但不知何故dw_调整不适合该算法

通过2 有了新的信息,我们可以看到wf_pastereturn()的代码(我不确定您是如何得到这个脚本的,但这看起来像是罪魁祸首)不仅仅是粘贴,而是做了很多涉及特定字段的事情。事实上,它不仅仅是粘贴,而是导入数据,这意味着它假设剪贴板的内容不仅是特定格式的,而且与DataWindow的数据集相匹配(请参见DW painter中的Columns窗格,注意不要将DataWindow的数据集部分与UI部分混淆)。问题是,你想:

  • “粘贴”类似于将文本从记事本复制到浏览器表单中;只是将文本放入当前字段
  • “粘贴”与另一个数据窗口完全相同,包括脚本中提到的所有相同列都在两个数据窗口中的假设
  • “粘贴”类似于此脚本,但为新数据窗口中的数据集定制
这些都需要一些不同的解决方案,再加上我在关于标签和数据窗口的评论中提到的差异

找东西 我将给出一个无可非议的偏颇观点,因为我是一个工具的作者,该工具可以帮助您搜索名为的PowerBuilder代码

如果您正在浏览选项卡中查看代码,并且希望看到其他提到的变量,可以选择它,右键单击,然后

  • 在脚本中向前或向后搜索
  • 在左侧的树中搜索对象名称(当您看到它时会更有意义)
  • 搜索对象的其余部分或应用程序的其余部分
由于可能涉及多个语法,查找变量的赋值位置比听起来更困难

// assigns a value on instantiation
int i = 1

// assigns a value when executed
i = 1

// does not assign a value
IF i = 1 THEN

// assigns a value possibly if the parameter is passed by reference (kind of like a pointer to the variable)
f_foo (i)
了解变量范围有助于找到变量的设置。如果变量为
// assigns a value on instantiation
int i = 1

// assigns a value when executed
i = 1

// does not assign a value
IF i = 1 THEN

// assigns a value possibly if the parameter is passed by reference (kind of like a pointer to the variable)
f_foo (i)