在 powerbuilder 中某些情况下不需要消息框时如何防止显示消息框

问题描述 投票:0回答:1

在我的 powerbuilder 19 项目中,一切都是关于文章管理的。当我单击“新建”按钮时,它显示一个空的 dwc_article(freeform),我必须插入所有文章详细信息(参考、名称...)以及 dwc_article 的 itemfocuschanged 事件。当我插入空引用或名称时,我确保收到消息框“验证错误”。问题是,当我在 dwc_report (表格)中选择一行并单击“更新”时,它会在 dwc_aritcle (自由格式)中显示文章详细信息,但是当我单击“新建”按钮时,它会显示验证错误消息框 3 次,并且我不希望它在这种情况下显示。

*这是 dwc_article 的 itemfocuschanged 事件的脚本:

integer li_row
string ls_reference
string ls_name

li_row = This.GetRow()
 cb_3.Enabled = false
 cb_7.Enabled = false



    // Check if the focus is on the reference field
    if This.GetColumnName() <> "reference"  then
         // Get the value of the reference field
         ls_reference = This.GetItemString(li_row, "reference")
    
         // Check if the reference field is empty or has more than 50 characters
         if IsNull(ls_reference) or Trim(ls_reference) = "" or Len(ls_reference) > 50 then
              MessageBox("Validation Error", "Reference field must not be empty and should have 50 characters or less.")
              // Set focus back to the reference field
                         cb_3.Enabled = false
                         cb_7.Enabled = false
              This.SetColumn("reference")
              return 1 // Prevent focus change
         
    else
        
    end if
    end if
    
    
    
    
    li_row = This.GetRow()
    
    // Check if the focus is on the name field
    if This.GetColumnName() <> "name" and This.GetColumnName() <> "reference" then
         // Get the value of the name field
         ls_name = This.GetItemString(li_row, "name")
         cb_3.Enabled = false
         cb_7.Enabled = false
    
         // Check if the name field is empty or has more than 50 characters
         if IsNull(ls_name) or Trim(ls_name) = "" or Len(ls_name) > 50 then
              MessageBox("Validation Error", "Name field must not be empty and should have 50 characters or less.")
              // Set focus back to the name field
              This.SetColumn("name")
              cb_3.Enabled = false
              cb_7.Enabled = false
              return 1 // Prevent focus change
         
    else
        cb_3.Enabled = true
        cb_7.Enabled = true
        end if
    end if

    
    return 0

*这是“新建”按钮的脚本:

dwc_article.reset()
dwc_article.insertrow(0)
char reference
dwc_article.scrolltorow(dwc_article.insertrow(0))

// Scroll to the newly inserted row
long ll_new_row
ll_new_row = dwc_article.InsertRow(0)
dwc_article.ScrollToRow(ll_new_row)


// Get the current date
date ld_date_creation
ld_date_creation = today()

string ls_formatted_date
ls_formatted_date = String(ld_date_creation, "yyyy-mm-dd")

// Set the current date to the "date_de_creation" column
dwc_article.SetItem(ll_new_row, "date_de_creation", ls_formatted_date)

bl_btn_new_clicked = true


dwc_article.modify("reference.Protect='0'") // This removes input capability from all columns
       dwc_article.modify("name.Protect='0'")
       dwc_article.modify("prix.Protect='0'")
         dwc_article.modify("date_de_creation.Protect='1'")

这是“更新”按钮的脚本:

long ll_row
ll_row = dwc_report.GetSelectedRow(0) // Get the selected row index in dwc_report


if ll_row >= 0 then // If a row is selected
    // Clear existing data in dwc_article
    dwc_article.Reset()
     
     long ll_nextRow
    ll_nextRow = dwc_article.RowCount() + 1

    // Copy data from dwc_report to dwc_article
    dwc_report.RowsCopy(ll_row, ll_row, Primary!, dwc_article, ll_nextRow, Primary!)

    // Disable all inputs in dwc_article
    dwc_article.modify("reference.Protect='1'") 
    dwc_article.modify("name.Protect='0'")
    dwc_article.modify("prix.Protect='0'")
    dwc_article.modify("date_de_creation.Protect='1'")

    // Retrieve data in dwc_article to reflect changes
    //dwc_report.retrieve()
    //dwc_article.retrieve()
else
    MessageBox("No row selected", "Please select a row in the report")
end if

我尝试了chatgpt,但它没有给我解决方案

powerbuilder
1个回答
0
投票

输入验证通常在数据窗口的 Itemchanged 事件中完成(或者有时在从 Itemchanged 事件发布的用户定义事件中完成)。当您在“新建”按钮代码中多次滚动到行时,就会发生行焦点更改。

© www.soinside.com 2019 - 2024. All rights reserved.