YStudio Y++

最小窗口程序

Y++ / YStudio 开发文档 · 一点滴

从零写出一个能编译运行的窗口工程:先弄清文件与控件名,再按签名写事件。更全的语法见 语言基础;目录布局见 工程结构。

硬约束

  1. 控件在代码里用窗口 XML 的 名称(如 按钮1),不用「标题」文字。
  2. 属性赋值无括号:按钮1.标题 = "确定";方法必须带括号:标签1.刷新()。
  3. 事件写成 函数 控件名.事件名 (参数…) { },事件名与形参以各控件文档为准(按钮常用 单击 (整数 X, 整数 Y))。
  4. 关键字用中文:函数 如果 否则 当 循环 返回;逻辑用 真 / 假。
  5. 数组:整数 arr[] = []、文本 list[] = []([] 在变量名后)。
  6. 支持库类型写全名:HTTP类、JSON类、绘制类……不要写英文类名。
  7. 不要虚构未在签名表中出现的方法;用到哪个库就打开对应文档。

写之前先备齐这些对照

要做什么 打开
语法、类型、分支循环 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。


再往下写时的固定套路

  1. 改界面 → 设计器 / XML;记下新增控件的 名称。
  2. 写逻辑 → main.yc(或次级窗的 .yc)里加 函数 名称.事件名 (…) { }。
  3. 查签名 → 打开该控件或支持库文档,按「签名 / 参数 / 返回」抄,不自造。
  4. 循环 / 数组 → basic-flow.md、basic-array.md、language.md §4.1。
  5. 多窗口 → 载入(工作台) / 关闭(登录窗)(窗口名无引号),见 多窗口设计.md。
  6. 网络(客户端) → HTTP类 http 再 http.提交(...),见 http.md;解析 JSON 用 json.md。
  7. 网络(服务端) → 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#按钮确定

相关

语言基础 · 常见任务写法 · 工程结构 · 窗口 XML · YSS · 流程控制 · 按钮 · 文本框 · 标签