从零写出一个能编译运行的窗口工程:先弄清文件与控件名,再按签名写事件。更全的语法见 语言基础;目录布局见 工程结构。
硬约束
- 控件在代码里用窗口 XML 的
名称(如按钮1),不用「标题」文字。 - 属性赋值无括号:
按钮1.标题 = "确定";方法必须带括号:标签1.刷新()。 - 事件写成
函数 控件名.事件名 (参数…) { },事件名与形参以各控件文档为准(按钮常用单击 (整数 X, 整数 Y))。 - 关键字用中文:
函数如果否则当循环返回;逻辑用真/假。 - 数组:
整数 arr[] = []、文本 list[] = []([]在变量名后)。 - 支持库类型写全名:
HTTP类、JSON类、绘制类……不要写英文类名。 - 不要虚构未在签名表中出现的方法;用到哪个库就打开对应文档。
写之前先备齐这些对照
| 要做什么 | 打开 |
|---|---|
| 语法、类型、分支循环 | language.md、basic-flow.md |
| 常见任务抄片段 | 常见任务写法.md |
| 工程里有哪些文件 | 工程结构.md |
| 控件叫什么、typeId | 本窗 窗口/…/….xml + window-xml.md |
| 某控件属性/方法/事件 | docs/yss/ 下对应页(如 button.md) |
| HTTP / JSON / 文件等 | 各支持库页(如 http.md、json.md、basic-file.md) |
| 样式 | YSS.md;写样式前先读 XML 取 名称 与 typeId |
工程里最少要有什么
窗口工程典型路径(名称以你的工程为准):
我的工程/
我的工程.ysproj
源代码/
main.yc ← 主窗事件与业务逻辑
窗口/
主窗口/
主窗口.xml ← 布局与控件「名称」
资源/ ← 图片等;代码里用 :/相对路径
在设计器里放好控件后,先打开 XML,确认每个控件的 名称,再写 main.yc。
示例:登录式小窗
假定设计器中主窗口有三个控件(名称必须与 XML 一致):
XML 名称 |
typeId | 用途 |
|---|---|---|
标签提示 |
label | 显示结果 |
文本框账号 |
textbox | 输入 |
按钮确定 |
button | 点击后处理 |
窗口 XML(节选)
路径:窗口/主窗口/主窗口.xml。完整属性以设计器为准;写代码时只要认准 名称。
<窗口 名称="主窗口" 宽度="420" 高度="280" …>
<控件>
<标签 名称="标签提示" typeId="label" 左边="24" 顶边="24" 宽度="360" 高度="28" 标题="请输入账号" …/>
<文本框 名称="文本框账号" typeId="textbox" 左边="24" 顶边="64" 宽度="280" 高度="32" …/>
<按钮 名称="按钮确定" typeId="button" 左边="24" 顶边="112" 宽度="120" 高度="32" 标题="确定" …/>
</控件>
</窗口>
源代码 源代码/main.yc
函数 主窗口.创建完毕() {
标签提示.标题 = "请输入账号"
文本框账号.文本 = ""
}
函数 按钮确定.单击(整数 X, 整数 Y) {
文本 账号 = 文本框账号.文本
如果 (账号 == "") {
标签提示.标题 = "账号不能为空"
返回()
}
标签提示.标题 = "你好," + 账号
信息框("已确认:" + 账号)
}
要点:
创建完毕:窗口刚显示时跑一次,适合放初始赋值。按钮确定.单击:名称是按钮确定,事件是文档里的单击,带整数 X, 整数 Y。- 文本框读写用属性
文本(见 textbox.md);标签/按钮显示文字常用标题。 信息框为扁平命令,须写括号。
可选:一点样式
资源/主窗口.yss(或与 XML 同目录的 主窗口.yss):
button#按钮确定 {
background-color: #2d7ef7;
color: #ffffff;
}
label#标签提示 {
color: #e8eaef;
}
选择器用 typeId#名称。详见 YSS.md。
再往下写时的固定套路
- 改界面 → 设计器 / XML;记下新增控件的
名称。 - 写逻辑 →
main.yc(或次级窗的.yc)里加函数 名称.事件名 (…) { }。 - 查签名 → 打开该控件或支持库文档,按「签名 / 参数 / 返回」抄,不自造。
- 循环 / 数组 → basic-flow.md、basic-array.md、language.md §4.1。
- 多窗口 →
载入(工作台)/关闭(登录窗)(窗口名无引号),见 多窗口设计.md。 - 网络(客户端) →
HTTP类 http再http.提交(...),见 http.md;解析 JSON 用 json.md。 - 网络(服务端) →
TCP类/WebSocket类的启动+&回调,见 常见任务写法 §11–12;不要写成控件事件。
函数 按钮拉取.单击(整数 X, 整数 Y) {
HTTP类 http
http.置超时(15000)
文本 正文 = http.提交("GET", "https://example.com/api")
JSON类 j
如果 (j.解析(正文)) {
标签提示.标题 = j.取文本("message", "")
} 否则 {
标签提示.标题 = j.取错误()
}
}
更多可抄片段:常见任务写法.md(文件 / HTTP / TCP / WebSocket / SQLite / YSS…)。
易错对照(写代码时先看)
| 错误 | 正确 |
|---|---|
| 用标题「确定」当控件名 | 用 XML 名称,如 按钮确定 |
按钮确定.标题("x") |
按钮确定.标题 = "x" |
HTTP http / HttpClient |
HTTP类 http |
for / while / true |
循环 / 当 / 真 |
整数[] a |
整数 a[] |
循环 (整数 i = 0, 10) |
先 整数 i = 0,再 循环 (10, i) |
载入("主窗口") |
载入(主窗口) |
编造 按钮确定.被按下() |
查 button.md 事件表 |
不看 XML 就写 #确定 的 YSS |
用 #按钮确定 或 button#按钮确定 |