Oracle Forms多行文本框KEY-ENTER触发及多行复制粘贴问题咨询
Oracle Forms 两个问题的解决方案
问题1:多行Text Field按Enter跳转下一个项无效果
默认情况下,多行文本项的Enter键会触发换行动作,即使添加了KEY-ENTER触发器,默认行为仍会执行。按以下步骤修改:
- 确保KEY-ENTER触发器创建在目标多行文本项的级别(而非块或表单级别,避免被更高层级触发器覆盖)。
- 在触发器中添加代码终止默认换行行为:
BEGIN GO_ITEM('XXXBLOCK.QUANTITY'); -- 阻止默认的换行动作 RAISE FORM_TRIGGER_FAILURE; END;
- 若仍需文本项支持多行显示,保持Allow Newline属性为Yes;若不需要多行输入,可直接将该属性设为No,此时Enter键会自动触发跳转(无需触发器)。
问题2:单行TextBox实现多行内容粘贴
单行文本项默认会截断粘贴内容中的换行符,仅保留第一行。可通过以下两种方式解决:
方式1:允许文本项存储多行(外观保持单行)
- 打开目标TextBox的属性面板:
- 设置Multi-line为Yes
- 设置Display Height为1(维持单行显示效果)
- 设置Allow Newline为Yes
- 完成设置后,粘贴多行内容时,文本项会完整存储所有行(换行符保留),仅显示第一行内容,可通过滚动查看全部。
方式2:粘贴时替换换行符为分隔符(如逗号)
若需要将多行内容合并为单行显示,添加WHEN-PASTE触发器:
DECLARE v_paste_text VARCHAR2(32767); BEGIN -- 获取剪贴板内容 v_paste_text := CLIPBOARD.GET_TEXT; -- 替换换行符为逗号和空格(可按需修改分隔符) v_paste_text := REPLACE(REPLACE(v_paste_text, CHR(10), ', '), CHR(13), ''); -- 将处理后的内容赋值给文本项 SET_ITEM_VALUE('YOUR_BLOCK.YOUR_ITEM', v_paste_text); -- 阻止默认粘贴行为 RAISE FORM_TRIGGER_FAILURE; END;
内容的提问来源于stack exchange,提问作者Hung Le
相关产品推荐
相关产品推荐

