我想给按钮的点击事件添加一个勾选,当勾选失败时,我想取消super调用,怎么做?
我尝试在单击事件的事件处理程序中使用 FormControlCancelableSuperEventArgs 和 FormControlCancelEventArgs,但它们都返回 null。
下面是我的测试代码。
[FormControlEventHandler(formControlStr(LedgerJournalTable, Approve), FormControlEventType::Clicking)]
public static void Approve_OnClicking(FormControl sender, FormControlEventArgs e)
{
FormControlCancelEventArgs ce1 = e as FormControlCancelEventArgs; // ce1 returns null
FormControlCancelableSuperEventArgs ce2 = e as FormControlCancelableSuperEventArgs; // ce2 returns null too
}
我知道我可以通过抛出异常来完成它,但我认为这不是官方的方式。
那么如何通过官方方式取消超级通话呢?
我认为不可能实现你想要的。 LedgerJournalTable 表单上的 Approve 按钮中的 super() 调用在框架表单管理之外不执行任何操作,例如屏幕刷新和其他不会影响逻辑的任务(因为它是常规按钮而不是菜单项按钮) 。该按钮正在代码中创建一个新的菜单函数并显式调用它,但实际上并未在 super() 调用中调用菜单项。
我会在扩展程序中创建另一个批准按钮,隐藏开箱即用的按钮,然后在扩展程序按钮的 OnClicked 事件中复制原始按钮的逻辑,然后以您需要的任何方式修改它,例如根据您的要求指定的某些逻辑/条件跳过菜单功能调用。
创建一个虚拟类(包含 Main 方法,但没有任何内容)
创建与类相关的菜单项
创建一个按钮的扩展类,并根据自己的情况替换表单控件上的菜单项。
[ExtensionOf(formcontrolstr(InventJournalCount, postJournal))]
最终类 InventJournalCountForm_cpostJournal_Extension { 公共无效点击() { FormFunctionButtonControl b = this; 布尔值跳过= false; FormRun fr = this.formRun(); FormDataSource fdsJournal = fr.dataSource(formDataSourceStr(InventJournalCount, InventJournalTable )); if(fds期刊) { InventJournalTable 日志 = fdsJournal.cursor(); if(journal/在这里写下你的条件/) { 跳过=真; b.menuItemName(menuItemActionStr(myDummyClass)); } } 接下来点击(); 如果(跳过) { b.menuItemName(menuItemActionStr(InventJournalPostLossProfit)); } } }