Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0b7f048744 | ||
|
|
c24e84e355 | ||
|
|
21ffc2227b | ||
|
|
772a98fc99 | ||
|
|
c943990833 | ||
|
|
a6ac896dc0 | ||
|
|
fedc1d8a33 | ||
|
|
32076839d1 |
@@ -74,6 +74,20 @@ description: SharpDevelop 5.x WinForms 设计器**全部工具箱**(5 分类 8
|
|||||||
- **中文路径显示八进制转义**(`\346\210\220...`):git 默认 quotepath,排查时加 `-c core.quotepath=false`,如 `git -c core.quotepath=false ls-tree -r --name-only HEAD`。
|
- **中文路径显示八进制转义**(`\346\210\220...`):git 默认 quotepath,排查时加 `-c core.quotepath=false`,如 `git -c core.quotepath=false ls-tree -r --name-only HEAD`。
|
||||||
- **LF→CRLF warning**:无害,忽略。
|
- **LF→CRLF warning**:无害,忽略。
|
||||||
- **push 后验证**:`git ls-remote origin` 的 HEAD 与本地 `git log -1` 哈希一致才算成功。
|
- **push 后验证**:`git ls-remote origin` 的 HEAD 与本地 `git log -1` 哈希一致才算成功。
|
||||||
|
9. **打包发版完整流程(2026-10-01 定稿,用户强制:打包必须按此技能走)**。发版 = 8 步固定链,顺序不可换,每步有验证点:
|
||||||
|
```
|
||||||
|
① 递增版本号 → ② 清进程+编译 → ③ make_package 组装 → ④ ISCC 安装包
|
||||||
|
→ ⑤ make_update_package 更新包 → ⑥ git 提交推送 → ⑦ Gitea Release → ⑧ 验收
|
||||||
|
```
|
||||||
|
- **① 递增版本号**:`powershell -File tools\递增版本号.ps1`(默认修订号+1;大版本传参如 `1.1.0`)。输出应显示 AssemblyInfo 与 setup.iss 两处同步成功。
|
||||||
|
- **② 清进程+编译**:`Get-Process | Where-Object { $_.Path -like '*成套报价软件*' -or $_.Path -like '*SharpDevelop Projects*' } | Stop-Process -Force`(先杀占用,否则组装/替换文件报"正在使用");然后**工作目录切到 `成套报价软件\` 子目录**(rsp 相对路径基于它,在仓库根跑必报 CS2001):`& "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" "@..\tools\verify_build.rsp" /warn:1`,ExitCode=0 且无 warning 才继续。
|
||||||
|
- **③ 组装发布目录**:`python tools\make_package.py`(仓库根跑)。核对输出:"DLL 复制完成,缺失: 无"、cadbt 段只有 node+CAD-Viewer(独立 exe 已退役 2026-10-01)、无 "!!" 警告。
|
||||||
|
- **④ 安装包**:`& "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" "release\成套报价软件\setup.iss"`。lzma2 压缩约 2 分钟,产物 `release\成套报价软件\Output\成套报价软件_Setup_<版本>.exe`,"Successful compile" 才算成;文件名必须带版本号。
|
||||||
|
- **⑤ 更新包**:先改 `tools\make_update_package.py` 两处——`PKG` 目录名带版本(如 `更新包_1.0.4`)+ `说明` 本期文案(只写用户可感知的变化,使用方法要写清覆盖哪个文件、验证什么);再 `python tools\make_update_package.py`。当前更新包只含 成套报价软件.exe+使用说明(独立 pdfbt.exe 已退役不随包)。
|
||||||
|
- **⑥ git**:`git add -A` + `git commit -m "发版 v<版本>:..."` + `git push`。
|
||||||
|
- **⑦ Gitea Release**:tag=`v<版本>` 与 AssemblyInfo 一致。API 创建(PowerShell:`Invoke-RestMethod -Headers @{Authorization="token <令牌>"}` POST `/api/v1/repos/0999we/ctbjrj/releases`,body 含 tag_name/name/body,**中文 body 必须转字节** `[Text.Encoding]::UTF8.GetBytes($body)` 否则乱码);附件上传用 `System.Net.Http.HttpClient`+`MultipartFormDataContent`(字段名 `attachment`),PS5.1 的 Invoke-RestMethod 无 -Form。Release 说明与更新包说明同源。
|
||||||
|
- **⑧ 验收**:附件大小合理(Setup ~120MB、更新包 <1MB);提醒用户装机验证:关于软件页显示 v<版本>、扒图窗口可用。
|
||||||
|
- **故障速查**:ISCC 报文件找不到→make_package 没跑或发布目录被清;附件 401→令牌失效(见第 8 条);组装报"正在使用"→②的进程没杀干净(node/AI 引擎)。
|
||||||
|
|
||||||
## 一、项目前提(缺一不可)
|
## 一、项目前提(缺一不可)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,330 @@
|
|||||||
|
---
|
||||||
|
name: winforms-designer-package
|
||||||
|
description: 把编译好的 .NET Framework 4.8 WinForms 项目(exe + 依赖 DLL + 图标)用 Inno Setup 6 打包成可分发的单文件安装包(setup.exe)。当用户说"打包""安装包""setup""发布""做成安装程序""Inno Setup""生成 setup.exe""打安装包""做成 exe 安装包""封装发布""更新包",或要求把 F:\pycode\wpf\src\WinFormsDesigner.Fx48 下 Samples\COOO\scr\<项目名> 里编译好的 exe 打包成安装包,或对"成套报价软件"项目发版打包(含版本号递增/Gitea Release/更新包的完整 8 步发版链,见文末专章)时,必须使用本技能。即使用户没说"Inno Setup",只要是要把编译产物做成可分发/可安装的形式就触发。涵盖:识别要打包的文件、写 setup.iss 脚本、中文语言包安装、编译安装包、图标嵌入、Program Files 权限处理、卸载清理等完整发布流程。
|
||||||
|
---
|
||||||
|
|
||||||
|
# WinForms 设计器项目打包器
|
||||||
|
|
||||||
|
把 winforms-designer-compile 技能编译出的 `<项目名>.exe` + 依赖 DLL + 图标,用 **Inno Setup 6** 打包成一个**单文件 setup.exe** 安装包,带中文安装向导、开始菜单/桌面快捷方式、控制面板卸载项。
|
||||||
|
|
||||||
|
> 本技能流程在 GCS 铜排壳体计算项目中**完整实战验证过**,每个步骤都真实跑通。
|
||||||
|
|
||||||
|
## ⛔ 铁律:不做测试安装,直接交付正式版(用户强制,2026-09-24)
|
||||||
|
|
||||||
|
**禁止 AI 自己做任何安装测试**——包括但不限于:
|
||||||
|
- 编译"测试变体"安装包(降权限 PrivilegesRequired=lowest / 改临时目录)再静默安装验证
|
||||||
|
- 把 setup.exe 装到本机临时目录、虚拟机去验证启动/卸载
|
||||||
|
- 安装后自动运行程序验证功能
|
||||||
|
|
||||||
|
**正确做法**:按需求直接编译**正式版** setup.exe(含正确的默认安装目录、权限、快捷方式),**立即交付给用户**,由**用户本人**安装和测试。测试中发现的任何问题由用户反馈后在下轮修复。
|
||||||
|
|
||||||
|
**原因**(xuanxing 项目实测教训):AI 侧测试变体要在用户桌面弹 UAC/错误框(如降权限后写公共桌面快捷方式报 `IPersistFile::Save 失败 0x80070005 拒绝访问`)、留残留目录和卸载表项,还要反复等待静默安装——比用户直接装一遍正式版**更慢更吵**。打包环节唯一要"验证"的只有 ISCC 编译输出 `Successful compile` 和产物存在。
|
||||||
|
|
||||||
|
## 前提:这是编译之后的环节
|
||||||
|
|
||||||
|
本技能接在 winforms-designer-compile 之后。进本技能前,`scr\<项目名>\` 目录里应该已经有:
|
||||||
|
- `<项目名>.exe`(csc 编译产物)
|
||||||
|
- 第三方 `.dll`(如 `AdvancedDataGridView.dll`)
|
||||||
|
- 可选 `app.ico`(程序图标)
|
||||||
|
|
||||||
|
如果还没有 exe,先去用 winforms-designer-compile 技能编译。
|
||||||
|
|
||||||
|
## 触发前提
|
||||||
|
|
||||||
|
- Inno Setup 6 已安装(默认在 `C:\Program Files (x86)\Inno Setup 6\`)。没装的话提示用户先装。
|
||||||
|
- 项目目录约定在 `F:\pycode\wpf\src\WinFormsDesigner.Fx48\bin\Debug\net48\Samples\COOO\scr\<项目名>\`。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 完整打包流程(5 步)
|
||||||
|
|
||||||
|
### 第 1 步:识别需要打包的文件
|
||||||
|
|
||||||
|
进项目目录 `scr\<项目名>\`,按下表分类:
|
||||||
|
|
||||||
|
| 文件类型 | 来源 | 是否打包 |
|
||||||
|
|---------|------|---------|
|
||||||
|
| `<项目名>.exe` | csc 编译产物 | ✅ 必需 |
|
||||||
|
| 第三方 `.dll`(如 `AdvancedDataGridView.dll`) | 设计器/代码依赖 | ✅ 必需(缺了程序跑不起来) |
|
||||||
|
| `app.ico`(若有) | 自制图标 | ✅ 建议带(用于快捷方式) |
|
||||||
|
| `.cs` / `.ui.cs` / `.xml` 源码 | — | ❌ 不打包 |
|
||||||
|
| `build.bat` / `build.rsp` / `*.log` | — | ❌ 不打包 |
|
||||||
|
| `单价.cfg` / `*.cfg` 配置 | 运行时生成 | ⚠️ 一般不打包(程序用默认值重建) |
|
||||||
|
|
||||||
|
**判断要打包哪些 DLL**:读 `<窗体名>.dependencies.txt`(设计器生成的权威清单),或直接 `ls *.dll` 看项目里实际存在的 DLL。
|
||||||
|
|
||||||
|
### 第 2 步:建发布目录 + 复制运行时文件
|
||||||
|
|
||||||
|
在 `Samples\COOO\` 下建 `release\<项目名>\`,**只复制运行时必需文件**(源码和构建文件不进):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p 'F:\pycode\wpf\src\WinFormsDesigner.Fx48\bin\Debug\net48\Samples\COOO\release\<项目名>'
|
||||||
|
cp 'F:\...\scr\<项目名>\<项目名>.exe' 'F:\...\release\<项目名>\/'
|
||||||
|
cp 'F:\...\scr\<项目名>\AdvancedDataGridView.dll' 'F:\...\release\<项目名>\/' # 按实际依赖
|
||||||
|
cp 'F:\...\scr\<项目名>\app.ico' 'F:\...\release\<项目名>\/' # 若有图标
|
||||||
|
```
|
||||||
|
|
||||||
|
### 第 3 步:检查 Inno Setup 环境 + 中文语言包
|
||||||
|
|
||||||
|
**检查 Inno Setup**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ls 'C:\Program Files (x86)\Inno Setup 6\ISCC.exe' 2>&1 && echo 'Inno Setup 已安装' || echo '未安装,需先装 Inno Setup 6'
|
||||||
|
```
|
||||||
|
|
||||||
|
**中文语言包**:Inno Setup 6 **默认不带中文简体语言包**。要做中文界面必须下载 `ChineseSimplified.isl` 放到 `C:\Program Files (x86)\Inno Setup 6\Languages\`(需管理员权限)。下载用 kira-96 社区维护版(已验证可用):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. 下载到可写位置
|
||||||
|
curl -sL -o ChineseSimplified.isl 'https://raw.githubusercontent.com/kira-96/Inno-Setup-Chinese-Simplified-Translation/main/ChineseSimplified.isl'
|
||||||
|
|
||||||
|
# 2. 需管理员权限复制到 Program Files
|
||||||
|
powershell -NoProfile -Command "Start-Process cmd -ArgumentList '/c copy /Y ChineseSimplified.isl \"C:\Program Files (x86)\Inno Setup 6\Languages\\\"' -Verb RunAs -Wait"
|
||||||
|
|
||||||
|
# 3. 验证
|
||||||
|
ls 'C:\Program Files (x86)\Inno Setup 6\Languages\ChineseSimplified.isl'
|
||||||
|
```
|
||||||
|
|
||||||
|
> ⚠️ **下载的语言包必须带 UTF-8 BOM**。下载后检查,没有 BOM 就补一个,否则中文界面会乱码:
|
||||||
|
> ```bash
|
||||||
|
> python -c "
|
||||||
|
> import os
|
||||||
|
> p=r'C:\Program Files (x86)\Inno Setup 6\Languages\ChineseSimplified.isl'
|
||||||
|
> d=open(p,'rb').read()
|
||||||
|
> if d[:3]!=b'\xef\xbb\xbf': open(p,'wb').write(b'\xef\xbb\xbf'+d); print('已补 BOM')
|
||||||
|
> "
|
||||||
|
> ```
|
||||||
|
> (Program Files 需要管理员权限写入,可能要提权 PowerShell 跑。)
|
||||||
|
|
||||||
|
### 第 4 步:编写 setup.iss 脚本
|
||||||
|
|
||||||
|
在 `release\<项目名>\` 目录下建 `setup.iss`。下面是**实战验证过的完整模板**(GCS 铜排壳体计算项目),按需替换 `<...>` 占位:
|
||||||
|
|
||||||
|
```iss
|
||||||
|
; ============================================================
|
||||||
|
; <项目名> 安装包脚本 — Inno Setup 6
|
||||||
|
; 文件必须保存为 UTF-8 with BOM 编码(中文才能正确显示)
|
||||||
|
; ============================================================
|
||||||
|
|
||||||
|
[Setup]
|
||||||
|
AppName=<项目显示名>
|
||||||
|
AppVersion=1.0
|
||||||
|
AppPublisher=<作者或公司>
|
||||||
|
DefaultDirName=C:\<项目目录名>
|
||||||
|
DefaultGroupName=<项目显示名>
|
||||||
|
DisableProgramGroupPage=yes
|
||||||
|
OutputDir=Output
|
||||||
|
OutputBaseFilename=<项目名>_Setup
|
||||||
|
Compression=lzma2
|
||||||
|
SolidCompression=yes
|
||||||
|
WizardStyle=modern
|
||||||
|
ArchitecturesAllowed=x64
|
||||||
|
ArchitecturesInstallIn64BitMode=x64
|
||||||
|
PrivilegesRequired=admin
|
||||||
|
|
||||||
|
; 安装包自身图标(用程序的 app.ico)
|
||||||
|
SetupIconFile=app.ico
|
||||||
|
UninstallDisplayIcon={app}\app.ico
|
||||||
|
UninstallDisplayName=<项目显示名>
|
||||||
|
|
||||||
|
[Languages]
|
||||||
|
Name: "chinesesimp"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
|
||||||
|
|
||||||
|
[Tasks]
|
||||||
|
Name: "desktopicon"; Description: "创建桌面快捷方式(&D)"; GroupDescription: "附加图标:"
|
||||||
|
|
||||||
|
[Files]
|
||||||
|
Source: "<项目名>.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
|
Source: "<第三方DLL>.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
|
Source: "app.ico"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
|
|
||||||
|
[Icons]
|
||||||
|
; 开始菜单快捷方式
|
||||||
|
Name: "{group}\<项目显示名>"; Filename: "{app}\<项目名>.exe"; IconFilename: "{app}\app.ico"; Comment: "<项目描述>"
|
||||||
|
Name: "{group}\卸载 <项目显示名>"; Filename: "{uninstallexe}"
|
||||||
|
; 桌面快捷方式
|
||||||
|
Name: "{commondesktop}\<项目显示名>"; Filename: "{app}\<项目名>.exe"; IconFilename: "{app}\app.ico"; Tasks: desktopicon
|
||||||
|
|
||||||
|
[Run]
|
||||||
|
; 安装完成可选启动
|
||||||
|
Filename: "{app}\<项目名>.exe"; Description: "立即启动 <项目显示名>"; Flags: nowait postinstall skipifsilent
|
||||||
|
|
||||||
|
[UninstallDelete]
|
||||||
|
; 卸载时彻底清理 {app} 目录
|
||||||
|
Type: filesandordirs; Name: "{app}"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### setup.iss 段语法说明
|
||||||
|
|
||||||
|
| 段 | 作用 |
|
||||||
|
|----|------|
|
||||||
|
| `[Setup]` | 安装包基本信息、压缩、平台、权限。`DefaultDirName` = 默认安装位置(`{pf}` = Program Files,或直接写 `C:\xxx`)|
|
||||||
|
| `[Languages]` | 界面语言。中文用 `chinesesimp` + `ChineseSimplified.isl` |
|
||||||
|
| `[Tasks]` | 可勾选任务。桌面快捷方式任务默认勾选(**不要加 `Flags: checked`**,新版不认)|
|
||||||
|
| `[Files]` | 要打包的文件。`Flags: ignoreversion` = 不比对版本直接覆盖 |
|
||||||
|
| `[Icons]` | 快捷方式。`{group}` = 开始菜单文件夹,`{app}` = 安装目录,`{commondesktop}` = 公共桌面 |
|
||||||
|
| `[Run]` | 安装后动作。`postinstall` = 勾选"立即启动",`skipifsilent` = 静默安装时不启动 |
|
||||||
|
| `[UninstallDelete]` | 卸载时额外删除。`filesandordirs` 删整个目录及内容 |
|
||||||
|
|
||||||
|
#### ⚠️ setup.iss 的两个必做细节
|
||||||
|
|
||||||
|
**细节 1:必须 UTF-8 with BOM 编码**。中文(AppName、说明等)才能正确显示,否则装界面是乱码。写完 .iss 后检查并补 BOM:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python -c "
|
||||||
|
data = open('setup.iss','rb').read()
|
||||||
|
if data[:3] != b'\xef\xbb\xbf':
|
||||||
|
open('setup.iss','wb').write(b'\xef\xbb\xbf' + data)
|
||||||
|
print('已加 UTF-8 BOM')
|
||||||
|
"
|
||||||
|
```
|
||||||
|
|
||||||
|
**细节 2:`[Tasks]` 桌面快捷方式不要写 `Flags: checked`**。新版 Inno Setup 不认这个 flag,编译报 "Parameter Flags includes an unknown flag"。任务默认就是勾选的,直接省略 Flags。
|
||||||
|
|
||||||
|
### 第 5 步:编译安装包
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd 'F:\pycode\wpf\src\WinFormsDesigner.Fx48\bin\Debug\net48\Samples\COOO\release\<项目名>'
|
||||||
|
'C:\Program Files (x86)\Inno Setup 6\ISCC.exe' setup.iss 2>&1 | tail -5
|
||||||
|
```
|
||||||
|
|
||||||
|
**成功标志**:末尾输出 `Successful compile`,并在 `Output\<项目名>_Setup.exe` 生成安装包(通常 1~3 MB,LZMA2 压缩后远小于源文件总和)。
|
||||||
|
|
||||||
|
> 编译时 `Warning: A message named "..." has not been defined for "chinesesimp"` 是**正常的**——中文语言包版本与 Inno Setup 主程序版本不完全同步,缺失的消息自动用英文 Default.isl 回退,不影响功能。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 发布目录最终结构
|
||||||
|
|
||||||
|
```
|
||||||
|
Samples\COOO\release\<项目名>\
|
||||||
|
├── <项目名>.exe ← 编译产物
|
||||||
|
├── <第三方DLL>.dll ← 依赖
|
||||||
|
├── app.ico ← 图标
|
||||||
|
├── setup.iss ← Inno Setup 脚本(源文件,留着方便改版重打包)
|
||||||
|
└── Output\
|
||||||
|
└── <项目名>_Setup.exe ← 最终交付的安装包
|
||||||
|
```
|
||||||
|
|
||||||
|
**交付物就是 `Output\<项目名>_Setup.exe` 这一个文件**,用户双击即可安装,自带中文向导、快捷方式、卸载项。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 图标制作(可选,让 exe 有专属图标)
|
||||||
|
|
||||||
|
如果想给程序做专属图标嵌入 exe,详见 `references/icon-generation.md`(Pillow 纯 Python 绘制多尺寸 ICO 的完整模板,零原生依赖)。
|
||||||
|
|
||||||
|
简要流程:
|
||||||
|
1. 用 Pillow 绘制 512×512 图标 → 存成多尺寸 `app.ico`
|
||||||
|
2. 编译时在 `build.rsp` 加 `/win32icon:app.ico`
|
||||||
|
3. 窗体构造函数加 `LoadAppIcon()`(`Icon.ExtractAssociatedIcon`),让窗口/任务栏也显示图标
|
||||||
|
|
||||||
|
> 图标嵌入 exe 是**编译环节**做的事(/win32icon 是 csc 参数),打包环节只是把已有的 app.ico 一起带进安装包用于快捷方式。两环节配合。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 常见问题排查
|
||||||
|
|
||||||
|
| 现象 | 原因 | 解决 |
|
||||||
|
|------|------|------|
|
||||||
|
| 安装界面中文乱码 | setup.iss 不是 UTF-8 BOM 编码 | 按第 4 步"细节 1"补 BOM 后重新编译 |
|
||||||
|
| `Couldn't open include file "...ChineseSimplified.isl"` | 没装中文语言包 | 按第 3 步下载 ChineseSimplified.isl 到 Inno Setup 的 Languages 目录 |
|
||||||
|
| 中文语言包装了还乱码 | 语言包 .isl 没 UTF-8 BOM | 给 .isl 文件补 BOM(需管理员权限)|
|
||||||
|
| `Parameter "Flags" includes an unknown flag` | `[Tasks]` 写了 `Flags: checked` | 删掉 `Flags: checked`,任务默认就勾选 |
|
||||||
|
| 安装到 Program Files 后程序保存配置报错 | exe 目录无写入权限 | 程序里配置文件改存 `%APPDATA%\<项目名>\`(用 `Environment.SpecialFolder.ApplicationData`),并在 `[UninstallDelete]` 加 `{userappdata}\<项目名>` 卸载时清理 |
|
||||||
|
| 装的 exe 双击没反应 | 缺少第三方 DLL | 检查 `[Files]` 是否把所有依赖 DLL 都打包了 |
|
||||||
|
| 卸载后配置文件残留 | `[UninstallDelete]` 没覆盖配置目录 | 加 `Type: filesandordirs; Name: "{userappdata}\<项目名>"` |
|
||||||
|
| `error CS0016: 未能写入输出文件`(重新编译 exe 时) | exe 被安装包运行的进程占用 | 先关掉运行中的程序再重新编译 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 发布前的完整流程(汇总)
|
||||||
|
|
||||||
|
```
|
||||||
|
1. [编译] 改完 .cs → 用 winforms-designer-compile 编译出 exe
|
||||||
|
2. [识别] 读 dependencies.txt 确定依赖 DLL
|
||||||
|
3. [建目录] 建 release\<项目名>\,复制 exe + DLL + ico
|
||||||
|
4. [写脚本] 写 setup.iss(用模板,改占位)+ 确保有 UTF-8 BOM
|
||||||
|
5. [语言包] 确认装了中文语言包(没有就下载,记得带 BOM)
|
||||||
|
6. [编译包] ISCC.exe setup.iss → 生成 Output\<项目名>_Setup.exe
|
||||||
|
7. [交付] 不做任何测试安装(见顶部铁律)——把 Output\<项目名>_Setup.exe 直接交给用户,由用户自行安装测试
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏭 项目专章:成套报价软件 完整发版体系(2026-10-01 定稿,用户强制)
|
||||||
|
|
||||||
|
> 仓库根:`C:\Users\099978\Documents\SharpDevelop Projects\成套报价软件`。
|
||||||
|
> 该项目发版**不走上面的通用 5 步**,走下面的 **8 步固定链**(多了版本号递增、更新包、git、Gitea Release 环节)。
|
||||||
|
> 用户说"打包/发版/上传到 git"针对本项目时,必须按本节执行,顺序不可换。
|
||||||
|
|
||||||
|
```
|
||||||
|
① 递增版本号 → ② 清进程+编译 → ③ make_package 组装 → ④ ISCC 安装包
|
||||||
|
→ ⑤ make_update_package 更新包 → ⑥ git 提交推送 → ⑦ Gitea Release → ⑧ 验收
|
||||||
|
```
|
||||||
|
|
||||||
|
### ① 递增版本号(版本号铁律:每次发版必须递增)
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
powershell -File tools\递增版本号.ps1 # 修订号+1;大版本: tools\递增版本号.ps1 1.1.0
|
||||||
|
```
|
||||||
|
唯一事实源 = `成套报价软件\Properties\AssemblyInfo.cs` 的 AssemblyVersion(脚本同步 setup.iss 的 AppVersion 与安装包文件名)。关于软件页运行时自动读程序集版本。输出必须显示两处 `[OK]`。
|
||||||
|
|
||||||
|
### ② 清进程 + 编译
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
Get-Process | Where-Object { $_.Path -like '*成套报价软件*' -or $_.Path -like '*SharpDevelop Projects*' } | Stop-Process -Force
|
||||||
|
cd 成套报价软件 # ★ rsp 相对路径基于此子目录,在仓库根跑必报 CS2001
|
||||||
|
& "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" "@..\tools\verify_build.rsp" /warn:1
|
||||||
|
```
|
||||||
|
ExitCode=0 且无 warning 才继续(rsp 默认 /warn:0 压警告,排查必须 /warn:1)。
|
||||||
|
|
||||||
|
### ③ 组装发布目录
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python tools\make_package.py # 仓库根跑
|
||||||
|
```
|
||||||
|
核对输出:`DLL 复制完成,缺失: 无`;cadbt 段只有 node+CAD-Viewer(独立扒图 exe 已于 2026-10-01 退役);无 `!!` 警告。
|
||||||
|
|
||||||
|
### ④ ISCC 安装包
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" "release\成套报价软件\setup.iss"
|
||||||
|
```
|
||||||
|
lzma2 约 2 分钟;产物 `release\成套报价软件\Output\成套报价软件_Setup_<版本>.exe`(约 120MB);`Successful compile` 才算成。中文语言包已装(chinesesimp 消息缺失 Warning 属正常)。
|
||||||
|
|
||||||
|
### ⑤ 更新包
|
||||||
|
|
||||||
|
先改 `tools\make_update_package.py` 两处:`PKG` 目录名带版本(如 `更新包_1.0.4`)+ `说明` 本期文案(只写用户可感知变化;使用方法写清覆盖哪个文件、怎么验证版本)。再跑 `python tools\make_update_package.py`。当前只含 成套报价软件.exe+使用说明(<1MB)。
|
||||||
|
|
||||||
|
### ⑥ git 提交推送
|
||||||
|
|
||||||
|
`git add -A` → `git commit -m "发版 v<版本>:..."` → `git push`(remote 已内嵌令牌)。
|
||||||
|
|
||||||
|
### ⑦ Gitea Release
|
||||||
|
|
||||||
|
tag=`v<版本>`(与 AssemblyInfo 一致)。PowerShell API 模式(令牌与仓库地址见 sd-enhanced-components 技能第 8 条或项目记忆):
|
||||||
|
- 建 Release:`Invoke-RestMethod -Method Post -Headers @{Authorization="token <令牌>"} -ContentType 'application/json; charset=utf-8' -Body ([Text.Encoding]::UTF8.GetBytes($body))`——**中文 body 必须 UTF8.GetBytes 否则乱码**
|
||||||
|
- 传附件:`System.Net.Http.HttpClient` + `MultipartFormDataContent`(字段名 `attachment`,PS5.1 无 -Form)
|
||||||
|
- Release 说明与更新包说明同源
|
||||||
|
|
||||||
|
### ⑧ 验收
|
||||||
|
|
||||||
|
附件大小合理(Setup ~120MB、更新包 <1MB);提醒用户装机验证:**关于软件页显示 v<版本>**、CAD/PDF 扒图窗口可用。
|
||||||
|
|
||||||
|
### 故障速查(本项目专属)
|
||||||
|
|
||||||
|
| 现象 | 处置 |
|
||||||
|
|------|------|
|
||||||
|
| 组装/替换文件报"正在使用" | ② 的进程没杀干净(查 node/AI 引擎/主程序) |
|
||||||
|
| 编译报 CS2001 全部源文件找不到 | 工作目录错了——必须 `成套报价软件\` 子目录 |
|
||||||
|
| ISCC 报文件找不到 | make_package 没跑或发布目录被清,回到 ③ |
|
||||||
|
| Release 附件上传 401 | 令牌失效——请用户在 Gitea 设置→应用重新生成(git remote 和 API 同步换) |
|
||||||
|
| push 被拒 fetch first | 用户网页传过文件——`git pull --rebase` 再 push,绝不 force push |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 配套技能
|
||||||
|
|
||||||
|
- **winforms-designer-compile**:本技能的上游。先用它把 .cs + .ui.cs 编译成 exe,再交给本技能打包。
|
||||||
|
- **winforms-designer-xml**:生成/校验窗体 XML 布局,是整个流水线(XML → 编译 → 打包)的起点。
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
# 图标生成(Pillow 纯 Python 绘制 → 多尺寸 ICO)
|
||||||
|
|
||||||
|
用 Pillow 直接绘制图标 → 多尺寸 `.ico`,嵌入 exe。**纯 Python,零原生依赖**(不依赖 cairo/svglib,那些需要 `libcairo-2.dll`,Windows 上通常没有)。
|
||||||
|
|
||||||
|
> 本模板在 GCS 铜排壳体计算项目中验证过,产出 `app.ico`(16/32/48/64/128/256 六尺寸),通过 `/win32icon:app.ico` 嵌入 exe,并在所有窗体构造函数里 `ExtractAssociatedIcon` 设置窗口/任务栏图标。
|
||||||
|
|
||||||
|
## 为什么不用 SVG→ICO
|
||||||
|
|
||||||
|
常规路径 cairosvg / svglib+reportlab 都依赖原生 `libcairo-2.dll`,Windows 默认没有,装起来麻烦。**Pillow 直接画** 是零依赖、最稳的方案,缺点是只能画几何图形(渐变、滤镜要自己用代码模拟)。
|
||||||
|
|
||||||
|
## 核心思路
|
||||||
|
|
||||||
|
1. **高分辨率绘制**:在 512×512 画布上画完整图标(细节清晰)
|
||||||
|
2. **Pillow 自动缩放**:保存 ICO 时传 `sizes=[(16,16),(32,32),...]`,Pillow 自动从大图缩出各尺寸
|
||||||
|
3. **模拟渐变**:逐行/逐列插值颜色(`lerp_color`),Pillow 没有原生渐变填充
|
||||||
|
4. **圆角矩形**:用临时 mask 层 `rounded_rectangle` 做遮罩,再 paste
|
||||||
|
|
||||||
|
## 完整模板(铜排+闪电图标,可直接改色改形)
|
||||||
|
|
||||||
|
```python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""用 Pillow 绘制图标 -> 多尺寸 app.ico。纯 Python,零原生依赖。
|
||||||
|
设计:深蓝→青蓝渐变圆角背景 + 三根铜排 + 接线端子 + 闪电(电流)。"""
|
||||||
|
import os
|
||||||
|
from PIL import Image, ImageDraw
|
||||||
|
|
||||||
|
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
ICO_PATH = os.path.join(SCRIPT_DIR, "app.ico")
|
||||||
|
SIZES = [16, 32, 48, 64, 128, 256]
|
||||||
|
RENDER_SIZE = 512 # 高分辨率绘制
|
||||||
|
|
||||||
|
|
||||||
|
def lerp_color(c1, c2, t):
|
||||||
|
"""线性插值两个 (r,g,b) 颜色,t∈[0,1]。"""
|
||||||
|
return (
|
||||||
|
int(c1[0] + (c2[0] - c1[0]) * t),
|
||||||
|
int(c1[1] + (c2[1] - c1[1]) * t),
|
||||||
|
int(c1[2] + (c2[2] - c1[2]) * t),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def draw_gradient_rect(img, box, c_top, c_mid, c_bot, radius):
|
||||||
|
"""带垂直渐变的圆角矩形。用逐行填充近似渐变 + 圆角 mask。"""
|
||||||
|
x0, y0, x1, y1 = box
|
||||||
|
w, h = x1 - x0, y1 - y0
|
||||||
|
grad = Image.new("RGBA", (w, h), (0, 0, 0, 0))
|
||||||
|
gp = grad.load()
|
||||||
|
for y in range(h):
|
||||||
|
t = y / max(h - 1, 1)
|
||||||
|
if t < 0.55:
|
||||||
|
c = lerp_color(c_top, c_mid, t / 0.55)
|
||||||
|
else:
|
||||||
|
c = lerp_color(c_mid, c_bot, (t - 0.55) / 0.45)
|
||||||
|
for x in range(w):
|
||||||
|
gp[x, y] = (c[0], c[1], c[2], 255)
|
||||||
|
mask = Image.new("L", (w, h), 0)
|
||||||
|
ImageDraw.Draw(mask).rounded_rectangle([0, 0, w - 1, h - 1], radius=radius, fill=255)
|
||||||
|
img.paste(grad, (x0, y0), mask)
|
||||||
|
|
||||||
|
|
||||||
|
def draw_copper_bar(img, box, radius):
|
||||||
|
"""画一根铜排:铜橙→金黄渐变 + 左侧高光条。box=(x,y,w,h)。"""
|
||||||
|
bx, by, bw, bh = box
|
||||||
|
c_top, c_mid, c_bot = (255, 210, 127), (232, 163, 61), (181, 101, 29)
|
||||||
|
grad = Image.new("RGBA", (bw, bh), (0, 0, 0, 0))
|
||||||
|
gp = grad.load()
|
||||||
|
for y in range(bh):
|
||||||
|
t = y / max(bh - 1, 1)
|
||||||
|
c = lerp_color(c_top, c_mid, t / 0.45) if t < 0.45 else lerp_color(c_mid, c_bot, (t - 0.45) / 0.55)
|
||||||
|
for x in range(bw):
|
||||||
|
gp[x, y] = (c[0], c[1], c[2], 255)
|
||||||
|
mask = Image.new("L", (bw, bh), 0)
|
||||||
|
ImageDraw.Draw(mask).rounded_rectangle([0, 0, bw - 1, bh - 1], radius=radius, fill=255)
|
||||||
|
img.paste(grad, (bx, by), mask)
|
||||||
|
# 高光条
|
||||||
|
shine_w = max(bw // 4, 6)
|
||||||
|
shine = Image.new("RGBA", (shine_w, bh - 10), (0, 0, 0, 0))
|
||||||
|
sp = shine.load()
|
||||||
|
for y in range(shine.height):
|
||||||
|
a = int(180 * (1 - y / shine.height))
|
||||||
|
for x in range(shine_w):
|
||||||
|
sp[x, y] = (255, 255, 255, a)
|
||||||
|
smask = Image.new("L", (shine_w, shine.height), 0)
|
||||||
|
ImageDraw.Draw(smask).rounded_rectangle([0, 0, shine_w - 1, shine.height - 1], radius=max(radius - 2, 2), fill=255)
|
||||||
|
img.paste(shine, (bx + bw // 6, by + 5), smask)
|
||||||
|
|
||||||
|
|
||||||
|
def draw_lightning(img, cx, cy, scale):
|
||||||
|
"""画一道闪电。金黄色,带白色描边。"""
|
||||||
|
pts = [(4, -34), (-10, 4), (2, 4), (-8, 30), (16, -4), (4, -4)]
|
||||||
|
pts = [(cx + p[0] * scale, cy + p[1] * scale) for p in pts]
|
||||||
|
d = ImageDraw.Draw(img)
|
||||||
|
for dx, dy in [(-2, 0), (2, 0), (0, -2), (0, 2), (-2, -2), (2, 2), (-2, 2), (2, -2)]:
|
||||||
|
d.polygon([(p[0] + dx, p[1] + dy) for p in pts], fill=(255, 255, 255, 255))
|
||||||
|
d.polygon(pts, fill=(255, 224, 102, 255))
|
||||||
|
|
||||||
|
|
||||||
|
def draw_terminal(img, cx, cy, r):
|
||||||
|
"""铜排顶部接线端子。"""
|
||||||
|
d = ImageDraw.Draw(img)
|
||||||
|
d.ellipse([cx - r, cy - r, cx + r, cy + r], fill=(244, 228, 188, 255),
|
||||||
|
outline=(139, 90, 43, 255), width=2)
|
||||||
|
d.ellipse([cx - r // 3, cy - r // 3, cx + r // 3, cy + r // 3], fill=(58, 36, 16, 255))
|
||||||
|
|
||||||
|
|
||||||
|
def draw_icon(size):
|
||||||
|
s = size
|
||||||
|
img = Image.new("RGBA", (s, s), (0, 0, 0, 0))
|
||||||
|
margin = int(s * 0.03)
|
||||||
|
radius = int(s * 0.17)
|
||||||
|
# 背景渐变
|
||||||
|
draw_gradient_rect(img, (margin, margin, s - margin, s - margin),
|
||||||
|
c_top=(15, 61, 94), c_mid=(27, 108, 168), c_bot=(42, 157, 143),
|
||||||
|
radius=radius)
|
||||||
|
# 三根铜排(长短递减)
|
||||||
|
bar_w = int(s * 0.133)
|
||||||
|
bar_radius = max(int(s * 0.023), 3)
|
||||||
|
bars = [
|
||||||
|
(int(s * 0.227), int(s * 0.203), int(s * 0.594)), # 最长
|
||||||
|
(int(s * 0.434), int(s * 0.281), int(s * 0.516)),
|
||||||
|
(int(s * 0.641), int(s * 0.375), int(s * 0.422)), # 最短
|
||||||
|
]
|
||||||
|
term_r = int(s * 0.027)
|
||||||
|
for bx, by, bh in bars:
|
||||||
|
draw_terminal(img, bx + bar_w // 2, by - term_r + 2, term_r)
|
||||||
|
draw_copper_bar(img, (bx, by, bar_w, bh), bar_radius)
|
||||||
|
# 闪电
|
||||||
|
draw_lightning(img, int(s * 0.512), int(s * 0.613), s / 512.0)
|
||||||
|
return img
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
hi = draw_icon(RENDER_SIZE)
|
||||||
|
hi.save(ICO_PATH, format="ICO", sizes=[(sz, sz) for sz in SIZES])
|
||||||
|
print("已生成:", ICO_PATH, "尺寸:", SIZES)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
```
|
||||||
|
|
||||||
|
## 改造成其他图标
|
||||||
|
|
||||||
|
要换图标主题时,改 3 处:
|
||||||
|
1. **背景色**:`draw_gradient_rect` 的 `c_top/c_mid/c_bot`(RGB 三元组)
|
||||||
|
2. **主体元素**:替换 `draw_copper_bar` / `draw_lightning` 为你要画的元素(用 `ImageDraw` 的 ellipse/rectangle/polygon/line)
|
||||||
|
3. **布局坐标**:`draw_icon` 里各元素的 x/y/w/h(按 `s * 比例` 计算,这样任意尺寸都自适应)
|
||||||
|
|
||||||
|
## 嵌入 exe 的两步(配合 SKILL.md 主文档)
|
||||||
|
|
||||||
|
**1) 编译加参数**:`build.rsp` 或 csc 命令加 `/win32icon:app.ico`
|
||||||
|
|
||||||
|
**2) 窗体加图标加载代码**(exe 嵌入图标后,Form 默认不自动用它):
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
private void LoadAppIcon()
|
||||||
|
{
|
||||||
|
try { this.Icon = System.Drawing.Icon.ExtractAssociatedIcon(
|
||||||
|
System.Windows.Forms.Application.ExecutablePath); }
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
|
// 在每个窗体构造函数 InitializeComponent() 之后调用 LoadAppIcon();
|
||||||
|
```
|
||||||
|
|
||||||
|
这样 exe 文件图标、窗口标题栏、任务栏、Alt+Tab 都显示这个图标。
|
||||||
|
|
||||||
|
## 小尺寸清晰度技巧
|
||||||
|
|
||||||
|
- 16×16 这种小尺寸,复杂图案会糊成一片。设计时**主体元素要大、要少**(1~3 个),避免细节。
|
||||||
|
- Pillow 从 512 缩到 16 用的是抗锯齿,比手画 16 清晰。如果还是糊,可以 `draw_icon(16)` 单独画一版简化图标(只保留最核心的轮廓)再合并到 ICO。
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
电气成套设备报价桌面软件:报价三表(图号/箱号/元件)+ CAD/PDF 图纸扒图 + 元件库选型 + 公式计算 + 甲方报表,单机 SQLite 存储,可选 AI 助手与云端会员服务。
|
电气成套设备报价桌面软件:报价三表(图号/箱号/元件)+ CAD/PDF 图纸扒图 + 元件库选型 + 公式计算 + 甲方报表,单机 SQLite 存储,可选 AI 助手与云端会员服务。
|
||||||
|
|
||||||
> **改代码前必读**:[代码索引.md](代码索引.md)(所有功能的文件/方法级定位 + 修改铁律)
|
> **改代码前必读**:[代码索引.md](代码索引.md)(所有功能的文件/方法级定位 + 修改铁律)
|
||||||
|
> **新机器部署/打包必读**:[部署打包指南.md](部署打包指南.md)(从 git 克隆到可编译可打包的完整步骤 + 工具链 + 常见问题)
|
||||||
> **组件属性手册**:`.agents\skills\sd-enhanced-components\SKILL.md`(WinForms 控件白名单、设计器规则、版本号铁律、git 推送排查手册)
|
> **组件属性手册**:`.agents\skills\sd-enhanced-components\SKILL.md`(WinForms 控件白名单、设计器规则、版本号铁律、git 推送排查手册)
|
||||||
|
|
||||||
## 功能概览
|
## 功能概览
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ end;
|
|||||||
[Setup]
|
[Setup]
|
||||||
AppName=成套报价软件
|
AppName=成套报价软件
|
||||||
; ★ 版本号与 AssemblyInfo.cs 的 AssemblyVersion 同步(tools\递增版本号.ps1 统一递增)
|
; ★ 版本号与 AssemblyInfo.cs 的 AssemblyVersion 同步(tools\递增版本号.ps1 统一递增)
|
||||||
AppVersion=1.0.4
|
AppVersion=1.0.5
|
||||||
AppPublisher=成套报价软件
|
AppPublisher=成套报价软件
|
||||||
AppId={{8F3A7C21-6B54-4E2D-9A71-5C8B20260825}
|
AppId={{8F3A7C21-6B54-4E2D-9A71-5C8B20260825}
|
||||||
DefaultDirName=C:\成套报价软件
|
DefaultDirName=C:\成套报价软件
|
||||||
@@ -46,7 +46,7 @@ DefaultGroupName=成套报价软件
|
|||||||
DisableProgramGroupPage=yes
|
DisableProgramGroupPage=yes
|
||||||
OutputDir=Output
|
OutputDir=Output
|
||||||
; ★ 安装包文件名带版本号(多版本下载不混淆),与 AppVersion 同步
|
; ★ 安装包文件名带版本号(多版本下载不混淆),与 AppVersion 同步
|
||||||
OutputBaseFilename=成套报价软件_Setup_1.0.4
|
OutputBaseFilename=成套报价软件_Setup_1.0.5
|
||||||
Compression=lzma2
|
Compression=lzma2
|
||||||
SolidCompression=yes
|
SolidCompression=yes
|
||||||
WizardStyle=modern
|
WizardStyle=modern
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""组装更新包_1.0.4: 成套报价软件.exe + 使用说明.txt → 目录 + zip"""
|
"""组装更新包_1.0.5: 成套报价软件.exe + 使用说明.txt → 目录 + zip"""
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import zipfile
|
import zipfile
|
||||||
@@ -7,31 +7,23 @@ import zipfile
|
|||||||
ROOT = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), ".."))
|
ROOT = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), ".."))
|
||||||
REL = os.path.join(ROOT, "release", "成套报价软件")
|
REL = os.path.join(ROOT, "release", "成套报价软件")
|
||||||
OUT = os.path.join(REL, "Output")
|
OUT = os.path.join(REL, "Output")
|
||||||
PKG = os.path.join(OUT, "更新包_1.0.4")
|
PKG = os.path.join(OUT, "更新包_1.0.5")
|
||||||
|
|
||||||
说明 = """成套报价软件 更新包 v1.0.4(覆盖式更新)
|
说明 = """成套报价软件 更新包 v1.0.5(覆盖式更新)
|
||||||
|
|
||||||
本期更新(v1.0.4,2026-10-01):
|
本期更新(v1.0.5,2026-10-02):
|
||||||
一、版本号体系(重点)
|
一、选型页新增筛选功能(重点)
|
||||||
软件正式引入版本号管理:关于软件页显示版本 v1.0.4,
|
选型页顶栏新增筛选框+筛选按钮:输入关键字(如元件名称或型号片段),
|
||||||
安装包文件名带版本号,今后每版递增、更新可追溯。
|
点"筛选"或按回车,汇总表只在 元件名称/规格/图纸规格 三列中
|
||||||
二、独立扒图程序退役(结构精简)
|
模糊匹配显示;按钮变"清除"后点击恢复全部行;
|
||||||
CAD/PDF 扒图独立程序(cadbt.exe/pdfbt.exe)不再随软件安装——
|
用过的关键字自动保留下拉历史,方便复用。
|
||||||
全部扒图功能由主程序内嵌窗口承载,功能无任何减少;
|
|
||||||
安装包体积明显减小,升级更干净。
|
|
||||||
三、PDF 扒图缩放流畅(上期修复延续)
|
|
||||||
大幅面图纸滚轮缩放即时跟手,不再卡顿。
|
|
||||||
四、数据落库与查询提速(上期优化延续)
|
|
||||||
关窗数据完整落库;项目库/方案库查询索引优化。
|
|
||||||
五、稳定性
|
|
||||||
后台异常写入日志(安装目录 logs),便于远程排查。
|
|
||||||
|
|
||||||
使用方法:
|
使用方法:
|
||||||
1. 完全关闭成套报价软件;
|
1. 完全关闭成套报价软件;
|
||||||
2. 把本包里「成套报价软件.exe」复制到安装目录(默认 C:\\成套报价软件)覆盖;
|
2. 把本包里「成套报价软件.exe」复制到安装目录(默认 C:\\成套报价软件)覆盖;
|
||||||
3. 重新打开软件,关于软件页应显示 v1.0.4。
|
3. 重新打开软件,关于软件页应显示 v1.0.5。
|
||||||
|
|
||||||
(完整安装包 成套报价软件_Setup_1.0.4.exe 已同步构建,全新机器请用安装包。)
|
(完整安装包 成套报价软件_Setup_1.0.5.exe 已同步构建,全新机器请用安装包。)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+407
-323
@@ -46,6 +46,8 @@ namespace 成套报价软件
|
|||||||
public System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn31;
|
public System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn31;
|
||||||
public System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn32;
|
public System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn32;
|
||||||
public System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn33;
|
public System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn33;
|
||||||
|
private System.Windows.Forms.Button button1;
|
||||||
|
private System.Windows.Forms.ComboBox comboBox1;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Disposes resources used by the form.
|
/// Disposes resources used by the form.
|
||||||
@@ -68,16 +70,20 @@ namespace 成套报价软件
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
this.components = new System.ComponentModel.Container();
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
this.splitContainer4 = new System.Windows.Forms.SplitContainer();
|
this.splitContainer4 = new System.Windows.Forms.SplitContainer();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit();
|
|
||||||
this.advancedDataGridView1 = new Smart.CustomComponents.EnhancedDataGridView();
|
this.advancedDataGridView1 = new Smart.CustomComponents.EnhancedDataGridView();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.advancedDataGridView1)).BeginInit();
|
|
||||||
this.panel5 = new System.Windows.Forms.Panel();
|
|
||||||
this.label4 = new System.Windows.Forms.Label();
|
|
||||||
this.comboBox5 = new System.Windows.Forms.ComboBox();
|
|
||||||
this.advancedDataGridView12 = new Smart.CustomComponents.EnhancedDataGridView();
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.advancedDataGridView12)).BeginInit();
|
|
||||||
this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
@@ -95,6 +101,10 @@ namespace 成套报价软件
|
|||||||
this.dataGridViewTextBoxColumn15 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.dataGridViewTextBoxColumn15 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
this.dataGridViewTextBoxColumn16 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.dataGridViewTextBoxColumn16 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
this.dataGridViewTextBoxColumn17 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.dataGridViewTextBoxColumn17 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
|
this.panel5 = new System.Windows.Forms.Panel();
|
||||||
|
this.label4 = new System.Windows.Forms.Label();
|
||||||
|
this.comboBox5 = new System.Windows.Forms.ComboBox();
|
||||||
|
this.advancedDataGridView12 = new Smart.CustomComponents.EnhancedDataGridView();
|
||||||
this.dataGridViewTextBoxColumn18 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.dataGridViewTextBoxColumn18 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
this.dataGridViewTextBoxColumn19 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.dataGridViewTextBoxColumn19 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
this.dataGridViewTextBoxColumn20 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.dataGridViewTextBoxColumn20 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
@@ -111,165 +121,52 @@ namespace 成套报价软件
|
|||||||
this.dataGridViewTextBoxColumn31 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.dataGridViewTextBoxColumn31 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
this.dataGridViewTextBoxColumn32 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.dataGridViewTextBoxColumn32 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
this.dataGridViewTextBoxColumn33 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
this.dataGridViewTextBoxColumn33 = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
|
this.comboBox1 = new System.Windows.Forms.ComboBox();
|
||||||
|
this.button1 = new System.Windows.Forms.Button();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit();
|
||||||
|
this.splitContainer4.Panel1.SuspendLayout();
|
||||||
|
this.splitContainer4.Panel2.SuspendLayout();
|
||||||
|
this.splitContainer4.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.advancedDataGridView1)).BeginInit();
|
||||||
|
this.panel5.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.advancedDataGridView12)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// splitContainer4
|
// splitContainer4
|
||||||
//
|
//
|
||||||
this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
||||||
this.splitContainer4.Orientation = System.Windows.Forms.Orientation.Horizontal;
|
|
||||||
this.splitContainer4.SplitterWidth = 6;
|
|
||||||
this.splitContainer4.BackColor = System.Drawing.Color.Transparent;
|
this.splitContainer4.BackColor = System.Drawing.Color.Transparent;
|
||||||
this.splitContainer4.TabIndex = 0;
|
this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.splitContainer4.Location = new System.Drawing.Point(0, 0);
|
||||||
this.splitContainer4.Name = "splitContainer4";
|
this.splitContainer4.Name = "splitContainer4";
|
||||||
|
this.splitContainer4.Orientation = System.Windows.Forms.Orientation.Horizontal;
|
||||||
//
|
//
|
||||||
// dataGridViewTextBoxColumn1
|
// splitContainer4.Panel1
|
||||||
//
|
//
|
||||||
this.dataGridViewTextBoxColumn1.HeaderText = "序号";
|
this.splitContainer4.Panel1.Controls.Add(this.advancedDataGridView1);
|
||||||
this.dataGridViewTextBoxColumn1.Width = 35;
|
this.splitContainer4.Panel1.Controls.Add(this.panel5);
|
||||||
this.dataGridViewTextBoxColumn1.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn1.DataPropertyName = "序号";
|
|
||||||
this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
this.dataGridViewTextBoxColumn1.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
|
||||||
//
|
//
|
||||||
// dataGridViewTextBoxColumn2
|
// splitContainer4.Panel2
|
||||||
//
|
//
|
||||||
this.dataGridViewTextBoxColumn2.HeaderText = "元件名称";
|
this.splitContainer4.Panel2.Controls.Add(this.advancedDataGridView12);
|
||||||
this.dataGridViewTextBoxColumn2.Width = 150;
|
this.splitContainer4.Size = new System.Drawing.Size(1352, 799);
|
||||||
this.dataGridViewTextBoxColumn2.ReadOnly = false;
|
this.splitContainer4.SplitterDistance = 551;
|
||||||
this.dataGridViewTextBoxColumn2.DataPropertyName = "元件名称";
|
this.splitContainer4.SplitterWidth = 6;
|
||||||
this.dataGridViewTextBoxColumn2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
this.splitContainer4.TabIndex = 0;
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn3
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn3.HeaderText = "规格";
|
|
||||||
this.dataGridViewTextBoxColumn3.Width = 150;
|
|
||||||
this.dataGridViewTextBoxColumn3.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn3.DataPropertyName = "规格";
|
|
||||||
this.dataGridViewTextBoxColumn3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn4
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn4.HeaderText = "单位";
|
|
||||||
this.dataGridViewTextBoxColumn4.Width = 35;
|
|
||||||
this.dataGridViewTextBoxColumn4.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn4.DataPropertyName = "单位";
|
|
||||||
this.dataGridViewTextBoxColumn4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
this.dataGridViewTextBoxColumn4.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn5
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn5.HeaderText = "数量";
|
|
||||||
this.dataGridViewTextBoxColumn5.Width = 40;
|
|
||||||
this.dataGridViewTextBoxColumn5.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn5.DataPropertyName = "数量";
|
|
||||||
this.dataGridViewTextBoxColumn5.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
this.dataGridViewTextBoxColumn5.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn6
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn6.HeaderText = "表价";
|
|
||||||
this.dataGridViewTextBoxColumn6.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn6.DataPropertyName = "表价";
|
|
||||||
this.dataGridViewTextBoxColumn6.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn7
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn7.HeaderText = "采购单价";
|
|
||||||
this.dataGridViewTextBoxColumn7.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn7.DataPropertyName = "采购单价";
|
|
||||||
this.dataGridViewTextBoxColumn7.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn8
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn8.HeaderText = "采购系数";
|
|
||||||
this.dataGridViewTextBoxColumn8.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn8.DataPropertyName = "采购系数";
|
|
||||||
this.dataGridViewTextBoxColumn8.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn9
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn9.HeaderText = "采购价";
|
|
||||||
this.dataGridViewTextBoxColumn9.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn9.DataPropertyName = "采购价";
|
|
||||||
this.dataGridViewTextBoxColumn9.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn10
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn10.HeaderText = "报出单价";
|
|
||||||
this.dataGridViewTextBoxColumn10.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn10.DataPropertyName = "报出单价";
|
|
||||||
this.dataGridViewTextBoxColumn10.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn11
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn11.HeaderText = "报出系数";
|
|
||||||
this.dataGridViewTextBoxColumn11.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn11.DataPropertyName = "报出系数";
|
|
||||||
this.dataGridViewTextBoxColumn11.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn12
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn12.HeaderText = "报出价";
|
|
||||||
this.dataGridViewTextBoxColumn12.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn12.DataPropertyName = "报出价";
|
|
||||||
this.dataGridViewTextBoxColumn12.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn13
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn13.HeaderText = "图纸规格";
|
|
||||||
this.dataGridViewTextBoxColumn13.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn13.DataPropertyName = "图纸规格";
|
|
||||||
this.dataGridViewTextBoxColumn13.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn14
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn14.HeaderText = "品牌";
|
|
||||||
this.dataGridViewTextBoxColumn14.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn14.DataPropertyName = "品牌";
|
|
||||||
this.dataGridViewTextBoxColumn14.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn15
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn15.HeaderText = "系列";
|
|
||||||
this.dataGridViewTextBoxColumn15.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn15.DataPropertyName = "系列";
|
|
||||||
this.dataGridViewTextBoxColumn15.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn16
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn16.HeaderText = "类型";
|
|
||||||
this.dataGridViewTextBoxColumn16.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn16.DataPropertyName = "类型";
|
|
||||||
this.dataGridViewTextBoxColumn16.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn17
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn17.HeaderText = "备注";
|
|
||||||
this.dataGridViewTextBoxColumn17.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn17.DataPropertyName = "备注";
|
|
||||||
this.dataGridViewTextBoxColumn17.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
//
|
||||||
// advancedDataGridView1
|
// advancedDataGridView1
|
||||||
//
|
//
|
||||||
this.advancedDataGridView1.ColumnHeadersDefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
|
||||||
this.advancedDataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
||||||
this.advancedDataGridView1.EnableExcelStyleSelection = true;
|
|
||||||
this.advancedDataGridView1.EnableCellPaste = true;
|
|
||||||
this.advancedDataGridView1.AllowUserToAddRows = false;
|
this.advancedDataGridView1.AllowUserToAddRows = false;
|
||||||
this.advancedDataGridView1.AllowUserToDeleteRows = true;
|
|
||||||
this.advancedDataGridView1.AllowUserToOrderColumns = false;
|
|
||||||
this.advancedDataGridView1.AllowUserToResizeRows = false;
|
this.advancedDataGridView1.AllowUserToResizeRows = false;
|
||||||
this.advancedDataGridView1.BackgroundColor = System.Drawing.Color.White;
|
this.advancedDataGridView1.BackgroundColor = System.Drawing.Color.White;
|
||||||
this.advancedDataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||||
this.advancedDataGridView1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Single;
|
dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
|
||||||
|
dataGridViewCellStyle1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||||
|
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
|
||||||
|
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
|
||||||
|
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.WindowText;
|
||||||
|
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
|
||||||
|
this.advancedDataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
|
||||||
this.advancedDataGridView1.ColumnHeadersHeight = 35;
|
this.advancedDataGridView1.ColumnHeadersHeight = 35;
|
||||||
this.advancedDataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnKeystroke;
|
|
||||||
this.advancedDataGridView1.EnableHeadersVisualStyles = false;
|
|
||||||
this.advancedDataGridView1.RowHeadersWidth = 41;
|
|
||||||
this.advancedDataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.RowHeaderSelect;
|
|
||||||
this.advancedDataGridView1.MultiSelect = false;
|
|
||||||
this.advancedDataGridView1.TabIndex = 0;
|
|
||||||
this.advancedDataGridView1.Name = "advancedDataGridView1";
|
|
||||||
this.advancedDataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
this.advancedDataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||||
this.dataGridViewTextBoxColumn1,
|
this.dataGridViewTextBoxColumn1,
|
||||||
this.dataGridViewTextBoxColumn2,
|
this.dataGridViewTextBoxColumn2,
|
||||||
@@ -288,195 +185,221 @@ namespace 成套报价软件
|
|||||||
this.dataGridViewTextBoxColumn15,
|
this.dataGridViewTextBoxColumn15,
|
||||||
this.dataGridViewTextBoxColumn16,
|
this.dataGridViewTextBoxColumn16,
|
||||||
this.dataGridViewTextBoxColumn17});
|
this.dataGridViewTextBoxColumn17});
|
||||||
|
dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
|
||||||
|
dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Window;
|
||||||
|
dataGridViewCellStyle5.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||||
|
dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||||
|
dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Window;
|
||||||
|
dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.ControlText;
|
||||||
|
dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
|
||||||
|
this.advancedDataGridView1.DefaultCellStyle = dataGridViewCellStyle5;
|
||||||
|
this.advancedDataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.advancedDataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnKeystroke;
|
||||||
|
this.advancedDataGridView1.EnableCellPaste = true;
|
||||||
|
this.advancedDataGridView1.EnableHeadersVisualStyles = false;
|
||||||
|
this.advancedDataGridView1.Location = new System.Drawing.Point(0, 38);
|
||||||
|
this.advancedDataGridView1.MultiSelect = false;
|
||||||
|
this.advancedDataGridView1.Name = "advancedDataGridView1";
|
||||||
|
this.advancedDataGridView1.RightToLeft = System.Windows.Forms.RightToLeft.No;
|
||||||
|
dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
|
||||||
|
dataGridViewCellStyle6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
|
||||||
|
dataGridViewCellStyle6.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||||
|
dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.WindowText;
|
||||||
|
dataGridViewCellStyle6.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
|
||||||
|
dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.WindowText;
|
||||||
|
dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
|
||||||
|
this.advancedDataGridView1.RowHeadersDefaultCellStyle = dataGridViewCellStyle6;
|
||||||
|
this.advancedDataGridView1.Size = new System.Drawing.Size(1352, 513);
|
||||||
|
this.advancedDataGridView1.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn1
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn1.DataPropertyName = "序号";
|
||||||
|
dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||||
|
this.dataGridViewTextBoxColumn1.DefaultCellStyle = dataGridViewCellStyle2;
|
||||||
|
this.dataGridViewTextBoxColumn1.HeaderText = "序号";
|
||||||
|
this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1";
|
||||||
|
this.dataGridViewTextBoxColumn1.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
this.dataGridViewTextBoxColumn1.Width = 35;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn2
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn2.DataPropertyName = "元件名称";
|
||||||
|
this.dataGridViewTextBoxColumn2.HeaderText = "元件名称";
|
||||||
|
this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2";
|
||||||
|
this.dataGridViewTextBoxColumn2.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
this.dataGridViewTextBoxColumn2.Width = 150;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn3
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn3.DataPropertyName = "规格";
|
||||||
|
this.dataGridViewTextBoxColumn3.HeaderText = "规格";
|
||||||
|
this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3";
|
||||||
|
this.dataGridViewTextBoxColumn3.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
this.dataGridViewTextBoxColumn3.Width = 150;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn4
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn4.DataPropertyName = "单位";
|
||||||
|
dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||||
|
this.dataGridViewTextBoxColumn4.DefaultCellStyle = dataGridViewCellStyle3;
|
||||||
|
this.dataGridViewTextBoxColumn4.HeaderText = "单位";
|
||||||
|
this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4";
|
||||||
|
this.dataGridViewTextBoxColumn4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
this.dataGridViewTextBoxColumn4.Width = 35;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn5
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn5.DataPropertyName = "数量";
|
||||||
|
dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||||
|
this.dataGridViewTextBoxColumn5.DefaultCellStyle = dataGridViewCellStyle4;
|
||||||
|
this.dataGridViewTextBoxColumn5.HeaderText = "数量";
|
||||||
|
this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5";
|
||||||
|
this.dataGridViewTextBoxColumn5.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
this.dataGridViewTextBoxColumn5.Width = 40;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn6
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn6.DataPropertyName = "表价";
|
||||||
|
this.dataGridViewTextBoxColumn6.HeaderText = "表价";
|
||||||
|
this.dataGridViewTextBoxColumn6.Name = "dataGridViewTextBoxColumn6";
|
||||||
|
this.dataGridViewTextBoxColumn6.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn7
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn7.DataPropertyName = "采购单价";
|
||||||
|
this.dataGridViewTextBoxColumn7.HeaderText = "采购单价";
|
||||||
|
this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7";
|
||||||
|
this.dataGridViewTextBoxColumn7.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn8
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn8.DataPropertyName = "采购系数";
|
||||||
|
this.dataGridViewTextBoxColumn8.HeaderText = "采购系数";
|
||||||
|
this.dataGridViewTextBoxColumn8.Name = "dataGridViewTextBoxColumn8";
|
||||||
|
this.dataGridViewTextBoxColumn8.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn9
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn9.DataPropertyName = "采购价";
|
||||||
|
this.dataGridViewTextBoxColumn9.HeaderText = "采购价";
|
||||||
|
this.dataGridViewTextBoxColumn9.Name = "dataGridViewTextBoxColumn9";
|
||||||
|
this.dataGridViewTextBoxColumn9.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn10
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn10.DataPropertyName = "报出单价";
|
||||||
|
this.dataGridViewTextBoxColumn10.HeaderText = "报出单价";
|
||||||
|
this.dataGridViewTextBoxColumn10.Name = "dataGridViewTextBoxColumn10";
|
||||||
|
this.dataGridViewTextBoxColumn10.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn11
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn11.DataPropertyName = "报出系数";
|
||||||
|
this.dataGridViewTextBoxColumn11.HeaderText = "报出系数";
|
||||||
|
this.dataGridViewTextBoxColumn11.Name = "dataGridViewTextBoxColumn11";
|
||||||
|
this.dataGridViewTextBoxColumn11.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn12
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn12.DataPropertyName = "报出价";
|
||||||
|
this.dataGridViewTextBoxColumn12.HeaderText = "报出价";
|
||||||
|
this.dataGridViewTextBoxColumn12.Name = "dataGridViewTextBoxColumn12";
|
||||||
|
this.dataGridViewTextBoxColumn12.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn13
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn13.DataPropertyName = "图纸规格";
|
||||||
|
this.dataGridViewTextBoxColumn13.HeaderText = "图纸规格";
|
||||||
|
this.dataGridViewTextBoxColumn13.Name = "dataGridViewTextBoxColumn13";
|
||||||
|
this.dataGridViewTextBoxColumn13.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn14
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn14.DataPropertyName = "品牌";
|
||||||
|
this.dataGridViewTextBoxColumn14.HeaderText = "品牌";
|
||||||
|
this.dataGridViewTextBoxColumn14.Name = "dataGridViewTextBoxColumn14";
|
||||||
|
this.dataGridViewTextBoxColumn14.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn15
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn15.DataPropertyName = "系列";
|
||||||
|
this.dataGridViewTextBoxColumn15.HeaderText = "系列";
|
||||||
|
this.dataGridViewTextBoxColumn15.Name = "dataGridViewTextBoxColumn15";
|
||||||
|
this.dataGridViewTextBoxColumn15.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn16
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn16.DataPropertyName = "类型";
|
||||||
|
this.dataGridViewTextBoxColumn16.HeaderText = "类型";
|
||||||
|
this.dataGridViewTextBoxColumn16.Name = "dataGridViewTextBoxColumn16";
|
||||||
|
this.dataGridViewTextBoxColumn16.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn17
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn17.DataPropertyName = "备注";
|
||||||
|
this.dataGridViewTextBoxColumn17.HeaderText = "备注";
|
||||||
|
this.dataGridViewTextBoxColumn17.Name = "dataGridViewTextBoxColumn17";
|
||||||
|
this.dataGridViewTextBoxColumn17.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
//
|
//
|
||||||
// panel5
|
// panel5
|
||||||
//
|
//
|
||||||
this.panel5.Dock = System.Windows.Forms.DockStyle.Top;
|
|
||||||
this.panel5.TabStop = false;
|
|
||||||
this.panel5.AutoScrollMargin = new System.Drawing.Size(0, 0);
|
|
||||||
this.panel5.AutoScrollMinSize = new System.Drawing.Size(0, 0);
|
|
||||||
this.panel5.BackColor = System.Drawing.Color.Transparent;
|
this.panel5.BackColor = System.Drawing.Color.Transparent;
|
||||||
this.panel5.TabIndex = 1;
|
this.panel5.Controls.Add(this.button1);
|
||||||
this.panel5.Size = new System.Drawing.Size(1352, 38);
|
this.panel5.Controls.Add(this.comboBox1);
|
||||||
|
this.panel5.Controls.Add(this.label4);
|
||||||
|
this.panel5.Controls.Add(this.comboBox5);
|
||||||
|
this.panel5.Dock = System.Windows.Forms.DockStyle.Top;
|
||||||
this.panel5.Location = new System.Drawing.Point(0, 0);
|
this.panel5.Location = new System.Drawing.Point(0, 0);
|
||||||
this.panel5.Name = "panel5";
|
this.panel5.Name = "panel5";
|
||||||
|
this.panel5.Size = new System.Drawing.Size(1352, 38);
|
||||||
|
this.panel5.TabIndex = 1;
|
||||||
//
|
//
|
||||||
// label4
|
// label4
|
||||||
//
|
//
|
||||||
this.label4.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
|
||||||
this.label4.LiveSetting = System.Windows.Forms.Automation.AutomationLiveSetting.Off;
|
|
||||||
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
|
||||||
this.label4.BackColor = System.Drawing.Color.Transparent;
|
this.label4.BackColor = System.Drawing.Color.Transparent;
|
||||||
this.label4.Font = new System.Drawing.Font("宋体", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
this.label4.Font = new System.Drawing.Font("宋体", 10F);
|
||||||
this.label4.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0);
|
|
||||||
this.label4.TabIndex = 1;
|
|
||||||
this.label4.Size = new System.Drawing.Size(65, 23);
|
|
||||||
this.label4.Location = new System.Drawing.Point(3, 8);
|
this.label4.Location = new System.Drawing.Point(3, 8);
|
||||||
this.label4.Text = "选型范围";
|
|
||||||
this.label4.Name = "label4";
|
this.label4.Name = "label4";
|
||||||
|
this.label4.Size = new System.Drawing.Size(65, 23);
|
||||||
|
this.label4.TabIndex = 1;
|
||||||
|
this.label4.Text = "选型范围";
|
||||||
|
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||||
//
|
//
|
||||||
// comboBox5
|
// comboBox5
|
||||||
//
|
//
|
||||||
|
this.comboBox5.AutoCompleteCustomSource.AddRange(new string[] {
|
||||||
|
"当前项目",
|
||||||
|
"当前图号"});
|
||||||
this.comboBox5.BackColor = System.Drawing.SystemColors.Window;
|
this.comboBox5.BackColor = System.Drawing.SystemColors.Window;
|
||||||
this.comboBox5.DropDownWidth = 121;
|
this.comboBox5.DropDownWidth = 121;
|
||||||
this.comboBox5.DropDownHeight = 106;
|
|
||||||
this.comboBox5.ForeColor = System.Drawing.SystemColors.WindowText;
|
this.comboBox5.ForeColor = System.Drawing.SystemColors.WindowText;
|
||||||
this.comboBox5.ItemHeight = 12;
|
|
||||||
this.comboBox5.FormattingEnabled = true;
|
this.comboBox5.FormattingEnabled = true;
|
||||||
this.comboBox5.TabIndex = 0;
|
this.comboBox5.IntegralHeight = false;
|
||||||
this.comboBox5.Size = new System.Drawing.Size(121, 20);
|
this.comboBox5.ItemHeight = 12;
|
||||||
|
this.comboBox5.Items.AddRange(new object[] {
|
||||||
|
"当前项目",
|
||||||
|
"当前图号"});
|
||||||
this.comboBox5.Location = new System.Drawing.Point(72, 9);
|
this.comboBox5.Location = new System.Drawing.Point(72, 9);
|
||||||
this.comboBox5.Text = "当前项目";
|
|
||||||
this.comboBox5.Name = "comboBox5";
|
this.comboBox5.Name = "comboBox5";
|
||||||
this.comboBox5.AutoCompleteCustomSource.AddRange(new string[] {
|
this.comboBox5.Size = new System.Drawing.Size(121, 20);
|
||||||
"当前项目", "当前图号"
|
this.comboBox5.TabIndex = 0;
|
||||||
});
|
this.comboBox5.Text = "当前项目";
|
||||||
this.comboBox5.Items.Add("当前项目");
|
|
||||||
this.comboBox5.Items.Add("当前图号");
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn18
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn18.HeaderText = "序号";
|
|
||||||
this.dataGridViewTextBoxColumn18.Width = 35;
|
|
||||||
this.dataGridViewTextBoxColumn18.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn18.DataPropertyName = "序号";
|
|
||||||
this.dataGridViewTextBoxColumn18.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
this.dataGridViewTextBoxColumn18.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn19
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn19.HeaderText = "箱号";
|
|
||||||
this.dataGridViewTextBoxColumn19.Width = 150;
|
|
||||||
this.dataGridViewTextBoxColumn19.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn19.DataPropertyName = "箱号";
|
|
||||||
this.dataGridViewTextBoxColumn19.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn20
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn20.HeaderText = "型号";
|
|
||||||
this.dataGridViewTextBoxColumn20.Width = 150;
|
|
||||||
this.dataGridViewTextBoxColumn20.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn20.DataPropertyName = "型号";
|
|
||||||
this.dataGridViewTextBoxColumn20.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn21
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn21.HeaderText = "规格";
|
|
||||||
this.dataGridViewTextBoxColumn21.Width = 150;
|
|
||||||
this.dataGridViewTextBoxColumn21.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn21.DataPropertyName = "规格";
|
|
||||||
this.dataGridViewTextBoxColumn21.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn22
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn22.HeaderText = "单位";
|
|
||||||
this.dataGridViewTextBoxColumn22.Width = 35;
|
|
||||||
this.dataGridViewTextBoxColumn22.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn22.DataPropertyName = "单位";
|
|
||||||
this.dataGridViewTextBoxColumn22.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
this.dataGridViewTextBoxColumn22.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn23
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn23.HeaderText = "数量";
|
|
||||||
this.dataGridViewTextBoxColumn23.Width = 45;
|
|
||||||
this.dataGridViewTextBoxColumn23.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn23.DataPropertyName = "数量";
|
|
||||||
this.dataGridViewTextBoxColumn23.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
this.dataGridViewTextBoxColumn23.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn24
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn24.HeaderText = "单台成本";
|
|
||||||
this.dataGridViewTextBoxColumn24.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn24.DataPropertyName = "单台成本";
|
|
||||||
this.dataGridViewTextBoxColumn24.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn25
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn25.HeaderText = "成本价";
|
|
||||||
this.dataGridViewTextBoxColumn25.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn25.DataPropertyName = "成本价";
|
|
||||||
this.dataGridViewTextBoxColumn25.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn26
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn26.HeaderText = "单台报出";
|
|
||||||
this.dataGridViewTextBoxColumn26.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn26.DataPropertyName = "单台报出";
|
|
||||||
this.dataGridViewTextBoxColumn26.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn27
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn27.HeaderText = "报出价";
|
|
||||||
this.dataGridViewTextBoxColumn27.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn27.DataPropertyName = "报出价";
|
|
||||||
this.dataGridViewTextBoxColumn27.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn28
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn28.HeaderText = "利润";
|
|
||||||
this.dataGridViewTextBoxColumn28.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn28.DataPropertyName = "利润";
|
|
||||||
this.dataGridViewTextBoxColumn28.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn29
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn29.HeaderText = "利润率";
|
|
||||||
this.dataGridViewTextBoxColumn29.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn29.DataPropertyName = "利润率";
|
|
||||||
this.dataGridViewTextBoxColumn29.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn30
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn30.HeaderText = "毛利率";
|
|
||||||
this.dataGridViewTextBoxColumn30.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn30.DataPropertyName = "毛利率";
|
|
||||||
this.dataGridViewTextBoxColumn30.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn31
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn31.HeaderText = "箱柜类型";
|
|
||||||
this.dataGridViewTextBoxColumn31.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn31.DataPropertyName = "箱柜类型";
|
|
||||||
this.dataGridViewTextBoxColumn31.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn32
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn32.HeaderText = "备注";
|
|
||||||
this.dataGridViewTextBoxColumn32.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn32.DataPropertyName = "备注";
|
|
||||||
this.dataGridViewTextBoxColumn32.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
|
||||||
// dataGridViewTextBoxColumn33
|
|
||||||
//
|
|
||||||
this.dataGridViewTextBoxColumn33.HeaderText = "图纸";
|
|
||||||
this.dataGridViewTextBoxColumn33.ReadOnly = false;
|
|
||||||
this.dataGridViewTextBoxColumn33.DataPropertyName = "图纸";
|
|
||||||
this.dataGridViewTextBoxColumn33.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
|
||||||
//
|
//
|
||||||
// advancedDataGridView12
|
// advancedDataGridView12
|
||||||
//
|
//
|
||||||
this.advancedDataGridView12.ColumnHeadersDefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
|
||||||
this.advancedDataGridView12.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
||||||
this.advancedDataGridView12.EnableExcelStyleSelection = true;
|
|
||||||
this.advancedDataGridView12.EnableCellPaste = true;
|
|
||||||
this.advancedDataGridView12.AllowUserToAddRows = false;
|
this.advancedDataGridView12.AllowUserToAddRows = false;
|
||||||
this.advancedDataGridView12.AllowUserToDeleteRows = true;
|
|
||||||
this.advancedDataGridView12.AllowUserToOrderColumns = false;
|
|
||||||
this.advancedDataGridView12.AllowUserToResizeRows = false;
|
this.advancedDataGridView12.AllowUserToResizeRows = false;
|
||||||
this.advancedDataGridView12.BackgroundColor = System.Drawing.Color.White;
|
this.advancedDataGridView12.BackgroundColor = System.Drawing.Color.White;
|
||||||
this.advancedDataGridView12.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||||
this.advancedDataGridView12.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Single;
|
dataGridViewCellStyle7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
|
||||||
|
dataGridViewCellStyle7.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||||
|
dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.WindowText;
|
||||||
|
dataGridViewCellStyle7.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
|
||||||
|
dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.WindowText;
|
||||||
|
dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
|
||||||
|
this.advancedDataGridView12.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle7;
|
||||||
this.advancedDataGridView12.ColumnHeadersHeight = 35;
|
this.advancedDataGridView12.ColumnHeadersHeight = 35;
|
||||||
this.advancedDataGridView12.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnKeystroke;
|
|
||||||
this.advancedDataGridView12.EnableHeadersVisualStyles = false;
|
|
||||||
this.advancedDataGridView12.RowHeadersWidth = 41;
|
|
||||||
this.advancedDataGridView12.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.RowHeaderSelect;
|
|
||||||
this.advancedDataGridView12.MultiSelect = false;
|
|
||||||
this.advancedDataGridView12.Enabled = true;
|
|
||||||
this.advancedDataGridView12.TabIndex = 0;
|
|
||||||
this.advancedDataGridView12.Name = "advancedDataGridView12";
|
|
||||||
this.advancedDataGridView12.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
this.advancedDataGridView12.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||||
this.dataGridViewTextBoxColumn18,
|
this.dataGridViewTextBoxColumn18,
|
||||||
this.dataGridViewTextBoxColumn19,
|
this.dataGridViewTextBoxColumn19,
|
||||||
@@ -494,30 +417,191 @@ namespace 成套报价软件
|
|||||||
this.dataGridViewTextBoxColumn31,
|
this.dataGridViewTextBoxColumn31,
|
||||||
this.dataGridViewTextBoxColumn32,
|
this.dataGridViewTextBoxColumn32,
|
||||||
this.dataGridViewTextBoxColumn33});
|
this.dataGridViewTextBoxColumn33});
|
||||||
this.Controls.AddRange(new System.Windows.Forms.Control[] {
|
dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
|
||||||
this.splitContainer4});
|
dataGridViewCellStyle11.BackColor = System.Drawing.SystemColors.Window;
|
||||||
this.splitContainer4.Panel1.Controls.AddRange(new System.Windows.Forms.Control[] {
|
dataGridViewCellStyle11.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||||
this.advancedDataGridView1,
|
dataGridViewCellStyle11.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||||
this.panel5});
|
dataGridViewCellStyle11.SelectionBackColor = System.Drawing.SystemColors.Window;
|
||||||
this.panel5.Controls.AddRange(new System.Windows.Forms.Control[] {
|
dataGridViewCellStyle11.SelectionForeColor = System.Drawing.SystemColors.ControlText;
|
||||||
this.label4,
|
dataGridViewCellStyle11.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
|
||||||
this.comboBox5});
|
this.advancedDataGridView12.DefaultCellStyle = dataGridViewCellStyle11;
|
||||||
this.splitContainer4.Panel2.Controls.AddRange(new System.Windows.Forms.Control[] {
|
this.advancedDataGridView12.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.advancedDataGridView12});
|
this.advancedDataGridView12.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnKeystroke;
|
||||||
|
this.advancedDataGridView12.EnableCellPaste = true;
|
||||||
|
this.advancedDataGridView12.EnableHeadersVisualStyles = false;
|
||||||
|
this.advancedDataGridView12.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.advancedDataGridView12.MultiSelect = false;
|
||||||
|
this.advancedDataGridView12.Name = "advancedDataGridView12";
|
||||||
|
this.advancedDataGridView12.RightToLeft = System.Windows.Forms.RightToLeft.No;
|
||||||
|
dataGridViewCellStyle12.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
|
||||||
|
dataGridViewCellStyle12.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
|
||||||
|
dataGridViewCellStyle12.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
|
||||||
|
dataGridViewCellStyle12.ForeColor = System.Drawing.SystemColors.WindowText;
|
||||||
|
dataGridViewCellStyle12.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
|
||||||
|
dataGridViewCellStyle12.SelectionForeColor = System.Drawing.SystemColors.WindowText;
|
||||||
|
dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
|
||||||
|
this.advancedDataGridView12.RowHeadersDefaultCellStyle = dataGridViewCellStyle12;
|
||||||
|
this.advancedDataGridView12.Size = new System.Drawing.Size(1352, 242);
|
||||||
|
this.advancedDataGridView12.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn18
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn18.DataPropertyName = "序号";
|
||||||
|
dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||||
|
this.dataGridViewTextBoxColumn18.DefaultCellStyle = dataGridViewCellStyle8;
|
||||||
|
this.dataGridViewTextBoxColumn18.HeaderText = "序号";
|
||||||
|
this.dataGridViewTextBoxColumn18.Name = "dataGridViewTextBoxColumn18";
|
||||||
|
this.dataGridViewTextBoxColumn18.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
this.dataGridViewTextBoxColumn18.Width = 35;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn19
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn19.DataPropertyName = "箱号";
|
||||||
|
this.dataGridViewTextBoxColumn19.HeaderText = "箱号";
|
||||||
|
this.dataGridViewTextBoxColumn19.Name = "dataGridViewTextBoxColumn19";
|
||||||
|
this.dataGridViewTextBoxColumn19.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
this.dataGridViewTextBoxColumn19.Width = 150;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn20
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn20.DataPropertyName = "型号";
|
||||||
|
this.dataGridViewTextBoxColumn20.HeaderText = "型号";
|
||||||
|
this.dataGridViewTextBoxColumn20.Name = "dataGridViewTextBoxColumn20";
|
||||||
|
this.dataGridViewTextBoxColumn20.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
this.dataGridViewTextBoxColumn20.Width = 150;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn21
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn21.DataPropertyName = "规格";
|
||||||
|
this.dataGridViewTextBoxColumn21.HeaderText = "规格";
|
||||||
|
this.dataGridViewTextBoxColumn21.Name = "dataGridViewTextBoxColumn21";
|
||||||
|
this.dataGridViewTextBoxColumn21.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
this.dataGridViewTextBoxColumn21.Width = 150;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn22
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn22.DataPropertyName = "单位";
|
||||||
|
dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||||
|
this.dataGridViewTextBoxColumn22.DefaultCellStyle = dataGridViewCellStyle9;
|
||||||
|
this.dataGridViewTextBoxColumn22.HeaderText = "单位";
|
||||||
|
this.dataGridViewTextBoxColumn22.Name = "dataGridViewTextBoxColumn22";
|
||||||
|
this.dataGridViewTextBoxColumn22.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
this.dataGridViewTextBoxColumn22.Width = 35;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn23
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn23.DataPropertyName = "数量";
|
||||||
|
dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||||
|
this.dataGridViewTextBoxColumn23.DefaultCellStyle = dataGridViewCellStyle10;
|
||||||
|
this.dataGridViewTextBoxColumn23.HeaderText = "数量";
|
||||||
|
this.dataGridViewTextBoxColumn23.Name = "dataGridViewTextBoxColumn23";
|
||||||
|
this.dataGridViewTextBoxColumn23.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
this.dataGridViewTextBoxColumn23.Width = 45;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn24
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn24.DataPropertyName = "单台成本";
|
||||||
|
this.dataGridViewTextBoxColumn24.HeaderText = "单台成本";
|
||||||
|
this.dataGridViewTextBoxColumn24.Name = "dataGridViewTextBoxColumn24";
|
||||||
|
this.dataGridViewTextBoxColumn24.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn25
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn25.DataPropertyName = "成本价";
|
||||||
|
this.dataGridViewTextBoxColumn25.HeaderText = "成本价";
|
||||||
|
this.dataGridViewTextBoxColumn25.Name = "dataGridViewTextBoxColumn25";
|
||||||
|
this.dataGridViewTextBoxColumn25.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn26
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn26.DataPropertyName = "单台报出";
|
||||||
|
this.dataGridViewTextBoxColumn26.HeaderText = "单台报出";
|
||||||
|
this.dataGridViewTextBoxColumn26.Name = "dataGridViewTextBoxColumn26";
|
||||||
|
this.dataGridViewTextBoxColumn26.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn27
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn27.DataPropertyName = "报出价";
|
||||||
|
this.dataGridViewTextBoxColumn27.HeaderText = "报出价";
|
||||||
|
this.dataGridViewTextBoxColumn27.Name = "dataGridViewTextBoxColumn27";
|
||||||
|
this.dataGridViewTextBoxColumn27.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn28
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn28.DataPropertyName = "利润";
|
||||||
|
this.dataGridViewTextBoxColumn28.HeaderText = "利润";
|
||||||
|
this.dataGridViewTextBoxColumn28.Name = "dataGridViewTextBoxColumn28";
|
||||||
|
this.dataGridViewTextBoxColumn28.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn29
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn29.DataPropertyName = "利润率";
|
||||||
|
this.dataGridViewTextBoxColumn29.HeaderText = "利润率";
|
||||||
|
this.dataGridViewTextBoxColumn29.Name = "dataGridViewTextBoxColumn29";
|
||||||
|
this.dataGridViewTextBoxColumn29.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn30
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn30.DataPropertyName = "毛利率";
|
||||||
|
this.dataGridViewTextBoxColumn30.HeaderText = "毛利率";
|
||||||
|
this.dataGridViewTextBoxColumn30.Name = "dataGridViewTextBoxColumn30";
|
||||||
|
this.dataGridViewTextBoxColumn30.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn31
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn31.DataPropertyName = "箱柜类型";
|
||||||
|
this.dataGridViewTextBoxColumn31.HeaderText = "箱柜类型";
|
||||||
|
this.dataGridViewTextBoxColumn31.Name = "dataGridViewTextBoxColumn31";
|
||||||
|
this.dataGridViewTextBoxColumn31.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn32
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn32.DataPropertyName = "备注";
|
||||||
|
this.dataGridViewTextBoxColumn32.HeaderText = "备注";
|
||||||
|
this.dataGridViewTextBoxColumn32.Name = "dataGridViewTextBoxColumn32";
|
||||||
|
this.dataGridViewTextBoxColumn32.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// dataGridViewTextBoxColumn33
|
||||||
|
//
|
||||||
|
this.dataGridViewTextBoxColumn33.DataPropertyName = "图纸";
|
||||||
|
this.dataGridViewTextBoxColumn33.HeaderText = "图纸";
|
||||||
|
this.dataGridViewTextBoxColumn33.Name = "dataGridViewTextBoxColumn33";
|
||||||
|
this.dataGridViewTextBoxColumn33.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
|
||||||
|
//
|
||||||
|
// comboBox1
|
||||||
|
//
|
||||||
|
this.comboBox1.FormattingEnabled = true;
|
||||||
|
this.comboBox1.Location = new System.Drawing.Point(209, 9);
|
||||||
|
this.comboBox1.Name = "comboBox1";
|
||||||
|
this.comboBox1.Size = new System.Drawing.Size(121, 20);
|
||||||
|
this.comboBox1.TabIndex = 2;
|
||||||
|
//
|
||||||
|
// button1
|
||||||
|
//
|
||||||
|
this.button1.Location = new System.Drawing.Point(337, 8);
|
||||||
|
this.button1.Name = "button1";
|
||||||
|
this.button1.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.button1.TabIndex = 3;
|
||||||
|
this.button1.Text = "筛选";
|
||||||
|
this.button1.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// DockWindow3
|
// DockWindow3
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(1352, 799);
|
this.ClientSize = new System.Drawing.Size(1352, 799);
|
||||||
|
this.Controls.Add(this.splitContainer4);
|
||||||
this.Name = "DockWindow3";
|
this.Name = "DockWindow3";
|
||||||
this.Text = "选型";
|
this.Text = "选型";
|
||||||
|
this.splitContainer4.Panel1.ResumeLayout(false);
|
||||||
|
this.splitContainer4.Panel2.ResumeLayout(false);
|
||||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit();
|
||||||
|
this.splitContainer4.ResumeLayout(false);
|
||||||
((System.ComponentModel.ISupportInitialize)(this.advancedDataGridView1)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.advancedDataGridView1)).EndInit();
|
||||||
|
this.panel5.ResumeLayout(false);
|
||||||
((System.ComponentModel.ISupportInitialize)(this.advancedDataGridView12)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.advancedDataGridView12)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
this.PerformLayout();
|
|
||||||
this.splitContainer4.SplitterDistance = 308;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using WeifenLuo.WinFormsUI.Docking;
|
using WeifenLuo.WinFormsUI.Docking;
|
||||||
|
|
||||||
namespace 成套报价软件
|
namespace 成套报价软件
|
||||||
@@ -12,6 +12,63 @@ namespace 成套报价软件
|
|||||||
this.BackColor = System.Drawing.Color.White;
|
this.BackColor = System.Drawing.Color.White;
|
||||||
Text = "选型";
|
Text = "选型";
|
||||||
TabText = "选型";
|
TabText = "选型";
|
||||||
|
|
||||||
|
// ★ 筛选(2026-10-02):comboBox1 输入关键字,button1 对汇总表(advancedDataGridView1)
|
||||||
|
// 的 元件名称/规格/图纸规格 三列做模糊筛选;关键字为空时点击=清除筛选
|
||||||
|
comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown; // 可手动输入
|
||||||
|
button1.Click += button1_筛选_Click;
|
||||||
|
comboBox1.KeyDown += (s, e) =>
|
||||||
|
{
|
||||||
|
if (e.KeyCode == System.Windows.Forms.Keys.Enter)
|
||||||
|
{
|
||||||
|
button1_筛选_Click(s, e);
|
||||||
|
e.SuppressKeyPress = true; // 防回车 beep
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>筛选/清除:对汇总表(advancedDataGridView1)的 元件名称/规格/图纸规格
|
||||||
|
/// 三列任一包含关键字即显示(RowFilter 过滤视图,不动数据源,刷新加载自动重置)。
|
||||||
|
/// 按钮状态机:Text="清除"(筛选生效中)→点击=无条件清除;Text="筛选"→按关键字筛选,空关键字=清除。</summary>
|
||||||
|
private void button1_筛选_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var dt = advancedDataGridView1.DataSource as System.Data.DataTable;
|
||||||
|
if (dt == null) return; // 尚未加载数据
|
||||||
|
|
||||||
|
// ★ 筛选生效中(按钮显示"清除"):点击即无条件清除(关键字保留在框里便于改词再筛)
|
||||||
|
if (button1.Text == "清除")
|
||||||
|
{
|
||||||
|
dt.DefaultView.RowFilter = "";
|
||||||
|
button1.Text = "筛选";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string kw = (comboBox1.Text ?? "").Trim();
|
||||||
|
if (kw.Length == 0)
|
||||||
|
{
|
||||||
|
dt.DefaultView.RowFilter = ""; // 空关键字 = 清除(双保险路径)
|
||||||
|
button1.Text = "筛选";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// RowFilter LIKE 通配符/引号转义
|
||||||
|
string esc = kw.Replace("'", "''").Replace("[", "[[]").Replace("%", "[%]").Replace("*", "[*]");
|
||||||
|
string like = " LIKE '%" + esc + "%'";
|
||||||
|
dt.DefaultView.RowFilter = "元件名称" + like + " OR 规格" + like + " OR 图纸规格" + like;
|
||||||
|
button1.Text = "清除";
|
||||||
|
|
||||||
|
// 关键字入下拉历史(去重置顶,最多 20 条)
|
||||||
|
int idx = comboBox1.Items.IndexOf(kw);
|
||||||
|
if (idx >= 0) comboBox1.Items.RemoveAt(idx);
|
||||||
|
comboBox1.Items.Insert(0, kw);
|
||||||
|
while (comboBox1.Items.Count > 20) comboBox1.Items.RemoveAt(comboBox1.Items.Count - 1);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
System.Windows.Forms.MessageBox.Show(this, "筛选失败:" + ex.Message, "选型",
|
||||||
|
System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
@@ -25,5 +25,5 @@ using System.Runtime.InteropServices;
|
|||||||
// ★ 版本号唯一事实源(2026-10-01 起):格式 主.次.修订.0——每次发版必须递增修订号,
|
// ★ 版本号唯一事实源(2026-10-01 起):格式 主.次.修订.0——每次发版必须递增修订号,
|
||||||
// 用 tools\递增版本号.ps1 一键同步(关于软件自动读这里;setup.iss 由脚本同步)。
|
// 用 tools\递增版本号.ps1 一键同步(关于软件自动读这里;setup.iss 由脚本同步)。
|
||||||
// 不要用 "1.0.*" 自动号(每次编译都变,无法对应发布的安装包)。
|
// 不要用 "1.0.*" 自动号(每次编译都变,无法对应发布的安装包)。
|
||||||
[assembly: AssemblyVersion("1.0.4.0")]
|
[assembly: AssemblyVersion("1.0.5.0")]
|
||||||
[assembly: AssemblyFileVersion("1.0.4.0")]
|
[assembly: AssemblyFileVersion("1.0.5.0")]
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -340,6 +340,9 @@
|
|||||||
<EmbeddedResource Include="DockWindows\DockWindow2\DockWindow2.resx">
|
<EmbeddedResource Include="DockWindows\DockWindow2\DockWindow2.resx">
|
||||||
<DependentUpon>DockWindow2.cs</DependentUpon>
|
<DependentUpon>DockWindow2.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="DockWindows\DockWindow3\DockWindow3.resx">
|
||||||
|
<DependentUpon>DockWindow3.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="DockWindows\DockWindow4\DockWindow4.resx">
|
<EmbeddedResource Include="DockWindows\DockWindow4\DockWindow4.resx">
|
||||||
<DependentUpon>DockWindow4.cs</DependentUpon>
|
<DependentUpon>DockWindow4.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
|||||||
@@ -0,0 +1,164 @@
|
|||||||
|
# 成套报价软件 部署打包指南(新机器从 git 到可打包运行)
|
||||||
|
|
||||||
|
> 适用场景:换新电脑/新人接手——git 仓库里只有源码,本文教你把一台空机器变成**可编译、可打包、可发版**的开发机。
|
||||||
|
> 日常发版流程见 `README.md`「版本号与发版流程」或打包技能(`.agents\skills\winforms-designer-package\SKILL.md` 项目专章)。
|
||||||
|
|
||||||
|
## 一、为什么 clone 后不能直接打包?
|
||||||
|
|
||||||
|
git 仓库为控制体积,**故意不存**以下运行时资源(可用其他方式恢复,见第三节):
|
||||||
|
|
||||||
|
| 资源 | 体积 | 用途 | 恢复来源 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `licenses\`(8 份开源许可证全文) | 小 | 打包+关于窗口 | 安装目录 / 老开发机 |
|
||||||
|
| `元件库网页\`(node 静态服务数据) | ~2MB | 元件库选型功能 | 同上 |
|
||||||
|
| `cadbt\cadbt\CAD-Viewer\`(网页 CAD 引擎 dist+字体) | 大 | CAD 扒图 | 同上 |
|
||||||
|
| `cadbt\cadbt\bin\Debug\node\`(node.exe) | ~80MB | 网页服务运行时 | 同上 |
|
||||||
|
| `ai助手\zcode\`(ZCode 引擎发行包) | ~400MB | AI 助手 | 同上 / 官方 zai-org/ZCode |
|
||||||
|
| `bin\Debug\` 下运行数据(sjk 种子/shezhi 参数/xiangmu 模板/GCS 运行件/icons PNG) | ~10MB | 程序运行+打包取数 | 同上 |
|
||||||
|
| `tools\MicrosoftEdgeWebview2Setup.exe` | 2MB | 打包用 | **git 里有** ✓ |
|
||||||
|
|
||||||
|
## 二、工具链安装(一次性)
|
||||||
|
|
||||||
|
| 工具 | 获取 | 用途 |
|
||||||
|
|---|---|---|
|
||||||
|
| **.NET Framework 4.8 + Developer Pack** | 微软官网 NDP48-DevPack 离线包 | 编译(缺 Dev Pack 会报 MSB3644) |
|
||||||
|
| **定制版 SharpDevelop 5.2**(MSI) | 项目配套安装包,装到默认 `C:\Program Files (x86)\SharpDevelop\5.2\` | ①提供编译引用 DLL(csproj/rsp 引用指向它,**保持原目录结构不改**)②SD 设计器改窗体(必须是最新构建,旧包缺控件) |
|
||||||
|
| **Inno Setup 6 + 中文语言包** | 官网 + `ChineseSimplified.isl`(装法见打包技能第 3 步) | 打安装包 |
|
||||||
|
| **Python 3** | python.org | 打包脚本 make_package.py 等 |
|
||||||
|
| **git** | 任意 | 克隆/提交 |
|
||||||
|
|
||||||
|
> **依赖副本说明(2026-10-01)**:项目内 `成套报价软件\lib\` 备有全套 22 个依赖 DLL 副本(含 WeifenLuo×2、System.Data.SQLite、log4net、System.Memory 等),**供新机器铺 bin\Debug 运行目录用**(上表 3a 的 Copy-Item);csproj/rsp 的编译引用**保持原目录结构不变**(指向 SharpDevelop 安装目录),编译机需装定制版 SharpDevelop。运行时 DLL 一律从 exe 旁(安装目录根 / bin\Debug)加载——DLL"在根目录下运行"的机制从未改变。
|
||||||
|
|
||||||
|
## 三、环境准备(一次性,装完即可反复打包)
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# 1. 安装一次当前正式版,形成完整运行时底座 C:\成套报价软件
|
||||||
|
# (用最新 Release 的 成套报价软件_Setup_<版本>.exe)
|
||||||
|
|
||||||
|
# 2. 克隆仓库
|
||||||
|
git clone http://192.168.9.43:3000/0999we/ctbjrj.git
|
||||||
|
cd ctbjrj # 即仓库根
|
||||||
|
|
||||||
|
# 3. 从安装目录恢复 git 外运行时资源(映射表,直接复制)
|
||||||
|
$src = 'C:\成套报价软件'
|
||||||
|
# 3a. bin\Debug 运行数据(make_package 从这里取数)
|
||||||
|
mkdir 成套报价软件\bin\Debug -Force
|
||||||
|
# ★ 依赖 DLL 全部从项目内 lib\ 复制(自包含,不依赖外部环境)
|
||||||
|
Copy-Item 成套报价软件\lib\*.dll 成套报价软件\bin\Debug\ -Force
|
||||||
|
Copy-Item "$src\licenses" 成套报价软件\bin\Debug\licenses -Recurse
|
||||||
|
Copy-Item "$src\元件库网页" 成套报价软件\bin\Debug\元件库网页 -Recurse
|
||||||
|
Copy-Item "$src\sjk" 成套报价软件\bin\Debug\sjk -Recurse # 种子库;bjb\方案库 个人数据可不拷
|
||||||
|
Copy-Item "$src\shezhi" 成套报价软件\bin\Debug\shezhi -Recurse # 铜排/铝排参数
|
||||||
|
Copy-Item "$src\xiangmu" 成套报价软件\bin\Debug\xiangmu -Recurse # 报表模板
|
||||||
|
Copy-Item "$src\GCS铜排壳体计算" 成套报价软件\bin\Debug\GCS铜排壳体计算 -Recurse
|
||||||
|
Copy-Item "$src\icons" 成套报价软件\bin\Debug\icons -Recurse # 功能区 PNG 图标
|
||||||
|
# 3b. CAD 网页引擎 + node(打包与开发调试回退路径)
|
||||||
|
mkdir cadbt\cadbt\bin\Debug\node -Force
|
||||||
|
Copy-Item "$src\cadbt\node\node.exe" cadbt\cadbt\bin\Debug\node\node.exe
|
||||||
|
mkdir cadbt\cadbt\CAD-Viewer\packages\cad-viewer-example -Force
|
||||||
|
Copy-Item "$src\cadbt\CAD-Viewer\dist" cadbt\cadbt\CAD-Viewer\packages\cad-viewer-example\dist -Recurse
|
||||||
|
# 3c. AI 引擎发行包
|
||||||
|
Copy-Item "$src\ai助手\zcode" ai助手\zcode -Recurse
|
||||||
|
```
|
||||||
|
|
||||||
|
> 老开发机仍在用时,也可以直接老机器整目录拷贝上述内容(等价)。
|
||||||
|
> `tools\MicrosoftEdgeWebview2Setup.exe` 在 git 里,无需另备。
|
||||||
|
|
||||||
|
## 三·五、CAD 扒图 / PDF 扒图 运行环境与缺失文件补齐
|
||||||
|
|
||||||
|
### CAD 扒图依赖链(缺一样就打不开图纸/服务起不来)
|
||||||
|
|
||||||
|
| 依赖 | 位置(安装机) | 缺失表现 | 无互联网时怎么补 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **node.exe** | `{app}\cadbt\node\node.exe` | CAD 网页服务(端口 5173)起不来,提示"无法连接网页 CAD 服务" | 从任一装好软件的机器拷 `cadbt\node\` 整目录(node 是绿色单文件,拷贝即用) |
|
||||||
|
| **CAD-Viewer 网页引擎 dist** | `{app}\cadbt\CAD-Viewer\dist\`(index.html/assets/server.cjs/**fonts 中文字体库**/templates) | 图纸打开文字乱码/缺字(fonts 缺)、服务 404 | 从装好的机器拷 `cadbt\CAD-Viewer\dist\` 整目录 |
|
||||||
|
| **WebView2 运行时** | 系统级(随 Edge 分发) | 所有内嵌网页窗口全黑/空白 | 见下方"WebView2 离线安装" |
|
||||||
|
| 蒙版数据 | `{app}\cadbt\扒图蒙版\` | 无(运行时自建) | 不需要 |
|
||||||
|
|
||||||
|
### PDF 扒图依赖链
|
||||||
|
|
||||||
|
| 依赖 | 位置 | 缺失表现 | 无互联网时怎么补 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **pdfium.dll**(x86 渲染引擎) | `{app}\pdfium.dll`(安装包必带,lib\ 也有副本) | PDF 打不开 | 安装包自带;开发机从 `lib\pdfium.dll` 复制到 bin\Debug |
|
||||||
|
| **OCR 引擎(五选一)** | 见下表 | 扒不出文字 | 见下表 |
|
||||||
|
|
||||||
|
### OCR 引擎的网络需求(离线环境选型)
|
||||||
|
|
||||||
|
| 引擎 | 需要互联网 | 离线环境可用 | 离线补齐方式 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 百度 OCR(默认) | ✅ 需联网调 API | ❌ | — |
|
||||||
|
| 智谱 GLM-OCR | ✅ | ❌ | — |
|
||||||
|
| 百度千帆 PaddleOCR-VL | ✅ | ❌ | — |
|
||||||
|
| UApiPro | ✅ | ❌ | — |
|
||||||
|
| **Umi-OCR 本地** | ❌ **完全离线免费** | ✅ **离线环境唯一选择** | 见下 |
|
||||||
|
|
||||||
|
### Umi-OCR 本体获取(两条路)
|
||||||
|
|
||||||
|
1. **软件内下载(有网)**:PDF 扒图 → OCR 设置 → 选 Umi-OCR 引擎 → "下载 OCR 本体"(从用户网盘直链下载 ~179MB zip,自动解压安装到 exe 旁 `Umi-OCR\`)。
|
||||||
|
2. **离线拷贝(无网)**:从任一已装 Umi-OCR 本体的机器,把 `Umi-OCR\` 整目录拷到软件根目录(与 exe 同级)。它是绿色软件,拷完即用,无需安装。
|
||||||
|
|
||||||
|
### WebView2 离线安装(内网装机重点)
|
||||||
|
|
||||||
|
安装包对缺 WebView2 的机器会自动跑 `MicrosoftEdgeWebview2Setup.exe` 静默补装——**但该引导程序需联网从微软 CDN 下载**。完全离线的内网装机:
|
||||||
|
|
||||||
|
1. 提前在有网的机器下载 WebView2 **离线完整安装包**(微软官网 Standalone Installer,x86 版,与软件 32 位一致);
|
||||||
|
2. 装软件前先手动装它(或放进装机 U 盘/共享目录);
|
||||||
|
3. 判断机器是否已有:控制面板→程序里找"Microsoft Edge WebView2 运行时",或看注册表 `HKLM\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}`。Win10/11 装过 Edge 浏览器的一般已自带。
|
||||||
|
|
||||||
|
### 开发机调试的对应路径(clone 后调试扒图功能)
|
||||||
|
|
||||||
|
| 资源 | 开发机应放位置 | 来源 |
|
||||||
|
|---|---|---|
|
||||||
|
| node.exe | `cadbt\cadbt\bin\Debug\node\node.exe` | 安装目录 `cadbt\node\`(即第三节 3b) |
|
||||||
|
| dist 网页引擎 | `cadbt\cadbt\CAD-Viewer\packages\cad-viewer-example\dist\` | 安装目录 `cadbt\CAD-Viewer\dist\`(即第三节 3b) |
|
||||||
|
| pdfium.dll | `成套报价软件\bin\Debug\pdfium.dll` | `成套报价软件\lib\pdfium.dll` 复制 |
|
||||||
|
| Umi-OCR 本体 | `成套报价软件\bin\Debug\Umi-OCR\` | 按上表离线拷贝方式 |
|
||||||
|
|
||||||
|
|
||||||
|
## 四、验证环境就绪(编译+组装各跑一遍)
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# 编译(★ 工作目录必须是 成套报价软件\ 子目录,rsp 相对路径基于它)
|
||||||
|
cd 成套报价软件
|
||||||
|
& "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" "@..\tools\verify_build.rsp" /warn:1
|
||||||
|
# 预期: 无输出无警告, ExitCode=0
|
||||||
|
|
||||||
|
# 组装发布目录(回仓库根跑)
|
||||||
|
cd ..
|
||||||
|
python tools\make_package.py
|
||||||
|
# 预期: "DLL 复制完成,缺失: 无" 且无 "!!" 警告
|
||||||
|
# 首次部署若提示缺 fonts/templates/server.cjs,属正常——开发机从部署机补齐的逻辑,
|
||||||
|
# 你机器上 $src\cadbt\CAD-Viewer\dist 已含这三样,核对输出无 "!!" 即可
|
||||||
|
```
|
||||||
|
|
||||||
|
两条都过 = 环境就绪,随时可打包发版。
|
||||||
|
|
||||||
|
## 五、日常打包发版(8 步,详见打包技能项目专章)
|
||||||
|
|
||||||
|
```
|
||||||
|
① tools\递增版本号.ps1 版本号+1(AssemblyInfo+setup.iss 同步)
|
||||||
|
② 杀占用进程 → 编译(同第四节)
|
||||||
|
③ python tools\make_package.py 组装发布目录
|
||||||
|
④ ISCC release\成套报价软件\setup.iss 出 成套报价软件_Setup_<版本>.exe(~2分钟)
|
||||||
|
⑤ 改 make_update_package.py(包名带版本+本期说明)→ python 运行 出更新包
|
||||||
|
⑥ git add -A; git commit; git push
|
||||||
|
⑦ Gitea Release:tag=v<版本>,附件=安装包+更新包(API+令牌,见技能)
|
||||||
|
⑧ 验收:装机看"关于软件"版本号
|
||||||
|
```
|
||||||
|
|
||||||
|
## 六、常见问题
|
||||||
|
|
||||||
|
| 现象 | 原因 | 处置 |
|
||||||
|
|---|---|---|
|
||||||
|
| 编译报 CS2001 全部源文件找不到 | 工作目录错了 | 必须 `成套报价软件\` 子目录里跑 `@..\tools\verify_build.rsp` |
|
||||||
|
| 编译报缺 Smart.CustomComponents 等 | 没装定制版 SharpDevelop 或装在非默认位置 | 装 MSI 到默认目录;非默认位置需改 csproj/rsp 引用路径 |
|
||||||
|
| make_package 提示缺 icons/licenses/元件库网页 | 第三节 3a 没做 | 按映射表补拷 |
|
||||||
|
| 打出的包 CAD 打不开/缺字体 | CAD-Viewer dist 或 node 没恢复 | 按第三节 3b 补拷 |
|
||||||
|
| AI 助手起不来 | zcode 发行包缺失 | 按第三节 3c 补拷 |
|
||||||
|
| exe 被占用编译/复制失败 | 程序正在运行 | `Get-Process \| Where {$_.Path -like '*成套报价软件*'} \| Stop-Process -Force` |
|
||||||
|
| SD 设计器打不开窗体/一片 CS0246 | SharpDevelop 是旧构建 | 换最新构建的 MSI 重装(详见 sd-enhanced-components 技能第四章) |
|
||||||
|
|
||||||
|
## 七、数据安全提醒
|
||||||
|
|
||||||
|
- `bin\Debug\sjk\bjb\`(项目库)、`sjk\方案库\`、`shezhi\` 企业信息是**用户数据**,换机器不要互拷(打包脚本会自动排除)。
|
||||||
|
- git 仓库与 Release 附件不含任何用户项目数据。
|
||||||
Reference in New Issue
Block a user