找回密码
 立即注册

用户中心登录

通过NE账号安全登录

搜索
热搜: NE3 NE 3 已解决
查看: 131|回复: 4

Bug反馈:样式编辑器中瑕疵

[复制链接]

4

主题

5

回帖

106

积分

注册会员

积分
106
发表于 2026-10-10 11:22:54 | 显示全部楼层 |阅读模式
本帖最后由 Spatec 于 2026-10-10 11:25 编辑

官网下载最新的NoteExpress4.4.0.10876,使用是发现样式编辑器中“引文”-“编号”-“使用指定的范围连接符”,勾选以后点击“保存”后勾选会不显示,但勾选有作用。应该是显示问题,即使用了连接符但是显示为此选项未勾选。



屏幕截图 2026-10-10 111650.png
回复

使用道具 举报

254

主题

1万

回帖

3万

积分

管理员

积分
37553
发表于 2026-10-10 12:03:53 | 显示全部楼层
因为默认就是 -    所以您再输入并不会有变化,您更换成 “—”  或者 “,” 这样的 就可以了。
回复

使用道具 举报

4

主题

5

回帖

106

积分

注册会员

积分
106
 楼主| 发表于 2026-10-10 14:29:45 | 显示全部楼层
aegeansupport 发表于 2026-10-10 12:03
因为默认就是 -    所以您再输入并不会有变化,您更换成 “—”  或者 “,” 这样的 就可以了。 ...

不是那个“-”,而是前面蓝色的那个候选框,打勾的那个地方。
回复

使用道具 举报

254

主题

1万

回帖

3万

积分

管理员

积分
37553
发表于 2026-10-10 15:22:40 | 显示全部楼层
Spatec 发表于 2026-10-10 14:29
不是那个“-”,而是前面蓝色的那个候选框,打勾的那个地方。

您只有换了其它连接符,它才可以勾选。。  因为已经默认的 - 了,所以不用勾选。
回复

使用道具 举报

3

主题

57

回帖

147

积分

注册会员

积分
147
发表于 2026-10-11 01:38:08 | 显示全部楼层
代码全部核对完毕,这个问题的完整机制已经从源码复现。以下是分析:

**结论**

是的,这个设计有一套明确的问题。而且用户不是误操作:**"勾选后保存不显示、但功能仍生效"是代码可以逐字复现的"保存-加载往返(round-trip)不一致"缺陷**,不是单纯的显示小毛病;官方"默认就是 -,不用勾选"的答复实际上承认了行为,但把一个真实的交互 bug 说成了正常现象。

**机制复原(三处代码各自处理 `'-'`/空串)**

用户操作的控件:[NEStyleFrameCitationNumbering.dfm:45](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NoteExpress/Styles/NEStyleFrameCitationNumbering.dfm:45)(复选框 "Use specified range connector")+ [:56](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NoteExpress/Styles/NEStyleFrameCitationNumbering.dfm:56)(输入框,初始文本就是 `'-'`)。数据模型只有一个字符串字段 `NumberRngConn`([NEStyleClasses.pas:502](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/Public/NEStyleClasses.pas:502))。

1. 打开页面时([DoLoadSettings:88](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NoteExpress/Styles/NEStyleFrameCitationNumbering.pas:88)):`chkNumRngConn.Checked := (NumberRngConn <> '') or (NumberRngConn = CNumRangeCo***efault)`。这个表达式后半段是恒冗余的死代码(值非空时前半已真)——等价于"**只有存了非空值才显示勾选**",而且这处死代码本身就说明作者没理清 '-'、空串的关系。
2. 保存时([SaveSettings:140](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NoteExpress/Styles/NEStyleFrameCitationNumbering.pas:140)):`if not chkNumRngConn.Checked or (edtNumRngConn.Text = CNumRangeCo***efault) then NumberRngConn := ''`。**只要输入框里是默认 '-',即使勾选过,也存成空串**。
3. 格式化输出时([NEFormaterClasses.pas:2278](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/Public/NEFormaterClasses.pas:2278),`CBibNumRange = '-'` 在 [:2260](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/Public/NEFormaterClasses.pas:2260)):`NumberRngConn = '' → 用 '-'`。**空串被当作默认连接符正常使用**——这就是"功能还有效"的原因。

触发路径甚至不需要点"保存"按钮:`SaveSettings` 在**每次离开该页面时**都会被自动执行(切分类树 → [NEDlgStyleEditor.pas:334](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NoteExpress/Styles/NEDlgStyleEditor.pas:334) → [:291](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NoteExpress/Styles/NEDlgStyleEditor.pas:291) → [CanSwitch→SaveSettings](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NoteExpress/Styles/NEStyleFrameMgr.pas:182)),切回来再重读(`ShowFrame → LoadSettings → DoLoadSettings`)。用户点保存后重开、或仅切页再回来,都会看到勾选消失——显得随机、更像故障。

关键信息丢失点:**"用户勾选 + 用默认 '-'"和"用户没配置"被压成了同一个存储状态(空串)**,UI 从此不可能区分这两者。勾选态不可回显是必然结果,不是偶发 glitch。

**UI/交互设计上不合理的地方**

1. **复选框名实不符**。真实语义是"是否用非默认字符覆盖默认值",而不是"启用范围连接符"(后者由上层"对于连续引文使用数字范围 (1-3)"控制)。而默认 '-' 无论勾不勾都会生效。也就是说这个复选框在默认值下是个 no-op:**勾与不勾结果完全一样,UI 却让它像一个会被记住的启用开关**。
2. **默认操作路径正好是踩坑路径**:点勾选的瞬间,代码自动把输入框填成 '-'([chkNumRngConnClick:68](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NoteExpress/Styles/NEStyleFrameCitationNumbering.pas:68))。用户什么都没改,就恰好命中保存时的折叠条件——"只要保留自动填的默认值,这次的勾选就会被静默丢弃",没有任何提示。
3. **状态不可表达**:不存在任何操作能让界面显示"已启用且连接符为 '-'"。用户为了"让界面记住勾选",被迫把连接符改成 '—' 或 ','(官方也是这么建议的)——这是让用户绕开 bug,而不是修正 UI。
4. **父子选项联动不完整**:[:164](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NoteExpress/Styles/NEStyleFrameCitationNumbering.pas:164) 的 `UpdateFormStatus` 只把 `chkNumRngExt` 随上层开关启用/禁用,`chkNumRngConn` 和输入框从不联动。取消"使用数字范围"后仍可设置、保存连接符——存了也不生效(反向困惑:设置了没反应)。同页其他子选项("仅对多于连续两个以上的引文使用")联动是正常的,唯独这个漏了,说明是遗漏而非有意设计。
5. **变更通知不一致**(次要):`chkNumRngConnClick`/`edtNumRngConnChange`([:117](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NoteExpress/Styles/NEStyleFrameCitationNumbering.pas:117))不调用 `Changed()`,与同页其他控件不同。当前有兜底路径掩盖了问题,但属于状态管理不严。
6. **页面结构残留**:同一帧里有两个标题都叫 "Numbering" 的 GroupBox,其中 [grpNumbering 是隐藏的](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NoteExpress/Styles/NEStyleFrameCitationNumbering.dfm:144),里面还藏着一个参与读写数据的 `chkNumContinuous`(加载、保存都操作它,但用户看不到)。隐藏控件承载数据 + 重名标题,说明这一页从未被系统性清理。
7. **测试缺席**:样式编辑器测试 [NEUIStyleEditor_Test.pas](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/UnitTest/NEUIStyleEditor_Test.pas)(389 行)里没有任何该帧的保存-加载往返断言。这类 round-trip bug 只要有一组"未勾选 / 勾选+默认 / 勾选+自定义"的用例就会立刻暴露。

**为什么会以"bug 反馈"的方式爆出来**

用户看到的三件事互相矛盾:勾选显示消失、功能却生效、官方又说"本来就不该勾"。用户在帖子里不得不反复澄清"不是那个 '-',是前面打勾的地方"——**需要人工解释才能理解一个两项控件的关系,本身就是设计失败**。与之对比,用户真正想要的效果(连续引文显示 1-3)其实由上层复选框控制、且默认就工作;界面上却把内部存储的细节("是否存了非默认字符")当作勾选态暴露出来。

**修复建议(按维护成本排序)**

1. 最小修复:`SaveSettings` 不再折叠 '-'——`if not chkNumRngConn.Checked then NumberRngConn := '' else NumberRngConn := edtNumRngConn.Text;`。这样"勾选+'-'"会以 '-' 落盘并回显勾选;格式化逻辑对非空值直接使用,老样式/老文件兼容不受影响。
2. 若坚持"默认值不落盘":必须让 UI 能表达该状态——要么加载时把空串显示为勾选但置灰("使用默认连接符 -"),要么直接去掉这个复选框、把输入框改名为"范围连接符(默认 -)"。不能让"勾选"在保存后静默丢失。
3. 补全联动(`chkUseNumberRange` 关闭时同步禁用连接符控件)以及 `Changed()` 调用。
4. 给样式编辑器帧加 save→load 往返单元测试;顺手清理隐藏的 `grpNumbering`/`chkNumContinuous` 和重名分组框。

**证据边界**:以上分析基于本机源码副本(NE4.1 HotFix 的样式编辑器与格式化代码;2026-07 插件仓库 Legacy 中同款 fallback 仍存在,[wordaddin/Src/Legacy/NEFormaterClasses.pas:2547](/Users/aegean/Downloads/wordaddin/wordaddin/Src/Legacy/NEFormaterClasses.pas:2547))。手上没有 4.4.0.10876 的源码,但用户贴描述的行为与官方"只有换了其他连接符才能勾选"的答复,与上述代码逻辑完全吻合,可以认定 4.4 表现即出自这条逻辑链。
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|NoteExpress

GMT+8, 2026-10-25 22:43 , Processed in 0.059552 second(s), 32 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表