社区
WebSphere
帖子详情
was5.0中文显示问题
hero3_cc
2004-03-26 11:50:17
有谁碰到过这样的问题吗
我把<%@ page contentType="text/html; charset=gb2312" %>放在userlogin.jsp页面就可以正确显示中文,
如果放在jspheader.jsp内,然后userlogin.jsp用<%@ include file="jspheader.jsp"%>就显示乱码
...全文
119
8
打赏
收藏
was5.0中文显示问题
有谁碰到过这样的问题吗 我把放在userlogin.jsp页面就可以正确显示中文, 如果放在jspheader.jsp内,然后userlogin.jsp用就显示乱码
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Sheepy
2004-05-10
打赏
举报
回复
除了page指令,在head标记主体中写上:
<META http-equiv="Content-Type" content="text/html; charset=GBK">
试试看。
dropship
2004-05-08
打赏
举报
回复
同意snail2004(蜗牛2004)
snail2004
2004-03-28
打赏
举报
回复
我没在weblogic和was下测试过,但我认为这可能和应用服务器对include文件的实现有关系,jsp specification并没有对include的具体实现做明确规范。从编码风格来看,在每个jsp页面上写上<%@ page contentType="text/html; charset=gb2312" %>以指定jsp页面的字符集编码格式是一个好的习惯。
donghx1234
2004-03-27
打赏
举报
回复
学习
hero3_cc
2004-03-27
打赏
举报
回复
to 冰雪
<jsp:include page="jspheader.jsp"/>
这个也不行。
snail2004
2004-03-26
打赏
举报
回复
jsp编译指令是在预编译期间被解释的,但在这个阶段,被包含文件的内容还没有被包含到包含文件中。这一点,你可以查看tomcat的预编译文件(%tomcathome%\work\Standalone\localhost\_\*.java)来证实。也就是说,你把<%@ page contentType="text/html; charset=gb2312" %>放到被包含文件中实际上是不会被编译的,所以出现中文乱码。因此,必须把这行指令放到包含文件(userlogin.jsp)中。
iceleighton
2004-03-26
打赏
举报
回复
不要用
<%@ include file="jspheader.jsp"%>
要用
<jsp:include page="jspheader.jsp"/>
hero3_cc
2004-03-26
打赏
举报
回复
但是我们以前在weblogic6.1内面都是正常的,现在移至到was5.0内就出现这个问题了。
MySQL5.1参考手册官方简体
中文
版
MySQL 5.1参考手册 这是MySQL参考手册的翻译版本,关于MySQL参考手册,请访问dev.mysql.com。 原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的。 This translation was done by MySQL partner GreatLinux, Beijing, People's Republic of China. GreatLinux Inc. 北京万里开源软件有限公司在全国范围提供MySQL产品相关的商务及 技术方面的咨询与支持服务。垂询请致电:8610-65694500,或发送邮件至:sales@greatlinux.com. 本手册编译于2006-7-29,目录及索引由官方HTML文档转换并加以修订,如有链接错误请发送邮件至: hemono@gmail.com 。获取最新CHM及PDF版本,请访问:hemon.ecjtu.net 。 张伟,华东交通大学。 摘要 这是MySQL参考手册 它涉及MySQL 5.1至5.1.2-alpha版本。 文档生成于: 2005-11-15 -------------------------------------------------------------------------------- 目录 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. MaxDB和MySQL之间的特性差异 1.5.6. MaxDB和MySQL之间的协同性 1.5.7. 与MaxDB有关的链接 1.6. MySQL发展大事记 1.6.1. MySQL 5.1的新特性 1.7. MySQL信息源 1.7.1. MySQL邮件列表 1.7.2. IRC(在线聊天系统)上的MySQL社区支持 1.7.3. MySQL论坛上的MySQL社区支持 1.8. MySQL标准的兼容性 1.8.1. MySQL遵从的标准是什么 1.8.2. 选择SQL模式 1.8.3. 在ANSI模式下运行MySQL 1.8.4. MySQL对标准SQL的扩展 1.8.5. MySQL与标准SQL的差别 1.8.6. MySQL处理约束的方式 2. 安装MySQL 2.1. 一般安装
问题
2.1.1. MySQL支持的操作系统 2.1.2. 选择要安装的MySQL分发版 2.1.3. 怎样获得MySQL 2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动MySQL 2.3.13. 测试MySQL安装 2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译
问题
2.8.5. MIT-pthreads注意事项 2.8.6. 在Windows下从源码安装MySQL 2.8.7. 在Windows下编译MySQL客户端 2.9. 安装后的设置和测试 2.9.1. Windows下安装后的过程 2.9.2. Unix下安装后的过程 2.9.3. 使初始MySQL账户安全 2.10. 升级MySQL 2.10.1. 从5.0版升级 2.10.2. 升级授权表 2.10.3. 将MySQL数据库拷贝到另一台机器 2.11. 降级MySQL 2.12. 具体操作系统相关的注意事项 2.12.1. Linux注意事项 2.12.2. Mac OS X注意事项 2.12.3. Solaris注意事项 2.12.4. BSD注意事项 2.12.5. 其它Unix注意事项 2.12.6. OS/2注意事项 2.13. Perl安装注意事项 2.13.1. 在Unix中安装Perl 2.13.2. 在Windows下安装ActiveState Perl 2.13.3. 使用Perl DBI/DBD接口的
问题
3. 教程 3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表的信息 3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2.
显示
孪生对状态的表 3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端脚本和实用工具概述 5.1.2. mysqld-max扩展MySQL服务器 5.1.3. mysqld_safe:MySQL服务器启动脚本 5.1.4. mysql.server:MySQL服务器启动脚本 5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 5.2.4. MySQL实例管理器配置文件 5.2.5. MySQL实例管理器识别的命令 5.3. mysqld:MySQL服务器 5.3.1. mysqld命令行选项 5.3.2. SQL服务器模式 5.3.3. 服务器系统变量 5.3.4. 服务器状态变量 5.4. mysql_fix_privilege_tables:升级MySQL系统表 5.5. MySQL服务器关机进程 5.6. 一般安全
问题
5.6.1. 通用安全指南 5.6.2. 使MySQL在攻击者面前保持安全 5.6.3. Mysqld安全相关启动选项 5.6.4. LOAD DATA LOCAL安全
问题
5.7. MySQL访问权限系统 5.7.1. 权限系统的作用 5.7.2. 权限系统工作原理 5.7.3. MySQL提供的权限 5.7.4. 与MySQL服务器连接 5.7.5. 访问控制, 阶段1:连接核实 5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 5.8.1. MySQL用户名和密码 5.8.2. 向MySQL增加新用户账户 5.8.3. 从MySQL删除用户账户 5.8.4. 限制账户资源 5.8.5. 设置账户密码 5.8.6. 使你的密码安全 5.8.7. 使用安全连接 5.9. 备份与恢复 5.9.1. 数据库备份 5.9.2. 示例用备份与恢复策略 5.9.3. 自动恢复 5.9.4. 表维护和崩溃恢复 5.9.5. myisamchk:MyISAM表维护实用工具 5.9.6. 建立表维护计划 5.9.7. 获取关于表的信息 5.10. MySQL本地化和国际应用 5.10.1. 数据和排序用字符集 5.10.2. 设置错误消息语言 5.10.3. 添加新的字符集 5.10.4. 字符定义数组 5.10.5. 字符串比较支持 5.10.6. 多字节字符支持 5.10.7. 字符集
问题
5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制实施细节 6.3.1. 复制主线程状态 6.3.2. 复制从I/O线程状态 6.3.3. 复制从SQL线程状态 6.3.4. 复制传递和状态文件 6.4. 如何设置复制 6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知
问题
6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的Auto-Increment 7. 优化 7.1. 优化概述 7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化DISTINCT 7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. DELETE语句的速度 7.2.19. 其它优化技巧 7.3. 锁定事宜 7.3.1. 锁定方法 7.3.2. 表锁定事宜 7.4. 优化数据库结构 7.4.1. 设计选择 7.4.2. 使你的数据尽可能小 7.4.3. 列索引 7.4.4. 多列索引 7.4.5. MySQL如何使用索引 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. MySQL如何计算打开的表 7.4.9. MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 7.5.6. MySQL如何使用DNS 7.6. 磁盘事宜 7.6.1. 使用符号链接 8. 客户端和实用工具程序 8.1. 客户端脚本和实用工具概述 8.2. myisampack:生成压缩、只读MyISAM表 8.3. mysql:MySQL命令行工具 8.3.1. 选项 8.3.2. mysql命令 8.3.3. 怎样从文本文件执行SQL语句 8.3.4. mysql技巧 8.4. mysqlaccess:用于检查访问权限的客户端 8.5. mysqladmin:用于管理MySQL服务器的客户端 8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. mysqlshow-
显示
数据库、表和列信息 8.12. myisamlog:
显示
MyISAM日志文件内容 8.13. perror:解释错误代码 8.14. replace:字符串替换实用工具 8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文字值 9.1.1. 字符串 9.1.2. 数值 9.1.3. 十六进制值 9.1.4. 布尔值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 数据库、表、索引、列和别名 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对 10.3. 确定默认字符集和校对 10.3.1. 服务器字符集和校对 10.3.2. 数据库字符集和校对 10.3.3. 表字符集和校对 10.3.4. 列字符集和校对 10.3.5. 字符集和校对分配示例 10.3.6. 连接字符集和校对 10.3.7. 字符串文字字符集和校对 10.3.8. 在SQL语句中使用COLLATE 10.3.9. COLLATE子句优先 10.3.10. BINARY操作符 10.3.11. 校对确定较为复杂的一些特殊情况 10.3.12. 校对必须适合字符集 10.3.13. 校对效果的示例 10.4. 字符集支持影响到的操作 10.4.1. 结果字符串 10.4.2. CONVERT() 10.4.3. CAST() 10.4.4. SHOW语句 10.5. Unicode支持 10.6. 用于元数据的UTF8 10.7. 与其它DBMS的兼容性 10.8. 新字符集配置文件格式 10.9. 国家特有字符集 10.10. MySQL支持的字符集和校对 10.10.1. Unicode字符集 10.10.2. 西欧字符集 10.10.3. 中欧字符集 10.10.4. 南欧与中东字符集 10.10.5. 波罗的海字符集 10.10.6. 西里尔字符集 10.10.7. 亚洲字符集 11. 列类型 11.1. 列类型概述 11.1.1. 数值类型概述 11.1.2. 日期和时间类型概述 11.1.3. 字符串类型概述 11.2. 数值类型 11.3. 日期和时间类型 11.3.1. DATETIME、DATE和TIMESTAMP类型 11.3.2. TIME类型 11.3.3. YEAR类型 11.3.4. Y2K事宜和日期类型 11.4. String类型 11.4.1. CHAR和VARCHAR类型 11.4.2. BINARY和VARBINARY类型 11.4.3. BLOB和TEXT类型 11.4.4. ENUM类型 11.4.5. SET类型 11.5. 列类型存储需求 11.6. 选择正确的列类型 11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. 字符串比较函数 12.4. 数值函数 12.4.1. 算术操作符 12.4.2. 数学函数 12.5. 日期和时间函数 12.6. MySQL使用什么日历? 12.7. 全文搜索功能 12.7.1. 布尔全文搜索 12.7.2. 全文搜索带查询扩展 12.7.3. 全文停止字 12.7.4. 全文限定条件 12.7.5. 微调MySQL全文搜索 12.8. Cast函数和操作符 12.9. 其他函数 12.9.1. 位函数 12.9.2. 加密函数 12.9.3. 信息函数 12.9.4. 其他函数 12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 13.1.2. ALTER TABLE语法 13.1.3. CREATE DATABASE语法 13.1.4. CREATE INDEX语法 13.1.5. CREATE TABLE语法 13.1.6. DROP DATABASE语法 13.1.7. DROP INDEX语法 13.1.8. DROP TABLE语法 13.1.9. RENAME TABLE语法 13.2. 数据操作语句 13.2.1. DELETE语法 13.2.2. DO语法 13.2.3. HANDLER语法 13.2.4. INSERT语法 13.2.5. LOAD DATA INFILE语法 13.2.6. REPLACE语法 13.2.7. SELECT语法 13.2.8. Subquery语法 13.2.9. TRUNCATE语法 13.2.10. UPDATE语法 13.3. MySQL实用工具语句 13.3.1. DESCRIBE语法(获取有关列的信息) 13.3.2. USE语法 13.4. MySQL事务处理和锁定语句 13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法 13.4.2. 不能回滚的语句 13.4.3. 会造成隐式提交的语句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET语法 13.5.4. SHOW语法 13.5.5. 其它管理语句 13.6. 复制语句 13.6.1. 用于控制主服务器的SQL语句 13.6.2. 用于控制从服务器的SQL语句 13.7. 用于预处理语句的SQL语法 14. 插件式存储引擎体系结构 14.1. 前言 14.2. 概述 14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储引擎和事务 14.7. 插入存储引擎 14.8. 拔出存储引擎 14.9. 插件式存储器的安全含义 15. 存储引擎和表类型 15.1. MyISAM存储引擎 15.1.1. MyISAM启动选项 15.1.2. 键所需的空间 15.1.3. MyISAM表的存储格式 15.1.4. MyISAM表方面的
问题
15.2. InnoDB存储引擎 15.2.1. InnoDB概述 15.2.2. InnoDB联系信息 15.2.3. InnoDB配置 15.2.4. InnoDB启动选项 15.2.5. 创建InnoDB表空间 15.2.6. 创建InnoDB表 15.2.7. 添加和删除InnoDB数据和日志文件 15.2.8. InnoDB数据库的备份和恢复 15.2.9. 将InnoDB数据库移到另一台机器上 15.2.10. InnoDB事务模型和锁定 15.2.11. InnoDB性能调节提示 15.2.12. 多版本的实施 15.2.13. 表和索引结构 15.2.14. 文件空间管理和磁盘I/O 15.2.15. InnoDB错误处理 15.2.16. 对InnoDB表的限制 15.2.17. InnoDB故障诊断与排除 15.3. MERGE存储引擎 15.3.1. MERGE表方面的
问题
15.4. MEMORY (HEAP)存储引擎 15.5. BDB (BerkeleyDB)存储引擎 15.5.1. BDB支持的操作系统 15.5.2. 安装BDB 15.5.3. BDB启动选项 15.5.4. BDB表的特性 15.5.5. 修改BDB所需的事宜 15.5.6. 对BDB表的限制 15.5.7. 使用BDB表时可能出现的错误 15.6. EXAMPLE存储引擎 15.7. FEDERATED存储引擎 15.7.1. 安装FEDERATED存储引擎 15.7.2. FEDERATED存储引擎介绍 15.7.3. 如何使用FEDERATED表 15.7.4. FEDERATED存储引擎的局限性 15.8. ARCHIVE存储引擎 15.9. CSV存储引擎 15.10. BLACKHOLE存储引擎 16. 编写自定义存储引擎 16.1. 前言 16.2. 概述 16.3. 创建存储引擎源文件 16.4. 创建handlerton 16.5. 对处理程序进行实例化处理 16.6. 定义表扩展 16.7. 创建表 16.8. 打开表 16.9. 实施基本的表扫描功能 16.9.1. 实施store_lock()函数 16.9.2. 实施external_lock()函数 16.9.3. 实施rnd_init()函数 16.9.4. 实施info()函数 16.9.5. 实施extra()函数 16.9.6. 实施rnd_next()函数 16.10. 关闭表 16.11. 为存储引擎添加对INSERT的支持 16.12. 为存储引擎添加对UPDATE的支持 16.13. 为存储引擎添加对DELETE的支持 16.14. API引用 16.14.1. bas_ext 16.14.2. close 16.14.3. create 16.14.4. delete_row 16.14.5. delete_table 16.14.6. external_lock 16.14.7. extra 16.14.8. info 16.14.9. open 16.14.10. rnd_init 16.14.11. rnd_next 16.14.12. store_lock 16.14.13. update_row 16.14.14. write_row 17. MySQL簇 17.1. MySQL簇概述 17.2. MySQL簇的基本概念 17.3. 多计算机的简单基础知识 17.3.1. 硬件、软件和联网 17.3.2. 安装 17.3.3. 配置 17.3.4. 首次启动 17.3.5. 加载示例数据并执行查询 17.3.6. 安全关闭和重启 17.4. MySQL簇的配置 17.4.1. 从源码创建MySQL簇 17.4.2. 安装软件 17.4.3. MySQL簇的快速测试设置 17.4.4. 配置文件 17.5. MySQL簇中的进程管理 17.5.1. 用于MySQL簇的MySQL服务器进程使用 17.5.2. ndbd,存储引擎节点进程 17.5.3. ndb_mgmd,“管理服务器”进程 17.5.4. ndb_mgm,“管理客户端”进程 17.5.5. 用于MySQL簇进程的命令选项 17.6. MySQL簇的管理 17.6.1. MySQL簇的启动阶段 17.6.2. “管理客户端”中的命令 17.6.3. MySQL簇中生成的事件报告 17.6.4. 单用户模式 17.6.5. MySQL簇的联机备份 17.7. 使用与MySQL簇的高速互连 17.7.1. 配置MySQL簇以使用SCI套接字 17.7.2. 理解簇互连的影响 17.8. MySQL簇的已知限制 17.9. MySQL簇发展的重要历程 17.9.1. MySQL 5.0中的MySQL簇变化 17.9.2. 关于MySQL簇的MySQL 5.1发展历程 17.10. MySQL簇常见
问题
解答 17.11. MySQL簇术语表 18. 分区 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. KEY分区 18.2.5. 子分区 18.2.6. MySQL分区处理NULL值的方式 18.3. 分区管理 18.3.1. RANGE和LIST分区的管理 18.3.2. HASH和KEY分区的管理 18.3.3. 分区维护 18.3.4. 获取关于分区的信息 19. MySQL中的空间扩展 19.1. 前言 19.2. OpenGIS几何模型 19.2.1. Geometry类的层次 19.2.2. 类Geometry 19.2.3. 类Point 19.2.4. 类Curve 19.2.5. 类LineString 19.2.6. 类Surface 19.2.7. 类Polygon 19.2.8. 类GeometryCollection 19.2.9. 类MultiPoint 19.2.10. 类MultiCurve 19.2.11. 类MultiLineString 19.2.12. 类MultiSurface 19.2.13. 类MultiPolygon 19.3. 支持的空间数据格式 19.3.1. 著名的文本(WKT)格式 19.3.2. 著名的二进制(WKB)格式 19.4. 创建具备空间功能的MySQL数据库 19.4.1. MySQL空间数据类型 19.4.2. 创建空间值 19.4.3. 创建空间列 19.4.4. 填充空间列 19.4.5. 获取空间数据 19.5. 分析空间信息 19.5.1. Geometry格式转换函数 19.5.2. Geometry函数 19.5.3. 从已有Geometry创建新Geometry的函数 19.5.4. 测试几何对象间空间关系的函数 19.5.5. 关于几何最小边界矩形(MBR)的关系 19.5.6. 测试几何类之间空间关系的函数 19.6. 优化空间分析 19.6.1. 创建空间索引 19.6.2. 使用空间索引 19.7. MySQL的一致性和兼容性 19.7.1. 尚未实施的GIS特性 20. 存储程序和函数 20.1. 存储程序和授权表 20.2. 存储程序的语法 20.2.1. CREATE PROCEDURE和CREATE FUNCTION 20.2.2. ALTER PROCEDURE和ALTER FUNCTION 20.2.3. DROP PROCEDURE和DROP FUNCTION 20.2.4. SHOW CREATE PROCEDURE和SHOW CREATE FUNCTION 20.2.5. SHOW PROCEDURE STATUS和SHOW FUNCTION STATUS 20.2.6. CALL语句 20.2.7. BEGIN ... END复合语句 20.2.8. DECLARE语句 20.2.9. 存储程序中的变量 20.2.10. 条件和处理程序 20.2.11. 光标 20.2.12. 流程控制构造 20.3. 存储程序、函数、触发程序和复制:常见
问题
20.4. 存储子程序和触发程序的二进制日志功能 21. 触发程序 21.1. CREATE TRIGGER语法 21.2. DROP TRIGGER语法 21.3. 使用触发程序 22. 视图 22.1. ALTER VIEW语法 22.2. CREATE VIEW语法 22.3. DROP VIEW语法 22.4. SHOW CREATE VIEW语法 23. INFORMATION_SCHEMA信息数据库 23.1. INFORMATION_SCHEMA表 23.1.1. INFORMATION_SCHEMA SCHEMATA表 23.1.2. INFORMATION_SCHEMA TABLES表 23.1.3. INFORMATION_SCHEMA COLUMNS表 23.1.4. INFORMATION_SCHEMA STATISTICS表 23.1.5. INFORMATION_SCHEMA USER_PRIVILEGES表 23.1.6. INFORMATION_SCHEMA SCHEMA_PRIVILEGES表 23.1.7. INFORMATION_SCHEMA TABLE_PRIVILEGES表 23.1.8. INFORMATION_SCHEMA COLUMN_PRIVILEGES表 23.1.9. INFORMATION_SCHEMA CHARACTER_SETS表 23.1.10. INFORMATION_SCHEMA COLLATIONS表 23.1.11. INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY表 23.1.12. INFORMATION_SCHEMA TABLE_CONSTRAINTS表 23.1.13. INFORMATION_SCHEMA KEY_COLUMN_USAGE表 23.1.14. INFORMATION_SCHEMA ROUTINES表 23.1.15. INFORMATION_SCHEMA VIEWS表 23.1.16. INFORMATION_SCHEMA TRIGGERS表 23.1.17. 其他INFORMATION_SCHEMA表 23.2. SHOW语句的扩展 24. 精度数学 24.1. 数值的类型 24.2. DECIMAL数据类型更改 24.3. 表达式处理 24.4. 四舍五入 24.5. 精度数学示例 25. API和库 25.1. libmysqld,嵌入式MySQL服务器库 25.1.1. 嵌入式MySQL服务器库概述 25.1.2. 使用libmysqld编译程序 25.1.3. 使用嵌入式MySQL服务器时的限制 25.1.4. 与嵌入式服务器一起使用的选项 25.1.5. 嵌入式服务器中尚需完成的事项(TODO) 25.1.6. 嵌入式服务器示例 25.1.7. 嵌入式服务器的许可 25.2. MySQL C API 25.2.1. C API数据类型 25.2.2. C API函数概述 25.2.3. C API函数描述 25.2.4. C API预处理语句 25.2.5. C API预处理语句的数据类型 25.2.6. C API预处理语句函数概述 25.2.7. C API预处理语句函数描述 25.2.8. C API预处理语句方面的
问题
25.2.9. 多查询执行的C API处理 25.2.10. 日期和时间值的C API处理 25.2.11. C API线程函数介绍 25.2.12. C API嵌入式服务器函数介绍 25.2.13. 使用C API时的常见
问题
25.2.14. 创建客户端程序 25.2.15. 如何生成线程式客户端 25.3. MySQL PHP API 25.3.1. 使用MySQL和PHP的常见
问题
25.4. MySQL Perl API 25.5. MySQL C++ API 25.5.1. Borland C++ 25.6. MySQL Python API 25.7. MySQL Tcl API 25.8. MySQL Eiffel Wrapper 25.9. MySQL程序开发实用工具 25.9.1. msql2mysql:转换mSQL程序以用于MySQL 25.9.2. mysql_config:获取编译客户端的编译选项 26. 连接器 26.1. MySQL Connector/ODBC 26.1.1. MyODBC介绍 26.1.2. 关于ODBC和MyODBC的一般信息 26.1.3. 如何安装MyODBC 26.1.4. 在Windows平台上从二进制版本安装MyODBC 26.1.5. I在Unix平台上从二进制版本安装MyODBC 26.1.6. 在Windows平台上从源码版本安装MyODBC 26.1.7. 在Unix平台上从源码版本安装MyODBC 26.1.8. 从BitKeeper开发源码树安装MyODBC 26.1.9. MyODBC配置 26.1.10. 与MyODBC连接相关的事宜 26.1.11. MyODBC和Microsoft Access 26.1.12. MyODBC和Microsoft VBA及ASP 26.1.13. MyODBC和第三方ODBC工具 26.1.14. MyODBC通用功能 26.1.15. 基本的MyODBC应用步骤 26.1.16. MyODBC API引用 26.1.17. MyODBC数据类型 26.1.18. MyODBC错误代码 26.1.19. MyODBC与VB:ADO、DAO和RDO 26.1.20. MyODBC与Microsoft.NET 26.1.21. 感谢 26.2. MySQL Connector/NET 26.2.1. 前言 26.2.2. 下载并安装MySQL Connector/NET 26.2.3. Connector/NET体系结构 26.2.4. 使用MySQL Connector/NET 26.2.5. MySQL Connector/NET变更史 26.3. MySQL Connector/J 26.3.1. 基本的JDBC概念 26.3.2. 安装 Connector/J 26.3.3. JDBC引用 26.3.4. 与J2EE和其他Java框架一起使用 Connector/J 26.3.5. 诊断 Connector/J方面的
问题
26.3.6. Changelog 26.4. MySQL Connector/MXJ 26.4.1. 前言 26.4.2. 支持平台: 26.4.3. Junit测试要求 26.4.4. 运行Junit测试 26.4.5. 作为JDBC驱动程序的一部分运行 26.4.6. 在Java对象中运行 26.4.7. MysqldResource API 26.4.8. 在JMX代理(custom)中运行 26.4.9. 部署在标准的JMX代理环境下 (JBoss) 26.4.10. 安装 27. 扩展MySQL 27.1. MySQL内部控件 27.1.1. MySQL线程 27.1.2. MySQL测试套件 27.2. 为MySQL添加新函数 27.2.1. 自定义函数接口的特性 27.2.2. CREATE FUNCTION/DROP FUNCTION语法 27.2.3. 添加新的自定义函数 27.2.4. 添加新的固有函数 27.3. 为MySQL添加新步骤 27.3.1. 步骤分析 27.3.2. 编写步骤 A.
问题
和常见错误 A.1. 如何确定导致
问题
的原因 A.2. 使用MySQL程序时的常见错误 A.2.1. 拒绝访问 A.2.2. 无法连接到[local] MySQL服务器 A.2.3. 客户端不支持鉴定协议 A.2.4. 输入密码时出现密码错误 A.2.5. 主机的host_name被屏蔽 A.2.6. 连接数过多 A.2.7. 内存溢出 A.2.8. MySQL服务器不可用 A.2.9. 信息包过大 A.2.10. 通信错误和失效连接 A.2.11. 表已满 A.2.12. 无法创建文件/写入文件 A.2.13. 命令不同步 A.2.14. 忽略用户 A.2.15. 表tbl_name不存在 A.2.16. 无法初始化字符集 A.2.17. 文件未找到 A.3. 与安装有关的事宜 A.3.1. 与MySQL客户端库的链接
问题
A.3.2. 如何以普通用户身份运行MySQL A.3.3. 与文件许可有关的
问题
A.4. 与管理有关的事宜 A.4.1. 如何复位根用户密码 A.4.2. 如果MySQL依然崩溃,应作些什么 A.4.3. MySQL处理磁盘满的方式 A.4.4. MySQL将临时文件储存在哪里 A.4.5. 如何保护或更改MySQL套接字文件/tmp/mysql.sock A.4.6. 时区
问题
A.5. 与查询有关的事宜 A.5.1. 搜索中的大小写敏感性 A.5.2. 使用DATE列方面的
问题
A.5.3. 与NULL值有关的
问题
A.5.4. 与列别名有关的
问题
A.5.5. 非事务表回滚失败 A.5.6. 从相关表删除行 A.5.7. 解决与不匹配行有关的
问题
A.5.8. 与浮点比较有关的
问题
A.6. 与优化器有关的事宜 A.7. 与表定义有关的事宜 A.7.1. 与ALTER TABLE有关的
问题
A.7.2. 如何更改表中的列顺序 A.7.3. TEMPORARY TABLE
问题
A.8. MySQL中的已知事宜 A.8.1. MySQL中的打开事宜 B. 错误代码和消息 B.1. 服务器错误代码和消息 B.2. 客户端错误代码和消息 C. 感谢 C.1. MySQL AB处的开发人 C.2. MySQL贡献人 C.3. 资料员和译员 C.4. MySQL使用和包含的库 C.5. 支持MySQL的软件包 C.6. 用于创建MySQL的工具 C.7. MySQL支持人员 D. MySQL变更史 D.1. 5.1.x版中的变更情况(开发) D.1.1. 5.1.2版中的变更情况(尚未发布) D.1.2. 5.1.1版中的变更情况(尚未发布) D.2. MyODBC的变更情况 D.2.1. MyODBC 3.51.12的变更情况 D.2.2. MyODBC 3.51.11的变更情况 E. 移植到其他系统 E.1. 调试MySQL服务器 E.1.1. 针对调试编译MySQL E.1.2. 创建跟踪文件 E.1.3. 在gdb环境下调试mysqld E.1.4. 使用堆栈跟踪 E.1.5. 使用日志文件找出mysqld中的错误原因 E.1.6. 如果出现表崩溃,请生成测试案例 E.2. 调试MySQL客户端 E.3. DBUG软件包 E.4. 关于RTS线程的注释 E.5. 线程软件包之间的差异 F. 环境变量 G. MySQL正则表达式 H. MySQL中的限制 H.1. 联合的限制 I. 特性限制 I.1. 对存储子程序和触发程序的限制 I.2. 对服务器端光标的限制 I.3. 对子查询的限制 I.4. 对视图的限制 I.5. 对XA事务的限制 J. GNU通用公共许可 K. MySQL FLOSS许可例外 索引 图形清单 14.1. MySQL插件式存储引擎的体系结构 14.2. 存储引擎比较 16.1. MySQL体系结构 表格清单 26.1. 连接属性 26.2. 转换表 26.3. 用于ResultSet.getObject()的MySQL类型和Java类型 26.4. MySQL对Java编码名称的翻译 示例清单 26.1. 从DriverManager获得连接 26.2. 使用java.sql.Statement执行SELECT查询 26.3. 存储程序示例 26.4. 使用Connection.prepareCall() 26.5. 注册输出参数 26.6. 设置CallableStatement输入参数 26.7. 检索结果和输出参数值 26.8. 使用Statement.getGeneratedKeys()检索AUTO_INCREMENT列的值 26.9. 使用SELECT LAST_INSERT_ID()检索AUTO_INCREMENT列的值 26.10. 在可更新的ResultSets中检索AUTO_INCREMENT列的值 26.11. 设置Unix环境下的CLASSPATH 26.12. 与J2EE应用服务器一起使用连接池 26.13. 重试逻辑的事务示例 -------------------------------------------------------------------------------- 这是MySQL参考手册的翻译版本,关于MySQL参考手册,请访问dev.mysql.com。 原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的。 This file is decompiled by an unregistered version of ChmDecompiler. Regsitered version does not show this message. You can download ChmDecompiler at : http://www.etextwizard.com/
C# for CSDN 乱七八糟的看不懂
没法下载,到这里折腾一把试试。 本文由abc2253130贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 C#(WINFORM)学习 一、 C#基础 基础 类型和变量 类型和变量 类型 C# 支持两种类型:“值类型”和“引用类型”。值类型包括简单类型(如 char、int 和 float 等)、枚举类型和结构类型。引用类型包括类 (Class)类 型、接口类型、委托类型和数组类型。 变量的类型声明 变量的类型声明 每个变量必须预先声明其类型。如 int a; int b = 100; float j = 4.5; string s1; 用 object 可以表示所有的类型。 预定义类型 下表列出了预定义类型,并说明如何使用。 类型 object 说明 所有其他类型的最终 基类型 字符串类型; 字符串是 Unicode 字符序列 8 位有符号整型 16 位有符号整型 32 位有符号整型 64 位有符号整型 示例 object o = null; 范围 string sbyte short int long string s = "hello"; sbyte val = 12; short val = 12; int val = 12; long val1 = 12; -128 到 127 -32,768 到 32,767 -2,147,483,648 2,147,483,647 -9,223,372,036,854,775,808 到 第1页 C#(WINFORM)学习 long val2 = 34L; 到 9,223,372,036,854,775,807 byte ushort 8 位无符号整型 16 位无符号整型 byte val1 = 12; ushort val1 = 12; uint val1 = 12; uint 32 位无符号整型 uint val2 = 34U; ulong val1 = 12; ulong val2 = 34U; ulong 64 位无符号整型 ulong val3 = 56L; ulong val4 = 78UL; float 单精度浮点型 float val = 1.23F;7 位 double val1 = 1.23; double 双精度浮点型 double val2 = ±5.0 × 10?324 ±1.7 × 10 308 0 到 255 0 到 65,535 0 到 4,294,967,295 0 到 18,446,744,073,709,551,615 ±1.5 × 10?45 ±3.4 × 10 38 到 到 4.56D;15-16 布尔型;bool 值或为 真或为假 字符类型;char 值是 一个 Unicode 字符 精确的小数类型, 具有 28 个有效数字 bool val1 = true; bool val2 = false; char val = 'h'; decimal val = bool char decimal DateTime ±1.0 × 10?28 ±7.9 × 10 28 到 1.23M;28-29 变量转换 简单转换: float f = 100.1234f; 可以用括号转换: short s = (short)f 也可以利用 Convert 方法来转换: string s1; s1=Convert.ToString(a); MessageBox.Show(s1); 常用 Convert 方法有: 第2页 C#(WINFORM)学习 C# Convert.ToBoolean Convert.ToByte Convert.ToChar Convert.ToDateTime Convert.ToDecimal Convert.ToDouble Convert.ToInt16 Convert.ToInt32 Convert.ToInt64 Convert.ToSByte Convert.ToSingle Convert.ToString Convert.ToUInt16 Convert.ToUInt32 Convert.ToUInt64 备注 Math 类 常用科学计算方法: C# Math.Abs Math.Sqrt Math.Round Math.Floor Math.Cos Math.Sin Math.Tan Math.Exp Math.Log Math.Pow(x,y) Math.Max(x,y) 备注 绝对值 开方 取整,四舍五入 取整,放弃小数 余弦 正弦 正切 返回 e 的指定次幂 对数 数字 x 的 y 次幂 返回较大者 第3页 C#(WINFORM)学习 Math.Min(x,y) 返回较小者 枚举型 一般为字符串,可以定义带数字的枚举型,示例为: enum Color { Red=1, Blue=2, Green=3 } class Shape { public int Fill(Color color) { int ii; switch(color) { case Color.Red: ii=10; break; case Color.Blue: ii=11; break; case Color.Green: ii=12; break; default: ii=-1; break; } return ii; } } private void button1_Click(object sender, System.EventArgs e) { int i; Shape s1=new Shape(); i=s1.Fill((Color)2); //i=s1.Fill(Color.Blue); MessageBox.Show(i.ToString()); 第4页 C#(WINFORM)学习 } Enum 需要放在 class 外面,才能被其它 class 的程序调用。 C#关键字 关键字 abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new struct null switch object this operator throw out true override try params typeof private uint protected ulong public unchecked readonly unsafe ref ushort return using sbyte virtual sealed volatile short void sizeof while stackalloc static string 数组 定义 数组是一种排列有序的数据结构,包含于数组中的变量被称为数组的元素, 它们都有相同的类型。 数组声明 int [] array1 = new int[5]; int [,,] array3 = new int[10,20,30]; int [] array1 = new int[] {1,2,4}; 第5页 C#(WINFORM)学习 数组引用 array1[0]="a1"; 注意,如果定义数组为 int[5] ,则从 0~4。 数组长度 line0.GetLength(1) 数组赋值 可以从一个已经赋值的数组 array2 向未赋值的同等数组 array1 赋值,用 array1=array2; 这时,array1 就变成和 array2 一样的数组了。 集合 集合的使用 集合可以看成是可以随意添加的数组,因此凡是在使用数组的场合,都可以 使用集合。而且集合的元素可以是任意对象,操作也比数组灵活的多。 使用集合时,必须注意集合的生命期
问题
。如果有两个集合 L1 和 L2,使用 了 L1=L2; 后,只要 L2 生命期没有终结,它的以后的变化就可能会影响到 L1 的数值。因 此在赋值后应该及时销毁或者初始化 L2,以免发生不可预见的错误。 比较 使用 Contains 方法。 ArrayList Array1=new ArrayList(); Array1.Add("as"); bool b1=Array1.Contains("as"); MessageBox.Show(b1.ToString()); 第6页 C#(WINFORM)学习 找到集合中数量最多的一个元素 利用方法来查找,可以返回两个变量。 object Jmax0(ArrayList v11,ref int jj) { int i; object j0=0; ArrayList y11=new ArrayList(); //各个不同的元素的集合 int [] y12=new int[v11.Count]; //记录各个元素数量的数组 int xmax=0; //最大的一个元素的数量 for (i=0;i
10) if (y > 20) Console.Write("Statement_1"); else Console.Write("Statement_2"); 关系运算符 <,,>= 等于:== 不等于:!= 判断字符串 string 和 char 用 Equals 方法。 逻辑运算符 与:a & b 或:a | b 第8页 C#(WINFORM)学习 非:! A 模数运算符 模数运算符 (%) 计算第二个操作数除第一个操作数后的余数。所有数值类 型都具有预定义的模数运算符。如 Console.WriteLine(5 % 2); Console.WriteLine(-5 % 2); Console.WriteLine(5.0 % 2.2); Console.WriteLine(-5.2 % 2.0); // =1 // =-1 // =0.6 // =-1.2 经常用模数运算符来判断整数为奇数(=1)或偶数(=0) 。 循环 无条件循环 int sum,x; sum=0; for(x=1;x<=100;x++) { sum+=x; } 有条件循环 private void button1_Click(object sender, System.EventArgs e) { int sum=0; int x=0; while ((sum<100) & (x<20)) { x++; sum+=x; } string s2=Convert.ToString(x); MessageBox.Show(s2); } 运行
显示
14。 第9页 C#(WINFORM)学习 如果改为 while ((sum<100) | (x<20)) 运行
显示
20。 多重选择 switch (i) { case 0: CaseZero(); break; case 1: CaseOne(); break; default: CaseOthers(); break; } 每个 case 后面,必须有 break 或者 goto,不允许贯穿。 Goto goto 语句将程序控制直接传递给标记语句。 for (int i = 0; i < x; i++) for (int j = 0; j =this.Width-10) { otherForm.Show(); otherForm.L1.Top=label1.Top; this.Hide(); } } private void button1_Click(object sender, System.EventArgs e) { label1.Left=label1.Left-10; } private void button3_Click(object sender, System.EventArgs e) { label1.Top=label1.Top-10; } private void button4_Click(object sender, System.EventArgs e) { label1.Top=label1.Top+10; } private void button5_Click(object sender, System.EventArgs e) { Application.Exit(); } 同样在 Form2 的 InitializeComponent()下面加上窗体定位语句: Point tempPoint = new Point(300,100); this.DesktopLocation = tempPoint; 然后把 Form2 的 StartPosition 属性改为 Manual。其余程序为: public Label L1 { get { return label1; } set { label1=value; 第 22 页 C#(WINFORM)学习 } } private void button2_Click(object sender, System.EventArgs e) { label1.Left=label1.Left+10; } private void button1_Click(object sender, System.EventArgs e) { Form1 otherForm1=new Form1(); label1.Left=label1.Left-10; if (label1.Left<=-10) { otherForm1.Show(); otherForm1.L2.Top=label1.Top; otherForm1.L2.Left=otherForm1.Width-20; this.Hide(); } } private void button3_Click(object sender, System.EventArgs e) { label1.Top=label1.Top-10; } private void button4_Click(object sender, System.EventArgs e) { label1.Top=label1.Top+10; } 动态产生窗体 public void CreateMyForm() { Form form1 = new Form(); Label label1 = new Label(); Button button1 = new Button (); TextBox text1 = new TextBox(); button1.Text = "确定"; button1.Location = new Point (110, 220); label1.Location = new Point (50,100); text1.Location = new Point (150,100); 第 23 页 C#(WINFORM)学习 form1.Text = "请输入"; label1.Text = "数据"; form1.FormBorderStyle = FormBorderStyle.FixedDialog; form1.ControlBox = false; form1.CancelButton = button1; form1.StartPosition = FormStartPosition.CenterScreen; form1.Controls.Add(button1); form1.Controls.Add(text1); form1.Controls.Add(label1); form1.ShowDialog(); ls=text1.Text; } private void button2_Click(object sender, System.EventArgs e) { CreateMyForm(); MessageBox.Show(ls); } ToolBar 普通使用 在窗体上加上 ToolBar 界面修改后的
问题
在界面上修改后,最后要加上: toolBar1.Buttons.Add(toolBarButton1); toolBar1.Buttons.Add(toolBarButton2); toolBar1.Buttons.Add(toolBarButton3); // Add the event-handler delegate. toolBar1.ButtonClick (this.toolBar1_ButtonClick); += new ToolBarButtonClickEventHandler 或者把原有的程序 第 24 页 C#(WINFORM)学习 this.toolBar1.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] { this.toolBarButton1,this.toolBarButton2,this.toolBarButton3}); 改变位置,到 toolBar1 设置的最下面。 全部设置程序为: this.toolBar1.DropDownArrows = true; this.toolBar1.Location = new System.Drawing.Point(0, 0); this.toolBar1.Name = "toolBar1"; this.toolBar1.ShowToolTips = true; this.toolBar1.Size = new System.Drawing.Size(592, 42); this.toolBar1.TabIndex = 0; toolBar1.ButtonSize = new System.Drawing.Size(60, 50); // // toolBarButton1 // this.toolBarButton1.Text = "Open"; toolBarButton1 // // toolBarButton2 // this.toolBarButton2.Text = "Save"; toolBarButton2 // // toolBarButton3 // this.toolBarButton3.Text = "Print"; toolBar1.Buttons.Add(toolBarButton1); toolBar1.Buttons.Add(toolBarButton2); toolBar1.Buttons.Add(toolBarButton3); toolBar1.ButtonClick (this.toolBar1_ButtonClick); += new ToolBarButtonClickEventHandler 设置按钮大小 如下设置,可以正常居中
显示
9 号字体。 toolBar1.ButtonSize = new System.Drawing.Size(60, 50); 用程序实现 可以用程序实现按钮的增加,但是无法全部实现自动化。 第 25 页 C#(WINFORM)学习 先需要手工添加 toolBar1 和 imageList1,然后把 imageList1 中的图片一一加 上。 void toolBarSet() { //添加按钮 ToolBarButton toolBarButton1=new ToolBarButton(); ToolBarButton toolBarButton2=new ToolBarButton(); toolBar1.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] { toolBarButton1,toolBarButton2}); toolBar1.DropDownArrows = true; toolBar1.ImageList = imageList1; toolBar1.Size = new System.Drawing.Size(408, 37); toolBar1.TabIndex = 0; toolBar1.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(toolBar1_ButtonClick); // toolBarButton1 toolBarButton1.ImageIndex = 0; toolBarButton1.ToolTipText = "放大"; // toolBarButton2 toolBarButton2.ImageIndex = 1; toolBarButton2.ToolTipText = "缩小"; } private void Form1_Load(object sender, System.EventArgs e) { toolBarSet(); } private void toolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) { switch(toolBar1.Buttons.IndexOf(e.Button)) { case 0: //放大 MessageBox.Show("放大"); break; case 1: //缩小 MessageBox.Show("缩小"); break; default: MessageBox.Show("other"); break; 第 26 页 C#(WINFORM)学习 } } listBox 普通调用 在窗体上放置一个 listBox1,一个 button1 和一个 label1。以下程序实现添加 选项,双击选项就可以
显示
你的选择: private void button1_Click(object sender, System.EventArgs e) { listBox1.Items.Clear(); listBox1.Items.Add(""); listBox1.Items.Add("选择1"); listBox1.Items.Add("选择2"); listBox1.SelectedIndex=0; } private void listBox1_DoubleClick(object sender, System.EventArgs e) { Label1.Text=listBox1.SelectedIndex.ToString(); } 第一项是一个缺省空项,允许用户不选取退出。 Items 是一个集合,因此增减选项可以按照集合那样操作。 用数组添加选项 System.Object[] ItemObject = new System.Object[10]; for (int i = 0; i <= 9; i++) { ItemObject[i] = "Item" + i; } listBox1.Items.AddRange(ItemObject); 第 27 页 C#(WINFORM)学习 ScrollBar 基本定义 ScrollBar 是滚动条控件,分成 HScrollBar(水平)和 VScrollBar(垂直)两 种。有些控件如 ListBox,TextBox 等可以自动添加滚动条,但是有些控件则需 要用程序添加。主要属性意义为: Value:滚动条的数值,反映当前移动块的位置。初始值设定后,运行时停 留在这个位置。运行时拉动滚动条,由 Scroll 事件的 e.NewValue 参数传递过来。 Maximum:Value 的最大值,一般为 100。 Minimum: Value 的最小值, 即端点的数值。 如果 Maximum=100, Minimum=0, LargeChange=10,则从第一个端点开始 Value=0,到另一个端点的 Value=91。 SmallChange:每次点击移动的数值,一般为 1。 LargeChange:移动块的长度,一般为 10。 控件一起使用 和 PicturBox 控件一起使用 float vi; //每个单位的移动距离 float vk=0.8f; //PicturBox
显示
高度和实际高度的比例 int t0,ti; //PicturBox
显示
Top和Height。 private void vScrollBar1_Scroll(object sender,System.Windows.Forms.ScrollEventArgs e) { this.pictureBox1.Top = t0-Convert.ToInt32(e.NewValue*vi); this.pictureBox1.Height = ti+Convert.ToInt32(e.NewValue*vi); } private void button1_Click(object sender, System.EventArgs e) { Button oButton; TextBox oTextBox; for(int i=1;i<=8;i++) { oButton = new Button(); oButton.Text = "按钮"+ i.ToString(); oButton.Location = new System.Drawing.Point(50, i*50); oButton.Click += new System.EventHandler(oButton_Click); 第 28 页 C#(WINFORM)学习 this.pictureBox1.Controls.Add(oButton); oTextBox = new TextBox(); oButton.Tag = oTextBox; oTextBox.Text = "1000"; oTextBox.Location = new System.Drawing.Point(150, i*50); this.pictureBox1.Controls.Add(oTextBox); } } private void oButton_Click(object sender, System.EventArgs e) { Button btn = (Button)sender; TextBox txt = (TextBox)btn.Tag; txt.Text = Convert.ToString(Convert.ToInt32(txt.Text) + 1); } private void Form1_Load(object sender, System.EventArgs e) { vi=vk*pictureBox1.Height/vScrollBar1.Maximum; t0=pictureBox1.Top; ti=pictureBox1.Height; } Panel 基本定义 Windows 窗体 Panel(面板)控件用于为其他控件提供可识别的分组。在设 计时所有控件均可轻松地移动,当移动 Panel 控件时,它包含的所有控件也将 移动。分组在一个面板中的控件可以通过面板的 Controls 属性进行访问。 Panel 控件类似于 GroupBox 控件;但只有 Panel 控件可以有滚动条,而 且只有 GroupBox 控件
显示
标题。 将 AutoScroll 属性设置为 true,可以自动
显示
滚动条。但是这时右边界和 下边界顶头,不是太好看。这时需要增加一个不可见的控件或者图像来调整。 下例在 Panel 上用程序添加几个控件,产生滚动效果: private void button1_Click(object sender, System.EventArgs e) 第 29 页 C#(WINFORM)学习 { Button oButton; TextBox oTextBox; for(int i=1;i<=8;i++) { oButton = new Button(); oButton.Text = "按钮"+ i.ToString(); oButton.Location = new System.Drawing.Point(50, i*50); oButton.Click += new System.EventHandler(oButton_Click); this.panel1.Controls.Add(oButton); oTextBox = new TextBox(); oButton.Tag = oTextBox; oTextBox.Text = "1000"; oTextBox.Location = new System.Drawing.Point(150, i*50); this.panel1.Controls.Add(oTextBox); } //增加一个不可见按钮,调整右边界和下边界的位置 oButton = new Button(); oButton.Location = new System.Drawing.Point(260, 440); oButton.Height=0; oButton.Width=0; this.panel1.Controls.Add(oButton); } private void oButton_Click(object sender, System.EventArgs e) { Button btn = (Button)sender; TextBox txt = (TextBox)btn.Tag; txt.Text = Convert.ToString(Convert.ToInt32(txt.Text) + 1); } 控件上添加图像 在 Panel 控件上添加图像 在 Panel 控件上不能直接添加图像。 需要在 Panel 控件上添加一个 picturBox, 然后把其 SizeMode 设置为 AutoSize(随着图像大小调整控件大小)就可以实现 图像的随意滚动察看。 控件上画图 在 Panel 控件上画图 Panel 控件上也可以画图。但是滚动时遮盖的图像就消失了。这时候需要在 Panel 控 件 上 添 加 一 个 picturBox , 然 后 在 picturBox 上 画 图 , 然 后 用 一 个 LocationChanged 事件,每次滚动时重画一遍即可: 第 30 页 C#(WINFORM)学习 Pen pen1=new Pen(Color.Green,2); Graphics g1; void drawLine() { PointF p1=new PointF(0,0); PointF p2=new PointF(100,100); g1.DrawLine(pen1,p1,p2); } private void button2_Click(object sender, System.EventArgs e) { g1=this.pictureBox1.CreateGraphics(); drawLine(); } private void pictureBox1_LocationChanged(object sender, System.EventArgs e) { drawLine(); } 菜单 普通应用 手工添加即可。可以直接在其上写各个菜单项的名字,双击可以添加程序, 使用非常方便。 特殊功能 1.在设计时向菜单项添加选中标记 对于在“菜单设计器”内选定的菜单项(三级菜单以下) ,单击该菜单项左侧 的区域,选中标记√。或者在“属性”窗口中将 Checked 属性设置为 True。 以编程方式向菜单项添加选中标记 myMnuItem.Checked = true; 2.在设计时向菜单项添加快捷键 在“菜单设计器”内选择菜单项。在“属性”窗口中,将 Shortcut 属性设置为 第 31 页 C#(WINFORM)学习 下拉列表中提供的值之一。 以编程方式向菜单项添加快捷键 myMnuItem.Shortcut = System.Windows.Forms.Shortcut.F6; 3.向菜单项添加访问键 如键入“文件(&F)” ,
显示
“文件(F)” 。 若要定位到此菜单项,请按 ALT 键,将焦点移动到菜单栏,然后按该菜单 名称的访问键。当菜单打开并
显示
带访问键的项时,只需按该访问键就可选定该 菜单项。或者直接按 ALT+主菜单的访问键。 4.将分隔线作为菜单项添加 在菜单设计器中,右击需要有分隔线的位置,然后选择“插入分隔符”。或者 在设置菜单项的 Text 属性(在“属性”窗口中、菜单设计器中或代码中)时,输 入短划线 (–) 使该菜单项成为分隔线。 其它控件 单选按钮 单选按钮是布置一组按钮,只能选择一组控件。 本例放置 3 个单选按钮,Text 属性分别写上“已婚”“未婚”和“离异” 、 , 然后添加一个 Label 控件和一个 Button 控件,程序如下: public Form1() { InitializeComponent(); label1.Text="请选择"; …… private void button1_Click(object sender, System.EventArgs e) { if (radioButton1.Checked == true) label1.Text=radioButton1.Text; else if (radioButton2.Checked == true) label1.Text=radioButton2.Text; else label1.Text=radioButton3.Text; } 第 32 页 C#(WINFORM)学习 } 复选框 可以选择多个的一组控件。 本例放置 2 个复选按钮,Text 属性分别写上“加粗”和“斜体” ,然后添加 一个 Label 控件和一个 Button 控件,程序如下: private void button1_Click(object sender, System.EventArgs e) { if (checkBox1.Checked == true) { if (checkBox2.Checked == true) label1.Text=checkBox1.Text+checkBox2.Text; else if (checkBox2.Checked == false) label1.Text=checkBox1.Text; } else if (checkBox2.Checked == true) label1.Text=checkBox2.Text; else if (checkBox2.Checked == false) label1.Text=""; } 第 33 页 C#(WINFORM)学习 程序产生 checkBox CheckBox checkBox1=new CheckBox(); void checkSet() { this.Controls.Add(checkBox1); checkBox1.Location = new System.Drawing.Point(50, 64); checkBox1.Name = "checkBox1"; checkBox1.TabIndex = 2; checkBox1.Text = "图层1"; checkBox1.CheckedChanged += new System.EventHandler(checkBox1_CheckedChanged); } private void button1_Click(object sender, System.EventArgs e) { checkSet(); } private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { if (checkBox1.Checked) MessageBox.Show("yes"); else MessageBox.Show("no"); } 如果要实现标题在左边,用 check1.Width=90; check1.CheckAlign=ContentAlignment.MiddleRight; 要在其它控件
显示
: check3.BringToFront(); 动态产生控件 以下程序动态动态产生一组 Button 和 TextBox 控件,以及点击 Button 的事 件。 private void button2_Click(object sender, System.EventArgs e) { Button oButton; TextBox oTextBox; 第 34 页 C#(WINFORM)学习 for(int i=1;i<=5;i++) { oButton = new Button(); oButton.Text = "按钮"+ i.ToString(); oButton.Location = new System.Drawing.Point(50, i*50); oButton.Click += new System.EventHandler(oButton_Click); this.Controls.Add(oButton); oTextBox = new TextBox(); oButton.Tag = oTextBox; oTextBox.Text = "1000"; oTextBox.Location = new System.Drawing.Point(150, i*50); this.Controls.Add(oTextBox); } } private void oButton_Click(object sender, System.EventArgs e) { Button btn = (Button)sender; TextBox txt = (TextBox)btn.Tag; txt.Text = Convert.ToString(Convert.ToInt32(txt.Text) + 1); } Splitter Windows 窗体 splitter 控件用于在运行时调整停靠控件的大小。 Splitter 控 件常用于一类窗体,这类窗体上的控件所
显示
的数据长度可变,如 Windows 资 源管理器,它的数据窗格所包含的信息在不同的时间有不同的宽度。 如果一个控件可由 splitter 控件调整其大小,则当用户将鼠标指针指向该控 件的未停靠的边缘时,鼠标指针将更改外观,指示该控件的大小是可以调整的。 拆分控件允许用户调整该控件紧前面的停靠控件的大小。因此,为使用户能够在 运行时调整停靠控件的大小,请将要调整大小的控件停靠在容器的一条边缘上, 然后将拆分控件停靠在该容器的同一侧。 以下例子自动产生几个控件,可以在运行中调整大小。 private void CreateMySplitControls() { TreeView treeView1 = new TreeView(); ListView listView1 = new ListView(); Splitter splitter1 = new Splitter(); 第 35 页 C#(WINFORM)学习 treeView1.Dock = DockStyle.Left; splitter1.Dock = DockStyle.Left; splitter1.MinExtra = 100; splitter1.MinSize = 75; listView1.Dock = DockStyle.Fill; treeView1.Nodes.Add("TreeView Node"); listView1.Items.Add("ListView Item"); this.Controls.AddRange(new Control[]{listView1, splitter1, treeView1}); } private void button1_Click(object sender, System.EventArgs e) { CreateMySplitControls(); } tabControl Windows 窗体 TabControl
显示
多个选项卡。 使用时, 先添加一个 TabControl 控件,把它拉的足够大。 然后在属性中添加按钮。每个按钮可以控制 TabControl 的其余页面, 作为一 个容器,可以添加其它空间。运行时只要点击按钮,就可以切换选项卡,实现不 同的功能。 StatusBar 可以向 statusBar 添加面板(窗格) ,以分类
显示
信息: public void CreateStatusBarPanels() { statusBar1.Panels.Add(""); statusBar1.Panels.Add("Two"); statusBar1.Panels.Add("Three"); statusBar1.Panels[0].Width=200; statusBar1.Panels[0].Text="One"; statusBar1.ShowPanels = true; } 第 36 页 C#(WINFORM)学习 三、字符和字符串 字符和字符串 字符串的操作在程序设计中非常有用,因此单独写成一章。 Char 基本定义 char 关键字用于声明一个字符。 char 类型的常数可以写成字符、十六进制换码序列或 Unicode 表示形式。 您也可以显式转换整数字符代码。 以下所有语句均声明了一个 char 变量并用字 符 X 将其初始化: char MyChar = 'X'; char MyChar = '\x0058'; char MyChar = (char)88; char MyChar = '\u0058'; // Character literal // Hexadecimal // Cast from integral type // Unicode char 类型可隐式转换为 ushort、int、uint、long、ulong、float、double 或 decimal 类型。但是,不存在从其他类型到 char 类型的隐式转换。 ToCharArray 将字符串的部分字符复制到 Unicode 字符数组。示例 string str = "012wxyz789"; char[] arr; arr = str.ToCharArray(3, 4);
显示
:wxyz 计算字符串宽度 由于英文和
中文
的
显示
长度不一样,所以一些场合要区分。 要引用 using System.Globalization; 第 37 页 C#(WINFORM)学习 程序为: //计算一个字符的字符类型,=0汉字,=1英文 private int getCharType(char ch) { int i0; UnicodeCategory ca1=new UnicodeCategory(); ca1=System.Char.GetUnicodeCategory(ch); switch (ca1) { case UnicodeCategory.OtherPunctuation: i0=0; //汉字 break; case UnicodeCategory.OtherLetter: i0=0; //汉字 break; case UnicodeCategory.FinalQuotePunctuation: i0=0; //汉字 break; default: i0=1; //英文 break; } return i0; } //计算字符串(ss,包含
中文
)的实际宽度(返回)、起点(x0)和高度(height) //输入字号sz,只对于Pixel单位 public float StringWidth(string ss,float sz,ref float x0,ref float height) { char ch1; int i,i0=0; float width=0; float k1=1.02f; //汉字系数 float k2=0.55f; //英文系数 float k3=0.15f; //x0系数 float k4=1.10f; //高度系数 int i1=0; //汉字个数 int i2=0; //英文个数 height=k4*sz; x0=sz*k3; for(i=0;i
显示换行的语句为: textBox1.Text="ok\\r\\n"; textBox1.Text+="ok1"; 字符串分行 string myString1 = "This is the first line of my string.\n" + "This is the second line of my string.\n" + "This is the third line of the string.\n"; string myString2 = @"This is the first line of my string. This is the second line of my string. This is the third line of the string."; 字符串操作 字符串表示 用@后边的字符串不被处理。 A1=@"c:\Docs\Source\a.txt"; string s1=@"c=""a.txt"; //
显示
:c=”a.txt string s1=@"c=""a.txt"""; //
显示
:c=”a.txt” If (s1 == @"""") Then //s1="" 求字符串长度 string s1="fdkls我们"; string s2=Convert.ToString(s1.Length); MessageBox.Show(s2); 第 41 页 C#(WINFORM)学习 运行
显示
为 7,所有字符个数。 裁剪字符串 String s = "123abc456"; Console.WriteLine(s.Remove(3, 3)); 打印“123456”。 Split 方法 标识此实例中的子字符串 (它们由数组中指定的一个或多个字符进行分隔) , 然后将这些子字符串放入一个 String 数组中。 简单的例子 可以按照“, ”分开,也可以去除空格。 private void button1_Click(object sender, System.EventArgs e) { string astring="123,456 78,789"; string [] split; Char [] chr=new Char [] {',',' '}; split = astring.Split(chr); MessageBox.Show("/"+split[0]+"/"); } 这时可以分成 123,456,78,789 四个字符串。 注意,前后空白也可以看成是一个字符串,要消除,用 astring=astring.Trim(); 就可以了。 复杂的例子 当存在两个空格时,就出现找出空字符串的错误。用以下方法可以去掉空的 字符串: string [] Split0(string [] sp) { string [] sp1=new string [sp.Length]; int i=0,j=0; foreach (string s1 in sp) { 第 42 页 C#(WINFORM)学习 if (s1!="") { sp1[i]=s1; i=i+1; } } string [] sp2=new string [i]; for (j=0;j
中文 string s1 = @"d:\chen\a1.txt"; StreamReader sr = new StreamReader(s1,Encoding.GetEncoding("gb2312")); string rl; while((rl=sr.ReadLine())!=null) { MessageBox.Show(rl); } sr.Close(); 第 45 页 C#(WINFORM)学习 文件操作控件 打开文件 用 openFileDialog 控件。 private void button1_Click(object sender, System.EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.InitialDirectory=Directory.GetCurrentDirectory(); openFileDialog1.Filter = "Cursor Files|*.cur"; openFileDialog1.Title = "Select a Cursor File"; if(openFileDialog1.ShowDialog() == DialogResult.OK) { System.IO.StreamReader sr = new System.IO.StreamReader(openFileDialog1.FileName); MessageBox.Show(sr.ReadToEnd()); sr.Close(); } } 选择文件夹 在工具箱上选择 folderBrowserDialog: folderBrowserDialog1.ShowDialog(); string s1 = folderBrowserDialog1.SelectedPath.ToString()+@"\mytest.txt"; StreamWriter wr = new StreamWriter(s1); 第 46 页 C#(WINFORM)学习 六、绘图 基本绘图 画直线 在 Button1 中加入以下程序: System.Drawing.Pen myPen; myPen = new System.Drawing.Pen(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics = this.CreateGraphics(); formGraphics.DrawLine(myPen, 0, 0, 200, 200); myPen.Dispose(); formGraphics.Dispose(); 就可以在 Form1 上面画一条线了。用 myPen = new System.Drawing.Pen(System.Drawing.Color.Red,3); 可以改变线的宽度。 最简单的画线程序 Pen pen1=new Pen(Color.Green,2); Graphics g1=this.CreateGraphics(); PointF p1=new PointF(0,0); PointF p2=new PointF(100,100); g1.DrawLine(pen1,p1,p2); pen1.Dispose(); g1.Dispose(); 最后两句可以不写,程序关闭时自动完成。 画椭圆 System.Drawing.Pen myPen; myPen = new System.Drawing.Pen(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics = this.CreateGraphics(); formGraphics.DrawEllipse(myPen, new Rectangle(0,0,200,300)); myPen.Dispose(); formGraphics.Dispose(); 以下画一个椭圆并填充。 System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red); 第 47 页 C#(WINFORM)学习 System.Drawing.Graphics formGraphics = this.CreateGraphics(); formGraphics.FillEllipse(myBrush, new Rectangle(0,0,200,300)); myBrush.Dispose(); formGraphics.Dispose(); 以椭圆的中心点画图 //以给定点找画椭圆的原始点,使得椭圆的中心点是给定点 PointF EllipseCenter(int xs,int ys,PointF p0) { float ek=0.5f; PointF p1=new PointF(); p1.X=p0.X-xs*ek; p1.Y=p0.Y-ys*ek; return p1; } private void button1_Click(object sender, System.EventArgs e) { Graphics g= this.CreateGraphics(); Pen pen1=new Pen(Color.Yellow,1); Pen pen2=new Pen(Color.Red,1); PointF ps=new PointF(); int xs=1,ys=1; //半轴 PointF p0=new PointF(300,100); ps=EllipseCenter(xs,ys,p0); //以下画十字线表示中心位置 PointF p1=new PointF(0,p0.Y); PointF p2=new PointF(600,p0.Y); PointF p3=new PointF(p0.X,0); PointF p4=new PointF(p0.X,300); g.DrawLine(pen1,p1,p2); g.DrawLine(pen1,p3,p4); g.DrawEllipse(pen2,ps.X,ps.Y,xs,ys); } 点弧线 System.Drawing.Pen myPen; myPen = new System.Drawing.Pen(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics = this.CreateGraphics(); 第 48 页 C#(WINFORM)学习 formGraphics.DrawArc(myPen, 100, 50, 140, 70, 30, 180); myPen.Dispose(); formGraphics.Dispose(); 多点直线 System.Drawing.Pen myPen; myPen = new System.Drawing.Pen(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics = this.CreateGraphics(); PointF point1 = new PointF( 50.0F, 50.0F); PointF point2 = new PointF(100.0F, 25.0F); PointF point3 = new PointF(200.0F, 5.0F); PointF point4 = new PointF(250.0F, 50.0F); PointF point5 = new PointF(300.0F, 100.0F); PointF point6 = new PointF(350.0F, 200.0F); PointF point7 = new PointF(250.0F, 250.0F); PointF[] curvePoints = { point1, point2, point3, point4, point5, point6, point7 }; formGraphics.DrawLines(myPen, curvePoints); myPen.Dispose(); formGraphics.Dispose(); 第 49 页 C#(WINFORM)学习 也可以用以下方式给数组赋值: PointF[] pt=new PointF[]{new PointF(2,2),new PointF(25,150),new PointF(100,100)}; 多点弧线 数据同上,修改如下: int offset = 1; //开始点(从0开始) int numSegments = 5; //包含后续点数 float tension = 1.0F; formGraphics.DrawCurve(myPen, curvePoints, offset, numSegments, tension); 第 50 页 C#(WINFORM)学习 以下程序可以画一个封闭曲线: private void button1_Click(object sender, System.EventArgs e) { System.Drawing.Pen myPen; myPen = new System.Drawing.Pen(System.Drawing.Color.Red); System.Drawing.Graphics formGraphics = this.CreateGraphics(); PointF point1 = new PointF( 50.0F, 50.0F); PointF point2 = new PointF(100.0F, 25.0F); PointF point3 = new PointF(200.0F, 5.0F); PointF point4 = new PointF(250.0F, 50.0F); PointF point5 = new PointF(300.0F, 100.0F); PointF point6 = new PointF(350.0F, 200.0F); PointF point7 = new PointF(250.0F, 250.0F); PointF point8 = new PointF(40.0F, 150.0F); PointF[] curvePoints = { point1, point2, point3, point4, point5, point6, point7, point8, point1 }; int offset = 0; 第 51 页 C#(WINFORM)学习 int numSegments = 8; float tension = 1.0F; formGraphics.DrawCurve(myPen, curvePoints, offset, numSegments, tension); // formGraphics.DrawLines(myPen, curvePoints); myPen.Dispose(); formGraphics.Dispose(); } 如果是任意 3 点(或多点) ,在起始点不容易圆滑。可以用以下方法画封闭 曲线: PointF[] curvePoints = { point3, point1, point2, point3, point1 }; int offset = 1; int numSegments = 3; float tension = 0.5F; 第 52 页 C#(WINFORM)学习 这样可以保证第一个点处比较圆滑。 参数设置 设置线段宽度: myPen.Width =3; 在 pictrueBox 上面画线,修改 this: System.Drawing.Graphics formGraphics = picBox1.CreateGraphics(); 填充 System.Drawing.SolidBrush myBrush = new ystem.Drawing.SolidBrush(System.Drawing.Color.LightPink); System.Drawing.Pen myPen; myPen = new System.Drawing.Pen(System.Drawing.Color.Red,1); System.Drawing.Graphics formGraphics = pictureBox1.CreateGraphics(); PointF point1 = new PointF( 50.0F, 50.0F); PointF point2 = new PointF(100.0F, 25.0F); PointF point3 = new PointF(200.0F, 5.0F); PointF point4 = new PointF(250.0F, 50.0F); PointF point5 = new PointF(300.0F, 100.0F); PointF point6 = new PointF(350.0F, 200.0F); PointF point7 = new PointF(250.0F, 250.0F); PointF[] curvePoints = { 第 53 页 C#(WINFORM)学习 point1, point2, point3, point4, point5, point6, point7 }; formGraphics.FillPolygon(myBrush,curvePoints); formGraphics.DrawPolygon(myPen,curvePoints); myPen.Dispose(); myBrush.Dispose(); formGraphics.Dispose(); 颜色 颜色基本设置 普通颜色设置可以直接选取系统定义的颜色。高级设置采用 RGB 颜色。 Color myColor; myColor = Color.FromArgb(23,56,78); 每个数字均必须是从 0 到 255 之间的一个整数,分别表示红、绿、蓝三种 原色。其中 0 表示没有该颜色,而 255 则为所指定颜色的完整饱和度。如 Color.FromArgb(0,255,0) 表 示 绿 色 , Color.FromArgb(255,255,0) 表 示 黄 色 , Color.FromArgb(0,0,0) 呈现为黑色,而 Color.FromArgb(255,255,255) 呈现为白 色。 还可以设置透明度,如 Color myColor; myColor = Color.FromArgb(127, 23, 56, 78); 127 表示 50%的透明度,255 表示完全不透明。 选择颜色 以下程序可以从调色板选择一个颜色,在 textBox 上面
显示
。 private void button1_Click(object sender, System.EventArgs e) { ColorDialog MyDialog = new ColorDialog(); 第 54 页 C#(WINFORM)学习 MyDialog.AllowFullOpen = false ; MyDialog.ShowHelp = true ; MyDialog.Color = textBox1.ForeColor ; if (MyDialog.ShowDialog() == DialogResult.OK) textBox1.ForeColor = MyDialog.Color; } 产生窗体选择颜色 本程序在一个菜单里调用选择程序,产生一个动态的窗体,选择颜色后返回 主程序,刷新原来的页面。 由于没有掌握控制动态控件集合的方法,只好用枚举的方法定义动态控件, 对于多于 10 个的颜色序列,需要修改程序。 Form form1; bool Cform=true; //颜色设置 private void menuItem31_Click(object sender, System.EventArgs e) { while (Cform) { CreateColorForm(); Tuli1(); DisLine(); } Cform=true; } //产生颜色输入窗体 private void CreateColorForm() { int i; form1=new Form(); Button [] ColorButton Label [] ColorLabel = new Button [myPloys.marks1.Count]; = new Label [myPloys.marks1.Count]; Button button0 = new Button (); form1.Width=130; form1.Height=130+myPloys.marks1.Count*30; form1.Text = "等值线颜色输入"; form1.FormBorderStyle = FormBorderStyle.FixedDialog; 第 55 页 C#(WINFORM)学习 form1.ControlBox = false; form1.StartPosition = FormStartPosition.CenterScreen; button0.Text = "退出"; button0.Width=80; button0.Location=new Point(25,50+myPloys.marks1.Count*30); form1.Controls.Add(button0); form1.CancelButton = button0; for (i=0;i
显示一个图片 有固定模式和缩放模式,通过设置 SizeMode 实现。程序如下: pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; //按图像文件大小缩放 // pictureBox1.Image = Image.FromFile ("abc.bmp"); //文件放在\bin\Debug文件夹 //文件放在程序文件夹 pictureBox1.Image = Image.FromFile (@"..\..\abc1.bmp"); Region 基本概念 指示由矩形和由路径构成的图形形状的内部。 基本操作 基本操作 System.Drawing.Graphics e = this.CreateGraphics(); 第 60 页 C#(WINFORM)学习 Rectangle regionRect = new Rectangle(20, 20, 100, 100); e.DrawRectangle(Pens.Black, regionRect); RectangleF complementRect = new RectangleF(90, 30, 100, 100); e.DrawRectangle(Pens.Red,Rectangle.Round(complementRect)); Region myRegion = new Region(regionRect); myRegion.Intersect(complementRect); SolidBrush myBrush = new SolidBrush(Color.Blue); e.FillRegion(myBrush, myRegion); 主要图形操作还有 Union 和 Xor。 Polygon 的镂空 采用异或(Xor)运算。需要把 polygon 转换成路径: Graphics g1 = this.CreateGraphics(); GraphicsPath myPath1=new GraphicsPath(); PointF[] pts=new PointF[]{new PointF(2,20),new PointF(250,0) ,new PointF(100,100),new PointF(90,150),new PointF(10,70)}; myPath1.AddPolygon(pts); g1.DrawPath(Pens.Black,myPath1); GraphicsPath myPath2=new GraphicsPath(); PointF[] pts1=new PointF[]{new PointF(20,30),new PointF(50,70) ,new PointF(100,40)}; myPath2.AddPolygon(pts1); g1.DrawPath(Pens.Black,myPath2); Region myRegion = new Region(myPath1); myRegion.Xor(myPath2); SolidBrush myBrush = new SolidBrush(Color.Blue); g1.FillRegion(myBrush, myRegion); 如果要镂空多个空洞,需要把这些空洞都加入到 myPath2 中,其余操作同样。 采用交、并和异或运算,都可以把两个对象互换。
显示
数据 public void DisplayRegionData(Graphics e, int len,RegionData dat) { int i; float x = 20, y = 140; 第 61 页 C#(WINFORM)学习 Font myFont = new Font("Arial", 8); SolidBrush myBrush = new SolidBrush(Color.Black); e.DrawString("myRegionData = ",myFont, y = 160; for(i = 0; i 300) { y += 20; x = 20; } e.DrawString(dat.Data[i].ToString(),myFont, x += 30; } } myBrush,new PointF(x, y)); myBrush,new PointF(x, y)); 路径 基本应用 用 GraphicsPath 可以把各种绘图元素 (包括文字) 包含进来, 最后用 DrawPath 画出来。 需要:using System.Drawing.Drawing2D; private void button2_Click(object sender, System.EventArgs e) { Pen myPen = new Pen(System.Drawing.Color.Red,1); System.Drawing.Graphics formGraphics = this.CreateGraphics(); GraphicsPath myPath1=new GraphicsPath(); myPath1.AddLine(0, 0, 10, 20); myPath1.AddEllipse(20,20,10,10); myPath1.AddLine(40, 40, 50, 120); formGraphics.DrawPath(myPen, myPath1); myPath1.Dispose(); myPen.Dispose(); formGraphics.Dispose(); } 第 62 页 C#(WINFORM)学习 不连续线条 用一个半径为 0 的点加在中间: myPath1.AddLine(0, 0, 10, 20); myPath1.AddEllipse(20,20,0,0); myPath1.AddLine(40, 40, 50, 120); 也可以用两个 path,然后用 path2.AddPath(path3,false); 复杂应用 路径可以包含其它路径,汇总成一个大的图形。 还可以通过矩阵变换进行缩放、平移和旋转。 简单 Matrix 变换 可以通过矩阵变换进行图形的变换。 private void button1_Click(object sender, System.EventArgs e) { System.Drawing.Graphics e1 = this.CreateGraphics(); Pen myPen = new Pen(Color.Blue, 1); Pen myPen2 = new Pen(Color.Red, 1); Matrix myMatrix1 = new Matrix(1.0f, 0.0f, 0.0f, 3.0f, 0.0f, 0.0f); // x和y方向都 放大3倍 // Matrix myMatrix1 = new Matrix(1.0f, 0.0f, 0.0f, 1.0f, 50.0f, 50.0f); // 平移50,50 e1.DrawRectangle(myPen, 0, 0, 100, 100); e1.Transform = myMatrix1; e1.DrawRectangle(myPen2, 0, 0, 100, 100); myPen.Dispose(); e1.Dispose(); } 复杂 Matrix 变换 下例
显示
缩放、旋转和移动变换。 public void MultiplyExample(PaintEventArgs e) { Pen myPen = new Pen(Color.Blue, 2); Pen myPen2 = new Pen(Color.Red, 1); 第 63 页 C#(WINFORM)学习 Matrix myMatrix1 = new Matrix(3.0f, 0.0f, 0.0f, 3.0f, 0.0f, 0.0f); // Scale Matrix myMatrix2 = new Matrix(0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f); // Rotate 90, Matrix myMatrix3 = new Matrix(1.0f, 0.0f, 0.0f, 1.0f, 250.0f, 50.0f); // Translate ListMatrixElements(e, myMatrix1, "Beginning Matrix", 6, 40); myMatrix1.Multiply(myMatrix2, MatrixOrder.Append); ListMatrixElements(e,myMatrix1,"Matrix After 1st Multiplication",6,60); myMatrix1.Multiply(myMatrix3, MatrixOrder.Append); ListMatrixElements(e, myMatrix1,"Matrix After 2nd Multiplication",6,80); e.Graphics.DrawRectangle(myPen, 0, 0, 100, 100); e.Graphics.Transform = myMatrix1; e.Graphics.DrawRectangle(myPen2, 0, 0, 100, 100); } public void ListMatrixElements(PaintEventArgs e,Matrix matrix,string matrixName, int numElements,int y) { int i; float x = 20, X = 200; Font myFont = new Font("Arial", 8); SolidBrush myBrush = new SolidBrush(Color.Black); e.Graphics.DrawString(matrixName + ": for(i=0; i
问题 放大后的线条全部变宽, 无法应用于 GIS 变换。 对于多个线条组成的图形需 要缩放和平移时, 可以重新生成一个点集 (其中自己加上缩放和平移计算) 来做。 从路径转换到点集用 PathPoints 属性。 第 64 页 C#(WINFORM)学习 Image 简单保存 可以利用 Image 类的 Save 方法保存目前
显示
的文件。需要在 Form 中定义: public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; private System.Windows.Forms.PictureBox pictureBox1; private Image cuurimage; 然后在程序中引用即可。 cuurimage=pictureBox1.Image; cuurimage.Save("abc2.bmp"); 利用动态 Image 画图 PointF p1 = new PointF(); PointF p2 = new PointF(); Pen myPen = new Pen(Color.Black,1); cuurimage = Image.FromFile("abc.bmp"); Graphics g = Graphics.FromImage(cuurimage); Color [] c ={Color.LightPink,Color.Red,Color.Blue,Color.Brown,Color.Black}; for(k=0;k<=LineColor.Count-1;k++) { myPen.Color = c[(int)LineColor[k]]; p1=(PointF)LineArray[i]; i++; p2=(PointF)LineArray[i]; i++; g.DrawLine(myPen,p1,p2); } myPen.Dispose(); g = CreateGraphics(); g.DrawImage(cuurimage,50,0,cuurimage.Width+100,cuurimage.Height+10); g.Dispose(); 第 65 页 C#(WINFORM)学习 画图保存 在一个 pictureBox 上保存所画图像。 先需要加载一个背景图片,把图画在这个图片上,最后保存到另外一个文件 中。 private Image cuurimage; private void button2_Click(object sender, System.EventArgs e) { Pen myPen = new Pen(System.Drawing.Color.Red,2); pictureBox1.Image = Image.FromFile (@"..\..\abc1.bmp"); cuurimage = pictureBox1.Image; Graphics g = Graphics.FromImage(cuurimage); g.DrawEllipse(myPen, 100, 100,44,14); cuurimage.Save("abc0.bmp"); myPen.Dispose(); g.Dispose(); } 利用 Image 擦除图像 下例要先准备一个 jpg 图像文件。 先
CNVD-2020-27769—拓尔思文件读取漏洞
拓尔思TRS
WAS5
.0文件读取漏洞 注明:网上相关资料较少,进行整理了一下。展示相关的思路 1、描述 拓尔思
中文
检索系统TRS
WAS5
.0 web/tree接口treefile参数存在文件读取漏洞,可读取数据库配置文件、账户密码等信息,导致配置文件信息泄露威胁网站安全。 2、过程 http://IP地址//
was5
/web/tree?treefile=/WEB-INF/classes/com/trs/was/resource/wasconfig.properties
显示
文件内容 3、修复
DirectX5.0最新游戏编程指南
一 配置DirectX SDK 2 1.1 配置Microsoft Developer Studio 2 1.2 配制NMAKE路径 3 1.3 为Borland C++5.0配置DirectX SDK 3 二 第一个DirectDraw实例 3 2.1 首先初始化DirectDraw对象 4 2.2 创建DirectDraw 对象 5 2.3 设置
显示
模式 5 2.4 改变
显示
模
WAS5
的安装及其常见
问题
本文试着通过介绍WebSphere应用服务器5基础版的安装过程及其注意事项,来使更多用户能够顺利地安装上她,从而扫除使用WebSphere应用服务器的第一道障碍。 WebSphere应用服务器5版本(包括5.0.x和5.1)的安装相对于她以前版本,可以说是简化了很多。其中最为明显的一点就是我们不再需要事先安装一个数据库来存放应用服务器的管理配置信息。即便如此,还是有相当一部分用户在安装WebSp...
WebSphere
2,633
社区成员
9,560
社区内容
发帖
与我相关
我的任务
WebSphere
WebSphere 是 IBM 的软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。
复制链接
扫一扫
分享
社区描述
WebSphere 是 IBM 的软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章