DreamGUI
诊断码

DUI7xxx · 写回

设计器的改动没法写回文本。

本页由 scripts/diagnostics/sync.py 从插件的码表(EDreamUIDiagnosticCode)生成,卡片里的枚举名就是测试断言用的那个名字。

DUI7001

错误枚举名PatchTargetNotFound

设计器的一次编辑在文件里找不到落脚处:未知的节点、被绑定的属性、没有块的 slot。

怎么会出现:设计器要把一次修改写进文本,却找不到可以写的地方:文件里没有这个名字的节点、样式或资源;属性被 <- 或 Shown <- 绑定着,写回的值会悄悄替换掉绑定或者被它覆盖;slot Name 没有块,没有地方写它的属性;要插入的节点 id 已经存在;要删除或移动的是根节点,或者是某个循环的模板;文件根本没有解析成树。什么都不会被写入。

怎么改:按消息去改文本本身:比如给 slot 加上 { },或者先去掉绑定,再在设计器里修改。

DUI7002

错误枚举名SourceFileChangedUnderEdit

文件在一次待写入的编辑底下被改动了,于是什么都没有写入。

怎么会出现:设计器的编辑是针对它上一次解析出的树计划的,写入前发现磁盘上的文本已经和那棵树对不上(比如你在另一个编辑器里改了文件),或者两处编辑落在同一段字符上。设计器从不覆盖在磁盘上被改过的文件。

怎么改:让编辑器重新读取文件(保存后会自动重新编译),然后在设计器里再做一次这个修改。

DUI7003

错误枚举名PatchValueNotRepresentable

一个这门语言写不出来的值(非有限的数),它所在的那一行保持原样。

怎么会出现:打印器会像 printf 那样把非有限的浮点数写成 inf 之类,而 inf 会被读成一个标识符:文件能解析,下一次编译却会在一行谁也没碰过的地方报错。所以在写入时就拒绝。枚举字节的值不在枚举声明里时也一样。文件本身没有问题,所以它不借用词法的 DUI1004。

怎么改:在设计器里给这个属性一个有限的值,或者直接在文本里写。

DUI7004

错误枚举名PatchSyntaxNotWritable

设计器要改的东西没有哪一行写着它:由 if 决定的可见性,或者无法改写的简写。

怎么会出现:有些值不是写在某一行上,而是前端读出来时产生的,设计器不会在作者没写过的地方发明一行:if 分支里控件的可见性;@fill 2 要改成 Fill 以外的 SizeRule,或者一个 @fill 写不出来的权重;rows 表某一行上除了列值和它自己块里的行之外的任何东西(行不能在设计器里删除、移动、改名或加 + 块)。

Widget Root {
    if HasSave() {
        Text Continue { Text = "Continue" }
    }
}

怎么改:去改文本:改 if 的条件或者把控件移出分支;把 @fill 2 换成 @slot SizeRule = … 和 @slot FillWeight = 2;rows 的行直接在表里编辑。

DUI7005

错误枚举名PatchStyleComponentNotWritable

设计器要改的值来自样式的 + 行;要么给节点加上它自己的那一行,要么去改样式。

怎么会出现:节点的某个值来自它的样式里的 + Component { … },而节点自己没有写同一个类的 + 行。这个值有两个可能的去处,写回哪个都不对:样式是共享的,写进样式会改动每个戴它的节点;给节点新增一个 + 块是在改文件的结构,而值的写回不做这种改动。

style RowColumn {
    + VerticalBox { Spacing = 15 }
}

Widget Left : RowColumn { }

怎么改:在节点上写一行自己的 + VerticalBox { Spacing = 20 },或者直接修改样式。

本页目录