commit 3d0941f31f95a8cd9f5d557860134001fea78ad7 Author: 如果当时 <1017848709@qq.com> Date: Sat Nov 28 15:44:21 2020 +0800 初始备份 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..758c1ca --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +Publish/ +Res/ +**/obj +*.pdb +**/dcu +*.dcu \ No newline at end of file diff --git a/Bin/Debug/VSoft/DyLine.exe b/Bin/Debug/VSoft/DyLine.exe new file mode 100644 index 0000000..1b4dc29 Binary files /dev/null and b/Bin/Debug/VSoft/DyLine.exe differ diff --git a/Bin/Debug/VSoft/MyDb.dll b/Bin/Debug/VSoft/MyDb.dll new file mode 100644 index 0000000..f2c69bf Binary files /dev/null and b/Bin/Debug/VSoft/MyDb.dll differ diff --git a/Bin/Debug/VSoft/MyDb.xml b/Bin/Debug/VSoft/MyDb.xml new file mode 100644 index 0000000..f4779a0 --- /dev/null +++ b/Bin/Debug/VSoft/MyDb.xml @@ -0,0 +1,4829 @@ + + + + MyDb + + + + + 基于XML实现的权限类 + + + + + 用户名 + + + + + 用户id + + + + + 密码 + + + + + 权限控制Id + + + + + 用户备注 + + + + + 是否是管理员权限 + + + + + 是否是超级管理员权限 + + + + + 设置权限 + + 权限名称 + 权限值 + 返回是否设置成功 + + + + 获取权限 + + 权限名称 + 默认权限值 + 返回权限值 + + + + 获取权限 + + 权限名称 + 返回权限值 + + + + 批量导入权限 + + 权限相关的内容 + 返回是否执行成功 + + + + 导出权限 + + 返回导出文本 + + + + 清除所有权限 + + 返回是否执行成功 + + + + 汉字转拼音静态类,包括功能全拼和缩写,方法全部是静态的 + + + + + 汉字的机内码数组 + + + + + 机内码对应的拼音数组 + + + + + 把汉字转换成拼音(全拼) + + 汉字字符串 + 转换后的拼音(全拼)字符串 + + + + 把汉字转换成拼音(全拼) + + 汉字字符串 + 转换后的拼音(全拼)字符串 + + + + 把汉字转换成拼音(首拼) + + 汉字字符串 + 转换后的拼音(首拼)字符串 + + + + 把汉字转换成拼音(全拼) + + 汉字字符串 + 用指定字符分隔 + 转换后的拼音(全拼)字符串 + + + + 汉字转拼音缩写 + + 要转换的汉字字符串 + 拼音缩写 + + + + 汉字转拼音缩写 (字符串) (小写) (空格间隔) + + 要转换的汉字字符串 + 拼音缩写 + + + + 汉字转拼音缩写 (大写) + + 要转换的汉字字符串 + 拼音缩写 + + + + 汉字转拼音缩写 (字符串)(大写)(空格间隔) + + 要转换的汉字字符串 + 拼音缩写 + + + + 取单个字符的拼音声母 + + 要转换的单个汉字 + 拼音声母 + + + + 取单个字符的拼音声母 + + 要转换的单个汉字 + 拼音声母 + + + + Ini操作类 + + + + + 写入Ini + + + + + + + + + + 获取Ini + + + + + + + + + + + + 声明INI文件的读操作函数 GetPrivateProfileString() + + + + + + + + + + + + 声明INI文件的读操作函数 GetPrivateProfileString() + + + + + + + + + + 声明INI文件的读操作函数 GetPrivateProfileString() + + + + + + + + + + + + 获取所有节点名称(Section) + + 存放节点名称的内存地址,每个节点之间用\0分隔 + 内存大小(characters) + Ini文件 + 内容的实际长度,为0表示没有内容,为nSize-2表示内存大小不够 + + + + 编码 + + + + + Ini操作类 + + + + + + 根据section取所有key和值 + + + + + + + 读取INI文件中指定INI文件中的所有节点名称(Section) + + 所有节点,没有内容返回string[0] + + + + 读取INI文件 + + 段,格式[] + 键 + 返回byte类型的section组或键值组 + + + + 根据section取所有key + + + + + + + 写入ini + + + + + + + + 写入ini + + + + + + + + 写入ini + + + + + + + + 写入ini + + + + + + + + 写入ini + + + + + + + + 写入Ini + + + + + + + + 读取Ini + + + + + + + + 读取Ini + + + + + + + + + 读取Ini + + + + + + + + + 读取Ini + + + + + + + + + + + 写入ini + + + + + + + + + 删除Ini的Key + + + + + + + 删除Ini节点 + + + + + + 控件信息 + + + + + id + + + + + 控件对象 + + + + + 控件值类型 + + + + + 默认值 + + + + + 值类型 + + + + + 默认 + + + + + 取列表顺序值 + + + + + 取当前选择的列表值 + + + + + 取对象值 + + + + + 保存的设置类型 + + + + + Ini + + + + + XML + + + + + 对象值 + + + + + 显示的文本 + + + + + 图片序号 + + + + + id + + + + + Tag值 + + + + + 显示文本值 + + + + + + 星期数据 + + + + + 一周的开始时间 + + + + + 一周的结束时间 + + + + + XML操作类 + + + + + XML操作类 + + + + + 从XML文本中加载数据 + + + + + + 从指定的XML文本中加载 + + XML文本 + 如为1,表示加载成功,为0为失败 + + + + 载入空的XML文档 + + 如为1,表示加载成功,为0为失败 + + + + 从指定的文件中加载 + + XML文件路径 + 如为1,表示加载成功,为0为失败 + + + + 保存到指定文件中 + + 文件路径 + 如为1,表示保存成功,为0为失败 + + + + 判断节点是否存在 + + 属性名 + 属性值 + 返回1,表示存在,其它表示不存在 + + + + 定位节点 + + 属性名 + 属性值 + 返回第一个符合要求的结果 + + + + 定位节点,如果找不到节点,就新建一个节点 + + 属性名 + 属性值 + 返回第一个符合要求的结果 + + + + 根据用户的节点定位节点,输入节点时,一定要注意节点是属于类内部的,否则可能出错。 + + 返回第一个符合要求的结果 + + + + 定位设置节点 + + 返回第一个符合要求的结果 + + + + 在节点后插入数据 + + + + + + + 在节点前插入数据 + + + + + + + 获取节点数量 + + 属性名 + 属性值 + 返回符合要求的结果数量 + + + + 获取节点数量 + + 返回符合要求的结果数量 + + + + 获取节点数量 + + 属性名 + 属性值 + + + + 返回符合要求的结果数量 + + + + 设置节点值 + + 属性名 + 属性值 + 如为1,表示加载成功,为0为失败 + + + + 设置节点值 + + 属性名 + 属性值 + 如为1,表示加载成功,为0为失败 + + + + 设置节点值 + + 属性名 + 属性值 + 如为1,表示加载成功,为0为失败 + + + + 设置节点值 + + 属性名 + 属性值 + 如为1,表示加载成功,为0为失败 + + + + 设置节点值 + + 属性名 + 属性值 + 如为1,表示加载成功,为0为失败 + + + + 设置节点值 + + 属性名 + 属性值 + 如为1,表示加载成功,为0为失败 + + + + 读取指定节点的值 + + + + + + + 读取指定节点的值 + + + + + + + + 读取指定节点的值 + + + + + + + + 读取指定节点的值 + + + + + + + + 获取属性值 + + + + + + + + 读取指定节点的值 + + + + + + + + 读取指定节点的值 + + + + + + + + 读取指定节点的值 + + + + + + + + 读取所有的节点名称 + + + + + + 读取指定节点的值 + + + + + + + + 读取指定节点的值 + + + + + + + + 读取指定节点的值 + + + + + + + + 读取指定节点的值 + + + + + + + + 读取指定节点的值 + + + + + + + + 获取XML文件的根元素 + + + + + 获取所有列表 + + 如为1,表示获取成功,为0为失败 + + + + 获取所有列表 + + 如为1,表示获取成功,为0为失败 + + + + 新增节点 + + + + + + + + 新增节点并定位到新节点 + + + + + + + + 新增设置节点并定位 + + + + + + 在指定节点前新增节点并定位到新节点 + + + + + + + + + 获取当前节点 + + + + + + 删除节点 + + + + + + 获取XML文本 + + + + + + 获取XML文本 + + + + + + 获取文本 + + + + + + 获取文本 + + + + + + 字符串操作类 + + + + + 字符串转Base64 + + + + + + + Base64转字符串 + + + + + + + 转换指定字符串为布尔类型 + + + + + 转换指定字符串为Double类型 + + + + + 已重载.计算两个日期的时间间隔,返回的是时间间隔的日期差的绝对值. + + 第一个日期和时间 + 第二个日期和时间 + + + + + 已重载.计算一个时间与当前本地日期和时间的时间间隔,返回的是时间间隔的日期差的绝对值. + + 一个日期和时间 + + + + + 转换指定字符串为Int类型 + + + + + 转换指定字符串为Int类型 + + + + + 转换指定布尔类型为Int类型,true为1,false为0 + + + + + 判断指定字符串是否是布尔类型 + + + + + 判断指定字符串是否是Double类型 + + + + + 判断指定字符串是否是Int类型 + + + + + 根据年月日转换成日期 + + + + + + + + + 追加字符 + + + + + 获取2个字符串中间的内容,point1为空表示从首位开始算,point2为空表示算到结尾。 + + + + + 判断字符串是否只包含数字或英文 + + + + + + + 判断字符串是否匹配,支持?*通配符 + + 待匹配的字符串 + 匹配的通配符 + + + + + 通配符替换 + + + + + + + + + 获取匹配的内容 + + + + + + + + + 文件时间 + + + + + 创建时间 + + + + + 最后修改时间 + + + + + 访问时间 + + + + + 图片类型 + + + + + Bmp图片 + + + + + Jpeg图片 + + + + + Png图片 + + + + + Gif动态图片 + + + + + Tiff图片 + + + + + 对变量的拓展 + + + + + 替换文本(忽略大小写) + + + 需要替换的内容 + 替换后的内容 + + + + + 替换文本(忽略大小写),可支持通配符 + + + + + 是否是通配符表达式,不是,则普通替换,忽略大小写,是,则启用通配符替换 + + + + + 获取符合要求的第一个结果 + + + + 是否是正则 + + + + + 查找字符串,忽略大小写 + + + + + + + + + 查找字符串,忽略大小写 + + + + + + + + 判断字符串是否是数字或英文 + + + + + + + 是否在指定范围内 + + + + + + + + + 是否在指定范围内 + + + + + + + + + 转换指定字符串为Int类型 + + + 最小值 + 最大值 + 如果字符串不在范围内,则使用本默认值 + + + + + 转换指定布尔类型到Int类型,true为1,false为0 + + + + + + + 将指定类型转换成整型 + + + + + + + + 将指定类型转换成整型 + + + + + + + 将指定类型转换成长整型 + + + + + + + + 将指定类型转换成长整型 + + + + + + + 转换指定类型为Double类型 + + + + + + + + 转换指定类型为Double类型 + + + + + + + 转换DateTime类型到日期时间字符串 + + + + + + + 转换DateTime类型到日期字符串 + + + + + + + 转换DateTime类型到日期星期字符串 + + + + + + + 转换DateTime类型到Unix时间戳 + + + + + + + 转换Unix时间戳到DateTime类型 + + + + + + + 判断字符串是否与内容匹配 + + + + + + + + 将变量值转换成Double类型,如果不在指定区域范围内,则使用默认值 + + + + + + + + + + 转换到文件大小字符串 + + + + + + + 转换到文件大小字符串 + + + + + + + 转换指定类型为Decimal类型 + + + + + + + + 将变量值转换成Decimal类型 + + + + + + + 将变量值转换成Decimal类型,如果不在指定区域范围内,则使用默认值 + + + + + + + + + + 转换指定类型为DateTime类型 + + + + + + + + 将变量值转换成DateTime类型 + + + + + + + 转换指定类型为布尔类型 + + + + + + + 追加字符 + + + + + + + + 获取指定字符串之间的内容 + + + + + + + + + 获取指定字符串之间的内容 + + + + + + + + + + + + 判断指定字符串是否是Int类型 + + + + + + + 判断指定字符串是否是Double类型 + + + + + + + 判断是否是布尔类型 + + + + + + + 将字符串转换为Base64类型 + + + + + + + 判断字符串是否在指定长度 + + + + + + + + + 判断能否转换成日期格式 + + + + + + + 文件信息 + + + + + 获取版本号 + + + + + 获取版本号 + + + + + + + 判断是否是管理员方式运行 + + + + + + Hosts操作类 + + + + + 获取并转换hosts内容 + + hosts内容 + + + + + 获取hosts并转换hosts内容 + + hosts内容 + + + + + 追加内容到hosts里 + + 要追加的内容列表,每一行为ip 域名的格式 + 0表示无需新增,-1表示添加失败,1表示追加成功 + + + + 追加内容到hosts里 + + 要追加的内容 + 0表示无需新增,-1表示添加失败,1表示追加成功 + + + + 追加内容到hosts里 + + ip地址 + 域名 + 0表示无需新增,-1表示添加失败,1表示追加成功 + + + + 从hosts文件里删除内容 + + 要删除的内容 + 0表示无需删除,-1表示添加失败,1表示删除成功 + + + + 从hosts文件里删除内容 + + ip地址 + 域名 + 0表示无需删除,-1表示添加失败,1表示删除成功 + + + + Host信息 + + + + + IP + + + + + 域名 + + + + + 注释 + + + + + 是否要删除 + + + + + 音频播放类 + + + + + 临时音频文件 + + + + + 父窗口句柄 + + + + + 声音标签 + + + + play synchronously (default) + + + play asynchronously + + + silence (!default) if sound not found + + + pszSound points to a memory file + + + loop the sound until next sndPlaySound + + + don’t stop any currently playing sound + + + Stop Playing Wave + + + don’t wait if the driver is busy + + + name is a registry alias + + + alias is a predefined id + + + name is file name + + + name is resource name or atom + + + + 音频播放类 + + embedded music file + 临时保存的文件位置 + 父窗口句柄 + + + + 音频播放类 + + 要播放的音频位置 + 父窗口句柄 + + + + 音频播放类 + + + 父窗口句柄 + + + + 播放音频 + + + + + + 播放音频 + + + + + 关闭音频 + + + + + 文件操作类 + + + + + + + + + + 删除单个文件。 + + 删除的文件名 + 指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除 + 指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框 + 指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效 + 反馈错误消息的字符串 + 操作执行结果标识,删除文件成功返回0,否则,返回错误代码 + + + + 删除单个文件。 + + 删除的文件名 + 指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除 + 操作执行结果标识,删除文件成功返回0,否则,返回错误代码 + + + + 永久删除单个文件。 + + 永久删除的文件名 + 操作执行结果标识,删除文件成功返回0,否则,返回错误代码 + + + + 删除一组文件。 + + 字符串数组,表示一组文件名 + 指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除 + 指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框 + 指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效 + 反馈错误消息的字符串 + 操作执行结果标识,删除文件成功返回0,否则,返回错误代码 + + + + 移动文件到指定路径下 + + 要移动的文件名 + 移动到的目的路径 + + + + + 移动一个文件到指定路径下 + + 要移动的文件名 + 移动到的目的路径 + 指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框 + 指示是否显示进度对话框 + 指示当文件名重复时,是否自动为新文件加上后缀名 + 反馈错误消息的字符串 + 返回移动操作是否成功的标识,成功返回0,失败返回错误代码 + + + + 移动一组文件到指定的路径下 + + 要移动的文件名数组 + 移动到的目的路径 + 指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框 + 指示是否显示进度对话框 + 指示当文件名重复时,是否自动为新文件加上后缀名 + 反馈错误消息的字符串 + 返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常 + + + + 复制文件到指定的文件名或路径 + + 要复制的文件名 + 复制到的目的文件名或路径 + + + + + 复制文件到指定的文件名或路径 + + 要复制的文件名 + 复制到的目的文件名或路径 + 指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框 + 指示是否显示进度对话框 + 指示当文件名重复时,是否自动为新文件加上后缀名 + 返回错误信息 + 返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常 + + + + 复制一组文件到指定的路径 + + 要复制的文件名数组 + 复制到的目的路径 + 指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框 + 指示是否显示进度对话框 + 指示当文件名重复时,是否自动为新文件加上后缀名 + 返回错误信息 + 返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常 + + + + 重命名一个文件为新名称,建议您使用更方便的Microsoft.VisualBasic.FileSystem.ReName();替换该方法 + + 要复制的文件名 + 复制到的目的文件名或路径 + 指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框 + 返回错误信息 + 返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常 + + + + 删除单个或多个文件 + + 删除的文件名,如果是多个文件,文件名之间以字符串结尾符'\0'隔开 + 指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除 + 指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框 + 指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效 + 反馈错误消息的字符串 + 操作执行结果标识,删除文件成功返回0,否则,返回错误代码 + + + + 移动或复制一个或多个文件到指定路径下 + + 操作类型,是移动操作还是复制操作 + 要移动或复制的文件名,如果是多个文件,文件名之间以字符串结尾符'\0'隔开 + 移动到的目的位置 + 指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框 + 指示是否显示进度对话框 + 指示当文件名重复时,是否自动为新文件加上后缀名 + 反馈错误消息的字符串 + 返回移动操作是否成功的标识,成功返回0,失败返回错误代码 + + + + 如果指定文件夹不存在,则创建文件夹 + + + + + + 获取一个文件的全名 + + 文件名 + 返回生成文件的完整路径名 + + + + 获取一个文件的全名 + + 文件名 + 返回生成文件的完整路径名 + + + + 解释错误代码 + + 代码号 + 返回关于错误代码的文字描述 + + + + 运行文件 + + + + + + + + /运行文件 + + + + + + + + 运行程序 + + + + + + + 打开文件 + + + + + + + 打开文件夹并定位文件 + + + + + + + 打开网址 + + + + + + + 判断文件名是否有效 + + + + + + + 转换到有效文件名 + + + + + + + 追加日志 + + + + + + 追加文件 + + + + + + 读取文件内容,可以自动识别文件编码 + + + + + + + 读取文件所有行,可以自动识别文件编码 + + + + + + + 写入所有文本行到文件,如果文件夹不存在,会自动创建 + + + + + + + + 写入所有文本到文件,如果文件夹不存在,会自动创建 + + + + + + + + 从文件中加载图片,使用本方法,不会导致图片文件被占用。 + + + + + + 获取文件大小 + + + + + + + 添加文件到指定文件夹,会进行自动重命名,并返回重命名后的文件名(含路径) + + 要添加的文件路径 + 要添加到的文件夹 + 是否根据时间进行重命名 + 返回是否成功执行 + 成功执行则返回路径,否则返回空 + + + + 获取文件大小字符串 + + + + + + + 获取文件大小字符串 + + + + + + + 复制内容到剪切板 + + + + + + 添加某个控件为支持拖放属性 + + + + + + + 保存高质量不失真照片 + + + + + + + + 保存高质量不失真照片 + + + + + + + + 保存高质量不失真照片 + + + + + + + + 获取绝对路径 + + + + + + + 获取相对路径 + + + + + + + 获取图标 + + + + + + + + + + + + + + 销毁图标 + + + + + + + 获取文件图标 + + + + + + + + + + 用于取得一个文本文件的编码方式(Encoding)。 + + + + + 用于取得一个文本文件的编码方式(Encoding)。 + + + + + 取得一个文本文件的编码方式。如果无法在文件头部找到有效的前导符,Encoding.Default将被返回。 + + 文件名。 + + + + + 取得一个文本文件流的编码方式。 + + 文本文件流。 + + + + + 取得一个文本文件的编码方式。 + + 文件名。 + 默认编码方式。当该方法无法从文件的头部取得有效的前导符时,将返回该编码方式。 + + + + + 取得一个文本文件流的编码方式。 + + 文本文件流。 + 默认编码方式。当该方法无法从文件的头部取得有效的前导符时,将返回该编码方式。 + + + + + 通过给定的文件流,判断文件的编码类型 + + 文件流 + 文件的编码类型 + + + + 判断是否是不带 BOM 的 UTF8 格式 + + + + + + + 新模态窗体 + + + + + 设置窗体返回的结果值,并关闭窗体。 + + 当前窗体 + 模态变量 + 防止 + + + + 窗体返回的结果事件 + + + + + + + 当打开的窗体返回结果时激发 + + + + + 窗体返回的状态 + + + + + 实例化类 + + 父窗体,如果为null,则取桌面为父窗体 + + + + + 获取最顶级的父窗口 + + + + + + 显示新模态窗体,会暂时禁用父窗体,关闭当前窗体后,父窗体会恢复。 + + + + + 只运行一个实例,打开后,所有窗体都依然有效。 + + + + + + 显示窗体 + + 显示的位置 + + + + 显示在父窗体中间 + + + + + 窗体显示位置 + + + + + 右上角 + + + + + 顶部中间 + + + + + 顶部右边 + + + + + 中间 + + + + + 左下角 + + + + + 底部中间 + + + + + 右下角 + + + + + 父窗体居中 + + + + + 日期时间的操作类 + + + + + 获取当前是周几,周一到周日,分别是1-7. + + + + + + + 获取当前是周几,1-7,分别是返回一到日. + + + + + + + 获取当前是周几,输入日期,根据周几,分别是返回一到日. + + + + + + + 获取一周的开始和结束,开始时间为第一天的0点,结束时间以最后一天的0点为结束时间 + + + + + + + 获取2个日期相差几周 + + + + + + + + 获取2个日期相差几个月 + + + + + + + + 获取一个月的开始 + + + + + + + 判断是否在同一个星期。 + + + + + + + + 判断是否在同一个月。 + + + + + + + + 判断是否在同一天 + + + + + + + + 计算两个日期的时间间隔,返回的是时间间隔的日期差的绝对值. + + 第一个日期和时间 + 第二个日期和时间 + + + + + 计算两个日期的时间间隔,返回的是时间间隔的日期差的绝对值. + + 第一个日期和时间 + 第二个日期和时间 + 是否显示秒 + + + + + 计算一个时间与当前本地日期和时间的时间间隔,返回的是时间间隔的日期差的绝对值. + + 一个日期和时间 + + + + + 将c# DateTime时间格式转换为Unix时间戳格式 + + 时间 + long + + + + 时间戳转为C#格式时间 + + + + + + + 将c# DateTime时间格式转换为js时间戳格式 + + 时间 + long + + + + JS时间戳转为C#格式时间 + + + + + + + 根据年月日转换成日期 + + + + + + + + + 根据日期和时间转换成日期时间 + + + + + + + + 将时间转换成当前分钟开始的时间 + + + + + + + 将时间转换成当前秒钟开始的时间 + + + + + + + 当前时间在这一天里的秒数 + + + + + + + 窗体操作类 + + + + + 设置Comobox的行间距 + + + + + + + 移除关闭按钮。返回值,非零表示成功,零表示失败。 + + 窗口的句柄 + 是否成功 + + + + 把窗体放到最前 + + + + + + 显示窗体 + + + + + + + + 设置窗体是否置顶 + + + + + + + 显示没有焦点的窗口 + + + + + + 根据句柄获取窗口文本 + + + + + + + 根据句柄获取窗口类 + + + + + + + 获取当前活动的窗口句柄 + + + + + + 设置为当前活动窗口 + + + + + + + 根据窗口句柄来获得进程id + + + + + + + 显示窗体 + + + + + + 设置窗体父窗体为桌面,不会随着显示桌面而最小化,但无法设置窗体透明度 + + + + + + 结束进程 + + + + + + + 打开窗体,只打开一个实例(非模态) + + + + + + + 设置注册表操作,部分功能需要管理员权限 + + + + + 访问的注册表位置(64位还是32位) + + + + + 访问的注册表节点 + + + + + 设置是否开机启动 + + 是否开机启动 + 开机启动名称 + 启动命令 + + + + + 设置是否开机启动 + + 是否开机启动 + 开机启动名称 + + + + + 把指定文件设置为开机启动或取消开机启动 + + 是否开机启动 + 开机启动名称 + 要开机启动的文件路径 + + + + + 检查是否开机启动 + + 开机启动名称 + 开机启动命令 + + + + + 检查是否开机启动 + + 开机启动名称 + + + + + 判断指定文件是否是开机启动 + + 开机启动名称 + 文件路径 + + + + + 判断当前程序是否是开机启动 + + 开机启动名称 + + + + + 判断当前程序是否是开机启动 + + 开机启动名称 + 启动命令行 + + + + + 设置指定文件的浏览器控件内核版本 + + 文件名,要求不带路径 + 7000 表示IE7兼容视图模式;8000 表示IE8 标准模式 ;8888 表示IE8 强制标准模式,在渲染失败的情况下不尝试用兼容视图模式 + + + + + 采用的IE模式 + + + + + IE7兼容视图 + + + + + IE8 标准模式 + + + + + IE8 强制标准模式,在渲染失败的情况下不尝试用兼容视图模式 + + + + + IE9 标准模式 + + + + + IE9 强制标准模式,在渲染失败的情况下不尝试用兼容视图模式 + + + + + IE10 标准模式 + + + + + IE10 强制标准模式,在渲染失败的情况下不尝试用兼容视图模式 + + + + + 设置当前软件的浏览器控件内核版本 + + 7000 表示IE7兼容视图模式;8000 表示IE8 标准模式 ;8888 表示IE8 强制标准模式,在渲染失败的情况下不尝试用兼容视图模式 + + + + + 设置指定文件的浏览器控件内核版本 + + 文件名,要求不带路径 + IE内核版本 + + + + + 设置当前软件的浏览器控件内核版本 + + IE内核版本 + + + + + 系统函数 + + + + + + + + + + 红 + + + + + 绿 + + + + + 蓝 + + + + + 获取屏幕伽马值 + + + + + + + + 设置屏幕伽马值 + + + + + + + + 获取键盘和鼠标没有操作的时间 + + + + + + 设置屏幕 Gamma值 + + + + + + + + + 设置屏幕亮度 + + + + + + + 获取系统 + + + + + + 窗体操作类 + + + + + 构造函数 + + + + + + 析构 + + + + + 设置让窗体支持移动 + + + + + 是否允许可调节大小 + + + + + 可调节窗体大小的宽度 + + + + + + + + + + + 给控件增加拖放功能的类 + + + + + 拖放实例 + + + + + 高级拖放事件 + + + + + + + + + + 使支持拖放属性 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 网络操作类 + + + + + 通过NetworkInterface读取网卡Mac + + + + + + 通过NetworkInterface读取网卡Mac + + + + + + 根据mac字符串来获取最终的mac地址,可以是各种MAC地址格式,非法的内容将返回null + + + + + + + 远程唤醒 + + + + + + + + 远程唤醒 + + + + + + + + + 消息客户端类 + + + + + 判断当前消息主服务器是否创建成功 + + + + + 最后一次接收消息的时间,可用来判断服务端是否有响应 + + + + + 主句柄 + + + + + 当收到消息时激发 + + + + + 连接上主服务器时触发 + + + + + 收到服务端关闭通知 + + + + + 收到服务端关闭通知,即将关闭 + + + + + 服务端大小改变时激发 + + + + + 实例化客户端 + + 服务端ID + 当前客户端ID,会向服务器报告当前ID + 客户端 + + + + + + + + + 断开服务端连接 + + + + + 发送消息,采用多线程发送 + + + + + + + 向服务端发送心跳包 + + + + + 判断服务端句柄是否存在。 + + + + + + 共享内存 + + + + + 写共享内存 + + 需要映射的文件的字节数量 + 映射对象(简单类型、结构体等) + 文件映射对象的名称 + + + + + 写共享内存 + + 需要映射的文件的字节数量 + 映射对象(简单类型、结构体等) + 文件映射对象的名称 + 发送消息的窗口句柄 + 发送消息 + + + + + 读共享内存 + + 需要映射的文件的字节数量 + 类型 + 文件映射对象的名称 + 返回读到的映射对象 + + + + 读共享内存 + + 需要映射的文件的字节数量 + 类型 + 文件映射对象的名称 + 返回读到的映射字节数据 + + + + 消息服务器 + + + + + 消息事件 + + + + + + + 大小改变事件 + + + + + + + + 即将关闭事件 + + + + + + + 当收到消息时激发 + + + + + 消息处理类 + + + + + + + + + + + + + + + + + + + + + + + 发送消息,采用单线程发送 + + 要发送到的句柄 + 编号 + 消息内容 + + + + 发送消息,采用多线程发送 + + 要发送到的句柄 + 编号 + 消息内容 + + + + 消息类 + + + + + 是否取消 + + + + + 来源句柄 + + + + + + + + + + 消息文本 + + + + + 需要回复的内容 + + + + + 消息服务端类 + + + + + 判断当前消息主服务器是否创建成功 + + + + + 当收到消息时激发 + + + + + 当收到自定义消息时(非系统消息)激发 + + + + + 有消息客户端发起连接请求时激发 + + + + + 有消息客户端连接成功时激发 + + + + + 有消息客户端断开连接时激发 + + + + + + + 服务端ID,需要唯一性,共客户端识别 + 服务端 + + + + 释放资源 + + + + + 判断是否包含指定客户端 + + + + + + + + + + + + 设置客户端大小 + + + + + 根据客户端ID,获取客户端对象 + + + + + + + 根据客户端句柄,获取客户端对象 + + + + + + + 关闭所有客户端 + + + + + 关闭指定客户端 + + + + + + 关闭指定客户端 + + + + + + 向所有客户端发送消息,单线程 + + + + + + + 向指定客户端发送消息 + + + + + + + + 关闭在指定时间前失去响应的子客户端 + + + + + + 客户端信息 + + + + + 客户端句柄 + + + + + 客户端ID + + + + + 客户端连接时间 + + + + + 心跳时间 + + + + + 数据库引擎 + + + + + 数据库枚举类型 + + + + + Odbc引擎 + + + + + OleDb引擎 + + + + + Oracle引擎 + + + + + MSSQL引擎 + + + + + SQLite引擎 + + + + + MySql引擎 + + + + + 判断DataSet是否包含数据 + + + + + + + 获取首行数据 + + + + + + + 获取第一行第一列的值 + + + + + + + 将DataSet类型转换为RyQuickSQL列表类型 + + + + + + + 将DataSet类型转换为RyQuickSQL列表类型 + + + + + + + + 数据库操作接口 + + + + + 连接数据库 + + + + + + 断开数据库 + + + + + + 获取数量 + + + + + + + + 获取分页语句 + + + + + + + + + 获取分页语句 + + + + + + + + + 获取分页语句 + + + + + + + + + + 获取分页语句 + + + + + + + + + + 添加Parameter参数 + + + + + + + 清空Parameter参数 + + + + + + + 获取Parameter值 + + + + + + 根据RyQuickSQL类来获取Parameter值 + + + + + + + 开始执行事务 + + + + + 提交事务 + + + + + 判断是否包含数据 + + + + + + + + 返回-1000表示该数据库不支持本接口 + + + + + + + 读取数据 + + + + + + + 读取数据 + + + + + + + + 读取数据 + + + + + + + + 根据id号获取数据 + + + + + + + + 执行SQL语句 + + + + + + + + 执行SQL语句 + + + + + + + + 执行SQL语句 + + + + + + + 根据id号删除数据 + + + + + + + + 创建数据库 + + + + + + + 释放资源 + + + + + SQL字段类型 + + + + + SQL字段类型 + + + + + + + SQL字段类型 + + + + + + + + SQL字段名 + + + + + SQL字段值 + + + + + SQL字段长度 + + + + + 不是真的值,而是用于计算的值 + + + + + SQL快速操作类 + + + + + SQL快速操作类 + + + + + + 表名 + + + + + 操作字段列表 + + + + + 清理使用资源 + + + + + 清理使用资源 + + + + + 操作参数列表 + + + + + 操作参数列表 + + + + + 添加字符串字段 + + + + + + + 添加null值字段 + + + + + + 添加日期字段 + + + + + + + 添加int字段 + + + + + + + 添加double字段 + + + + + + + 添加decimal字段 + + + + + + + 添加bool字段 + + + + + + + 添加用于计算的值 + + + + + + + 添加Int64字段 + + + + + + + 清空内容 + + + + + 数量 + + + + + + + + + + 输出多条件搜索。 + + 字段名,多个字段请用逗号分隔。 + 多个条件之间请用空格隔开 + + + + + 获取插入SQL语句 + + + + + + 获取更新SQL语句 + + + + + + 添加参数 + + + + + + + 获取Ole参数 + + + + + + 获取SQL参数 + + + + + + AES加密解密类 + + + + + AES加密算法 + + 明文字符串 + 密钥 + 返回加密后的密文字节数组 + + + + AES解密 + + 密文字节数组 + 密钥 + 返回解密后的字符串 + + + + 加密 + + + + + + + + 解码 + + + + + + + + 转换密钥到合法密钥 + + + + + + + Base64编码类 + + + + + 编码 + + + + + + + 把字符串编码成Base64字符串 + + + + + + + + 解码 + + + + + + + MD5和SHA1操作类 + + + + + 获取MD5 + + + + + + + 获取MD5 + + + + + + + 获取SHA1 + + + + + + + 获取SHA1 + + + + + + + 获取HmacSHA1 + + + + + + + + 获取SHA256 + + + + + + + 获取HmacSHA256 + + + + + + + 获取SHA224 + + + + + + + 获取SHA512 + + + + + + + 获取HmacSHA512 + + + + + + + 使用using代替lock操作的对象,可指定写入和读取锁定模式 + + + + 利用IDisposable的using语法糖方便的释放锁定操作 + 内部类 + + + + 读写锁对象 + + + + 是否为写入模式 + + + + 利用IDisposable的using语法糖方便的释放锁定操作 + 构造函数 + + 读写锁 + 写入模式为true,读取模式为false + + + 释放对象时退出指定锁定模式 + + + + 空的可释放对象,免去了调用时需要判断是否为null的问题 + 内部类 + + + + 空的可释放对象 + + + + 空的释放方法 + + + + 读写锁 + + + + 保存数据 + + + + 使用using代替lock操作的对象,可指定写入和读取锁定模式 + 构造函数 + + + + 使用using代替lock操作的对象,可指定写入和读取锁定模式 + 构造函数 + 为Data属性设置初始值 + + + + 获取或设置当前对象中保存数据的值 + + 获取数据时未进入读取或写入锁定模式 + 设置数据时未进入写入锁定模式 + + + 是否启用,当该值为false时,Read()和Write()方法将返回 Disposable.Empty + + + + 进入读取锁定模式,该模式下允许多个读操作同时进行 + 退出读锁请将返回对象释放,建议使用using语块 + Enabled为false时,返回Disposable.Empty; + 在读取或写入锁定模式下重复执行,返回Disposable.Empty; + + + + 进入写入锁定模式,该模式下只允许同时执行一个读操作 + 退出读锁请将返回对象释放,建议使用using语块 + Enabled为false时,返回Disposable.Empty; + 在写入锁定模式下重复执行,返回Disposable.Empty; + + 读取模式下不能进入写入锁定状态 + + + + 中国农历类,最大支持公元0-9999年 + + 日期:2019-02-09 + 作者:http://www.cnblogs.com/zjfree/ + + + + 日历类型 + + + + + 无效 + + + + + Julian 日历 + + + + + Gregorian 日历 + + + + + 有效 + + + + + 公历节日 + + + + + 农历节日 + + + + + 某个月第n个星期几 + + + + + 获取农历 + + + + + + + 获取农历 + + + + + + + + + 获得某农历年的闰月,返回 1~12 对应一月到十二月,返回 0 表示无闰月 + + + + + + + 农历搜索方向 + + + + + 无效 + + + + + 向上 + + + + + 向下 + + + + + {* 日月食类型, 无, 日食, 月全食, 月偏食 } + + + + + 无 + + + + + 日食 + + + + + 月全食 + + + + + 月偏食 + + + + + {* 月相, 无, 朔, 望} + + + + + 无 + + + + + 朔 + + + + + 望 + + + + + 获得某公历年月日的农历日数和该日月相以及日月食类型和时刻 + + + + + + + + + + + + 获得某公历年月日的农历月数 + + + + + + + + + 获取阳历日期对应的农历日期 + + + + + + + + + + + + + 获得某公历年月日的农历月日和是否闰月的信息 + + + + + + + + + + + + 获得等效标准日数对应的某公历日,倒推而来 + + + + + + + + + + 比较两个农历日期(包括闰月信息),1 大于2返回1、1等于2返回0、1小于2返回-1 + + + + + + + + + + + + + + 获得某农历年月日(加是否闰月)的公历年月日 + 该函数采用反向二分法查找 + + + + + + + + + + + + + 获取农历某一个月的总天数 + + + + + + + + + 获取农历年份,范围约1901-2101年 + + + + + + + 获取农历年份,范围约0-9999年 + + + + + + + + + 获取农历月份,范围约1901-2101年 + + + + + + + 获取农历月份,范围约0-9999年 + + + + + + + + + 获取中文表示的农历月份 + + + + + + + 获取农历日,范围约1901-2101年 + + + + + + + 获取农历日,范围约0-9999年 + + + + + + + + + 获取农历日,范围约0-9999年 + + + + + + + 获取节气,范围约1901-2101年 + + + + + + + 获取节气,范围约0-9999年 + + + + + + + + + 返回y年第n个节气(如小寒为1)的日差天数值(pd取值真假,分别表示平气和定气) + + + + pd取值真假,分别表示平气和定气 + + + + + 获取等效标准日数 + + + + + + + + + 取本月天数,不考虑 1582 年 10 月的特殊情况 + + + + + + + + 获取节气,范围约1901-2101年 + + + + + + + 获取节气,范围约0-9999年 + + + + + + + + + 获取节气 + + + + + + + + + + + + 获取公历节日 + + + + + + + 获取公历节日 + + + + + + + + + 获取指定月份的第n个星期几的节日 + + + + + + + 返回星座,范围约1901-2101年 + + + + + 返回星座,范围约0-9999年 + + + + + 获取农历节日 + + + + + + + + + 获取农历节日 + + + + + + + 判断y年m月(1,2,..,12,下同)d日是Gregorian历还是Julian历(opt=1,2,3分别表示标准日历,Gregorge历和Julian历),是则返回1,是Julian历则返回0,若是Gregorge历所删去的那10天则返回-1 + + + + + 返回阳历y年m月d日的日差天数(在y年年内所走过的天数,如2000年3月1日为61) + + + + + 返回阳历y年日差天数为x时所对应的月日数(如y=2000,x=274时,返回1001(表示10月1日,即返回100*m+d)) + + + + + 获取指定日期的节气。 + + 要获取的年 + 要获取的月 + + + 立春:立是开始的意思,春是蠢动,表示万物开始有生气,这一天春天开始。 + 雨水:降雨开始,雨水将多。 + 惊蛰:春雷响动,惊动蛰伏地下冬眠的生物,它们将开始出土活动。 + 春分:这是春季九十天的中分点,这一天昼夜相等,所以古代曾称春分秋分为昼夜分。 + 清明:明洁晴朗,气候温暖,草木开始萌发繁茂。 + 谷雨:雨生百谷的意思。雨水增多,适时的降雨对谷物生长很为有利。 + 立夏:夏天开始,万物渐将随温暖的气候而生长。 + 小满:满指籽粒饱满,麦类等夏热作物这时开始结籽灌浆,即将饱满。 + 芒种:有芒作物开始成熟,此时也是秋季作物播种的最繁忙时节。 + 夏至:白天最长,黑夜最短,这一天中午太阳位置最高,日影短至终极,古代又称这一天为日北至或长日至。 + 小暑:暑是炎热,此时还未到达最热。 + 大暑:炎热的程度到达高峰。 + 立秋:秋天开始,植物快成熟了。 + 处暑:处是住的意思,表示暑气到此为止。 + 白露:地面水气凝结为露,色白,是天气开始转凉了。 + 秋分:秋季九十天的中间,这一天昼夜相等,同春分一样,太阳从正东升起正西落下。 + 寒露:水露先白而后寒,是气候将逐渐转冷的意思。 + 霜降:水气开始凝结成霜。 + 立冬:冬是终了,作物收割后要收藏起来的意思,这一天起冬天开始。 + 小雪:开始降雪,但还不多。 + 大雪:雪量由小增大。 + 冬至:这一天中午太阳在天空中位置最低,日影最长,白天最短, 黑夜最长,古代又称短日至或日南至。 + 小寒:冷气积久而为寒,此时尚未冷到顶点。 + 大寒:天候达到最寒冷的程度 + + + + + 获取年柱。 + + + + + 获得月柱 + + + + + + + 获取日柱。 + + + + + 返回甲子数x对应的天干数(如33为3) + + + + + 返回甲子数x对应的地支数(如33为9) + + + + + 获取日的天干地支 + + + + + + + 返回甲子数x对应的天干字符串 + + + + + 返回甲子数x对应的地支字符串 + + + + + 返回甲子数x对应的干支字符串 + + + + + + + 获取三伏开始时间 + + + 0表示1伏,1表示2伏,2表示3伏 + + + + + 节气 + + + + + 节气的时间。 + + + + + 节气名。 + + + + + 热键转换类 + + + + + 功能键。 + + + + + 修改键。 + + + + + 转换功能键到谷歌浏览器专用 + + + + + 将chrome功能键转换为普通功能键 + + + + + + + 按键值。 + + + + + 初始化类 的新实例。 + + The modifiers. + The key code. + + + + + + + + + + + + + + + + + 初始化类 的新实例。 + + + + + 加载热键 + + + + + + + 加载热键 + + + + + + 加载热键 + + + + + + 判断是否是热键 + + + + + 获取当前热键 + + + + + 已重载,返回“Ctrl+Alt+A”格式的字符串。 + + 类似“Ctrl+Alt+A”格式的字符串 + + + + 返回“Ctrl+Alt+A”格式的字符串。 + + 类似“Ctrl+Alt+A”格式的字符串 + + + + 功能键 + + + + + 无 + + + + + Alt键 + + + + + Ctrl键 + + + + + Shift键 + + + + + Win键 + + + + + 热键类 + + + + + 热键类 + + + + + + 热键注销 + + + + + 热键是否有效 + + + + + 释放热键 + + + + + 注册热键 + + + + + + + + + 注册热键 + + + + + + + + + 删除热键 + + + + + + + 删除所有热键 + + + + + 热键事件 + + + + + + 当使用热键时发生的事件 + + + + + 热键消息过滤 + + + + + + + 热键类型 + + + + + 热键id + + + + + 功能键 + + + + + 普通键 + + + + + 热键类型 + + + + + + + + Win32 API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 获取当前前台窗口句柄 + + + + + + 获得当前活动窗体 + + + + + + 设置活动窗体 + + + + + + + 获取类名 + + + + + + + + + 获取当前线程对应的进程ID + + + + + + + + 判断指定句柄是否是一个窗口 + + + + + + + 获取窗口标题 + + + + + + + + + 查找窗口 + + + + + + + + 设置父窗口 + + + + + + + + 移动窗口 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 结束进程 + + + + + + + + 发送消息 + + + + + + + + + + 发送消息 + + + + + + + + + 获取窗口位置和大小 + + + + + + + + 矩形 + + + + + 最左坐标 + + + + + 最上坐标 + + + + + 最右坐标 + + + + + 最下坐标 + + + + + WM_COPYDATA消息的主要目的是允许在进程间传递只读数据。 + + + + + 系统通道ID + + + + + 用户通道ID + + + + + + + + + + + + + + + + + + + + + + + + + 获取消息 + + + + + + + + 发送消息 + + + + + + + + + + 设置父窗口 + + + + + + + + diff --git a/Bin/Debug/VSoft/MyDb_SQLite.dll b/Bin/Debug/VSoft/MyDb_SQLite.dll new file mode 100644 index 0000000..d614dfd Binary files /dev/null and b/Bin/Debug/VSoft/MyDb_SQLite.dll differ diff --git a/Bin/Debug/VSoft/Newtonsoft.Json.dll b/Bin/Debug/VSoft/Newtonsoft.Json.dll new file mode 100644 index 0000000..78a1763 Binary files /dev/null and b/Bin/Debug/VSoft/Newtonsoft.Json.dll differ diff --git a/Bin/Debug/VSoft/Newtonsoft.Json.xml b/Bin/Debug/VSoft/Newtonsoft.Json.xml new file mode 100644 index 0000000..159260e --- /dev/null +++ b/Bin/Debug/VSoft/Newtonsoft.Json.xml @@ -0,0 +1,9327 @@ + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Initializes a new instance of the class. + + The Oid value. + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Initializes a new instance of the class with the specified . + + + + + Reads the next JSON token from the stream. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a []. + + A [] or a null reference if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the state based on current token type. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Releases unmanaged and - optionally - managed resources + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the to Closed. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the underlying stream or + should be closed when the reader is closed. + + + true to close the underlying stream or when + the reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Get or set how time zones are handling when reading JSON. + + + + + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Get or set how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets The Common Language Runtime (CLR) type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Specifies the state of the reader. + + + + + The Read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The Close method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Initializes a new instance of the class. + + The stream. + + + + Initializes a new instance of the class. + + The reader. + + + + Initializes a new instance of the class. + + The stream. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The reader. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the stream as a []. + + + A [] or a null reference if the next JSON token is null. This method will return null at the end of an array. + + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream. + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the to Closed. + + + + + Gets or sets a value indicating whether binary data reading should compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Creates an instance of the JsonWriter class. + + + + + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + + + + + Closes this stream and the underlying stream. + + + + + Writes the beginning of a Json object. + + + + + Writes the end of a Json object. + + + + + Writes the beginning of a Json array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current Json object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + A null value can be passed to the method for token's that don't have a value, e.g. . + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes out a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes out the given white space. + + The string of white space characters. + + + + Sets the state of the JsonWriter, + + The JsonToken being written. + The value being written. + + + + Gets or sets a value indicating whether the underlying stream or + should be closed when the writer is closed. + + + true to close the underlying stream or when + the writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Indicates how JSON text output is formatted. + + + + + Get or set how dates are written to JSON text. + + + + + Get or set how time zones are handling when writing JSON text. + + + + + Get or set how strings are escaped when writing JSON text. + + + + + Get or set how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Get or set how and values are formatting when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + The stream. + + + + Initializes a new instance of the class. + + The writer. + + + + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes out a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a Json array. + + + + + Writes the beginning of a Json object. + + + + + Writes the property name of a name/value pair on a Json object. + + The name of the property. + + + + Closes this stream and the underlying stream. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to single paramatized constructor, then the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a paramatized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets the of the JSON produced by the JsonConverter. + + The of the JSON produced by the JsonConverter. + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Create a custom object + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Initializes a new instance of the class. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets a value indicating whether integer values are allowed. + + true if integers are allowed; otherwise, false. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the collection. + + + + + Instructs the how to serialize the object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the JsonConverter described by ItemConverterType. + If null, the default constructor is used. + When non-null, there must be a constructor defined in the JsonConverter that exactly matches the number, + order, and type of these parameters. + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during Json serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Specifies the settings used when merging JSON. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Represents a trace writer that writes to the application's instances. + + + + + Represents a trace writer. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of Info will exclude Verbose messages and include Info, + Warning and Error messages. + + The that will be used to filter the trace messages passed to the writer. + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of Info will exclude Verbose messages and include Info, + Warning and Error messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Contract details for a used by the . + + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets or sets all methods called immediately after deserialization of the object. + + The methods called immediately after deserialization of the object. + + + + Gets or sets all methods called during deserialization of the object. + + The methods called during deserialization of the object. + + + + Gets or sets all methods called after serialization of the object graph. + + The methods called after serialization of the object graph. + + + + Gets or sets all methods called before serialization of the object. + + The methods called before serialization of the object. + + + + Gets or sets all method called when an error is thrown during the serialization of the object. + + The methods called when an error is thrown during the serialization of the object. + + + + Gets or sets the method called immediately after deserialization of the object. + + The method called immediately after deserialization of the object. + + + + Gets or sets the method called during deserialization of the object. + + The method called during deserialization of the object. + + + + Gets or sets the method called after serialization of the object graph. + + The method called after serialization of the object graph. + + + + Gets or sets the method called before serialization of the object. + + The method called before serialization of the object. + + + + Gets or sets the method called when an error is thrown during the serialization of the object. + + The method called when an error is thrown during the serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non public. + + true if the default object creator is non-public; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Initializes a new instance of the class. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a of the most recent trace messages. + + + A of the most recent trace messages. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of Info will exclude Verbose messages and include Info, + Warning and Error messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if LineNumber and LinePosition can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Provides a set of static (Shared in Visual Basic) methods for + querying objects that implement . + + + + + Returns the input typed as . + + + + + Returns an empty that has the + specified type argument. + + + + + Converts the elements of an to the + specified type. + + + + + Filters the elements of an based on a specified type. + + + + + Generates a sequence of integral numbers within a specified range. + + The value of the first integer in the sequence. + The number of sequential integers to generate. + + + + Generates a sequence that contains one repeated value. + + + + + Filters a sequence of values based on a predicate. + + + + + Filters a sequence of values based on a predicate. + Each element's index is used in the logic of the predicate function. + + + + + Projects each element of a sequence into a new form. + + + + + Projects each element of a sequence into a new form by + incorporating the element's index. + + + + + Projects each element of a sequence to an + and flattens the resulting sequences into one sequence. + + + + + Projects each element of a sequence to an , + and flattens the resulting sequences into one sequence. The + index of each source element is used in the projected form of + that element. + + + + + Projects each element of a sequence to an , + flattens the resulting sequences into one sequence, and invokes + a result selector function on each element therein. + + + + + Projects each element of a sequence to an , + flattens the resulting sequences into one sequence, and invokes + a result selector function on each element therein. The index of + each source element is used in the intermediate projected form + of that element. + + + + + Returns elements from a sequence as long as a specified condition is true. + + + + + Returns elements from a sequence as long as a specified condition is true. + The element's index is used in the logic of the predicate function. + + + + + Base implementation of First operator. + + + + + Returns the first element of a sequence. + + + + + Returns the first element in a sequence that satisfies a specified condition. + + + + + Returns the first element of a sequence, or a default value if + the sequence contains no elements. + + + + + Returns the first element of the sequence that satisfies a + condition or a default value if no such element is found. + + + + + Base implementation of Last operator. + + + + + Returns the last element of a sequence. + + + + + Returns the last element of a sequence that satisfies a + specified condition. + + + + + Returns the last element of a sequence, or a default value if + the sequence contains no elements. + + + + + Returns the last element of a sequence that satisfies a + condition or a default value if no such element is found. + + + + + Base implementation of Single operator. + + + + + Returns the only element of a sequence, and throws an exception + if there is not exactly one element in the sequence. + + + + + Returns the only element of a sequence that satisfies a + specified condition, and throws an exception if more than one + such element exists. + + + + + Returns the only element of a sequence, or a default value if + the sequence is empty; this method throws an exception if there + is more than one element in the sequence. + + + + + Returns the only element of a sequence that satisfies a + specified condition or a default value if no such element + exists; this method throws an exception if more than one element + satisfies the condition. + + + + + Returns the element at a specified index in a sequence. + + + + + Returns the element at a specified index in a sequence or a + default value if the index is out of range. + + + + + Inverts the order of the elements in a sequence. + + + + + Returns a specified number of contiguous elements from the start + of a sequence. + + + + + Bypasses a specified number of elements in a sequence and then + returns the remaining elements. + + + + + Bypasses elements in a sequence as long as a specified condition + is true and then returns the remaining elements. + + + + + Bypasses elements in a sequence as long as a specified condition + is true and then returns the remaining elements. The element's + index is used in the logic of the predicate function. + + + + + Returns the number of elements in a sequence. + + + + + Returns a number that represents how many elements in the + specified sequence satisfy a condition. + + + + + Returns an that represents the total number + of elements in a sequence. + + + + + Returns an that represents how many elements + in a sequence satisfy a condition. + + + + + Concatenates two sequences. + + + + + Creates a from an . + + + + + Creates an array from an . + + + + + Returns distinct elements from a sequence by using the default + equality comparer to compare values. + + + + + Returns distinct elements from a sequence by using a specified + to compare values. + + + + + Creates a from an + according to a specified key + selector function. + + + + + Creates a from an + according to a specified key + selector function and a key comparer. + + + + + Creates a from an + according to specified key + and element selector functions. + + + + + Creates a from an + according to a specified key + selector function, a comparer and an element selector function. + + + + + Groups the elements of a sequence according to a specified key + selector function. + + + + + Groups the elements of a sequence according to a specified key + selector function and compares the keys by using a specified + comparer. + + + + + Groups the elements of a sequence according to a specified key + selector function and projects the elements for each group by + using a specified function. + + + + + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. + + + + + Groups the elements of a sequence according to a key selector + function. The keys are compared by using a comparer and each + group's elements are projected by using a specified function. + + + + + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. The elements of each group are projected by using a + specified function. + + + + + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. The keys are compared by using a specified comparer. + + + + + Groups the elements of a sequence according to a specified key + selector function and creates a result value from each group and + its key. Key values are compared by using a specified comparer, + and the elements of each group are projected by using a + specified function. + + + + + Applies an accumulator function over a sequence. + + + + + Applies an accumulator function over a sequence. The specified + seed value is used as the initial accumulator value. + + + + + Applies an accumulator function over a sequence. The specified + seed value is used as the initial accumulator value, and the + specified function is used to select the result value. + + + + + Produces the set union of two sequences by using the default + equality comparer. + + + + + Produces the set union of two sequences by using a specified + . + + + + + Returns the elements of the specified sequence or the type + parameter's default value in a singleton collection if the + sequence is empty. + + + + + Returns the elements of the specified sequence or the specified + value in a singleton collection if the sequence is empty. + + + + + Determines whether all elements of a sequence satisfy a condition. + + + + + Determines whether a sequence contains any elements. + + + + + Determines whether any element of a sequence satisfies a + condition. + + + + + Determines whether a sequence contains a specified element by + using the default equality comparer. + + + + + Determines whether a sequence contains a specified element by + using a specified . + + + + + Determines whether two sequences are equal by comparing the + elements by using the default equality comparer for their type. + + + + + Determines whether two sequences are equal by comparing their + elements by using a specified . + + + + + Base implementation for Min/Max operator. + + + + + Base implementation for Min/Max operator for nullable types. + + + + + Returns the minimum value in a generic sequence. + + + + + Invokes a transform function on each element of a generic + sequence and returns the minimum resulting value. + + + + + Returns the maximum value in a generic sequence. + + + + + Invokes a transform function on each element of a generic + sequence and returns the maximum resulting value. + + + + + Makes an enumerator seen as enumerable once more. + + + The supplied enumerator must have been started. The first element + returned is the element the enumerator was on when passed in. + DO NOT use this method if the caller must be a generator. It is + mostly safe among aggregate operations. + + + + + Sorts the elements of a sequence in ascending order according to a key. + + + + + Sorts the elements of a sequence in ascending order by using a + specified comparer. + + + + + Sorts the elements of a sequence in descending order according to a key. + + + + + Sorts the elements of a sequence in descending order by using a + specified comparer. + + + + + Performs a subsequent ordering of the elements in a sequence in + ascending order according to a key. + + + + + Performs a subsequent ordering of the elements in a sequence in + ascending order by using a specified comparer. + + + + + Performs a subsequent ordering of the elements in a sequence in + descending order, according to a key. + + + + + Performs a subsequent ordering of the elements in a sequence in + descending order by using a specified comparer. + + + + + Base implementation for Intersect and Except operators. + + + + + Produces the set intersection of two sequences by using the + default equality comparer to compare values. + + + + + Produces the set intersection of two sequences by using the + specified to compare values. + + + + + Produces the set difference of two sequences by using the + default equality comparer to compare values. + + + + + Produces the set difference of two sequences by using the + specified to compare values. + + + + + Creates a from an + according to a specified key + selector function. + + + + + Creates a from an + according to a specified key + selector function and key comparer. + + + + + Creates a from an + according to specified key + selector and element selector functions. + + + + + Creates a from an + according to a specified key + selector function, a comparer, and an element selector function. + + + + + Correlates the elements of two sequences based on matching keys. + The default equality comparer is used to compare keys. + + + + + Correlates the elements of two sequences based on matching keys. + The default equality comparer is used to compare keys. A + specified is used to compare keys. + + + + + Correlates the elements of two sequences based on equality of + keys and groups the results. The default equality comparer is + used to compare keys. + + + + + Correlates the elements of two sequences based on equality of + keys and groups the results. The default equality comparer is + used to compare keys. A specified + is used to compare keys. + + + + + Computes the sum of a sequence of nullable values. + + + + + Computes the sum of a sequence of nullable + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of nullable values. + + + + + Computes the average of a sequence of nullable values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Computes the sum of a sequence of values. + + + + + Computes the sum of a sequence of + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of values. + + + + + Computes the average of a sequence of values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Returns the minimum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the minimum nullable value. + + + + + Returns the maximum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the maximum nullable value. + + + + + Computes the sum of a sequence of nullable values. + + + + + Computes the sum of a sequence of nullable + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of nullable values. + + + + + Computes the average of a sequence of nullable values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Computes the sum of a sequence of values. + + + + + Computes the sum of a sequence of + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of values. + + + + + Computes the average of a sequence of values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Returns the minimum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the minimum nullable value. + + + + + Returns the maximum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the maximum nullable value. + + + + + Computes the sum of a sequence of nullable values. + + + + + Computes the sum of a sequence of nullable + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of nullable values. + + + + + Computes the average of a sequence of nullable values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Computes the sum of a sequence of values. + + + + + Computes the sum of a sequence of + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of values. + + + + + Computes the average of a sequence of values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Returns the minimum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the minimum nullable value. + + + + + Returns the maximum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the maximum nullable value. + + + + + Computes the sum of a sequence of nullable values. + + + + + Computes the sum of a sequence of nullable + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of nullable values. + + + + + Computes the average of a sequence of nullable values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Computes the sum of a sequence of values. + + + + + Computes the sum of a sequence of + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of values. + + + + + Computes the average of a sequence of values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Returns the minimum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the minimum nullable value. + + + + + Returns the maximum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the maximum nullable value. + + + + + Computes the sum of a sequence of nullable values. + + + + + Computes the sum of a sequence of nullable + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of nullable values. + + + + + Computes the average of a sequence of nullable values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Computes the sum of a sequence of values. + + + + + Computes the sum of a sequence of + values that are obtained by invoking a transform function on + each element of the input sequence. + + + + + Computes the average of a sequence of values. + + + + + Computes the average of a sequence of values + that are obtained by invoking a transform function on each + element of the input sequence. + + + + + Returns the minimum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the minimum nullable value. + + + + + Returns the maximum value in a sequence of nullable + values. + + + + + Invokes a transform function on each element of a sequence and + returns the maximum nullable value. + + + + + Represents a collection of objects that have a common key. + + + + + Gets the key of the . + + + + + Defines an indexer, size property, and Boolean search method for + data structures that map keys to + sequences of values. + + + + + Represents a sorted sequence. + + + + + Performs a subsequent ordering on the elements of an + according to a key. + + + + + Represents a collection of keys each mapped to one or more values. + + + + + Determines whether a specified key is in the . + + + + + Applies a transform function to each key and its associated + values and returns the results. + + + + + Returns a generic enumerator that iterates through the . + + + + + Gets the number of key/value collection pairs in the . + + + + + Gets the collection of values indexed by the specified key. + + + + + See issue #11 + for why this method is needed and cannot be expressed as a + lambda at the call site. + + + + + See issue #11 + for why this method is needed and cannot be expressed as a + lambda at the call site. + + + + + This attribute allows us to define extension methods without + requiring .NET Framework 3.5. For more information, see the section, + Extension Methods in .NET Framework 2.0 Apps, + of Basic Instincts: Extension Methods + column in MSDN Magazine, + issue Nov 2007. + + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. When the or methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a raw JSON string. + + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Represents an abstract JSON token. + + + + + Represents a collection of objects. + + The type of token + + + + Gets the with the specified key. + + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output is formatted. + A collection of which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Creates an for this token. + + An that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object + + + + Creates the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + An positioned at the token to read into this . + + An that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Creates a from a . + + An positioned at the token to read into this . + + An that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JPath expression. Selects the token that matches the object path. + + + A that contains a JPath expression. + + A , or null. + + + + Selects a using a JPath expression. Selects the token that matches the object path. + + + A that contains a JPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a collection of elements using a JPath expression. + + + A that contains a JPath expression. + + An that contains the selected elements. + + + + Selects a collection of elements using a JPath expression. + + + A that contains a JPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An that contains the selected elements. + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Gets the with the specified key. + + The with the specified key. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a null value. + + A null value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + The parameter is null. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not the same type as this instance. + + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that + + + + Gets the reference for the sepecified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement ISerializable. + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that is is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and sets members to their default value when deserializing. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Initializes a new instance of the class. + + Type of the converter. + + + + Initializes a new instance of the class. + + Type of the converter. + Parameter list to use when constructing the JsonConverter. Can be null. + + + + Gets the type of the converter. + + The type of the converter. + + + + The parameter list to use when constructing the JsonConverter described by ConverterType. + If null, the default constructor is used. + + + + + Instructs the how to serialize the object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Specifies the settings on a object. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + + Null value handling. + + + + Gets or sets how null default are handled during serialization and deserialization. + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Get or set how and values are formatting when writing JSON text. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + + + + + Indicates how JSON text output is formatted. + + + + + Get or set how dates are written to JSON text. + + + + + Get or set how time zones are handling during serialization and deserialization. + + + + + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Get or set how special floating point numbers, e.g. , + and , + are written as JSON. + + + + + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Get or set how strings are escaped when writing JSON text. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Represents a reader that provides validation. + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Reads the next JSON token from the stream as a . + + A . + + + + Reads the next JSON token from the stream as a []. + + + A [] or a null reference if the next JSON token is null. + + + + + Reads the next JSON token from the stream as a . + + A . + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream. + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the Common Language Runtime (CLR) type for the current JSON token. + + + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members must be marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Converts a to and from the ISO 8601 date format (e.g. 2008-04-12T12:53Z). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Converts a to and from a JavaScript date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts XML to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the attributeName is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + True if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produces multiple root elements. + + The name of the deserialize root element. + + + + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attibute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Initializes a new instance of the class with the specified . + + The TextReader containing the XML data to read. + + + + Reads the next JSON token from the stream. + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the stream as a []. + + + A [] or a null reference if the next JSON token is null. This method will return null at the end of an array. + + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Changes the state to closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if LineNumber and LinePosition can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, HasLineInfo returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, HasLineInfo returns false). + + + + + Instructs the to always serialize the member with the specified name. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + The parameter list to use when constructing the JsonConverter described by ItemConverterType. + If null, the default constructor is used. + When non-null, there must be a constructor defined in the JsonConverter that exactly matches the number, + order, and type of these parameters. + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization and deserialization of a member. + + The numeric order of serialization or deserialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Creates an instance of the JsonWriter class using the specified . + + The TextWriter to write to. + + + + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + + + + + Closes this stream and the underlying stream. + + + + + Writes the beginning of a Json object. + + + + + Writes the beginning of a Json array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a Json object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes out a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes out the given white space. + + The string of white space characters. + + + + Gets or sets how many IndentChars to write for each level in the hierarchy when is set to Formatting.Indented. + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to Formatting.Indented. + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + The exception thrown when an error occurs while reading Json text. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + The exception thrown when an error occurs while reading Json text. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Represents a collection of . + + + + + Provides methods for converting between common language runtime types and JSON types. + + + + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output is formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output is formatted. + A collection converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output is formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output is formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be infered from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the XML node to a JSON string. + + The node to serialize. + A JSON string of the XmlNode. + + + + Serializes the XML node to a JSON string using formatting. + + The node to serialize. + Indicates how the output is formatted. + A JSON string of the XmlNode. + + + + Serializes the XML node to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output is formatted. + Omits writing the root object. + A JSON string of the XmlNode. + + + + Deserializes the XmlNode from a JSON string. + + The JSON string. + The deserialized XmlNode + + + + Deserializes the XmlNode from a JSON string nested in a root elment specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized XmlNode + + + + Deserializes the XmlNode from a JSON string nested in a root elment specified by + and writes a .NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized XmlNode + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + The exception thrown when an error occurs during Json serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance. + The will not use default settings. + + + A new instance. + The will not use default settings. + + + + + Creates a new instance using the specified . + The will not use default settings. + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings. + + + + + Creates a new instance. + The will use default settings. + + + A new instance. + The will use default settings. + + + + + Creates a new instance using the specified . + The will use default settings. + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings. + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Deserializes the Json structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the Json structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the Json structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the Json structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the Json structure + to a Stream using the specified . + + The used to write the Json structure. + The to serialize. + + + + Serializes the specified and writes the Json structure + to a Stream using the specified . + + The used to write the Json structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + + + + + Serializes the specified and writes the Json structure + to a Stream using the specified . + + The used to write the Json structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifing the type is optional. + + + + + Serializes the specified and writes the Json structure + to a Stream using the specified . + + The used to write the Json structure. + The to serialize. + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + + + + + Get or set how reference loops (e.g. a class referencing itself) is handled. + + + + + Get or set how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + + + + + Get or set how null values are handled during serialization and deserialization. + + + + + Get or set how null default are handled during serialization and deserialization. + + + + + Gets or sets how objects are created during deserialization. + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + + + + + Get or set how dates are written to JSON text. + + + + + Get or set how time zones are handling during serialization and deserialization. + + + + + Get or set how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Get or set how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Get or set how special floating point numbers, e.g. , + and , + are written as JSON text. + + + + + Get or set how strings are escaped when writing JSON text. + + + + + Get or set how and values are formatting when writing JSON text. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a JSON constructor. + + + + + Represents a token that can contain other tokens. + + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates an that can be used to add tokens to the . + + An that is ready to have content written to it. + + + + Replaces the children nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Gets the with the specified key. + + The with the specified key. + + + + Represents a collection of objects. + + The type of token + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Gets the with the specified key. + + + + + + Represents a JSON object. + + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets an of this object's properties. + + An of this object's properties. + + + + Gets a the specified name. + + The property name. + A with the specified name or null. + + + + Gets an of this object's property values. + + An of this object's property values. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries the get value. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Returns the properties for this instance of a component. + + + A that represents the properties for this component instance. + + + + + Returns the properties for this instance of a component using the attribute array as a filter. + + An array of type that is used as a filter. + + A that represents the filtered properties for this component instance. + + + + + Returns a collection of custom attributes for this instance of a component. + + + An containing the attributes for this object. + + + + + Returns the class name of this instance of a component. + + + The class name of the object, or null if the class does not have a name. + + + + + Returns the name of this instance of a component. + + + The name of the object, or null if the object does not have a name. + + + + + Returns a type converter for this instance of a component. + + + A that is the converter for this object, or null if there is no for this object. + + + + + Returns the default event for this instance of a component. + + + An that represents the default event for this object, or null if this object does not have events. + + + + + Returns the default property for this instance of a component. + + + A that represents the default property for this object, or null if this object does not have properties. + + + + + Returns an editor of the specified type for this instance of a component. + + A that represents the editor for this object. + + An of the specified type that is the editor for this object, or null if the editor cannot be found. + + + + + Returns the events for this instance of a component using the specified attribute array as a filter. + + An array of type that is used as a filter. + + An that represents the filtered events for this component instance. + + + + + Returns the events for this instance of a component. + + + An that represents the events for this component instance. + + + + + Returns an object that contains the property described by the specified property descriptor. + + A that represents the property whose owner is to be found. + + An that represents the owner of the specified property. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Gets the node type for this . + + The type. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Represents a JSON array. + + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + The is read-only. + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + The is read-only. + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + The is read-only. + + + + Removes all items from the . + + The is read-only. + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + The is read-only. + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Reads the next JSON token from the stream as a []. + + + A [] or a null reference if the next JSON token is null. This method will return null at the end of an array. + + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the stream. + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the at the reader's current position. + + + + + Gets the path of the current JSON token. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying streams and also flushes the underlying stream. + + + + + Closes this stream and the underlying stream. + + + + + Writes the beginning of a Json object. + + + + + Writes the beginning of a Json array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a Json object. + + The name of the property. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes out a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Gets the at the writer's current position. + + + + + Gets the token being writen. + + The token being writen. + + + + Represents a JSON property. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Gets the node type for this . + + The type. + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Contains the JSON schema extension methods. + + + + + Determines whether the is valid. + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + Determines whether the is valid. + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + Validates the specified . + + The source to test. + The schema to test with. + + + + Validates the specified . + + The source to test. + The schema to test with. + The validation event handler. + + + + Returns detailed information about the schema exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Resolves from an id. + + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Specifies undefined schema Id handling options for the . + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + Returns detailed information related to the . + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + Represents the callback method that will handle JSON schema validation events and the . + + + + + Resolves member mappings for a type, camel casing property names. + + + + + Used by to resolves a for a given . + + + + + Used by to resolves a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + If set to true the will use a cached shared with other resolvers of the same type. + Sharing the cache will significantly improve performance with multiple resolver instances because expensive reflection will only + happen once. This setting can cause unexpected behavior if different instances of the resolver are suppose to produce different + results. When set to false it is highly recommended to reuse instances with the . + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Name of the property. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Resolves the name of the property. + + Name of the property. + The property name camel cased. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + Get and set values for a using dynamic methods. + + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Handles serialization callback events. + + The object that raised the callback event. + The streaming context. + + + + Handles serialization error callback events. + + The object that raised the callback event. + The streaming context. + The error context. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Gets or sets the ISerializable object constructor. + + The ISerializable object constructor. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization and deserialization of a member. + + The numeric order of serialization or deserialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes presidence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialize. + + A predicate used to determine whether the property should be serialize. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of propertyName and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + An in-memory representation of a JSON Schema. + + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains schema JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Parses the specified json. + + The json. + The resolver. + A populated from the string that contains JSON. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisble by. + + A number that the value should be divisble by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the "minimum" attribute. + + A flag indicating whether the value can not equal the number defined by the "minimum" attribute. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the "maximum" attribute. + + A flag indicating whether the value can not equal the number defined by the "maximum" attribute. + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallow types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Generates a from a specified . + + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + The value types allowed by the . + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets the object's properties. + + The object's properties. + + + + Gets the constructor parameters required for any non-default constructor + + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the override constructor used to create the object. + This is set when a constructor is marked up using the + JsonConstructor attribute. + + The override constructor. + + + + Gets or sets the parametrized constructor used to create the object. + + The parametrized constructor. + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the JsonConverter type described by the argument. + + The JsonConverter type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + Create a factory function that can be used to create instances of a JsonConverter described by the + argument type. The returned function can then be used to either invoke the converter's default ctor, or any + parameterized constructors by way of an object array. + + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Specifies type name handling options for the . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Gets a dictionary of the names and values of an Enum type. + + + + + + Gets a dictionary of the names and values of an Enum type. + + The enum type to get names and values for. + + + + + Specifies the type of Json token. + + + + + This is returned by the if a method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer. + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic IList. + + The list to add to. + The collection of elements to add. + + + + Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer. + + The type of the elements of source. + A sequence in which to locate a value. + The object to locate in the sequence + An equality comparer to compare values. + The zero-based index of the first occurrence of value within the entire sequence, if found; otherwise, –1. + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the member is an indexed property. + + The member. + + true if the member is an indexed property; otherwise, false. + + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Nulls an empty string. + + The string. + Null if the string was null, otherwise the string unchanged. + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls results in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + A array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + diff --git a/Bin/Debug/VSoft/SysDb.rar b/Bin/Debug/VSoft/SysDb.rar new file mode 100644 index 0000000..3ec2149 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb.rar differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/87G.png b/Bin/Debug/VSoft/SysDb/Icons/87G.png new file mode 100644 index 0000000..ae4bdee Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/87G.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/Internet 选项.png b/Bin/Debug/VSoft/SysDb/Icons/Internet 选项.png new file mode 100644 index 0000000..3920e0f Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/Internet 选项.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/android.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/android.png new file mode 100644 index 0000000..be890e3 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/android.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/android2.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/android2.png new file mode 100644 index 0000000..658e896 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/android2.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/下载管理.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/下载管理.png new file mode 100644 index 0000000..07a0b97 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/下载管理.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/关键词拼接.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/关键词拼接.png new file mode 100644 index 0000000..ab6ff7f Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/关键词拼接.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/分数管理.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/分数管理.png new file mode 100644 index 0000000..04f2184 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/分数管理.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/匿名投诉建议.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/匿名投诉建议.png new file mode 100644 index 0000000..d6aeae9 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/匿名投诉建议.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/合作游戏管理.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/合作游戏管理.png new file mode 100644 index 0000000..0df1db6 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/合作游戏管理.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/外链提交.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/外链提交.png new file mode 100644 index 0000000..c25c486 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/外链提交.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/外链统计.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/外链统计.png new file mode 100644 index 0000000..df70ce8 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/外链统计.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/大小文件换算.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/大小文件换算.png new file mode 100644 index 0000000..6341269 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/大小文件换算.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/定时提醒.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/定时提醒.png new file mode 100644 index 0000000..c2e9805 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/定时提醒.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/当游工具箱.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/当游工具箱.png new file mode 100644 index 0000000..4bb6c88 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/当游工具箱.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/批量打包.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/批量打包.png new file mode 100644 index 0000000..5a9c6ef Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/批量打包.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/批量改后台.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/批量改后台.png new file mode 100644 index 0000000..a394978 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/批量改后台.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/排版助手.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/排版助手.png new file mode 100644 index 0000000..23f4397 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/排版助手.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/提交游戏.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/提交游戏.png new file mode 100644 index 0000000..044ae8c Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/提交游戏.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/提交绩效.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/提交绩效.png new file mode 100644 index 0000000..de135c6 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/提交绩效.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/数据分析.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/数据分析.png new file mode 100644 index 0000000..fe1e078 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/数据分析.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/断电恢复.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/断电恢复.png new file mode 100644 index 0000000..0e4c8be Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/断电恢复.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/查看分润.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/查看分润.png new file mode 100644 index 0000000..693155c Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/查看分润.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/游戏封包.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/游戏封包.png new file mode 100644 index 0000000..b1be195 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/游戏封包.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/爱站词条.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/爱站词条.png new file mode 100644 index 0000000..44db841 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/爱站词条.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/生成绩效.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/生成绩效.png new file mode 100644 index 0000000..09a49e6 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/生成绩效.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/目标站资源.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/目标站资源.png new file mode 100644 index 0000000..e236eed Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/目标站资源.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/知识库.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/知识库.png new file mode 100644 index 0000000..b5688f2 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/知识库.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/管理投诉.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/管理投诉.png new file mode 100644 index 0000000..998fb64 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/管理投诉.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/绩效报表.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/绩效报表.png new file mode 100644 index 0000000..4f0b22c Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/绩效报表.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/绩效浏览.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/绩效浏览.png new file mode 100644 index 0000000..cafc228 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/绩效浏览.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/网页提醒.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/网页提醒.png new file mode 100644 index 0000000..40aae96 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/网页提醒.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/自媒体管理.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/自媒体管理.png new file mode 100644 index 0000000..3261593 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/自媒体管理.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/苹果.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/苹果.png new file mode 100644 index 0000000..b32beb8 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/苹果.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/软文协作.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/软文协作.png new file mode 100644 index 0000000..9169277 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/软文协作.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/ryprocess/预约管理.png b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/预约管理.png new file mode 100644 index 0000000..eb87787 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/ryprocess/预约管理.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/下载银行.png b/Bin/Debug/VSoft/SysDb/Icons/下载银行.png new file mode 100644 index 0000000..6ac3eb3 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/下载银行.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/回收站.png b/Bin/Debug/VSoft/SysDb/Icons/回收站.png new file mode 100644 index 0000000..5d32b13 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/回收站.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/声音.png b/Bin/Debug/VSoft/SysDb/Icons/声音.png new file mode 100644 index 0000000..f39a975 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/声音.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/当下.png b/Bin/Debug/VSoft/SysDb/Icons/当下.png new file mode 100644 index 0000000..4323874 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/当下.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/当游.png b/Bin/Debug/VSoft/SysDb/Icons/当游.png new file mode 100644 index 0000000..af7470c Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/当游.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/打印机.png b/Bin/Debug/VSoft/SysDb/Icons/打印机.png new file mode 100644 index 0000000..0cb748f Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/打印机.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/控制面板.png b/Bin/Debug/VSoft/SysDb/Icons/控制面板.png new file mode 100644 index 0000000..318da90 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/控制面板.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/日期时间.png b/Bin/Debug/VSoft/SysDb/Icons/日期时间.png new file mode 100644 index 0000000..e4e978e Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/日期时间.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/服务.png b/Bin/Debug/VSoft/SysDb/Icons/服务.png new file mode 100644 index 0000000..99f6e92 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/服务.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/淘宝.png b/Bin/Debug/VSoft/SysDb/Icons/淘宝.png new file mode 100644 index 0000000..c17fac9 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/淘宝.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/添加删除程序.png b/Bin/Debug/VSoft/SysDb/Icons/添加删除程序.png new file mode 100644 index 0000000..0e8aba9 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/添加删除程序.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/电源选项.png b/Bin/Debug/VSoft/SysDb/Icons/电源选项.png new file mode 100644 index 0000000..4198261 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/电源选项.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/百度.ico b/Bin/Debug/VSoft/SysDb/Icons/百度.ico new file mode 100644 index 0000000..fe319d3 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/百度.ico differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/百度.png b/Bin/Debug/VSoft/SysDb/Icons/百度.png new file mode 100644 index 0000000..7ee8c3d Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/百度.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/管理工具.png b/Bin/Debug/VSoft/SysDb/Icons/管理工具.png new file mode 100644 index 0000000..848fd4c Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/管理工具.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/网络与共享中心.png b/Bin/Debug/VSoft/SysDb/Icons/网络与共享中心.png new file mode 100644 index 0000000..36d1e22 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/网络与共享中心.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/视频.png b/Bin/Debug/VSoft/SysDb/Icons/视频.png new file mode 100644 index 0000000..db90dfe Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/视频.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/设备管理器.png b/Bin/Debug/VSoft/SysDb/Icons/设备管理器.png new file mode 100644 index 0000000..8663431 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/设备管理器.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/键盘.png b/Bin/Debug/VSoft/SysDb/Icons/键盘.png new file mode 100644 index 0000000..9d20001 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/键盘.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/音乐.png b/Bin/Debug/VSoft/SysDb/Icons/音乐.png new file mode 100644 index 0000000..4cd9c51 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/音乐.png differ diff --git a/Bin/Debug/VSoft/SysDb/Icons/鼠标.png b/Bin/Debug/VSoft/SysDb/Icons/鼠标.png new file mode 100644 index 0000000..a354bc2 Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/Icons/鼠标.png differ diff --git a/Bin/Debug/VSoft/SysDb/SysConfig.dat b/Bin/Debug/VSoft/SysDb/SysConfig.dat new file mode 100644 index 0000000..b1a4a6a Binary files /dev/null and b/Bin/Debug/VSoft/SysDb/SysConfig.dat differ diff --git a/Bin/Debug/VSoft/System.Data.SQLite.dll b/Bin/Debug/VSoft/System.Data.SQLite.dll new file mode 100644 index 0000000..e15c908 Binary files /dev/null and b/Bin/Debug/VSoft/System.Data.SQLite.dll differ diff --git a/Bin/Debug/VSoft/UserDb/Setting.xml b/Bin/Debug/VSoft/UserDb/Setting.xml new file mode 100644 index 0000000..d2a6b00 --- /dev/null +++ b/Bin/Debug/VSoft/UserDb/Setting.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Bin/Debug/VSoft/UserDb/Softs.dat b/Bin/Debug/VSoft/UserDb/Softs.dat new file mode 100644 index 0000000..3353adb Binary files /dev/null and b/Bin/Debug/VSoft/UserDb/Softs.dat differ diff --git a/Bin/Debug/VSoft/UserDb/Win.dat b/Bin/Debug/VSoft/UserDb/Win.dat new file mode 100644 index 0000000..eb5572b --- /dev/null +++ b/Bin/Debug/VSoft/UserDb/Win.dat @@ -0,0 +1,4 @@ +[VSoft] +hwnd=395896 +width=742 +height=572 diff --git a/Bin/Debug/VSoft/UserDb/logs.dat b/Bin/Debug/VSoft/UserDb/logs.dat new file mode 100644 index 0000000..5fa7b43 Binary files /dev/null and b/Bin/Debug/VSoft/UserDb/logs.dat differ diff --git a/Bin/Debug/VSoft/VSoft.dll b/Bin/Debug/VSoft/VSoft.dll new file mode 100644 index 0000000..ac86f00 Binary files /dev/null and b/Bin/Debug/VSoft/VSoft.dll differ diff --git a/Bin/Debug/VSoft/VSoft.rar b/Bin/Debug/VSoft/VSoft.rar new file mode 100644 index 0000000..d4aa130 Binary files /dev/null and b/Bin/Debug/VSoft/VSoft.rar differ diff --git a/Bin/Debug/VSoft/VSoftBox.exe b/Bin/Debug/VSoft/VSoftBox.exe new file mode 100644 index 0000000..8b27248 Binary files /dev/null and b/Bin/Debug/VSoft/VSoftBox.exe differ diff --git a/Bin/Debug/VSoft/cUpdate.dat b/Bin/Debug/VSoft/cUpdate.dat new file mode 100644 index 0000000..67e3fc3 --- /dev/null +++ b/Bin/Debug/VSoft/cUpdate.dat @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Bin/Debug/VSoft/ryControls.dll b/Bin/Debug/VSoft/ryControls.dll new file mode 100644 index 0000000..57d2828 Binary files /dev/null and b/Bin/Debug/VSoft/ryControls.dll differ diff --git a/Bin/Debug/VSoft/ryControls.xml b/Bin/Debug/VSoft/ryControls.xml new file mode 100644 index 0000000..1d8fbd5 --- /dev/null +++ b/Bin/Debug/VSoft/ryControls.xml @@ -0,0 +1,11105 @@ + + + + ryControls + + + + + 控件状态 + + + + + 无 + + + + + 获得焦点 + + + + + 失去焦点 + + + + + 鼠标指针进入控件 + + + + + Toolbar控件 + + + + + + + + + + + + + + + 获取或设置控件显示的图片 + + + + + 重写控件焦点属性 + + + + + 自定义绘制 + + + + + + 焦点进入 + + + + + + 失去焦点 + + + + + + 禁止调整大小 + + + + + + + + + + + + + + + + + + 只响应单击鼠标左键事件 + + + + + + 按比例缩放图片 + + + + + + + 图片缩放 + + 源图片 + 缩放图片的宽度 + 缩放图片的高度 + 缩放的图片 + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要 + 使用代码编辑器修改此方法的内容。 + + + + + 绘图对像 + + 绘图对像 + 图片 + 绘置的图片大小、坐标 + 绘置的图片边界 + 当前状态 + 状态总数 + + + + 绘图对像 + + 绘图对像 + 图片对像 + 绘置的图片大小、坐标 + 当前状态 + 状态总数 + + + + + + + + + 得到要绘置的图片对像 + + 图像在程序集中的地址 + + + + + 得到要绘置的图片对像 + + 图像在程序集中的路径 + 图像在程序集中的地址 + + + + + 获取资源图标 + + + + + + + 得到图程序集中的图片对像 + + 图像在程序集中的地址 + + + + + 得到图程序集中的图片对像 + + 图像在程序集中的路径 + 图像在程序集中的地址 + + + + + 控件的状态。 + + + + + 正常 + + + + + 鼠标经过 + + + + + 鼠标按下 + + + + + 鼠标的当前位置 + + + + + + + + + + + + + + + + + + + + 美化按钮 + + + + + 普通按钮矩形位置 + + + + + 美化按钮 + + + + + 分割按钮的宽度 + + + + + 是否启用分割按钮 + + + + + 优先使用默认皮肤 + + + + + 按钮基础背景色 + + + + + 按钮字体颜色 + + + + + 图片宽度,默认值为18px,最小12px + + + + + 圆角的位置,默认全部都是圆角 + + + + + 设置圆角半径 + + + + + 背景色是否渐变 + + + + + 图片高度 + + + + + 图片与文字之间的间距 + + + + + 当鼠标按下时图片和文字是否产生偏移 + + + + + 鼠标进入时 + + + + + + 鼠标离开 + + + + + + 鼠标按下 + + + + + + 鼠标弹起 + + + + + + 鼠标当前所在位置 + + + + + 获取图像以及文字的位置 + + + + + + + + + + + + + + + + + + + 消息列表控件 + + + + + 最大高度 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要 + 使用代码编辑器修改此方法的内容。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 建立圆角路径的样式。 + + + + + 四个角都不是圆角。 + + + + + 四个角都为圆角。 + + + + + 左边两个角为圆角。 + + + + + 右边两个角为圆角。 + + + + + 上边两个角为圆角。 + + + + + 下边两个角为圆角。 + + + + + 左下角为圆角。 + + + + + 右下角为圆角。 + + + + + 画图相关API + + + + + 建立带有圆角样式的路径。 + + 用来建立路径的矩形。 + 圆角的大小。 + 圆角的样式。 + 是否把矩形长宽减 1,以便画出边框。 + 建立的路径。 + + + + 窗体皮肤 + + + + + 窗体皮肤 + + + + + 标题属性 + + + + + 是否使用父窗口的图标 + + + + + 点击最小化按钮是最小化还是隐藏 + + + + + 最大化按钮 + + + + + 最小化按钮 + + + + + 标题栏关闭按钮是否显示 + + + + + 当窗口位于后台时,是否标注显示。 + + + + + + + + + + 标题栏字体颜色 + + + + + 标题栏不处于活动状态时的字体颜色 + + + + + 标题栏背景颜色 + + + + + 标题栏不处于活动状态时的背景颜色 + + + + + 是否允许拖拉窗体边缘来改变窗体大小 + + + + + + + + + + + 画边框 + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + 热键文本框 + + + + + 热键文本框 + + + + + 在控件大小变化时发生 + + + + + + 此属性无效 + + + + + 载入热键配置 + + + + + + 保存热键 + + + + + + 是否含义热键 + + + + + 读取或设置热键 + + + + + 功能键 + + + + + 热键按键 + + + + + KeyDown事件 + + + + + + KeyDown事件 + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要 + 使用代码编辑器修改此方法的内容。 + + + + + + + + + + + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + + + + + + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + + + + + + + + + + + 最大高度 + + + + + 标题 + + + + + 是否显示时间 + + + + + 添加时间 + + + + + + + + + + + + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要 + 使用代码编辑器修改此方法的内容。 + + + + + + + + + + + + + + + 最大高度 + + + + + 标题 + + + + + 是否显示时间 + + + + + 添加时间 + + + + + 内容 + + + + + 网址 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要 + 使用代码编辑器修改此方法的内容。 + + + + + + + + + + + + + + + + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + + + + + + + + + + + 图标 + + + + + 标题 + + + + + 悬浮提示 + + + + + 标题颜色 + + + + + 设置按钮 + + + + + + + 判断和设置是否选择 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + + + + + + + + + + + 绘制边框 + + 消息 + + + + 类说明:CContextMenuStrip控件的实现用来代替系统的ContextMenuStrip控件 + + + + + + + + + + + + + + + + 重写OnCreateControl + + + + + 重写OnPaint事件 + + + + + + CreateRoundedRectanglePath + + Rectangle + + + + + + 系统热键数据类。 + + + + + 系统热键数据类 + + + + + 使多行属性失效掉 + + + + + 使只读属性失效掉 + + + + + 获取热键文本 + + + + + 功能键 + + + + + 热键按键 + + + + + + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要 + 使用代码编辑器修改此方法的内容。 + + + + + 增强时间控件 + + + + + 增强时间控件 + + + + + + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 选择文本框 + + + + + 选择文本框 + + + + + 按钮基础背景色 + + + + + 优先使用默认皮肤 + + + + + 选择的id + + + + + 选择的名称 + + + + + 选择的名称 + + + + + 字体 + + + + + 重新设置大小 + + + + + 在选择时激发 + + + + + 点击选择 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 可以改变文本行距(行间距)的Label + + + + + 行间距 + + + + + 可以改变文本行距(行间距)的Label + + + + + + + + + + 字体高度 + + + + + + + + + + 文本 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 计算两个日期的时间间隔,返回的是日期值+ + + 时间值,将显示在返回的值里 + 参照时间 + + + + + + + + + + + + + + + 控件边框颜色 + + + + + 控件背景颜色 + + + + + 圆角弧度大小 + + + + + 圆角风格 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + + + + + + 在搜索时激发 + + + + + 文本变化时激发 + + + + + 文本变化时激发 + + + + + 双击时激发 + + + + + + + + + + + + + + + 文本为空时的显示效果 + + + + + 文本不选中 + + + + + 有内容时的显示效果 + + + + + 当文本框为空时,显示的内容。 + + + + + 字体 + + + + + 优先使用默认皮肤 + + + + + 按钮基础背景色 + + + + + + + + + + 重新设置大小 + + + + + 点击搜索按钮 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + + + + + + + + + + + 使用公共皮肤 + + + + + 按钮颜色 + + + + + + + + + + + + + + + + + + + + + + + + + + + 皮肤公共类 + + + + + 是否使用默认皮肤 + + + + + 按钮皮肤 + + + + + 按钮皮肤类 + + + + + 背景颜色 + + + + + 字体颜色 + + + + + 类说明:帮助类 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 修改控件或窗体的边框,例如Textbox或是Form窗体 + + 消息 + 控件对象 + 边框像素 + 边框颜色 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 超级图片控件,支持加载工程内部图片、异步加载网络图片 + + + + + 超级图片控件,支持加载工程内部图片、异步加载网络图片 + + + + + 图片所在上级域名 + + + + + 图片资源所在上级文件夹 + + + + + 根据不同前缀,加载不同格式图片。i:表示工程内置图片;s:表示T_ImageDomain域名下的图片,u:表示指定url的图片;f:表示本地图片 + + + + + + 加载本地图片,加载完毕不会占用本地图片 + + + + + + 加载指定url图片 + + url位置 + 是否异步 + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要 + 使用代码编辑器修改此方法的内容。 + + + + + 多标签控件 + + + + + + + + + + 选项发生变化时激发 + + + + + 标签选择的序号 + + + + + + + + + + 选择的颜色 + + + + + 多标签控件颜色 + + + + + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 多标签控件 + + + + + + + + + + 获取对应的标签 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 美化文本框控件 + + + + + 文本变化时激发 + + + + + 文本变化时激发 + + + + + 双击时激发 + + + + + + + + + + 是否只能输入数字 + + + + + 是否多行 + + + + + 是否在显示不下时换行 + + + + + 最大长度 + + + + + + + + + + 背景颜色 + + + + + 右键菜单 + + + + + 字体颜色 + + + + + 选择的开始位置 + + + + + 选择的长度 + + + + + 选择的文本 + + + + + 提示文本 + + + + + 选择全部 + + + + + 密码 + + + + + 是否只读 + + + + + + + + + + + 文本为空时的显示效果 + + + + + 字体 + + + + + 有内容时的显示效果 + + + + + 当文本框为空时,显示的内容。 + + + + + + + + + + 选择文本框中的文本范围 + + 文本框中当前选定文本的第一个字符的位置。 + 要选择的字符数 + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + Define some Windows message constants + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This class adds to the functionality provided in System.Windows.Forms.MenuStrip. + + It allows you to "ClickThrough" to the MenuStrip so that you don't have to click once to + bring the form into focus and once more to take the desired action + + It also implements a SuppressHighlighting property to turn off the highlighting + that occures on mouseover when the form is not active + + + + + Gets or sets whether the control honors item clicks when its containing form does + not have input focus. + + + Default value is false, which is the same behavior provided by the base ToolStrip class. + + + + + Gets or sets whether the control shows highlighting on mouseover + + + Default value is true, which is the same behavior provided by the base MenuStrip class. + + + + + This method overrides the procedure that responds to Windows messages. + + It intercepts the WM_MOUSEMOVE message + and ignores it if SuppressHighlighting is on and the TopLevelControl does not contain the focus. + Otherwise, it calls the base class procedure to handle the message. + + It also intercepts the WM_MOUSEACTIVATE message and replaces an "Activate and Eat" result with + an "Activate" result if ClickThrough is enabled. + + + + + + This class adds to the functionality provided in System.Windows.Forms.ToolStrip. + + It allows you to "ClickThrough" to the MenuStrip so that you don't have to click once to + bring the form into focus and once more to take the desired action + + It also implements a SuppressHighlighting property to turn off the highlighting + that occures on mouseover when the form is not active + + + + + Gets or sets whether the control honors item clicks when its containing form does + not have input focus. + + + Default value is false, which is the same behavior provided by the base ToolStrip class. + + + + + Gets or sets whether the control shows highlighting on mouseover + + + Default value is true, which is the same behavior provided by the base MenuStrip class. + + + + + This method overrides the procedure that responds to Windows messages. + + It intercepts the WM_MOUSEMOVE message + and ignores it if SuppressHighlighting is on and the TopLevelControl does not contain the focus. + Otherwise, it calls the base class procedure to handle the message. + + It also intercepts the WM_MOUSEACTIVATE message and replaces an "Activate and Eat" result with + an "Activate" result if ClickThrough is enabled. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 还原 + + + + + 移动 + + + + + 大小 + + + + + 最小化 + + + + + 最大化 + + + + + 关闭 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 透明图片控件 + + + + + 是否使用透明,默认为True + + + + + 设置透明度 + + + + + 要绑定的控件 + + + + + 透明图片控件 + + + + + 图片 + + + + + 初始化加载控件 + + 透明度 + 是否显示加载图片 + 图片 + + + + + + + + + + + + + + + 显示加载 + + + + + 隐藏加载 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 一个强类型的资源类,用于查找本地化的字符串等。 + + + + + 返回此类使用的缓存的 ResourceManager 实例。 + + + + + 使用此强类型资源类,为所有资源查找 + 重写当前线程的 CurrentUICulture 属性。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + + + + + + 获得当前进程,以便重绘控件 + + + + + + + 是否启用热点效果 + + + + + 边框颜色 + + + + + 热点边框颜色 + + + + + 是否鼠标MouseOver状态 + + + + + 是否启用热点效果 + + + + + 边框颜色 + + + + + 热点时边框颜色 + + + + + + + + + + 鼠标移动到该控件上时 + + + + + + 当鼠标从该控件移开时 + + + + + + 当该控件获得焦点时 + + + + + + 当该控件失去焦点时 + + + + + + 获得操作系统消息 + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 日控件 + + + + + 日控件 + + + + + 当前日期 + + + + + 在发生页码变化前激发 + + + + + 设置休息状态,1为休息,-1为上班,其它为不显示 + + + + + + 日期 + + + + + 农历 + + + + + 阳历日期字体颜色 + + + + + 阳历日期字体 + + + + + 农历日期字体 + + + + + 农历部分字体颜色 + + + + + 是否选中 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 日历控件 + + + + + 单击事件 + + + + + + + 单击某个日期事件 + + + + + 日历控件 + + + + + 设置日期 + + + + + 放假数据表 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 设置管理类,快速添加设置。 + + + + + 设置管理类,快速添加设置。 + + + + + 设置管理类,快速添加设置。 + + + + + + 存储类型 + + + + + 配置存储路径 + + + + + 设置XML内容 + + + + + 添加控件 + + + + + + + + 设置值 + + + + + + + + 添加控件 + + + + + + + + + + 添加控件 + + + + + + + + + 添加控件 + + + + + + + + + 添加控件 + + + + + + + + + 添加控件 + + + + + + + + + 添加控件 + + + + + + + + + 添加控件 + + + + + + + + + 添加控件 + + + + + + + + + 添加控件 + + + + + + + + + 添加控件 + + + + + + + + + 读取配置 + + + + + 保存配置 + + + + + + + + + + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + 类 名:ColorHSL + 功 能:H 色相 \ S 饱和度(纯度) \ L 亮度 颜色模型 + 日 期:2015-02-08 + 修 改:2015-03-20 + 作 者:ls9512 + + + + + HSL颜色 + + + + + + + + 色相 + + + + + 饱和度(纯度) + + + + + 饱和度 + + + + + 类 名:ColorHSV + 功 能:H 色相 \ S 饱和度(纯度) \ V 明度 颜色模型 + 日 期:2015-01-22 + 修 改:2015-03-20 + 作 者:ls9512 + + + + + 构造方法 + + + + + + + + 色相 + + + + + 饱和度(纯度) + + + + + 明度 + + + + + 类 名:ColorRGB + 功 能:R 红色 \ G 绿色 \ B 蓝色 颜色模型 + 所有颜色模型的基类,RGB是用于输出到屏幕的颜色模式,所以所有模型都将转换成RGB输出 + 日 期:2015-01-22 + 修 改:2015-03-20 + 作 者:ls9512 + + + + + 构造方法 + + + + + + + + + + + + + + 红色 + + + + + 绿色 + + + + + 蓝色 + + + + + 获取实际颜色 + + + + + + 类 名:ColorHelper + 功 能:提供从RGB到HSV/HSL色彩空间的相互转换 + 日 期:2015-02-08 + 修 改:2015-03-20 + 作 者:ls9512 + + + + + RGB转换HSV + + + + + + + HSV转换RGB + + + + + + + RGB转换HSL + + + + + + + HSL转换RGB + + H, S and L input range = 0 -1.0 + + + + + RGB转CMYK + + + + + + + + + + RGB转CMYK + + + + + + + + + + + + CMYK转RGB + + + + + + + + + + Standard-RGB → XYZ,X、Y、Z 使用 D65/2°标准光源. + + + + + + + + + XYZ → Standard-RGB,X、Y、Z 使用 D65/2°标准光源. + + + + + + + + + XYZ → Adobe-RGB,X、Y、Z 使用 D65/2°标准光源.RGB Adobe 1998 + + + + + + + + + Adobe-RGB → XYZ,X、Y、Z 使用 D65/2°标准光源.RGB Adobe 1998 + + + + + + + + + Yxy转RGB + + + + + + + + + RGB转Yxy + + + + + + + + + 超级颜色选择控件 + + + + + + + + + + + + + + + + + + + + + + + + + + 获取网页颜色 + + + + + 超级颜色选择控件 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + Chrome风格的多标签控件 + + + + + 设置选项卡处于选中状态时第一背景色. + + + + + 设置选项卡处于选中状态时第二背景色. + + + + + 设置选项卡处于非选中状态时第一背景色. + + + + + 设置选项卡处于非选中状态时第二背景色. + + + + + 设置鼠标移动到非选中状态选项卡时第一背景色. + + + + + 设置鼠标移动到非选中状态选项卡时第二背景色. + + + + + 设置选项卡工作区背景色. + + + + + 设置选项卡工作区背景图. + + + + + 是否显示关闭按钮 + + + + + 是否显示新增按钮 + + + + + 是否允许拖拽标签 + + + + + 标签最大宽度 + + + + + 标签右键菜单 + + + + + 鼠标按下标签时激发 + + + + + 鼠标放开标签时激发 + + + + + Chrome风格的多标签控件 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 画标签文字 + + + + + + + + + 画标签图标 + + + + + + + 画关闭按钮 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 添加新标签 + + + + + + + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要 + 使用代码编辑器修改此方法的内容。 + + + + + The position is not over a tab. + + + + + The position is over a tab's icon. + + + + + The position is over a tab's text. + + + + + The position is over a tab but not over its icon or its text. For owner-drawn tab controls, this value is specified if the position is anywhere over a tab. + TCHT_ONITEM is a bitwise-OR operation on TCHT_ONITEMICON and TCHT_ONITEMLABEL. + + + + + Specifies values from SetWindowPosZ enumeration. + + + + + Specified HWND_TOP enumeration value. + + + + + Specified HWND_BOTTOM enumeration value. + + + + + Specified HWND_TOPMOST enumeration value. + + + + + Specified HWND_NOTOPMOST enumeration value. + + + + + Invalidates the rectangle or region that you specify in lprcUpdate or hrgnUpdate. + You can set only one of these parameters to a non-NULL value. If both are NULL, RDW_INVALIDATE invalidates the entire window. + + + + Causes the OS to post a WM_PAINT message to the window regardless of whether a portion of the window is invalid. + + + + Causes the window to receive a WM_ERASEBKGND message when the window is repainted. + Specify this value in combination with the RDW_INVALIDATE value; otherwise, RDW_ERASE has no effect. + + + + + Validates the rectangle or region that you specify in lprcUpdate or hrgnUpdate. + You can set only one of these parameters to a non-NULL value. If both are NULL, RDW_VALIDATE validates the entire window. + This value does not affect internal WM_PAINT messages. + + + + Suppresses any pending WM_ERASEBKGND messages. + + + Excludes child windows, if any, from the repainting operation. + + + Includes child windows, if any, in the repainting operation. + + + Causes the affected windows, which you specify by setting the RDW_ALLCHILDREN and RDW_NOCHILDREN values, to receive WM_ERASEBKGND and WM_PAINT messages before the RedrawWindow returns, if necessary. + + + + Causes the affected windows, which you specify by setting the RDW_ALLCHILDREN and RDW_NOCHILDREN values, to receive WM_ERASEBKGND messages before RedrawWindow returns, if necessary. + The affected windows receive WM_PAINT messages at the ordinary time. + + + + + Specifies values from Msgs enumeration. + + + + + Specified WM_NULL enumeration value. + + + + + Specified WM_CREATE enumeration value. + + + + + Specified WM_DESTROY enumeration value. + + + + + Specified WM_MOVE enumeration value. + + + + + Specified WM_SIZE enumeration value. + + + + + Specified WM_ACTIVATE enumeration value. + + + + + Specified WM_SETFOCUS enumeration value. + + + + + Specified WM_KILLFOCUS enumeration value. + + + + + Specified WM_ENABLE enumeration value. + + + + + Specified WM_SETREDRAW enumeration value. + + + + + Specified WM_SETTEXT enumeration value. + + + + + Specified WM_GETTEXT enumeration value. + + + + + Specified WM_GETTEXTLENGTH enumeration value. + + + + + Specified WM_PAINT enumeration value. + + + + + Specified WM_CLOSE enumeration value. + + + + + Specified WM_QUERYENDSESSION enumeration value. + + + + + Specified WM_QUIT enumeration value. + + + + + Specified WM_QUERYOPEN enumeration value. + + + + + Specified WM_ERASEBKGND enumeration value. + + + + + Specified WM_SYSCOLORCHANGE enumeration value. + + + + + Specified WM_ENDSESSION enumeration value. + + + + + Specified WM_SHOWWINDOW enumeration value. + + + + + Specified WM_WININICHANGE enumeration value. + + + + + Specified WM_SETTINGCHANGE enumeration value. + + + + + Specified WM_DEVMODECHANGE enumeration value. + + + + + Specified WM_ACTIVATEAPP enumeration value. + + + + + Specified WM_FONTCHANGE enumeration value. + + + + + Specified WM_TIMECHANGE enumeration value. + + + + + Specified WM_CANCELMODE enumeration value. + + + + + Specified WM_SETCURSOR enumeration value. + + + + + Specified WM_MOUSEACTIVATE enumeration value. + + + + + Specified WM_CHILDACTIVATE enumeration value. + + + + + Specified WM_QUEUESYNC enumeration value. + + + + + Specified WM_GETMINMAXINFO enumeration value. + + + + + Specified WM_PAINTICON enumeration value. + + + + + Specified WM_ICONERASEBKGND enumeration value. + + + + + Specified WM_NEXTDLGCTL enumeration value. + + + + + Specified WM_SPOOLERSTATUS enumeration value. + + + + + Specified WM_DRAWITEM enumeration value. + + + + + Specified WM_MEASUREITEM enumeration value. + + + + + Specified WM_DELETEITEM enumeration value. + + + + + Specified WM_VKEYTOITEM enumeration value. + + + + + Specified WM_CHARTOITEM enumeration value. + + + + + Specified WM_SETFONT enumeration value. + + + + + Specified WM_GETFONT enumeration value. + + + + + Specified WM_SETHOTKEY enumeration value. + + + + + Specified WM_GETHOTKEY enumeration value. + + + + + Specified WM_QUERYDRAGICON enumeration value. + + + + + Specified WM_COMPAREITEM enumeration value. + + + + + Specified WM_GETOBJECT enumeration value. + + + + + Specified WM_COMPACTING enumeration value. + + + + + Specified WM_COMMNOTIFY enumeration value. + + + + + Specified WM_WINDOWPOSCHANGING enumeration value. + + + + + Specified WM_WINDOWPOSCHANGED enumeration value. + + + + + Specified WM_POWER enumeration value. + + + + + Specified WM_COPYDATA enumeration value. + + + + + Specified WM_CANCELJOURNAL enumeration value. + + + + + Specified WM_NOTIFY enumeration value. + + + + + Specified WM_INPUTLANGCHANGEREQUEST enumeration value. + + + + + Specified WM_INPUTLANGCHANGE enumeration value. + + + + + Specified WM_TCARD enumeration value. + + + + + Specified WM_HELP enumeration value. + + + + + Specified WM_USERCHANGED enumeration value. + + + + + Specified WM_NOTIFYFORMAT enumeration value. + + + + + Specified WM_CONTEXTMENU enumeration value. + + + + + Specified WM_STYLECHANGING enumeration value. + + + + + Specified WM_STYLECHANGED enumeration value. + + + + + Specified WM_DISPLAYCHANGE enumeration value. + + + + + Specified WM_GETICON enumeration value. + + + + + Specified WM_SETICON enumeration value. + + + + + Specified WM_NCCREATE enumeration value. + + + + + Specified VK_RMENU enumeration value. + + + + + Specified WM_NCCALCSIZE enumeration value. + + + + + Specified WM_NCHITTEST enumeration value. + + + + + Specified WM_NCPAINT enumeration value. + + + + + Specified WM_NCACTIVATE enumeration value. + + + + + Specified WM_GETDLGCODE enumeration value. + + + + + Specified WM_SYNCPAINT enumeration value. + + + + + Specified WM_NCMOUSEMOVE enumeration value. + + + + + Specified WM_NCLBUTTONDOWN enumeration value. + + + + + Specified WM_NCLBUTTONUP enumeration value. + + + + + Specified WM_NCLBUTTONDBLCLK enumeration value. + + + + + Specified WM_NCRBUTTONDOWN enumeration value. + + + + + Specified WM_NCRBUTTONUP enumeration value. + + + + + Specified WM_NCRBUTTONDBLCLK enumeration value. + + + + + Specified WM_NCMBUTTONDOWN enumeration value. + + + + + Specified WM_NCMBUTTONUP enumeration value. + + + + + Specified WM_NCMBUTTONDBLCLK enumeration value. + + + + + Specified WM_NCXBUTTONDOWN enumeration value. + + + + + Specified WM_NCXBUTTONUP enumeration value. + + + + + Specified WM_KEYDOWN enumeration value. + + + + + Specified WM_KEYUP enumeration value. + + + + + Specified WM_CHAR enumeration value. + + + + + Specified WM_DEADCHAR enumeration value. + + + + + Specified WM_SYSKEYDOWN enumeration value. + + + + + Specified WM_SYSKEYUP enumeration value. + + + + + Specified WM_SYSCHAR enumeration value. + + + + + Specified WM_SYSDEADCHAR enumeration value. + + + + + Specified WM_KEYLAST enumeration value. + + + + + Specified WM_IME_STARTCOMPOSITION enumeration value. + + + + + Specified WM_IME_ENDCOMPOSITION enumeration value. + + + + + Specified WM_IME_COMPOSITION enumeration value. + + + + + Specified WM_IME_KEYLAST enumeration value. + + + + + Specified WM_INITDIALOG enumeration value. + + + + + Specified WM_COMMAND enumeration value. + + + + + Specified WM_SYSCOMMAND enumeration value. + + + + + Specified WM_TIMER enumeration value. + + + + + Specified WM_HSCROLL enumeration value. + + + + + Specified WM_VSCROLL enumeration value. + + + + + Specified WM_INITMENU enumeration value. + + + + + Specified WM_INITMENUPOPUP enumeration value. + + + + + Specified WM_MENUSELECT enumeration value. + + + + + Specified WM_MENUCHAR enumeration value. + + + + + Specified WM_ENTERIDLE enumeration value. + + + + + Specified WM_MENURBUTTONUP enumeration value. + + + + + Specified WM_MENUDRAG enumeration value. + + + + + Specified WM_MENUGETOBJECT enumeration value. + + + + + Specified WM_UNINITMENUPOPUP enumeration value. + + + + + Specified WM_MENUCOMMAND enumeration value. + + + + + Specified WM_CTLCOLORMSGBOX enumeration value. + + + + + Specified WM_CTLCOLOREDIT enumeration value. + + + + + Specified WM_CTLCOLORLISTBOX enumeration value. + + + + + Specified WM_CTLCOLORBTN enumeration value. + + + + + Specified WM_CTLCOLORDLG enumeration value. + + + + + Specified WM_CTLCOLORSCROLLBAR enumeration value. + + + + + Specified WM_CTLCOLORSTATIC enumeration value. + + + + + Specified WM_MOUSEMOVE enumeration value. + + + + + Specified WM_LBUTTONDOWN enumeration value. + + + + + Specified WM_LBUTTONUP enumeration value. + + + + + Specified WM_LBUTTONDBLCLK enumeration value. + + + + + Specified WM_RBUTTONDOWN enumeration value. + + + + + Specified WM_RBUTTONUP enumeration value. + + + + + Specified WM_RBUTTONDBLCLK enumeration value. + + + + + Specified WM_MBUTTONDOWN enumeration value. + + + + + Specified WM_MBUTTONUP enumeration value. + + + + + Specified WM_MBUTTONDBLCLK enumeration value. + + + + + Specified WM_MOUSEWHEEL enumeration value. + + + + + Specified WM_XBUTTONDOWN enumeration value. + + + + + Specified WM_XBUTTONUP enumeration value. + + + + + Specified WM_XBUTTONDBLCLK enumeration value. + + + + + Specified WM_PARENTNOTIFY enumeration value. + + + + + Specified WM_ENTERMENULOOP enumeration value. + + + + + Specified WM_EXITMENULOOP enumeration value. + + + + + Specified WM_NEXTMENU enumeration value. + + + + + Specified WM_SIZING enumeration value. + + + + + Specified WM_CAPTURECHANGED enumeration value. + + + + + Specified WM_MOVING enumeration value. + + + + + Specified WM_DEVICECHANGE enumeration value. + + + + + Specified WM_MDICREATE enumeration value. + + + + + Specified WM_MDIDESTROY enumeration value. + + + + + Specified WM_MDIACTIVATE enumeration value. + + + + + Specified WM_MDIRESTORE enumeration value. + + + + + Specified WM_MDINEXT enumeration value. + + + + + Specified WM_MDIMAXIMIZE enumeration value. + + + + + Specified WM_MDITILE enumeration value. + + + + + Specified WM_MDICASCADE enumeration value. + + + + + Specified WM_MDIICONARRANGE enumeration value. + + + + + Specified WM_MDIGETACTIVE enumeration value. + + + + + Specified WM_MDISETMENU enumeration value. + + + + + Specified WM_ENTERSIZEMOVE enumeration value. + + + + + Specified WM_EXITSIZEMOVE enumeration value. + + + + + Specified WM_DROPFILES enumeration value. + + + + + Specified WM_MDIREFRESHMENU enumeration value. + + + + + Specified WM_IME_SETCONTEXT enumeration value. + + + + + Specified WM_IME_NOTIFY enumeration value. + + + + + Specified WM_IME_CONTROL enumeration value. + + + + + Specified WM_IME_COMPOSITIONFULL enumeration value. + + + + + Specified WM_IME_SELECT enumeration value. + + + + + Specified WM_IME_CHAR enumeration value. + + + + + Specified WM_IME_REQUEST enumeration value. + + + + + Specified WM_IME_KEYDOWN enumeration value. + + + + + Specified WM_IME_KEYUP enumeration value. + + + + + Specified WM_MOUSEHOVER enumeration value. + + + + + Specified WM_UNDO enumeration value. + + + + + Specified WM_RENDERFORMAT enumeration value. + + + + + Specified WM_RENDERALLFORMATS enumeration value. + + + + + Specified WM_DESTROYCLIPBOARD enumeration value. + + + + + Specified WM_DRAWCLIPBOARD enumeration value. + + + + + Specified WM_PAINTCLIPBOARD enumeration value. + + + + + Specified WM_VSCROLLCLIPBOARD enumeration value. + + + + + Specified WM_SIZECLIPBOARD enumeration value. + + + + + Specified WM_ASKCBFORMATNAME enumeration value. + + + + + Specified WM_CHANGECBCHAIN enumeration value. + + + + + Specified WM_HSCROLLCLIPBOARD enumeration value. + + + + + Specified WM_QUERYNEWPALETTE enumeration value. + + + + + Specified WM_PALETTEISCHANGING enumeration value. + + + + + Specified WM_PALETTECHANGED enumeration value. + + + + + Specified WM_HOTKEY enumeration value. + + + + + Specified WM_PRINT enumeration value. + + + + + Specified WM_PRINTCLIENT enumeration value. + + + + + Specified WM_HANDHELDFIRST enumeration value. + + + + + Specified WM_HANDHELDLAST enumeration value. + + + + + Specified WM_AFXFIRST enumeration value. + + + + + Specified WM_AFXLAST enumeration value. + + + + + Specified WM_PENWINFIRST enumeration value. + + + + + Specified WM_PENWINLAST enumeration value. + + + + + Specified WM_APP enumeration value. + + + + + Specified WM_USER enumeration value. + + + + + Specified WM_REFLECT enumeration value. + + + + + Specified WM_THEMECHANGED enumeration value. + + + + + The GetParent function retrieves a handle to the specified window's parent or owner. + + Handle to the window whose parent window handle is to be retrieved. + If the window is a child window, the return value is a handle to the parent window. If the window is a top-level window, the return value is a handle to the owner window. If the window is a top-level unowned window or if the function fails, the return value is NULL. + + + + The FindWindowEx function retrieves a handle to a window whose class name and window name match the specified strings. The function searches child windows, beginning with the one following the specified child window. + + Handle to the parent window whose child windows are to be searched. + Handle to a child window. + Specifies class name. + Pointer to a null-terminated string that specifies the window name (the window's title). + If the function succeeds, the return value is a handle to the window that has the specified class and window names.If the function fails, the return value is NULL. + + + + The InvalidateRect function adds a rectangle to the specified window's update region. + + Handle to window. + Rectangle coordinates. + Erase state. + If the function succeeds, the return value is true.If the function fails, the return value is false. + + + + The ValidateRect function validates the client area within a rectangle by removing the rectangle from the update region of the specified window. + + Handle to window. + Validation rectangle coordinates. + If the function succeeds, the return value is true.If the function fails, the return value is false. + + + + Changes the size, position, and Z order of a child, pop-up, or top-level window. + These windows are ordered according to their appearance on the screen. + The topmost window receives the highest rank and is the first window in the Z order. + + A handle to the window. + A handle to the window to precede the positioned window in the Z order. This parameter must be a window handle or one of the following values. + Specifies the new position of the left side of the window, in client coordinates. + Specifies the new position of the top of the window, in client coordinates. + Specifies the new width of the window, in pixels. + Specifies the new height of the window, in pixels. + Specifies the window sizing and positioning flags. This parameter can be a combination of the following values. + If the function succeeds, the return value is nonzero, if the function fails, the return value is zero. + + + + + + + + + 关键词 + + + + + 密码 + + + + + 权限用户id + + + + + + + + + + + + + 返回关键词 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 树形控件,用于分类用 + + + + + 显示在第一位的名称 + + + + + 是否显示菜单 + + + + + 树形控件 + + + + + 判断指定节点是否是目标节点的子节点 + + + + + + + + + 判断当前节点,当前用户是否有权限访问 + + + + + + + + + 权限事件 + + + + + + + + 选择权限用户时发生 + + + + + 数据变化时发生 + + + + + 数据变化前发生 + + + + + 操作事件 + + + + + + + 在添加分组前发生 + + + + + 在修改分组前发生 + + + + + 在删除分组前发生 + + + + + 在设置密码前发生 + + + + + 在设置权限前发生 + + + + + 获取新的关键词分类 + + + + + + 根据id获取节点 + + + + + + + 根据节点获取节点信息 + + + + + + + 设置节点信息 + + + + + + + 设置节点关键词和密码 + + + + + + + + 设置节点密码 + + + + + + + 设置节点关键词 + + + + + + + 设置节点用户 + + + + + + + RecursionTreeControl:表示将XML文件的内容显示在TreeView控件中 + + 将要加载的XML文件中的节点元素 + 将要加载的XML文件中的节点集合 + + + + 把XML文本载入到列表中 + + + + + + 把XML文件载入到列表中 + + + + + + 将列表保存为xml文本 + + + + + + 改变所有子节点的状态 + + + + + + + 反选子节点 + + + + + + 根据关键词来选中列表 + + + + + + 根据关键词来选中列表 + + + + + + 格式化关键字(会去除重复项),以便存入数据库 + + + + + + + 去除掉重复项 + + + + + + + 获取当前选中项以及所有父项的关键词组合 + + + + + + 获取选中的 + + + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要 + 使用代码编辑器修改此方法的内容。 + + + + + + + + + + 是否为添加 + + + + + 选择的文本 + + + + + 选择的Tag + + + + + 选择的图片序号 + + + + + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + + + + + + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + + + + + + + + + + + 旧密码 + + + + + 新密码 + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + + + + + + + + + + + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + 颜色标签 + + + + + 行间距 + + + + + 颜色标签 + + + + + 更新 + + + + + 字体高度 + + + + + 控件高 + + + + + 控件文本 + + + + + 获取过滤掉颜色的字 + + + + + + + 改变字体 + + + + + + + + + + + + + + 分页控件 + + + + + 首页文本 + + + + + 上一页文本 + + + + + 下一页文本 + + + + + 末页文本 + + + + + 跳页文本 + + + + + 页面信息文本 + + + + + 存储SQL参数 + + + + + 最后一页的页码 + + + + + 在发生页码变化时激发 + + + + + 在发生页码变化前激发 + + + + + 设置/返回每页显示的量大小 + + + + + 设置/返回记录总数 + + + + + 设置/返回分页SQL语句,{pagecount}表示页数,{recordcount}表示记录总数,{pagesize}表示页面大小, + {pageindex}表示当前页数,{recordnum}表示当前页记录数,{pageendnum}表示当前页最后一条记录的记录数 + + + + + 设置/返回当{recordnum}小于等于0时的分页SQL语句(比如第一页),如果为空,则默认使用SQLText值。{pagecount}表示页数, + {recordcount}表示记录总数,{pagesize}表示页面大小,{pageindex}表示当前页数,{recordnum}表示当前页记录数,{pageendnum}表示当前页最后一条记录的记录数 + + + + + 获取当前页码 + + + + + + 设置分页语句为MSSQL分页语句 + + 表名 + 条件判断sql语句,注意不包含where,以及不包含排序语句;,如果不存在条件判断语句,请为空 + 排序语句,必须包含Order By;,如果不存在排序语句,请为空 + + + + + 获取MSSQL数据库指定条件的记录总数 + + 表名 + 条件判断sql语句,注意不包含where,以及不包含排序语句;,如果不存在条件判断语句,请为空 + 排序语句,必须包含Order By;,如果不存在排序语句,请为空 + + + + + 设置分页语句为SQLite分页语句 + + 表名 + 条件判断sql语句,注意不包含where,可包含order by,如果不存在条件判断语句,请为空 + + + + + 获取SQLite数据库指定条件的记录总数 + + 表名 + 条件判断sql语句,注意不包含where,可包含order by,如果不存在条件判断语句,请为空 + + + + + 返回分页SQL语句 + + + + + 分页控件 + + + + + 设置当前页为指定页 + + + + + + 下一页 + + + + + 上一页 + + + + + 末页 + + + + + 首页 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要 + 使用代码编辑器修改此方法的内容。 + + + + + 自动排列控件 + + + + + 最大列数 + + + + + 开始排列的坐标 + + + + + 下一项的位置 + + + + + 下一项的右下角坐标 + + + + + 竖向间隔像素 + + + + + 横向间隔像素 + + + + + 最小保留右边距,只对ReDraw2有效 + + + + + 自动排列控件构造函数 + + + + + + 自动排列控件构造函数 + + + + + + + + 开始排列控件 + + + + + 开始排列控件,当列数超过显示空间时,自动换行 + + + + + 加入的控件列表 + + + + + 初始化添加,自动将容器设置为滚动条自动显示 + + + + + + 添加控件 + + + + + + + 删除控件 + + + + + + 删除控件 + + + + + + 清空所有控件 + + + + + An object list displays 'aspects' of a collection of objects in a listview control. + + + + The intelligence for this control is in the columns. OLVColumns are + extended so they understand how to fetch an 'aspect' from each row + object. They also understand how to sort by their aspect, and + how to group them. + + + Aspects are extracted by giving the name of a method to be called or a + property to be fetched. These names can be simple names or they can be dotted + to chain property access e.g. "Owner.Address.Postcode". + Aspects can also be extracted by installing a delegate. + + + Sorting by column clicking and grouping by column are handled automatically. + + + Right clicking on the column header should present a popup menu that allows the user to + choose which columns will be visible in the list. This behaviour can be disabled by + setting SelectColumnsOnRightClick to false. + + + This list puts sort indicators in the column headers to show the column sorting direction. + On Windows XP and later, the system standard images are used. + If you wish to replace the standard images with your own images, put entries in the small image list + with the key values "sort-indicator-up" and "sort-indicator-down". + + + For these classes to build correctly, the project must have references to these assemblies: + + System.Data + System.Design + System.Drawing + System.Windows.Forms (obviously) + + + + + + + Create an ObjectListView + + + + + Get or set all the columns that this control knows about. + Only those columns where IsVisible is true will be seen by the user. + + If you want to add new columns programmatically, add them to + AllColumns and then call RebuildColumns(). Normally, you do not have to + deal with this property directly. Just use the IDE. + + + + If every second row has a background different to the control, what color should it be? + + + + + Return the alternate row background color that has been set, or the default color + + + + + This property forces the ObjectListView to always group items by the given column. + + + + + If AlwaysGroupByColumn is not null, this property will be used to decide how + those groups are sorted. If this property has the value SortOrder.None, then + the sort order will toggle according to the users last header click. + + + + + Give access to the image list that is actually being used by the control + + + + + How does a user indicate that they want to edit cells? + + + + + This list cannot be edited. F2 does nothing. + + + + + A single click on a subitem will edit the value. Single clicking the primary column, + selects the row just like normal. The user must press F2 to edit the primary column. + + + + + Double clicking a subitem or the primary column will edit that cell. + F2 will edit the primary column. + + + + + Pressing F2 is the only way to edit the cells. Once the primary column is being edited, + the other cells in the row can be edited by pressing Tab. + + + + + How does the user indicate that they want to edit a cell? + None means that the listview cannot be edited. + + Columns can also be marked as editable. + + + + Return the model object of the row that is checked or null if no row is checked + or more than one row is checked + + + + + Get or set the collection of model objects that are checked. + When setting this property, any row whose model object isn't + in the given collection will be unchecked. Setting to null is + equivilent to unchecking all. + + + + This property returns a simple collection. Changes made to the returned + collection do NOT affect the list. This is different to the behaviour of + CheckedIndicies collection. + + + The CheckedItems property is not helpful. It is just a short-hand for + iterating through the list looking for items that are checked. + + + The performance of this method is O(n). Be careful on long lists. + + + + + + Get/set the list of columns that should be used when the list switches to tile view. + + If no list of columns has been installed, this value will default to the + first column plus any column where IsTileViewColumn is true. + + + + Return the visible columns in the order they are displayed to the user + + + + + If there are no items in this list view, what message should be drawn onto the control? + + + + + What font should the 'list empty' message be drawn in? + + + + + Return the font for the 'list empty' message or a default + + + + + Get or set whether or not the listview is frozen. When the listview is + frozen, it will not update itself. + + The Frozen property is similar to the methods Freeze()/Unfreeze() + except that changes to the Frozen property do not nest. + objectListView1.Frozen = false; // unfreeze the control regardless of the number of Freeze() calls + + + + + When a group title has an item count, how should the lable be formatted? + + + The given format string can/should have two placeholders: + + {0} - the original group title + {1} - the number of items in the group + + + "{0} [{1} items]" + + + + Return this.GroupWithItemCountFormat or a reasonable default + + + + + When a group title has an item count, how should the lable be formatted if + there is only one item in the group? + + + The given format string can/should have two placeholders: + + {0} - the original group title + {1} - the number of items in the group (always 1) + + + "{0} [{1} item]" + + + + Return this.GroupWithItemCountSingularFormat or a reasonable default + + + + + Does this listview have a message that should be drawn when the list is empty? + + + + + What color should be used for the background of selected rows? + + Windows does not give the option of changing the selection background. + So this color is only used when control is owner drawn and when columns have a + renderer installed -- a basic new BaseRenderer() will suffice. + + + + Return the color should be used for the background of selected rows or a reasonable default + + + + + Setup the list so it will draw selected rows using custom colours. + + + This method makes the list owner drawn, and ensures that all columns have at + least a BaseRender installed. + + + + + What color should be used for the foreground of selected rows? + + Windows does not give the option of changing the selection foreground (text color). + So this color is only used when control is owner drawn and when columns have a + renderer installed -- a basic new BaseRenderer() will suffice. + + + + Return the color should be used for the foreground of selected rows or a reasonable default + + + + + Return true if a cell edit operation is currently happening + + + + + Get/set the collection of objects that this list will show + + The contents of the control will be updated immediately after setting this property + + + + Take ownership of the 'objects' collection. This separats our collection from the source. + + + + This method + separates the 'objects' instance variable from its source, so that any AddObject/RemoveObject + calls will modify our collection and not the original colleciton. + + + This method has the intentional side-effect of converting our list of objects to an ArrayList. + + + + + + Specify the height of each row in the control in pixels. + + The row height in a listview is normally determined by the font size and the small image list size. + This setting allows that calculation to be overridden (within reason: you still cannot set the line height to be + less than the line height of the font used in the control). + Setting it to -1 means use the normal calculation method. + This feature is experiemental! Strange things may happen to your program, + your spouse or your pet if you use it. + + + + + Get/set the column that will be used to resolve comparisons that are equal when sorting. + + There is no user interface for this setting. It must be set programmatically. + The default is the first column. + + + + When the SecondarySortColumn is used, in what order will it compare results? + + + + + When the user right clicks on the column headers, should a menu be presented which will allow + them to choose which columns will be shown in the view? + + + + + When the column select menu is open, should it stay open after an item is selected? + Staying open allows the user to turn more than one column on or off at a time. + + + + + Return the index of the row that is currently selected. If no row is selected, + or more than one is selected, return -1. + + + + + Get the ListViewItem that is currently selected . If no row is selected, or more than one is selected, return null. + + + + + Get the model object from the currently selected row. If no row is selected, or more than one is selected, return null. + Select the row that is displaying the given model object. All other rows are deselected. + + + + + Get the model objects from the currently selected rows. If no row is selected, the returned List will be empty. + When setting this value, select the rows that is displaying the given model objects. All other rows are deselected. + + + + + Should the list view show a bitmap in the column header to show the sort direction? + + + The only reason for not wanting to have sort indicators is that, on pre-XP versions of + Windows, having sort indicators required the ListView to have a small image list, and + as soon as you give a ListView a SmallImageList, the text of column 0 is bumped 16 + pixels to the right, even if you never used an image. + + + + + Should the list view show images on subitems? + + + Under Windows, this works by sending messages to the underlying + Windows control. To make this work under Mono, we would have to owner drawing the items :-( + + + + This property controls whether group labels will be suffixed with a count of items. + + + The format of the suffix is controlled by GroupWithItemCountFormat/GroupWithItemCountSingularFormat properties + + + + + Override the SmallImageList property so we can correctly shadow its operations. + + If you use the RowHeight property to specify the row height, the SmallImageList + must be fully initialised before setting/changing the RowHeight. If you add new images to the image + list after setting the RowHeight, you must assign the imagelist to the control again. Something as simple + as this will work: + listView1.SmallImageList = listView1.SmallImageList; + + + + + When the listview is grouped, should the items be sorted by the primary column? + If this is false, the items will be sorted by the same column as they are grouped. + + + + + When resizing a column by dragging its divider, should any space filling columns be + resized at each mouse move? If this is false, the filling columns will be + updated when the mouse is released. + + + I think that this looks very ugly, but it does give more immediate feedback. + It looks ugly because every + column to the right of the divider being dragged gets updated twice: once when + the column be resized changes size (this moves + all the columns slightly to the right); then again when the filling columns are updated, but they will be shrunk + so that the combined width is not more than the control, so everything jumps slightly back to the left again. + + + + + Should the list give a different background color to every second row? + + The color of the alternate rows is given by AlternateRowBackColor. + There is a "feature" in .NET for listviews in non-full-row-select mode, where + selected rows are not drawn with their correct background color. + + + + Get/set the style of view that this listview is using + + Switching to tile or details view installs the columns appropriate to that view. + Confusingly, in tile view, every column is shown as a row of information. + + + + This delegate can be used to sort the table in a custom fasion. + + + + What the delegate has to do depends on the type of ObjectListView it is sorting: + + + + If it is sorting a normal ObjectListView, the delegate must install a ListViewItemSorter on the ObjectListView. This install ItemSorter will actually do the work of sorting the ListViewItems. See ColumnComparer in the code for an example of what an ItemSorter has to do. + + + If the delegate is sorting a VirtualObjectListView or a FastObjectListView, the delegate must sort the model objects that are sourcing the list (remember, in a virtual list, the application holds the model objects and the list just askes for them as it needs them). + + + + + + + This delegate can be used to format a OLVListItem before it is added to the control. + + + The model object for the row can be found through the RowObject property of the OLVListItem object. + All subitems normally have the same style as list item, so setting the forecolor on one + subitem changes the forecolor of all subitems. + To allow subitems to have different attributes, do this:myListViewItem.UseItemStyleForSubItems = false;. + + If UseAlternatingBackColors is true, the backcolor of the listitem will be calculated + by the control and cannot be controlled by the RowFormatter delegate. In general, trying to use a RowFormatter + when UseAlternatingBackColors is true does not work well. + + + + This delegate will be called whenever the ObjectListView needs to know the check state + of the row associated with a given model object + + + + + This delegate will be called whenever the user tries to change the check state + of a row. The delegate should return the value that the listview should actuall + use, which may be different to the one given to the delegate. + + + + + Set the collection of objects that will be shown in this list view. + + This method can safely be called from background threads. + The list is updated immediately + The objects to be displayed + + + + Add the given model object to this control. + + The model object to be displayed + See AddObjects() for more details + + + + Add the given collection of model objects to this control. + + A collection of model objects + + The added objects will appear in their correct sort position, if sorting + is active. Otherwise, they will appear at the end of the list. + No check is performed to see if any of the objects are already in the ListView. + The method uses the ObjectsAsList property. See that property for a + description of what is does. + Null objects are silently ignored. + + + + + Remove the given model object from the ListView + + The model to be removed + See RemoveObjects() for more details + + + + Remove all of the given objects from the control + + Collection of objects to be removed + + Nulls and model objects that are not in the ListView are silently ignored. + + + + + Update the list to reflect the contents of the given collection, without affecting + the scrolling position, selection or sort order. + + The objects to be displayed + + This method is about twice as slow as SetObjects(). + This method is experimental -- it may disappear in later versions of the code. + There has to be a better way to do this! JPP 15/1/2008 + In most situations, if you need this functionality, use a FastObjectListView instead. JPP 2/2/2008 + + + + + Remove all items from this list + + This method can safely be called from background threads. + + + + Build/rebuild all the list view items in the list + + + + + Build/rebuild all the list view items in the list + + If this is true, the control will try to preserve the selection + and the scroll position (see Remarks) + + + + Use this method in situations were the contents of the list is basically the same + as previously. + + + Due to limitations in .NET's ListView, the scroll position is only preserved if + the control is in Details view AND it is not showing groups. + + + + + + Get or set the index of the top item of this listview + + + + This property only works when the listview is in Details view and not showing groups. + + + The reason that it does not work when showing groups is that, when groups are enabled, + the Windows message LVM_GETTOPINDEX always returns 0, regardless of the + scroll position. + + + + + + Sort the items by the last sort column + + + + + Organise the view items into groups, based on the last sort column or the first column + if there is no last sort column + + + + + Organise the view items into groups, based on the given column + + If the AlwaysGroupByColumn property is not null, + the list view items will be organisd by that column, + and the 'column' parameter will be ignored. + The column whose values should be used for sorting. + + + + Pause (or unpause) all animations in the list + + true to pause, false to unpause + + + + Give the listview a reasonable size of its tiles, based on the number of lines of + information that each tile is going to display. + + + + + Rebuild this list for the given view + + + + + + Rebuild the columns based upon its current view and column visibility settings + + + + + Copy a text and html representation of the selected rows onto the clipboard. + + Be careful when using this with virtual lists. If the user has selected + 10,000,000 rows, this method will faithfully try to copy all of them to the clipboard. + From the user's point of view, your program will appear to have hung. + + + + Copy a text and html representation of the given objects onto the clipboard. + + + + + Convert the fragment of HTML into the Clipboards HTML format. + + The HTML format is found here http://msdn2.microsoft.com/en-us/library/aa767917.aspx + + The HTML to put onto the clipboard. It must be valid HTML! + A string that can be put onto the clipboard and will be recognized as HTML + + + + Return a byte array that represents the current state of the ObjectListView, such + that the state can be restored by RestoreState() + + + The state of an ObjectListView includes the attributes that the user can modify: + + current view (i.e. Details, Tile, Large Icon...) + sort column and direction + column order + column widths + column visibility + + + + It does not include selection or the scroll position. + + + A byte array representing the state of the ObjectListView + + + + Restore the state of the control from the given string, which must have been + produced by SaveState() + + A byte array returned from SaveState() + Returns true if the state was restored + + + + Instances of this class are used to store the state of an ObjectListView. + + + + + Event handler for the column click event + + + + + Handle when a user checks/unchecks a row + + + + + Override the basic message pump for this control + + + + + + Perform any steps needed before painting the control + + + + + Perform any steps needed after painting the control + + + + + When the control is created capture the messages for the header. + + + + + Class used to capture window messages for the header of the list view + control. + + We only need this class in order to not change the cursor + when the cursor is over the divider of a fixed width column. It + really is a little too perfectionist even for me. + + + + Return the Windows handle behind this control + + + When an ObjectListView is initialized as part of a UserControl, the + GetHeaderControl() method returns 0 until the UserControl is + completely initialized. So the AssignHandle() call in the constructor + doesn't work. So we override the Handle property so value is always + current. + + + + + Return the index of the column under the current cursor position, + or -1 if the cursor is not over a column + + Index of the column under the cursor, or -1 + + + + The user wants to see the context menu. + + The windows message + A bool indicating if this message has been handled + + We want to ignore context menu requests that are triggered by right clicks on the header + + + + + In the notification messages, we handle attempts to change the width of our columns + + The msg to be processed + bool to indicate if the msg has been handled + + + + The user has right clicked on the column headers. Do whatever is required + + Return true if this event has been handle + + + + The user has right clicked on the column headers. Do whatever is required + + Return true if this event has been handle + + + + Tell the world when a cell is about to finish being edited. + + + + + The callbacks for RightColumnClick events + + + + + Triggered when a column header is right clicked. + + + + + Show a popup menu at the given point which will allow the user to choose which columns + are visible on this listview + + Where should the menu be placed + + + + Append the column selection menu items to the given menu strip. + + The menu to which the items will be added. If this is null, a new + ContextMenuStrip will be created + Return the menu to which the items were added + + + + Override the OnColumnReordered method to do what we want + + + + + + Resize our space filling columns so they fill any unoccupied width in the control + + + + + Change the given item from the old check value to a new one + + The item to be change + The old value of the check + The new value of the check + + + + Change the given item from the old check value to a new one + + The item to be change + The old value of the check + The new value of the check + + + + Return true of the given object is checked + + The model object whose checkedness is returned + Is the given object checked? + If the given object is not in the list, this method returns false. + + + + Return the OLVListItem that displays the given model object + + The modelObject whose item is to be found + The OLVListItem that displays the model, or null + This method has O(n) performance. + + + + Toggle the checkedness of the given object + + The model object to be checked + + + + Mark the given object as checked in the list + + The model object to be checked + + + + Mark the given object as unchecked in the list + + The model object to be unchecked + + + + Return the column at the given index + + Index of the column to be returned + An OLVColumn + + + + Return the column at the given title. + + Name of the column to be returned + An OLVColumn + + + + Return the number of items in the list + + the number of items in the list + + + + Return the item at the given index + + Index of the item to be returned + An OLVListItem + + + + Return the model object at the given index + + Index of the model object to be returned + A model object + + + + Find the item and column that are under the given co-ords + + X co-ord + Y co-ord + The column under the given point + The item under the given point. Can be null. + + + + Select all rows in the listview + + + + + Deselect all rows in the listview + + + + + Return the model object of the row that is selected or null if there is no selection or more than one selection + + Model object or null + + + + Return the model objects of the rows that are selected or an empty collection if there is no selection + + ArrayList + + + + Return the model object of the row that is checked or null if no row is checked + or more than one row is checked + + Model object or null + Use CheckedObject property instead of this method + + + + Get the collection of model objects that are checked. + + Use CheckedObjects property instead of this method + + + + Select the row that is displaying the given model object. All other rows are deselected. + + The object to be selected or null to deselect all + + + + Select the rows that is displaying any of the given model object. All other rows are deselected. + + A collection of model objects + + + + Update the ListViewItem with the data from its associated model. + + This method does not resort or regroup the view. It simply updates + the displayed data of the given item + + + + Update the rows that are showing the given objects + + This method does not resort or regroup the view. + + + + Update the rows that are showing the given objects + + + This method does not resort or regroup the view. + This method can safely be called from background threads. + + + + + Update the rows that are selected + + This method does not resort or regroup the view. + + + + Find the given model object within the listview and return its index + + Technically, this method will work with virtual lists, but it will + probably be very slow. + The model object to be found + The index of the object. -1 means the object was not present + + + + Return the ListViewItem that appears immediately after the given item. + If the given item is null, the first item in the list will be returned. + Return null if the given item is the last item. + + The item that is before the item that is returned, or null + A ListViewItem + + + + Return the ListViewItem that appears immediately before the given item. + If the given item is null, the last item in the list will be returned. + Return null if the given item is the first item. + + The item that is before the item that is returned + A ListViewItem + + + + Freeze the listview so that it no longer updates itself. + + Freeze()/Unfreeze() calls nest correctly + + + + Unfreeze the listview. If this call is the outermost Unfreeze(), + the contents of the listview will be rebuilt. + + Freeze()/Unfreeze() calls nest correctly + + + + Do the actual work required when the listview is unfrozen + + + + + Sort the items in the list view by the values in the given column. + If ShowGroups is true, the rows will be grouped by the given column, + otherwise, it will be a straight sort. + + The name of the column whose values will be used for the sorting + + + + Sort the items in the list view by the values in the given column. + If ShowGroups is true, the rows will be grouped by the given column, + otherwise, it will be a straight sort. + + The index of the column whose values will be used for the sorting + + + + Sort the items in the list view by the values in the given column. + If ShowGroups is true, the rows will be grouped by the given column, + otherwise, it will be a straight sort. + + The column whose values will be used for the sorting + + + + Put a sort indicator next to the text of the sort column + + + + + Put a sort indicator next to the text of the given given column + + The column to be marked + The sort order in effect on that column + + + + The name of the image used when a column is sorted ascending + + This image is only used on pre-XP systems. System images are used for XP and later + + + + The name of the image used when a column is sorted descending + + This image is only used on pre-XP systems. System images are used for XP and later + + + + If the sort indicator images don't already exist, this method will make and install them + + + + + Fill in the given OLVListItem with values of the given row + + the OLVListItem that is to be stuff with values + the model object from which values will be taken + + + + Setup all subitem images on all rows + + + + + Tell the underlying list control which images to show against the subitems + + the index at which the item occurs + the item whose subitems are to be set + + + + Tell the underlying list control which images to show against the subitems + + the index at which the item occurs + the item whose subitems are to be set + will existing images be cleared if no new image is provided? + + + + Prepare the listview to show alternate row backcolors + + We cannot rely on lvi.Index in this method. + In a straight list, lvi.Index is the display index, and can be used to determine + whether the row should be colored. But when organised by groups, lvi.Index is not + useable because it still refers to the position in the overall list, not the display order. + + + + + For some reason, UseItemStyleForSubItems doesn't work for the colors + when owner drawing the list, so we have to specifically give each subitem + the desired colors + + The item whose subitems are to be corrected + + + + Convert the given image selector to an index into our image list. + Return -1 if that's not possible + + + Index of the image in the imageList, or -1 + + + + Make sure the ListView has the extended style that says to display subitem images. + + This method must be called after any .NET call that update the extended styles + since they seem to erase this setting. + + + + For the given item and subitem, make it display the given image + + row number (0 based) + subitem (0 is the item itself) + index into the image list + + + + Update our externally visible image list so it holds the same images as our shadow list, but sized correctly + + + + + Return a copy of the given source image list, where each image has been resized to be height x height in size. + If source is null, an empty image list of the given size is returned + + Height and width of the new images + Source of the images (can be null) + A new image list + + + + Return a bitmap of the given height x height, which shows the given image, centred. + + Height and width of new bitmap + Image to be centred + The background color + A new bitmap + + + + Owner draw the column header + + + + + + Owner draw the item + + + + + + Owner draw a single subitem + + + + + + This method is called every time a row is selected or deselected. This can be + a pain if the user shift-clicks 100 rows. We override this method so we can + trigger one event for any number of select/deselects that come from one user action + + + + + + The application is idle. Trigger a SelectionChanged event. + + + + + + + This event is triggered once per user action that changes the selection state + of one or more rows. + + + + + Trigger the SelectionChanged event + + + + + + We need the click count in the mouse up event, but that is always 1. + So we have to remember the click count from the preceding mouse down event. + + + + + + Check to see if we need to start editing a cell + + + + + + Should we start editing the cell? + + + + + + + Handle a key press on this control. We specifically look for F2 which edits the primary column, + or a Tab character during an edit operation, which tries to start editing on the next (or previous) cell. + + + + + + + Begin an edit operation on the given cell. + + This performs various sanity checks and passes off the real work to StartCellEdit(). + The row to be edited + The index of the cell to be edited + + + + Really start an edit operation on a given cell. The parameters are assumed to be sane. + + The row to be edited + The index of the cell to be edited + + + + Try to give the given value to the provided control. Fall back to assigning a string + if the value assignment fails. + + A control + The value to be given to the control + The string to be given if the value doesn't work + + + + Setup the given control to be a cell editor + + + + + Return the value that the given control is showing + + + + + + + Called when the cell editor could be about to lose focus. Time to commit the change + + + + + + + Return the bounds of the given cell + + The row to be edited + The index of the cell to be edited + A Rectangle + + + + Return a control that can be used to edit the value of the given cell. + + The row to be edited + The index of the cell to be edited + + + + + Return a TextBox that can be used as a default cell editor. + + What column does the cell belong to? + + + + + Stop editing a cell and throw away any changes. + + + + + If a cell edit is in progress, finish the edit + + Returns false if the finishing process was cancelled + (i.e. the cell editor is still on screen) + + + + Finish the cell edit operation, writing changed data back to the model object + + + + + Remove all trace of any existing cell edit operation + + + + + The callbacks for CellEditing events + + + + + Triggered when a cell is about to be edited. + + Set Cancel to true to prevent the cell being edited. + You can change the the Control to be something completely different. + + + + Triggered when a cell editor needs to be validated + + + If this event is cancelled, focus will remain on the cell editor. + + + + + Triggered when a cell is about to finish being edited. + + If Cancel is already true, the user is cancelling the edit operation. + Set Cancel to true to prevent the value from the cell being written into the model. + You cannot prevent the editing from finishing. + + + + Tell the world when a cell is about to be edited. + + + + + Tell the world when a cell is about to finish being edited. + + + + + Tell the world when a cell is about to finish being edited. + + + + + Let the world know that a cell edit operation is beginning or ending + + + + + Create an event args + + + + + + + + + + Change this to true to cancel the cell editing operation. + + + During the CellEditStarting event, setting this to true will prevent the cell from being edited. + During the CellEditFinishing event, if this value is already true, this indicates that the user has + cancelled the edit operation and that the handler should perform cleanup only. Setting this to true, + will prevent the ObjectListView from trying to write the new value into the model object. + + + + + During the CellEditStarting event, this can be modified to be the control that you want + to edit the value. You must fully configure the control before returning from the event, + including its bounds and the value it is showing. + During the CellEditFinishing event, you can use this to get the value that the user + entered and commit that value to the model. Changing the control during the finishing + event has no effect. + + + + + The column of the cell that is going to be or has been edited. + + + + + The model object of the row of the cell that is going to be or has been edited. + + + + + The listview item of the cell that is going to be or has been edited. + + + + + The index of the cell that is going to be or has been edited. + + + + + The data value of the cell before the edit operation began. + + + + + The bounds of the cell that is going to be or has been edited. + + + + + This editor simply shows and edits integer values. + + + + + This editor simply shows and edits unsigned integer values. + + + + + This editor simply shows and edits boolean values. + + You can intercept the CellEditStarting event if you want + to change the characteristics of the editor. For example, by changing + the labels to "No" and "Yes". The false value must come first. + + + + This editor simply shows and edits floating point values. + + You can intercept the CellEditStarting event if you want + to change the characteristics of the editor. For example, by increasing + the number of decimal places. + + + + This editor shows and auto completes values from the given listview column. + + + + + Return a collection of columns that are appropriate to the given view. + Only Tile and Details have columns; all other views have 0 columns. + + Which view are the columns being calculate for? + A list of columns + + + + This class works in conjunction with the OLVColumns property to allow OLVColumns + to be added to the ObjectListView. + + + + + Return Columns for this list. We hide the original so we can associate + a specialised editor with it. + + + + + Which column did we last sort by + + + + + Which direction did we last sort + + + + + Wrapper for all native method calls on ListView controls + + + + + Notify message header structure. + + + + + Make sure the ListView has the extended style that says to display subitem images. + + This method must be called after any .NET call that update the extended styles + since they seem to erase this setting. + The listview to send a message to + + + + For the given item and subitem, make it display the given image + + The listview to send a message to + row number (0 based) + subitem (0 is the item itself) + index into the image list + + + + Setup the given column of the listview to show the given image to the right of the text. + If the image index is -1, any previous image is cleared + + The listview to send a message to + Index of the column to modifiy + + Index into the small image list + + + + Does this version of the operating system have builtin sort indicators? + + Are there builtin sort indicators + XP and later have these + + + + Return the bounds of the update region on the given control. + + The BeginPaint() system call validates the update region, effectively wiping out this information. + So this call has to be made before the BeginPaint() call. + The control whose update region is be calculated + A rectangle + + + + Validate an area of the given control. A validated area will not be repainted at the next redraw. + + The control to be validated + The area of the control to be validated + + + + Select all rows on the given listview + + The listview whose items are to be selected + + + + Deselect all rows on the given listview + + The listview whose items are to be deselected + + + + Set the item state on the given item + + The listview whose item's state is to be changed + The index of the item to be changed + Which bits of the value are to be set? + The value to be set + + + + Return the handle to the header control on the given list + + The listview whose header control is to be returned + The handle to the header control + + + + Return the index of the divider under the given point. Return -1 if no divider is under the pt + + The list we are interested in + The client co-ords + The index of the divider under the point, or -1 if no divider is under that point + + + + Return the index of the column of the header that is under the given point. + Return -1 if no column is under the pt + + The list we are interested in + The client co-ords + The index of the column under the point, or -1 if no column header is under that point + + + + Get the scroll position of the given scroll bar + + + + + + + + A virtual object list view operates in virtual mode, that is, it only gets model objects for + a row when it is needed. This gives it the ability to handle very large numbers of rows with + minimal resources. + + A listview is not a great user interface for a large number of items. But if you've + ever wanted to have a list with 10 million items, go ahead, knock yourself out. + Virtual lists can never iterate their contents. That would defeat the whole purpose. + Given the above, grouping and sorting are not possible on virtual lists. But if the backing data store has + a sorting mechanism, a CustomSorter can be installed which will be called when the sorting is required. + For the same reason, animate GIFs should not be used in virtual lists. Animated GIFs require some state + information to be stored for each animation, but virtual lists specifically do not keep any state information. + You really do not want to keep state information for 10 million animations! + + + + + Create a VirtualObjectListView + + + + + This delegate is used to fetch a rowObject, given it's index within the list + + + + + Return the number of items in the list + + the number of items in the list + + + + Return the item at the given index + + Index of the item to be returned + An OLVListItem + + + + Return the model object at the given index + + Index of the model object to be returned + A model object + + + + Remove all items from this list + + This method can safely be called from background threads. + + + + Select the row that is displaying the given model object. + This does nothing in virtual lists. + + This is a no-op for virtual lists, since there is no way to map the model + object back to the ListViewItem that represents it. + The object that gave data + + + + Select the rows that is displaying any of the given model object. + This does nothing in virtual lists. + + This is a no-op for virtual lists, since there is no way to map the model + objects back to the ListViewItem that represents them. + A collection of model objects + + + + Update the rows that are showing the given objects + + This is a no-op for virtual lists, since there is no way to map the model + objects back to the ListViewItem that represents them. + + + + Add the given collection of model objects to this control. + + A collection of model objects + This is a no-op for virtual lists, since the control + does not have a list of model objects to which it can add this new one. + All model object management is done by the application. + + + + Remove all of the given objects from the control + + Collection of objects to be removed + This is a no-op for virtual lists, since the control + does not have a list of model objects from which it can remove these ones. + All model object management is done by the application. + + + + Invalidate any cached information when we rebuild the list. + + + + + Prepare the listview to show alternate row backcolors + + Alternate colored backrows can't be handle in the same way as our base class. + With virtual lists, they are handled at RetrieveVirtualItem time. + + + + Refresh the given item in the list + + The item to refresh + + + + Handle a mouse down event + + + + + + Handle a RetrieveVirtualItem + + + + + + + Create a OLVListItem for given row index + + The index of the row that is needed + An OLVListItem + + + + Return the row object for the given row index + + index of the row whose object is to be fetched + A model object or null if no delegate is installed + + + + Clear any cached info this list may have been using + + + + + A FastObjectListView trades function for speed. + + + On my mid-range laptop, this view builds a list of 10,000 objects in 0.1 seconds, + as opposed to a normal ObjectListView which takes 10-15 seconds. Lists of up to 50,000 items should be + able to be handled with sub-second response times even on low end machines. + + A FastObjectListView is implemented as a virtual list with some of the virtual modes limits (e.g. no sorting) + fixed through coding. There are some functions that simply cannot be provided. Specifically, a FastObjectListView cannot: + + shows groups + use Tile view + display images on subitems + + + You can circumvent the limit on subitem images by making the list owner drawn, and giving the column + a Renderer of BaseRenderer, e.g. myColumnWithImage.Renderer = new BaseRenderer(); + + Although it isn't documented, virtual lists cannot have checkboxes. A FastObjectListView codes around this limitation, + but you must use the functions provided by FastObjectListView. If you call the normal "CheckedItems", it will throw an + exception. If you use CheckedObjects and its friends (declared in ObjectListView), you should not have any trouble. + The only exception is the "CheckBoxes" property itself. Once this is set, trying to unset it will throw an exception, + since the list is a virtual list. + + + + + + Make a FastObjectListView + + + + + Get/set the list of objects that are shown by the control. + + + This method preserves selection, if possible. Use SetObjects() if + you do not want to preserve the selection. Preserving selection is the slowest part of this + code and performance is O(n) where n is the number of selected rows. + This method is not thread safe. + + + + + When the user types into a list, should the values in the current sort column be searched to find a match? + If this is false, the primary column will always be used regardless of the sort column. + + When this is true, the behavior is like that of ITunes. + + + + Set the collection of objects that this control will show. + + + This method can safely be called from background threads. + + + + Add the given collection of model objects to this control. + + A collection of model objects + + The added objects will appear in their correct sort position, if sorting + is active. Otherwise, they will appear at the end of the list. + No check is performed to see if any of the objects are already in the ListView. + Null objects are silently ignored. + + + + + Remove all of the given objects from the control + + Collection of objects to be removed + + Nulls and model objects that are not in the ListView are silently ignored. + + + + + Take ownership of the 'objects' collection. This separats our collection from the source. + + + + This method + separates the 'objects' instance variable from its source, so that any AddObject/RemoveObject + calls will modify our collection and not the original colleciton. + + + FastObjectListViews always own their collections, so this is a no-op. + + + + + + Event handler for the column click event + + + This differs from its base version by trying to preserve selection. The base class, + being a pure virtual list, cannot maintain selection since it cannot map a + model objects to the row that is responsible for displaying it. This class can do that. + + + + + Select the row that is displaying the given model object. + + The object that gave data + + + + Select the rows that is displaying any of the given model object. + + A collection of model objects + + + + Update the rows that are showing the given objects + + + + + Rebuild the map that remembers which model object is displayed at which line + + + + + Return the row object for the given row index + + index of the row whose object is to be fetched + A model object or null if no delegate is installed + + + + A DataListView is a ListView that can be bound to a datasource (which would normally be a DataTable or DataView). + + + This listview keeps itself in sync with its source datatable by listening for change events. + If the listview has no columns when given a data source, it will automatically create columns to show all of the datatables columns. + This will be only the simplest view of the world, and would look more interesting with a few delegates installed. + This listview will also automatically generate missing aspect getters to fetch the values from the data view. + Changing data sources is possible, but error prone. Before changing data sources, the programmer is responsible for modifying/resetting + the column collection to be valid for the new data source. + + + + + Make a DataListView + + + + + Get or set the DataSource that will be displayed in this list view. + + The DataSource should implement either , , + or . Some common examples are the following types of objects: + + + + + + + + When binding to a list container (i.e. one that implements the + interface, such as ) + you must also set the property in order + to identify which particular list you would like to display. You + may also set the property even when + DataSource refers to a list, since can + also be used to navigate relations between lists. + + + + + Gets or sets the name of the list or table in the data source for which the DataListView is displaying data. + + If the data source is not a DataSet or DataViewManager, this property has no effect + + + + Our data source has changed. Figure out how to handle the new source + + + + + Our data source has changed. Figure out how to handle the new source + + + + + The data source for this control has changed. Reconfigure the control for the new source + + + + + Create columns for the listview based on what properties are available in the data source + + + This method will not replace existing columns. + + + + + Generate aspect getters and putters for any columns that are missing them (and for which we have + enough information to actually generate a getter) + + + + + Add the given collection of model objects to this control. + + A collection of model objects + This is a no-op for data lists, since the data + is controlled by the DataSource. Manipulate the data source + rather than this view of the data source. + + + + Remove the given collection of model objects from this control. + + This is a no-op for data lists, since the data + is controlled by the DataSource. Manipulate the data source + rather than this view of the data source. + + + + What should we do when the list is unfrozen + + + + + Handles binding context changes + + The EventArgs that will be passed to any handlers + of the BindingContextChanged event. + + + + Handles parent binding context changes + + Unused EventArgs. + + + + Handle a SelectedIndexChanged event + + The event + + Called by Windows Forms when the currently selected index of the + control changes. This usually happens because the user clicked on + the control. In this case we want to notify the CurrencyManager so + that any other bound controls will remain in sync. This method will + also be called when we changed our index as a result of a + notification that originated from the CurrencyManager, and in that + case we avoid notifying the CurrencyManager back! + + + + + These delegates are used to extract an aspect from a row object + + + + + These delegates are used to put a changed value back into a model object + + + + + These delegates can be used to convert an aspect value to a display string, + instead of using the default ToString() + + + + + These delegates are used to the state of the checkbox for a row object. + + For reasons known only to someone in Microsoft, we can only set + a boolean on the ListViewItem to indicate it's "checked-ness", but when + we receive update events, we have to use a tristate CheckState. So we can + be told about an indeterminate state, but we can't set it ourselves. + + + + These delegates are used to put a changed check state back into a model object + + + + + These delegates are used to retrieve the object that is the key of the group to which the given row belongs. + + + + + These delegates are used to convert a group key into a title for the group + + + + + These delegates are used to fetch the image selector that should be used + to choose an image for this column. + + + + + These delegates are used to draw a cell + + + + + These delegates are used to fetch a row object for virtual lists + + + + + These delegates are used to format a listviewitem before it is added to the control. + + + + + These delegates are used to sort the listview in some custom fashion + + + + + An OLVColumn knows which aspect of an object it should present. + + + The column knows how to: + + extract its aspect from the row object + convert an aspect to a string + calculate the image for the row object + extract a group "key" from the row object + convert a group "key" into a title for the group + + For sorting to work correctly, aspects from the same column + must be of the same type, that is, the same aspect cannot sometimes + return strings and other times integers. + + + + + Create an OLVColumn + + + + + Initialize a column to have the given title, and show the given aspect + + The title of the column + The aspect to be shown in the column + + + + The name of the property or method that should be called to get the value to display in this column. + This is only used if a ValueGetterDelegate has not been given. + + This name can be dotted to chain references to properties or methods. + "DateOfBirth" + "Owner.HomeAddress.Postcode" + + + + This format string will be used to convert an aspect to its string representation. + + + This string is passed as the first parameter to the String.Format() method. + This is only used if ToStringDelegate has not been set. + "{0:C}" to convert a number to currency + + + + Group objects by the initial letter of the aspect of the column + + + One common pattern is to group column by the initial letter of the value for that group. + The aspect must be a string (obviously). + + + + + Get/set whether this column should be used when the view is switched to tile view. + + Column 0 is always included in tileview regardless of this setting. + Tile views do not work well with many "columns" of information, 2 or 3 works best. + + + + This delegate will be used to extract a value to be displayed in this column. + + + If this is set, AspectName is ignored. + + + + + The delegate that will be used to translate the aspect to display in this column into a string. + + If this value is set, ValueToStringFormat will be ignored. + + + + This delegate is called to get the image selector of the image that should be shown in this column. + It can return an int, string, Image or null. + + This delegate can use these return value to identify the image: + + null or -1 -- indicates no image + an int -- the int value will be used as an index into the image list + a String -- the string value will be used as a key into the image list + an Image -- the Image will be drawn directly (only in OwnerDrawn mode) + + + + + + This delegate is called to get the object that is the key for the group + to which the given row belongs. + + + + + This delegate is called to convert a group key into a title for that group. + + + + + This delegate is called when a cell needs to be drawn in OwnerDrawn mode. + + + + + Get/set the renderer that will be invoked when a cell needs to be redrawn + + + + + Remember if this aspect getter for this column was generated internally, and can therefore + be regenerated at will + + + + + When the listview is grouped by this column and group title has an item count, + how should the lable be formatted? + + + The given format string can/should have two placeholders: + + {0} - the original group title + {1} - the number of items in the group + + If this value is not set, the values from the list view will be used + + "{0} [{1} items]" + + + + Return this.GroupWithItemCountFormat or a reasonable default + + + + + When the listview is grouped by this column and a group title has an item count, + how should the lable be formatted if there is only one item in the group? + + + The given format string can/should have two placeholders: + + {0} - the original group title + {1} - the number of items in the group (always 1) + + If this value is not set, the values from the list view will be used + + "{0} [{1} item]" + + + + Return this.GroupWithItemCountSingularFormat or a reasonable default + + + + + What is the minimum width that the user can give to this column? + + -1 means there is no minimum width. Give this the same value as MaximumWidth to make a fixed width column. + + + + What is the maximum width that the user can give to this column? + + -1 means there is no maximum width. Give this the same value as MinimumWidth to make a fixed width column. + + + + Is this column a fixed width column? + + + + + What proportion of the unoccupied horizontal space in the control should be given to this column? + + + + There are situations where it would be nice if a column (normally the rightmost one) would expand as + the list view expands, so that as much of the column was visible as possible without having to scroll + horizontally (you should never, ever make your users have to scroll anything horizontally!). + + + A space filling column is resized to occupy a proportion of the unoccupied width of the listview (the + unoccupied width is the width left over once all the the non-filling columns have been given their space). + This property indicates the relative proportion of that unoccupied space that will be given to this column. + The actual value of this property is not important -- only its value relative to the value in other columns. + For example: + + + If there is only one space filling column, it will be given all the free space, regardless of the value in FreeSpaceProportion. + + + If there are two or more space filling columns and they all have the same value for FreeSpaceProportion, + they will share the free space equally. + + + If there are three space filling columns with values of 3, 2, and 1 + for FreeSpaceProportion, then the first column with occupy half the free space, the second will + occupy one-third of the free space, and the third column one-sixth of the free space. + + + + + + + + Should this column resize to fill the free space in the listview? + + + + If you want two (or more) columns to equally share the available free space, set this property to True. + If you want this column to have a larger or smaller share of the free space, you must + set the FreeSpaceProportion property explicitly. + + + Space filling columns are still governed by the MinimumWidth and MaximumWidth properties. + + /// + + + + This delegate will be used to put an edited value back into the model object. + + + This does nothing if IsEditable == false. + + + + + Can the values shown in this column be edited? + + This defaults to true, since the primary means to control the editability of a listview + is on the listview itself. Once a listview is editable, all the columns are too, unless the + programmer explicitly marks them as not editable + + + + Return the control that should be used to edit cells in this column + + + + + Can this column be seen by the user? + + After changing this value, you must call RebuildColumns() before the changes will be effected. + + + + Where was this column last positioned within the Detail view columns + + DisplayIndex is volatile. Once a column is removed from the control, + there is no way to discover where it was in the display order. This property + guards that information even when the column is not in the listview's active columns. + + + + For a given row object, return the object that is to be displayed in this column. + + The row object that is being displayed + An object, which is the aspect to be displayed + + + + For a given row object, extract the value indicated by the AspectName property of this column. + + The row object that is being displayed + An object, which is the aspect named by AspectName + + + + Update the given model object with the given value + + The model object to be updated + The value to be put into the model + + + + Update the given model object with the given value using the column's + AspectName. + + The model object to be updated + The value to be put into the model + + + + For a given row object, return the string representation of the value shown in this column. + + + For aspects that are string (e.g. aPerson.Name), the aspect and its string representation are the same. + For non-strings (e.g. aPerson.DateOfBirth), the string representation is very different. + + + + + + + Convert the aspect object to its string representation. + + + If the column has been given a ToStringDelegate, that will be used to do + the conversion, otherwise just use ToString(). Nulls are always converted + to empty strings. + + The value of the aspect that should be displayed + A string representation of the aspect + + + + For a given row object, return the image selector of the image that should displayed in this column. + + The row object that is being displayed + int or string or Image. int or string will be used as index into image list. null or -1 means no image + + + + For a given row object, return the object that is the key of the group that this row belongs to. + + The row object that is being displayed + Group key object + + + + For a given group value, return the string that should be used as the groups title. + + The group key that is being converted to a title + string + + + + Install delegates that will group the columns aspects into progressive partitions. + If an aspect is less than value[n], it will be grouped with description[n]. + If an aspect has a value greater than the last element in "values", it will be grouped + with the last element in "descriptions". + + Array of values. Values must be able to be + compared to the aspect (using IComparable) + The description for the matching value. The last element is the default description. + If there are n values, there must be n+1 descriptions. + + this.salaryColumn.MakeGroupies( + new UInt32[] { 20000, 100000 }, + new string[] { "Lowly worker", "Middle management", "Rarified elevation"}); + + + + + OLVListItems are specialized ListViewItems that know which row object they came from, + and the row index at which they are displayed, even when in group view mode. They + also know the image they should draw against themselves + + + + + Create a OLVListItem for the given row object + + + + + Create a OLVListItem for the given row object, represented by the given string and image + + + + + RowObject is the model object that is source of the data for this list item. + + + + + DisplayIndex is the index of the row where this item is displayed. For flat lists, + this is the same as ListViewItem.Index, but for grouped views, it is different. + + + + + Get or set the image that should be shown against this item + + This can be an Image, a string or an int. A string or an int will + be used as an index into the small image list. + + + + A ListViewSubItem that knows which image should be drawn against it. + + + + + Create a OLVListSubItem + + + + + Create a OLVListSubItem that shows the given string and image + + + + + Get or set the image that should be shown against this item + + This can be an Image, a string or an int. A string or an int will + be used as an index into the small image list. + + + + Return the state of the animatation of the image on this subitem. + Null means there is either no image, or it is not an animation + + + + + This comparer sort list view groups. + It does this on the basis of the values in the Tags, if we can figure out how to compare + objects of that type. Failing that, it uses a case insensitive compare on the group header. + + + + + ColumnComparer is the workhorse for all comparison between two values of a particular column. + If the column has a specific comparer, use that to compare the values. Otherwise, do + a case insensitive string compare of the string representations of the values. + + This class inherits from both IComparer and its generic counterpart + so that it can be used on untyped and typed collections. + + + + Renderers are responsible for drawing a single cell within an owner drawn ObjectListView. + + + Methods on this class are called during the DrawItem or DrawSubItemEvent. + Subclasses can tell which type of event they are handling by examining DrawItemEvent: if this + is not null, it is a DrawItem event. + Subclasses will normally override the RenderWithDefault or Render method, and use the other + methods as helper functions. + If a renderer is installed on the primary column (column 0), it will be given a chance + to draw the whole item in all views (Details, Tile, etc.). If the renderer returns true, + default processing will continue. If it returns false, no other rendering will happen. + This means that when an ObjectListView is in Details view, the renderer on column 0 + will be called twice: once to handle the DrawItem event, and then again to draw only the + first cell. Subclasses must distinguish between these two very different events (using + the "this.DrawItemEvent == null" test). + + + + + Make a simple renderer + + + + + Get/set the event that caused this renderer to be called + + + + + Get/set the event that caused this renderer to be called + + + + + Get/set the listview for which the drawing is to be done + + + + + Get or set the OLVColumn that this renderer will draw + + + + + Get or set the model object that this renderer should draw + + + + + Get or set the aspect of the model object that this renderer should draw + + + + + Get or set the listitem that this renderer will be drawing + + + + + Get or set the list subitem that this renderer will be drawing + + + + + Get the specialized OLVSubItem that this renderer is drawing + + This returns null for column 0. + + + + Cache whether or not our item is selected + + + + + Return the font to be used for text in this cell + + The font of the subitem + + + + The brush that will be used to paint the text + + + + + Should this renderer fill in the background before drawing? + + + + + Can the renderer wrap lines that do not fit completely within the cell? + + This value is currently only used when printing a list view using ListViewPrinter. + + + + When rendering multiple images, how many pixels should be between each image? + + + + + Return the string that should be drawn within this + + + + + + Return the image that should be drawn against this subitem + + An Image or null if no image should be drawn. + + + + Return the actual image that should be drawn when keyed by the given image selector. + An image selector can be: + an int, giving the index into the image list + a string, giving the image key into the image list + an Image, being the image itself + + + The value that indicates the image to be used + An Image or null + + + + Return the Color that is the background color for this item's cell + + The background color of the subitem + + + + Return the Color that is the background color for this item's text + + The background color of the subitem's text + + + + Return the color to be used for text in this cell + + The text color of the subitem + + + + Align the second rectangle with the first rectangle, + according to the alignment of the column + + The cell's bounds + The rectangle to be aligned within the bounds + An aligned rectangle + + + + Draw the given image aligned horizontally within the column. + + + Over tall images are scaled to fit. Over-wide images are + truncated. This is by design! + + Graphics context to use for drawing + Bounds of the cell + The image to be drawn + + + + Fill in the background of this cell + + Graphics context to use for drawing + Bounds of the cell + + + + The delegate that is called from the list view. This is the main entry point, but + subclasses should override Render instead of this method. + + The event that caused this redraw + The context that our drawing should be done using + The bounds of the cell within which the renderer can draw + The model object for this row + A boolean indicating whether the default process should occur + + + + Draw our data into the given rectangle using the given graphics context. + + + Subclasses should override this method. + The graphics context that should be used for drawing + The bounds of the subitem cell + Returns whether the renderering has already taken place. + If this returns false, the default processing will take over. + + + + + Draw our data into the given rectangle using the given graphics context. + + + Subclasses should override this method if they never want + to fall back on the default processing + The graphics context that should be used for drawing + The bounds of the subitem cell + + + + Draw our subitems image and text + + Graphics context to use for drawing + Bounds of the cell + + + + Draw the given text and optional image in the "normal" fashion + + Graphics context to use for drawing + Bounds of the cell + The string to be drawn + The optional image to be drawn + + + + This class maps a data value to an image that should be drawn for that value. + + It is useful for drawing data that is represented as an enum or boolean. + + + + Return a renderer that draw boolean values using the given images + + Draw this when our data value is true + Draw this when our data value is false + A Renderer + + + + Return a renderer that draw tristate boolean values using the given images + + Draw this when our data value is true + Draw this when our data value is false + Draw this when our data value is null + A Renderer + + + + Make a new empty renderer + + + + + Make a new renderer that will show the given image when the given key is the aspect value + + The data value to be matched + The image to be shown when the key is matched + + + + Make a new renderer that will show the given images when it receives the given keys + + + + + + + + + Build a renderer from the given array of keys and their matching images + + An array of key/image pairs + + + + Register the image that should be drawn when our Aspect has the data value. + + Value that the Aspect must match + An ImageSelector -- an int, string or image + + + + Render our value + + + + + + + Render an image that comes from our data source. + + The image can be sourced from: + + a byte-array (normally when the image to be shown is + stored as a value in a database) + an int, which is treated as an index into the image list + a string, which is treated first as a file name, and failing that as an index into the image list + + If an image is an animated GIF, it's state is stored in the SubItem object. + By default, the image renderer does not render animations (it begins life with animations paused). + To enable animations, you must call Unpause(). + + + + + Make an empty image renderer + + + + + Make an empty image renderer that begins life ready for animations + + + + + Draw our image + + + + + + + Translate our Aspect into an image. + + The strategy is: + If its a byte array, we treat it as an in-memory image + If it's an int, we use that as an index into our image list + If it's a string, we try to load a file by that name. If we can't, we use the string as an index into our image list. + + An image + + + + Should the animations in this renderer be paused? + + + + + Pause any animations + + + + + Unpause any animations + + + + + This is the method that is invoked by the timer. It basically switches control to the listview thread. + + not used + + + + This is the OnTimer callback, but invoked in the same thread as the creator of the ListView. + This method can use all of ListViews methods without creating a CrossThread exception. + + + + + Instances of this class kept track of the animation state of a single image. + + + + + Is the given image an animation + + The image to be tested + Is the image an animation? + + + + Create an AnimationState in a quiet state + + + + + Create an animation state for the given image, which may or may not + be an animation + + The image to be rendered + + + + Does this state represent a valid animation + + + + + Advance our images current frame and calculate when it will expire + + + + + Render our Aspect as a progress bar + + + + + Make a BarRenderer + + + + + Make a BarRenderer for the given range of data values + + + + + Make a BarRenderer using a custom bar scheme + + + + + Make a BarRenderer using a custom bar scheme + + + + + Make a BarRenderer that uses a horizontal gradient + + + + + Make a BarRenderer that uses a horizontal gradient + + + + + Should this bar be drawn in the system style + + + + + How many pixels in from our cell border will this bar be drawn + + + + + The Pen that will draw the frame surrounding this bar + + + + + The brush that will be used to fill the bar + + + + + The brush that will be used to fill the background of the bar + + + + + The first color when a gradient is used to fill the bar + + + + + The end color when a gradient is used to fill the bar + + + + + Regardless of how wide the column become the progress bar will never be wider than this + + + + + Regardless of how high the cell is the progress bar will never be taller than this + + + + + The minimum data value expected. Values less than this will given an empty bar + + + + + The maximum value for the range. Values greater than this will give a full bar + + + + + Draw this progress bar using a gradient + + + + + + + Draw our aspect + + + + + + + An ImagesRenderer draws zero or more images depending on the data returned by its Aspect. + + This renderer's Aspect must return a ICollection of ints, strings or Images, + each of which will be drawn horizontally one after the other. + + + + Draw our data value + + + + + + + A MultiImageRenderer draws the same image a number of times based on our data value + + The stars in the Rating column of iTunes is a good example of this type of renderer. + + + + Make a quiet rendererer + + + + + Make an image renderer that will draw the indicated image, at most maxImages times. + + + + + + + + + The image selector that will give the image to be drawn + + + + + What is the maximum number of images that this renderer should draw? + + + + + Values less than or equal to this will have 0 images drawn + + + + + Values greater than or equal to this will have MaxNumberImages images drawn + + + + + Draw our data value + + + + + + + A class to render a value that contains a bitwise-OR'ed collection of values. + + The type of value that holds the bit-OR'ed flag + + + + Register the given image to the given value + + When this flag is present... + ...draw this image + + + + Draw the flags + + + + + + + 鼠标的当前位置 + + + + + + + + + + + + + + + + + + + + 控件的状态。 + + + + + 正常 + + + + + 鼠标经过 + + + + + 鼠标按下 + + + + + 建立圆角路径的样式。 + + + + + 四个角都不是圆角。 + + + + + 四个角都为圆角。 + + + + + 左边两个角为圆角。 + + + + + 右边两个角为圆角。 + + + + + 上边两个角为圆角。 + + + + + 下边两个角为圆角。 + + + + + 左下角为圆角。 + + + + + 右下角为圆角。 + + + + + + + + + + 普通按钮按下事件 + + + + + 分割按钮按下事件 + + + + + + + + + + 下拉菜单与按钮的距离 + + + + + 图片高度 + + + + + 分割按钮的宽度 + + + + + 当鼠标按下时图片和文字是否产生偏移 + + + + + 是否一直显示按钮边框,设置为false则只在鼠标经过和按下时显示边框 + + + + + 当显示分割按钮时,分割按钮的箭头颜色 + + + + + 按钮的边框颜色 + + + + + 按钮内边框颜色 + + + + + 鼠标经过和按下时按钮的渐变背景颜色 + + + + + 鼠标经过和按下时按钮的渐变背景颜色 + + + + + 图片宽度 + + + + + 图片高度 + + + + + 按钮圆角样式 + + + + + 按钮圆角弧度 + + + + + 图片与文字之间的间距 + + + + + 按钮当前状态 + + + + + 鼠标当前所在位置 + + + + + 普通按钮矩形位置 + + + + + 分割按钮矩形位置 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 获取图像以及文字的位置 + + + + + + + + 画边框与背景 + + + + + 画分割按钮 + + + + + + + + + + + + 建立带有圆角样式的矩形路径 + + 用来建立路径的矩形。 + 圆角的大小 + 圆角的样式 + 是否把矩形长宽减 1,以便画出边框 + 建立的路径 + + + + This enum represents the possible browser commands + + + + + Used when no commans are available + + + + + Used in the new navigation events + + + + + The URL to navigate to + + + + + The name of the frame to navigate to + + + + + The flags when opening a new window + + + + + The pointer to ppDisp + + + + + Creates a new instance of WebBrowserExtendedNavigatingEventArgs + + Pointer to the automation object of the browser + The URL to go to + The name of the frame + The new window flags + + + + + + + + + Used in the new navigation events + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 查看源码 + + + + + 复制当前选中区 + + + + + 粘贴当前选中区 + + + + + 剪切当前选中区 + + + + + 全选 + + + + + 清除当前选中区的选中状态。 + + + + + 从当前选中区中删除全部超级链接。 + + + + + 从当前选中区中删除全部书签。 + + + + + 删除当前选中区 + + + + + 重做 + + + + + 撤销 + + + + + 从当前选中区中删除格式化标签。 + + + + + 点击节点 + + + + + + + + 点击节点 + + + + + + + + + 点击元素 + + 节点名 + 属性 + 属性值 + 等待毫秒数 + 第几个符合的元素,从1开始 + + + + 等待多时毫秒 + + + + + + Represents event information for the main form, when the command state of the active browser changes + + + + + Creates a new instance of the class + + A list of commands that are available + + + + Gets a list of commands that are available + + + + + An extended version of the control. + + + + + + + + + + + + 在页面弹出消息对话框时激发 + + + + + + + + + + + + + + + + + + + + + + 打开页面并等待页面加载完毕 + + 要打开的页面地址 + 小于等于0,则表示一直等待,否则表示等待指定秒后,如果依然没有加载完毕,就直接返回 + + + + 等待页面加载完毕 + + 小于等于0,则表示一直等待,否则表示等待指定秒后,如果依然没有加载完毕,就直接返回 + + + + 等待指定毫秒 + + 等待指定毫秒 + + + + 获取网页源代码,可以自动去除乱码 + + + + + + 加载html文本到浏览器中 + + + + + + 强制用本窗体打开新链接 + + + + + + + + + + + This method supports the .NET Framework infrastructure and is not intended to be used directly from your code. + Called by the control when the underlying ActiveX control is created. + + + + + + This method supports the .NET Framework infrastructure and is not intended to be used directly from your code. + Called by the control when the underlying ActiveX control is discarded. + + + + + Returns the automation object for the web browser + + + + + This method will be called to give you a chance to create your own event sink + + + + + Detaches the event sink + + + + + 在文档下载开始时激发 + + + + + Raises the event + + Empty + + You could start an animation or a notification that downloading is starting + + + + + 下载完成后触发 + + + Here you could start monitoring for script errors. + + + + + Raises the event + + Empty + + + + 在开始浏览新网页时激发. + + + + + 在打开新的网页窗口时激发 + + + + + Raises the event + + Thrown when BrowserExtendedNavigatingEventArgs is null + + + + Raises the event + + Thrown when BrowserExtendedNavigatingEventArgs is null + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 新窗口事件,只限Window XP SP2或以上系统支持 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Overridden + + The send to this procedure + + + + A list of all the available window messages + + + + + Raises the event + + + + + 在网页窗口关闭时激发 + + + Do not confuse this with DWebBrowserEvents2.Quit... That's something else. + + + + + Flags used by INewWindowManager::EvaluateNewWindow. + These values are taken into account in the decision of whether to display a pop-up window. + + + + + No information Present + + + + + The page is unloading. This flag is set in response to the onbeforeunload and onunload events. + Some pages load pop-up windows when you leave them rather than when you enter. This flag is used to identify those situations. + + + + + The call to INewWindowManager::EvaluateNewWindow is the result of a user-initiated action + (a mouse click or key press). Use this flag in conjunction with the NWMF_FIRST_USERINITED flag + to determine whether the call is a direct or indirect result of the user-initiated action. + + + + + When NWMF_USERINITED is present, this flag indicates that the call to + INewWindowManager::EvaluateNewWindow is the first query that results from this user-initiated action. + Always use this flag in conjunction with NWMF_USERINITED. + + + + + The override key (ALT) was pressed. The override key is used to bypass the pop-up manager梐llowing + all pop-up windows to display梐nd must be held down at the time that INewWindowManager::EvaluateNewWindow is called. + + + + + The new window attempting to load is the result of a call to the showHelp method. Help is sometimes displayed in a separate window, + and this flag is valuable in those cases. + + + + + The new window is a dialog box that displays HTML content. + + + + + Indicates that the EvaluateNewWindow method is being called through a marshalled Component Object Model (COM) proxy + from another thread. In this situation, the method should make a decision and return immediately without performing + blocking operations such as showing modal user interface (UI). Lengthy operations will cause the calling thread to + appear unresponsive. + + + + + HRESULT constants + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 线条图 + + + 作者: Kingthy + 日期: 2007-09-11 + MSN: Kingthy@gmail.com + 转载请注明原作者,当你有更新修改时如果方便的希望能发一份给我.谢谢 + + + + + + + + + + + 画值 + + 画布 + X轴数据 + + + + 走势图 + + + 作者: Kingthy + 日期: 2007-09-11 + MSN: Kingthy@gmail.com + 转载请注明原作者,当你有更新修改时如果方便的希望能发一份给我.谢谢 + + + + + + + + + + 初始化参数 + + + + + 返回或设置X轴间隔 + + + + + 标题 + + + + + 返回图片的宽度 + + + + + 返回或设置图片的高度 + + + + + X轴的间距 + + + + + Y轴的间距 + + + + + 标题的颜色 + + + + + 标题的字体 + + + + + 背景颜色 + + + + + X轴的颜色 + + + + + Y轴的颜色 + + + + + 返回X轴数据的最大值(供给Painter调用) + + + + + 返回图片数据 + + + + + 画布 + + + + + 作图器 + + + + + 释放内容资源 + + + + + 获取X轴中的最大值 + + + + + + + 获取所有X轴列中的最大值 + + + + + + + 初始化图片 + + X轴的数据 + + + + + 画一条走势图 + + + + + + 画多条走势图 + + + + + + 作图器的基础类 + + + 作者: Kingthy + 日期: 2007-09-11 + MSN: Kingthy@gmail.com + 转载请注明原作者,当你有更新修改时如果方便的希望能发一份给我.谢谢 + + + + + + + + + + + 返回此作图器的相关链走势图 + + + + + 获取某值在Y轴上的位置 + + 当前点的值 + 点坐标 + + + + 画XY轴线 + + 画布 + X轴的数据 + + + + 画标题 + + + + + + 画走势线 + + 画布 + X轴数据 + + + + 方块图 + + + 作者: Kingthy + 日期: 2007-09-11 + MSN: Kingthy@gmail.com + 转载请注明原作者,当你有更新修改时如果方便的希望能发一份给我.谢谢 + + + + + + + + + + + 画值 + + 画布 + X轴数据 + + + + 走势图的X轴数据 + + + 作者: Kingthy + 日期: 2007-09-11 + MSN: Kingthy@gmail.com + 转载请注明原作者,当你有更新修改时如果方便的希望能发一份给我.谢谢 + + + + + + + + + + + + + + + + + + 标题 + + + + + 值 + + + + + 标题的颜色 + + + + + 标题的字体 + + + + + 值的颜色 + + + + + 值的字体 + + + + + 绘制颜色 + + + + + 值是否可见 + + + + + 克隆自身 + + + + + + 定义X轴的数据集合 + + + 作者: Kingthy + 日期: 2007-09-11 + MSN: Kingthy@gmail.com + 转载请注明原作者,当你有更新修改时如果方便的希望能发一份给我.谢谢 + + + + + + + + + + + + + + + + 添加一批数据 + + 轴的标题 + + + + 添加一批数据 + + 轴的标题 + 轴的值 + + + + 重置轴的值 + + 轴的值 + + + + 克隆数据 + + + + + + 获取颜色 + + + + + + + + + + + + + 颜色变化时激发 + + + + + + + + + + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + diff --git a/Bin/Debug/VSoft/ryUpdate.dll b/Bin/Debug/VSoft/ryUpdate.dll new file mode 100644 index 0000000..c46da3d Binary files /dev/null and b/Bin/Debug/VSoft/ryUpdate.dll differ diff --git a/Bin/混淆_Debug.nrproj b/Bin/混淆_Debug.nrproj new file mode 100644 index 0000000..fa9fd8d --- /dev/null +++ b/Bin/混淆_Debug.nrproj @@ -0,0 +1,127 @@ + + Debug\VSoft\VSoft.exe + + Debug\VSoft\ryControls.dll + + + Debug\VSoft\ryUpdate.dll + + + Debug\VSoft\MyDb_SQLite.dll + + + Debug\VSoft\MyDb.dll + + + true + true + false + + + + http://timestamp.verisign.com/scripts/timstamp.dll + http://sha256timestamp.ws.symantec.com/sha256/timestamp + false + true + false + false + true + false + + + <AssemblyLocation>\Secure\<AssemblyFileName> + true + + + true + true + false + false + 9 + true + false + false + false + true + false + false + false + false + false + false + false + false + false + + false + false + false + false + + false + false + false + false + false + true + true + All + + false + + + true + false + Trial_Days + 14 + false + 20180503 + false + 10 + false + 5 + + true + true + + + + true + You are on day [current_minutes_days] of your [max_minutes_days] day evaluation period. Your trial period is expired! You need to purchase a license to run this software. + true + Your expiration date is reached! You need to purchase a license file to run this software. + true + You have used this software [current_uses] times out of a maximum of [max_uses]. You have [uses_left] uses left. Your trial period is expired! You need to purchase a license to run this software. + true + You can only run maximal [max_processes] instances of this software at the same time. + true + This software won't run without a valid license file. Either a valid license file could not be found or your license file is expired. + false + Nag Screen! This message will disappear when a valid license file is installed. You are on day [current_minutes_days] of your [max_minutes_days] day evaluation period. You have [minutes_days_left] days left. You have used this software [current_uses] times out of a maximum of [max_uses]. You have [uses_left] uses left. + -1 + + Lock System + 255255255 + 157211252 + + + false + false + Trial_Days + 1 + false + 20180503 + false + true + true + false + true + ####-####-####-####-#### + false + 10 + false + 5 + + Hr7YPNVEOuGLGJrWzxt2hKWI0xXn4h31i5nGAghNonQ=|<RSAKeyValue><Modulus>twxUWoRvbb2N6CMXQL36TBij9G7nxvU6rTULmVnbS1jYTvPQSKohB2o95vJvdlxjw7KBxYhIFqj9yEn5xvD4GVhj8+MEvG4lNqN1e1FErGin9YYYr4dTZHFe73aG5xxoscKZIg3YYdoBp0lgE2xwfaHyYe03M3mbhQx6axyf7Ak=</Modulus><Exponent>AQAB</Exponent><P>6OP29NbAV7sOKvOFRIeBbnJLh4fOiAjGtqiBlHLyOHt6w1s8N4o4Kr3N2KPVcpj82655KRzRlVDkwQika4eZ9w==</P><Q>yTY83K4a/WpcifMvuAFEuM9wVfXtbQUpV0MSSNgCmWcd6G3+GYShmPUW1gWMv+4H59iiPef1pnXvuzPYnQMp/w==</Q><DP>J/h4Oi1hda01EUoaZVicbkhPjkNQvyhCcrcZBlF0IR2QRFc0TpP6b9uDqNr1l2WKgGnBgbzge7AWksrY7VuooQ==</DP><DQ>PtmhQzFjHts1UqXStwA2bh/lsAQkiJQ/KJG7yWMn1LEAB5Ur9N6X94Y+/tU29NCuSX5Cl2G4OqnGG0yDke/mEw==</DQ><InverseQ>jiKqvwfWSUpKybcT3ucAedpT+kKuB/Qs1xJ0Z6bYOE8EsljxGbq8428Cma5rp33WMP6ybq2HwOddm/73ZFZZKQ==</InverseQ><D>bYP46/cUW8nvHxXvkZKYL/MGFPZNwaFyq7Jy8BrssxXCxOnmkbMH89HCm2ws99mq7qjcL3yr9LLCs5Re1oHRTQT2Vu2hXuGAGVjvHwYPLWGvcYvIuTWoTEw79m+lh/7CYDxfwzwWL095a8D40OvfHauk7xrXDB+qIsEJ7Gkjh0k=</D></RSAKeyValue> + + \ No newline at end of file diff --git a/Bin/混淆_Release.nrproj b/Bin/混淆_Release.nrproj new file mode 100644 index 0000000..168fd15 --- /dev/null +++ b/Bin/混淆_Release.nrproj @@ -0,0 +1,127 @@ + + Release\VSoft\VSoft.exe + + Release\VSoft\ryControls.dll + + + Release\VSoft\ryUpdate.dll + + + Release\VSoft\MyDb_SQLite.dll + + + Release\VSoft\MyDb.dll + + + true + true + false + + + + http://timestamp.verisign.com/scripts/timstamp.dll + http://sha256timestamp.ws.symantec.com/sha256/timestamp + false + true + false + false + true + false + + + <AssemblyLocation>\Secure\<AssemblyFileName> + true + + + true + true + false + false + 9 + true + false + false + false + true + false + false + false + false + false + false + false + false + false + + false + false + false + false + + false + false + false + false + false + true + true + All + + false + + + true + false + Trial_Days + 14 + false + 20180503 + false + 10 + false + 5 + + true + true + + + + true + You are on day [current_minutes_days] of your [max_minutes_days] day evaluation period. Your trial period is expired! You need to purchase a license to run this software. + true + Your expiration date is reached! You need to purchase a license file to run this software. + true + You have used this software [current_uses] times out of a maximum of [max_uses]. You have [uses_left] uses left. Your trial period is expired! You need to purchase a license to run this software. + true + You can only run maximal [max_processes] instances of this software at the same time. + true + This software won't run without a valid license file. Either a valid license file could not be found or your license file is expired. + false + Nag Screen! This message will disappear when a valid license file is installed. You are on day [current_minutes_days] of your [max_minutes_days] day evaluation period. You have [minutes_days_left] days left. You have used this software [current_uses] times out of a maximum of [max_uses]. You have [uses_left] uses left. + -1 + + Lock System + 255255255 + 157211252 + + + false + false + Trial_Days + 1 + false + 20180503 + false + true + true + false + true + ####-####-####-####-#### + false + 10 + false + 5 + + Hr7YPNVEOuGLGJrWzxt2hKWI0xXn4h31i5nGAghNonQ=|<RSAKeyValue><Modulus>twxUWoRvbb2N6CMXQL36TBij9G7nxvU6rTULmVnbS1jYTvPQSKohB2o95vJvdlxjw7KBxYhIFqj9yEn5xvD4GVhj8+MEvG4lNqN1e1FErGin9YYYr4dTZHFe73aG5xxoscKZIg3YYdoBp0lgE2xwfaHyYe03M3mbhQx6axyf7Ak=</Modulus><Exponent>AQAB</Exponent><P>6OP29NbAV7sOKvOFRIeBbnJLh4fOiAjGtqiBlHLyOHt6w1s8N4o4Kr3N2KPVcpj82655KRzRlVDkwQika4eZ9w==</P><Q>yTY83K4a/WpcifMvuAFEuM9wVfXtbQUpV0MSSNgCmWcd6G3+GYShmPUW1gWMv+4H59iiPef1pnXvuzPYnQMp/w==</Q><DP>J/h4Oi1hda01EUoaZVicbkhPjkNQvyhCcrcZBlF0IR2QRFc0TpP6b9uDqNr1l2WKgGnBgbzge7AWksrY7VuooQ==</DP><DQ>PtmhQzFjHts1UqXStwA2bh/lsAQkiJQ/KJG7yWMn1LEAB5Ur9N6X94Y+/tU29NCuSX5Cl2G4OqnGG0yDke/mEw==</DQ><InverseQ>jiKqvwfWSUpKybcT3ucAedpT+kKuB/Qs1xJ0Z6bYOE8EsljxGbq8428Cma5rp33WMP6ybq2HwOddm/73ZFZZKQ==</InverseQ><D>bYP46/cUW8nvHxXvkZKYL/MGFPZNwaFyq7Jy8BrssxXCxOnmkbMH89HCm2ws99mq7qjcL3yr9LLCs5Re1oHRTQT2Vu2hXuGAGVjvHwYPLWGvcYvIuTWoTEw79m+lh/7CYDxfwzwWL095a8D40OvfHauk7xrXDB+qIsEJ7Gkjh0k=</D></RSAKeyValue> + + \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..c0d0abb --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,29 @@ +### 2020-11-16更新 +------ +#### DyTools V1.9.2011.1601 + +*.[新增]新增网址状态扫描。 + +------ +### 2019-10-12更新 +------ +#### DyTools V1.9.1910.1201 + +*.[新增]游戏入库查询支持87g和当下数量显示。 + +------ + +2017-04-19 V1.1.1.0 +*.[新增]新增支持清空和粘贴文本。 +*.[新增]支持读取网址进行分析。 +*.[修复]修复文件夹分析结果不准确的Bug。 + +2017-04-18 V1.1.0.0 +*.[新增]新增盘古分词。 +*.[新增]支持添加用户词库。 + +2017-04-17 V1.0.0.1 +*.[修复]修复文章内容太多导致分词报错的BUG。 + +2017-04-15 V1.0.0.0 +*.[初始版本] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2c2570 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +## VSoft快速启动器 + +VSoft快速启动器是一款帮助用户快速启动各种软件的工具。 +- 支持按热键唤醒VSoft。 +- 支持分类和分栏目管理软件。 +- 支持拖放文件到VSoft中。 +- 软件、分类、栏目顺序都可以用鼠标拖放进行排序。 +- 支持拖放软件到分类和栏目中。 +- 支持按管理员方式启动软件。 +- 支持添加众多的内置功能。 \ No newline at end of file diff --git a/Source/.vs/VSoft/v16/.suo b/Source/.vs/VSoft/v16/.suo new file mode 100644 index 0000000..94bb9c7 Binary files /dev/null and b/Source/.vs/VSoft/v16/.suo differ diff --git a/Source/DyLine/DyLine.csproj b/Source/DyLine/DyLine.csproj new file mode 100644 index 0000000..2767a33 --- /dev/null +++ b/Source/DyLine/DyLine.csproj @@ -0,0 +1,80 @@ + + + + + Debug + AnyCPU + {8EE4505A-7D76-4209-85D5-274357A81FB8} + WinExe + DyLine + DyLine + v4.0 + 512 + true + + + x86 + true + full + false + ..\..\Bin\Debug\VSoft\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + \ No newline at end of file diff --git a/Source/DyLine/DyLine.csproj.user b/Source/DyLine/DyLine.csproj.user new file mode 100644 index 0000000..9b86104 --- /dev/null +++ b/Source/DyLine/DyLine.csproj.user @@ -0,0 +1,6 @@ + + + + ShowAllFiles + + \ No newline at end of file diff --git a/Source/DyLine/Form1.Designer.cs b/Source/DyLine/Form1.Designer.cs new file mode 100644 index 0000000..cf9444f --- /dev/null +++ b/Source/DyLine/Form1.Designer.cs @@ -0,0 +1,48 @@ + +namespace DyLine +{ + partial class Form1 + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(251, 125); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + + } + + #endregion + } +} + diff --git a/Source/DyLine/Form1.cs b/Source/DyLine/Form1.cs new file mode 100644 index 0000000..842829d --- /dev/null +++ b/Source/DyLine/Form1.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace DyLine +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + } +} diff --git a/Source/DyLine/Form1.resx b/Source/DyLine/Form1.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Source/DyLine/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/DyLine/Program.cs b/Source/DyLine/Program.cs new file mode 100644 index 0000000..7db2f21 --- /dev/null +++ b/Source/DyLine/Program.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace DyLine +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main(string[] args) + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + //Application.Run(new Form1()); + if(args!=null && args.Length>0) + { + for (int i = 0; i < args.Length; i++) + { + var item = args[i]; + if(item.StartsWith("show=",StringComparison.OrdinalIgnoreCase)) + { + clsMsg ryMsg = new clsMsg(); + ryMsg.SendMsgToryProcess(0, item);//向流程软件发送连接信息 + } + } + } + } + } +} diff --git a/Source/DyLine/Properties/AssemblyInfo.cs b/Source/DyLine/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4860344 --- /dev/null +++ b/Source/DyLine/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("当游命令行执行工具")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("DyLine")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("8ee4505a-7d76-4209-85d5-274357a81fb8")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Source/DyLine/Properties/Resources.Designer.cs b/Source/DyLine/Properties/Resources.Designer.cs new file mode 100644 index 0000000..047c1bd --- /dev/null +++ b/Source/DyLine/Properties/Resources.Designer.cs @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + + +namespace DyLine.Properties +{ + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DyLine.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Source/DyLine/Properties/Resources.resx b/Source/DyLine/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Source/DyLine/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/DyLine/Properties/Settings.Designer.cs b/Source/DyLine/Properties/Settings.Designer.cs new file mode 100644 index 0000000..7bfc212 --- /dev/null +++ b/Source/DyLine/Properties/Settings.Designer.cs @@ -0,0 +1,29 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +namespace DyLine.Properties +{ + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Source/DyLine/Properties/Settings.settings b/Source/DyLine/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Source/DyLine/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Source/DyLine/clsMsg.cs b/Source/DyLine/clsMsg.cs new file mode 100644 index 0000000..d062083 --- /dev/null +++ b/Source/DyLine/clsMsg.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; + +namespace DyLine +{ + public class clsMsg + { + [DllImport("user32.dll", EntryPoint = "EnumWindows", SetLastError = true)] + private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, uint lParam); + + [DllImport("user32.dll", EntryPoint = "GetParent", SetLastError = true)] + private static extern IntPtr GetParent(IntPtr hWnd); + + [DllImport("user32.dll", EntryPoint = "GetWindowThreadProcessId")] + private static extern uint GetWindowThreadProcessId(IntPtr hWnd, ref uint lpdwProcessId); + + [DllImport("user32.dll", EntryPoint = "IsWindow")] + private static extern bool IsWindow(IntPtr hWnd); + private const int WM_COPYDATA = 0x004A; + public struct COPYDATASTRUCT + { + public IntPtr dwData; + public int cData; + [MarshalAs(UnmanagedType.LPStr)] + public string lpData; + } + [DllImport("User32.dll", EntryPoint = "SendMessage")] + private static extern int SendMessage(int hwnd, int msg, int wParam, ref COPYDATASTRUCT IParam); + private delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam); + public void SendMsg(int handle, int wParam, string str) + { + byte[] arr = System.Text.Encoding.Default.GetBytes(str); + int len = arr.Length; + COPYDATASTRUCT cdata; + cdata.dwData = (IntPtr)100; + cdata.lpData = str; + cdata.cData = len + 1; + SendMessage(handle, WM_COPYDATA, wParam, ref cdata); + } + + readonly string msgText = ""; + readonly int _wParam = 0; + //public void SendMsgToryProcess(int wParam,string str) + //{ + // IntPtr ptrWnd = IntPtr.Zero; + // Process[] items = Process.GetProcessesByName("ryProcessManager"); + // msgText = str; + // _wParam = wParam; + // for (int i = 0; i < items.Length; i++) + // { + // uint uiPid = (uint)items[i].Id; // 进程 ID + // bool bResult = EnumWindows(new WNDENUMPROC(EnumWindowsProc), uiPid); + // } + //} + public void SendMsgToryProcess(int wParam, string str) + { + for (int i = 1; i < 5; i++) + { + object mainHandle = ryCommon.Model.ryMemoryShare.ReadFromMemory(1024, typeof(int), "ryProcessManager" + i.ToString()); + if (mainHandle != null) + { + SendMsg((int)mainHandle, wParam, str); + break; + } + } + } + public void SendMsgToryProcess(int wParam, string MemoryId, string str) + { + if (MemoryId == null || MemoryId.Length == 0) + { + SendMsgToryProcess(wParam, str); + } + else + { + object mainHandle = ryCommon.Model.ryMemoryShare.ReadFromMemory(1024, typeof(int), MemoryId); + if (mainHandle != null) + { + SendMsg((int)mainHandle, wParam, str); + } + } + } + public static string GetMsg(Message m) + { + COPYDATASTRUCT cdata = new COPYDATASTRUCT(); + Type mytype = cdata.GetType(); + cdata = (COPYDATASTRUCT)m.GetLParam(mytype); + return cdata.lpData; + } + private bool EnumWindowsProc(IntPtr hwnd, uint lParam) + { + uint uiPid = 0; + + if (GetParent(hwnd) == IntPtr.Zero) + { + GetWindowThreadProcessId(hwnd, ref uiPid); + if (uiPid == lParam) // 找到进程对应的主窗口句柄 + { + SendMsg(hwnd.ToInt32(), _wParam, msgText); + //return false; // 返回 false 以终止枚举窗口 + } + } + + return true; + } + } +} diff --git a/Source/DyLine/ryMemoryShare.cs b/Source/DyLine/ryMemoryShare.cs new file mode 100644 index 0000000..8caeb7d --- /dev/null +++ b/Source/DyLine/ryMemoryShare.cs @@ -0,0 +1,221 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace ryCommon.Model +{ + public class ryMemoryShare + { + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam); + + [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] + private static extern IntPtr CreateFileMapping(int hFile, IntPtr lpAttributes, uint flProtect, uint dwMaxSizeHi, uint dwMaxSizeLow, string lpName); + + [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] + private static extern IntPtr OpenFileMapping(uint dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, string lpName); + + [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] + private static extern IntPtr MapViewOfFile(IntPtr hFileMapping, uint dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow, uint dwNumberOfBytesToMap); + + [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] + private static extern bool UnmapViewOfFile(IntPtr pvBaseAddress); + + [DllImport("Kernel32.dll", CharSet = CharSet.Auto)] + private static extern bool CloseHandle(IntPtr handle); + [DllImport("kernel32", EntryPoint = "GetLastError")] + private static extern int GetLastError(); + [DllImport("user32.dll", EntryPoint = "FindWindow")] + private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); + [DllImport("User32.dll")] + private static extern bool PostMessage(IntPtr hWnd, uint uMsg, int wParam, int lParam); + const int ERROR_ALREADY_EXISTS = 183; + + const int FILE_MAP_COPY = 0x0001; + const int FILE_MAP_WRITE = 0x0002; + const int FILE_MAP_READ = 0x0004; + const int FILE_MAP_ALL_ACCESS = 0x0002 | 0x0004; + + const int PAGE_READONLY = 0x02; + const int PAGE_READWRITE = 0x04; + const int PAGE_WRITECOPY = 0x08; + const int PAGE_EXECUTE = 0x10; + const int PAGE_EXECUTE_READ = 0x20; + const int PAGE_EXECUTE_READWRITE = 0x40; + + const int SEC_COMMIT = 0x8000000; + const int SEC_IMAGE = 0x1000000; + const int SEC_NOCACHE = 0x10000000; + const int SEC_RESERVE = 0x4000000; + const int INVALID_HANDLE_VALUE = -1; + /// + /// 写共享内存 + /// + /// 需要映射的文件的字节数量 + /// 映射对象(简单类型、结构体等) + /// 文件映射对象的名称 + /// + public static int WriteToMemory(uint structSize, Object obj, string fileName) + { + return WriteToMemory(structSize, obj, fileName, null, 0); + } + /// + /// 写共享内存 + /// + /// 需要映射的文件的字节数量 + /// 映射对象(简单类型、结构体等) + /// 文件映射对象的名称 + /// 发送消息的窗口句柄 + /// 发送消息 + /// + public static int WriteToMemory(uint structSize, Object obj, string fileName, string windowName, uint Msg) + { + IntPtr hShareMemoryHandle = IntPtr.Zero; + IntPtr hVoid = IntPtr.Zero; + + //判断参数的合法性 + if (structSize > 0 && fileName.Length > 0) + { + hShareMemoryHandle = CreateFileMapping(INVALID_HANDLE_VALUE, IntPtr.Zero, (uint)PAGE_READWRITE, 0, (uint)structSize, fileName); + if (hShareMemoryHandle == IntPtr.Zero) + { + //创建共享内存失败,记log + // MessageBox.Show("创建共享内存失败" + publicInfo.GetLastError().ToString()); + return -2; + } + else + { + if (ERROR_ALREADY_EXISTS == GetLastError()) + { + //共享内存已经存在,记log + //MessageBox.Show("共享内存已经存在"); + return -3; + } + } + hVoid = MapViewOfFile(hShareMemoryHandle, FILE_MAP_WRITE, 0, 0, structSize); + if (hVoid == IntPtr.Zero) + { + CloseHandle(hShareMemoryHandle); + //文件映射失败,记log + //MessageBox.Show("文件映射失败"); + return -4; + } + Marshal.StructureToPtr(obj, hVoid, false); + //发送消息,通知接收 + if (windowName != null) + { + IntPtr handle = FindWindow(null, windowName.Trim()); + if (handle == IntPtr.Zero) + { + //查找窗口失败,记log + //MessageBox.Show("查找窗口失败"); + return -5; + } + else + { + if (PostMessage(handle, (uint)Msg, 0, 0)) + { + //发送消息成功 + //MessageBox.Show("写共享内存,通知发送消息成功"); + } + } + } + } + else + { + //参数不合法,记log + //MessageBox.Show("共享内存已经存在"); + return -1; + } + return 0; + } + /// + /// 读共享内存 + /// + /// 需要映射的文件的字节数量 + /// 类型 + /// 文件映射对象的名称 + /// 返回读到的映射对象 + public static Object ReadFromMemory(uint structSize, Type type, string fileName) + { + + IntPtr hMappingHandle = IntPtr.Zero; + IntPtr hVoid = IntPtr.Zero; + + hMappingHandle = OpenFileMapping((uint)FILE_MAP_READ, false, fileName); + if (hMappingHandle == IntPtr.Zero) + { + //打开共享内存失败,记log + //MessageBox.Show("打开共享内存失败:" + publicInfo.GetLastError().ToString()); + return null; + } + hVoid = MapViewOfFile(hMappingHandle, FILE_MAP_READ, 0, 0, structSize); + if (hVoid == IntPtr.Zero) + { + //文件映射失败,记log + // MessageBox.Show("文件映射失败——读共享内存"); + return null; + } + + Object obj = Marshal.PtrToStructure(hVoid, type); + + if (hVoid != IntPtr.Zero) + { + UnmapViewOfFile(hVoid); + hVoid = IntPtr.Zero; + } + if (hMappingHandle != IntPtr.Zero) + { + CloseHandle(hMappingHandle); + hMappingHandle = IntPtr.Zero; + } + return obj; + } + /// + /// 读共享内存 + /// + /// 需要映射的文件的字节数量 + /// 类型 + /// 文件映射对象的名称 + /// 返回读到的映射字节数据 + public static byte[] ReadFromMemory2(uint structSize, Type type, string fileName) + { + + IntPtr hMappingHandle = IntPtr.Zero; + IntPtr hVoid = IntPtr.Zero; + + hMappingHandle = OpenFileMapping((uint)FILE_MAP_READ, false, fileName); + if (hMappingHandle == IntPtr.Zero) + { + //打开共享内存失败,记log + //MessageBox.Show("打开共享内存失败:" + publicInfo.GetLastError().ToString()); + return null; + } + hVoid = MapViewOfFile(hMappingHandle, FILE_MAP_READ, 0, 0, structSize); + if (hVoid == IntPtr.Zero) + { + //文件映射失败,记log + //MessageBox.Show("文件映射失败——读共享内存"); + return null; + } + + //Object obj = Marshal.PtrToStructure(hVoid, type); + byte[] bytes = new byte[structSize]; + Marshal.Copy(hVoid, bytes, 0, bytes.Length); + + if (hVoid != IntPtr.Zero) + { + UnmapViewOfFile(hVoid); + hVoid = IntPtr.Zero; + } + if (hMappingHandle != IntPtr.Zero) + { + CloseHandle(hMappingHandle); + hMappingHandle = IntPtr.Zero; + } + return bytes; + } + } +} diff --git a/Source/VSoft.sln b/Source/VSoft.sln new file mode 100644 index 0000000..62bea1d --- /dev/null +++ b/Source/VSoft.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30621.155 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VSoft", "VSoft_Dll\VSoft.csproj", "{13C45E68-2DA3-4C9E-9BCA-E63D0FA9A760}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VSoftBox", "VSoftBox\VSoftBox.csproj", "{CA619284-2939-4A14-9525-30FD7C04ADC7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DyLine", "DyLine\DyLine.csproj", "{8EE4505A-7D76-4209-85D5-274357A81FB8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {13C45E68-2DA3-4C9E-9BCA-E63D0FA9A760}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {13C45E68-2DA3-4C9E-9BCA-E63D0FA9A760}.Debug|Any CPU.Build.0 = Debug|Any CPU + {13C45E68-2DA3-4C9E-9BCA-E63D0FA9A760}.Release|Any CPU.ActiveCfg = Release|Any CPU + {13C45E68-2DA3-4C9E-9BCA-E63D0FA9A760}.Release|Any CPU.Build.0 = Release|Any CPU + {CA619284-2939-4A14-9525-30FD7C04ADC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CA619284-2939-4A14-9525-30FD7C04ADC7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CA619284-2939-4A14-9525-30FD7C04ADC7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CA619284-2939-4A14-9525-30FD7C04ADC7}.Release|Any CPU.Build.0 = Release|Any CPU + {8EE4505A-7D76-4209-85D5-274357A81FB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8EE4505A-7D76-4209-85D5-274357A81FB8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8EE4505A-7D76-4209-85D5-274357A81FB8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8EE4505A-7D76-4209-85D5-274357A81FB8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {041F73EF-7DB7-4DDC-BEDA-4005F2463F7C} + EndGlobalSection +EndGlobal diff --git a/Source/VSoftBox/Config/Soft_Config.cs b/Source/VSoftBox/Config/Soft_Config.cs new file mode 100644 index 0000000..471134b --- /dev/null +++ b/Source/VSoftBox/Config/Soft_Config.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Itrycn_Project +{ + /// + /// 配置类,保存在运行期间会被改变的配置信息(本系统基于乘黄V2架构) + /// + public static class Soft_Config + { + /// + /// 是否能关闭窗体。 + /// + public static bool IsCanCloseForm = true; + /// + /// 在点击主窗口关闭按钮时,隐藏窗体(只有开启了托盘图标,本功能才能生效,此时需要通过托盘图标进行关闭)。 + /// + public static bool HideByCloseBtn = true; + public static void LoadSetting() + { + //ryCommon.Storage Stor = new Storage(); + //Stor.SelectNodeBySet(); + //LowCountTip = Stor.GetAttrValue("LowCountTip", true); + //low_count = Stor.GetAttrValue("LowCount", 10); + } + } +} diff --git a/Source/VSoftBox/Config/Soft_Info.cs b/Source/VSoftBox/Config/Soft_Info.cs new file mode 100644 index 0000000..b3a6e89 --- /dev/null +++ b/Source/VSoftBox/Config/Soft_Info.cs @@ -0,0 +1,58 @@ +using ryCommon; +using ryCommonDb; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using static ryCommonDb.DataProvider; + +namespace Itrycn_Project +{ + /// + /// 配置类,保存在运行期间不会被改变的配置信息(本系统基于乘黄V2架构) + /// + public static class Soft_Info + { + /// + /// 在线升级配置文件的url + /// + public const string Update_Url = "http://www.itrycn.com/update/ryWebMon4.xml"; + /// + /// 软件标题 + /// + public const string Soft_Title = "VSoft"; + /// + /// 软件ID + /// + public const string Soft_Id = "VSoft"; + /// + /// 开机启动的参数 + /// + public const string Soft_Pram = "q"; + /// + /// 官网地址 + /// + public const string Soft_Url = "http://www.itrycn.com"; + /// + /// 售后QQ群 + /// + public const string QQ_Qun = "183161992"; + /// + /// 关于界面内容. + /// + public const string AboutText = "#softname# #ver#"; + /// + /// 用户文件夹,该相对路径设置,将在程序启动后转换 + /// + public static string UserDataFolder = @"\UserDb"; + /// + /// 是否允许显示托盘图标 + /// + public static bool ShowTray { get; } = true; + /// + /// 是否显示捐赠方式 + /// + public static bool DonateVisabled { get; } = true; + } +} diff --git a/Source/VSoftBox/Program.cs b/Source/VSoftBox/Program.cs new file mode 100644 index 0000000..4f6931f --- /dev/null +++ b/Source/VSoftBox/Program.cs @@ -0,0 +1,34 @@ +using Itrycn_Project; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace VSoftBox +{ + static class Program + { + static System.Threading.Mutex run; + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main(string[] args) + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Soft_Info.UserDataFolder = ryCommon.RyFiles.GetRealPath(Soft_Info.UserDataFolder); + run = new System.Threading.Mutex(true, Soft_Info.Soft_Id, out bool runone); + if (!runone) //已经运行了 + { + ryCommon.Ini ini = new ryCommon.Ini(Soft_Info.UserDataFolder + "\\Win.dat"); + ryControls.Win32.SendMessage((IntPtr)ini.ReadIni(Soft_Info.Soft_Id, "hwnd", 0), 17189, 100, 100); + } + else + { + Application.Run(new VSoft.FrmVSoft(args)); + //Application.Run(new WindowsFormsApp2.Form1()); + } + } + } +} diff --git a/Source/VSoftBox/Properties/AssemblyInfo.cs b/Source/VSoftBox/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..3bb7bcb --- /dev/null +++ b/Source/VSoftBox/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("VSoftBox")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("VSoftBox")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("ca619284-2939-4a14-9525-30fd7c04adc7")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.2011.1701")] +[assembly: AssemblyFileVersion("1.0.2011.1701")] \ No newline at end of file diff --git a/Source/VSoftBox/Properties/Resources.Designer.cs b/Source/VSoftBox/Properties/Resources.Designer.cs new file mode 100644 index 0000000..6f6dc95 --- /dev/null +++ b/Source/VSoftBox/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace VSoftBox.Properties +{ + + + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VSoftBox.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 覆盖当前线程的 CurrentUICulture 属性 + /// 使用此强类型的资源类的资源查找。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Source/VSoftBox/Properties/Resources.resx b/Source/VSoftBox/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Source/VSoftBox/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/VSoftBox/Properties/Settings.Designer.cs b/Source/VSoftBox/Properties/Settings.Designer.cs new file mode 100644 index 0000000..6317e34 --- /dev/null +++ b/Source/VSoftBox/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace VSoftBox.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Source/VSoftBox/Properties/Settings.settings b/Source/VSoftBox/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Source/VSoftBox/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Source/VSoftBox/VSoftBox.csproj b/Source/VSoftBox/VSoftBox.csproj new file mode 100644 index 0000000..fe07296 --- /dev/null +++ b/Source/VSoftBox/VSoftBox.csproj @@ -0,0 +1,93 @@ + + + + + Debug + AnyCPU + {CA619284-2939-4A14-9525-30FD7C04ADC7} + WinExe + VSoftBox + VSoftBox + v4.0 + 512 + true + + + x86 + true + full + false + ..\..\Bin\Debug\VSoft\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + logo256.ico + + + + False + ..\..\..\..\..\公共代码\C#\公用控件组\Bin\Debug\CommonControls\.NET4\MyDb.dll + + + False + ..\..\..\..\..\公共代码\C#\公用控件组\Bin\Debug\CommonControls\.NET4\ryControls.dll + + + + + + + + + + + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + {13c45e68-2da3-4c9e-9bca-e63d0fa9a760} + VSoft + + + + + + + + + \ No newline at end of file diff --git a/Source/VSoftBox/VSoftBox.csproj.user b/Source/VSoftBox/VSoftBox.csproj.user new file mode 100644 index 0000000..9b86104 --- /dev/null +++ b/Source/VSoftBox/VSoftBox.csproj.user @@ -0,0 +1,6 @@ + + + + ShowAllFiles + + \ No newline at end of file diff --git a/Source/VSoftBox/logo2.ico b/Source/VSoftBox/logo2.ico new file mode 100644 index 0000000..092277b Binary files /dev/null and b/Source/VSoftBox/logo2.ico differ diff --git a/Source/VSoftBox/logo256.ico b/Source/VSoftBox/logo256.ico new file mode 100644 index 0000000..1f2eb48 Binary files /dev/null and b/Source/VSoftBox/logo256.ico differ diff --git a/Source/VSoftBox/图标.ico b/Source/VSoftBox/图标.ico new file mode 100644 index 0000000..0edc230 Binary files /dev/null and b/Source/VSoftBox/图标.ico differ diff --git a/Source/VSoft_Dll/Config/Soft_Config.cs b/Source/VSoft_Dll/Config/Soft_Config.cs new file mode 100644 index 0000000..5fc80a2 --- /dev/null +++ b/Source/VSoft_Dll/Config/Soft_Config.cs @@ -0,0 +1,45 @@ +using ryCommon; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace VSoft.Config +{ + /// + /// 配置类,保存在运行期间会被改变的配置信息(本系统基于乘黄V2架构) + /// + public static class Soft_Config + { + /// + /// 是否能关闭窗体。 + /// + public static bool IsCanCloseForm = true; + /// + /// 在点击主窗口关闭按钮时,隐藏窗体(只有开启了托盘图标,本功能才能生效,此时需要通过托盘图标进行关闭)。 + /// + public static bool HideByCloseBtn = true; + /// + /// 显示主窗体的热键 + /// + public static string ShowMainHotKey = ""; + /// + /// 单击打开软件 + /// + public static bool OpenByClick = false; + /// + /// 启动软件后隐藏自身 + /// + public static bool HideAfterRun = true; + public static void LoadSetting() + { + ryCommon.Storage Stor = new Storage(); + Stor.LoadFromFile(Soft_Info.UserDataFolder + "\\Setting.xml"); + Stor.SelectNodeBySet(); + ShowMainHotKey = Stor.GetAttrValue("ShowMainHotKey", "1+88"); + OpenByClick = Stor.GetAttrValue("OpenByClick", false); + HideAfterRun = Stor.GetAttrValue("HideAfterRun", true); + //low_count = Stor.GetAttrValue("LowCount", 10); + } + } +} diff --git a/Source/VSoft_Dll/Config/Soft_Info.cs b/Source/VSoft_Dll/Config/Soft_Info.cs new file mode 100644 index 0000000..ecbaebb --- /dev/null +++ b/Source/VSoft_Dll/Config/Soft_Info.cs @@ -0,0 +1,58 @@ +using ryCommon; +using ryCommonDb; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using static ryCommonDb.DataProvider; + +namespace VSoft.Config +{ + /// + /// 配置类,保存在运行期间不会被改变的配置信息(本系统基于乘黄V2架构) + /// + public static class Soft_Info + { + /// + /// 在线升级配置文件的url + /// + public const string Update_Url = "http://www.itrycn.com/update/vsoft.xml"; + /// + /// 软件标题 + /// + public const string Soft_Title = "VSoft 快速启动"; + /// + /// 软件ID + /// + public const string Soft_Id = "VSoft"; + /// + /// 开机启动的参数 + /// + public const string Soft_Pram = "q"; + /// + /// 官网地址 + /// + public const string Soft_Url = "http://www.3h3.com"; + /// + /// 售后QQ群 + /// + public const string QQ_Qun = "183161992"; + /// + /// 关于界面内容. + /// + public const string AboutText = "#softname# #ver# 是一款完全免费的快速启动软件。"; + /// + /// 用户文件夹,该相对路径设置,将在程序启动后转换 + /// + public static string UserDataFolder = @"\UserDb"; + /// + /// 是否允许显示托盘图标 + /// + public static bool ShowTray { get; } = true; + /// + /// 是否显示捐赠方式 + /// + public static bool DonateVisabled { get; } = false; + } +} diff --git a/Source/VSoft_Dll/Config/frmSetting.Designer.cs b/Source/VSoft_Dll/Config/frmSetting.Designer.cs new file mode 100644 index 0000000..ea82e54 --- /dev/null +++ b/Source/VSoft_Dll/Config/frmSetting.Designer.cs @@ -0,0 +1,191 @@ +namespace VSoft.Config +{ + partial class FrmSetting + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmSetting)); + this.ChkAutoRun = new System.Windows.Forms.CheckBox(); + this.btnCancel = new ryControls.ButtonEx(); + this.btnOK = new ryControls.ButtonEx(); + this.chromeTabControl1 = new ryControls.ChromeTabControl(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.ChkOpenByClick = new System.Windows.Forms.CheckBox(); + this.hotkeyTextBox1 = new ryControls.HotkeyTextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.ChkHideAfterRun = new System.Windows.Forms.CheckBox(); + this.chromeTabControl1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.SuspendLayout(); + // + // ChkAutoRun + // + this.ChkAutoRun.AutoSize = true; + this.ChkAutoRun.Location = new System.Drawing.Point(6, 9); + this.ChkAutoRun.Name = "ChkAutoRun"; + this.ChkAutoRun.Size = new System.Drawing.Size(108, 16); + this.ChkAutoRun.TabIndex = 1; + this.ChkAutoRun.Text = "开机时启动软件"; + this.ChkAutoRun.UseVisualStyleBackColor = true; + // + // btnCancel + // + this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnCancel.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95))))); + this.btnCancel.Location = new System.Drawing.Point(541, 460); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(79, 30); + this.btnCancel.TabIndex = 22; + this.btnCancel.Text = "取消"; + this.btnCancel.UseVisualStyleBackColor = true; + this.btnCancel.Click += new System.EventHandler(this.BtnCancel_Click); + // + // btnOK + // + this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnOK.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95))))); + this.btnOK.Location = new System.Drawing.Point(456, 460); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(79, 30); + this.btnOK.TabIndex = 21; + this.btnOK.Text = "保存"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.BtnOK_Click); + // + // chromeTabControl1 + // + this.chromeTabControl1.AllowDragTab = false; + this.chromeTabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.chromeTabControl1.BackTabPageImage = null; + this.chromeTabControl1.Controls.Add(this.tabPage2); + this.chromeTabControl1.Cursor = System.Windows.Forms.Cursors.Default; + this.chromeTabControl1.ItemSize = new System.Drawing.Size(100, 25); + this.chromeTabControl1.Location = new System.Drawing.Point(5, 2); + this.chromeTabControl1.Name = "chromeTabControl1"; + this.chromeTabControl1.SelectedIndex = 0; + this.chromeTabControl1.ShowAddButton = false; + this.chromeTabControl1.ShowCloseButton = false; + this.chromeTabControl1.Size = new System.Drawing.Size(621, 452); + this.chromeTabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.chromeTabControl1.TabContextMenuStrip = null; + this.chromeTabControl1.TabIndex = 23; + this.chromeTabControl1.TabMaxWidth = 100; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.ChkHideAfterRun); + this.tabPage2.Controls.Add(this.ChkOpenByClick); + this.tabPage2.Controls.Add(this.hotkeyTextBox1); + this.tabPage2.Controls.Add(this.label1); + this.tabPage2.Controls.Add(this.ChkAutoRun); + this.tabPage2.Location = new System.Drawing.Point(1, 29); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(619, 422); + this.tabPage2.TabIndex = 0; + this.tabPage2.Text = "普通"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // ChkOpenByClick + // + this.ChkOpenByClick.AutoSize = true; + this.ChkOpenByClick.Location = new System.Drawing.Point(8, 63); + this.ChkOpenByClick.Name = "ChkOpenByClick"; + this.ChkOpenByClick.Size = new System.Drawing.Size(228, 16); + this.ChkOpenByClick.TabIndex = 5; + this.ChkOpenByClick.Text = "单击列表图标时启动软件(默认是双击)"; + this.toolTip1.SetToolTip(this.ChkOpenByClick, "在默认情况下,需要双击列表图标才能启动软件,你\r\n可以修改本项配置,来实现单击鼠标启动。"); + this.ChkOpenByClick.UseVisualStyleBackColor = true; + // + // hotkeyTextBox1 + // + this.hotkeyTextBox1.BackColor = System.Drawing.Color.White; + this.hotkeyTextBox1.HotKey = "0+0"; + this.hotkeyTextBox1.Location = new System.Drawing.Point(113, 31); + this.hotkeyTextBox1.Name = "hotkeyTextBox1"; + this.hotkeyTextBox1.Size = new System.Drawing.Size(244, 26); + this.hotkeyTextBox1.T_Key = System.Windows.Forms.Keys.None; + this.hotkeyTextBox1.T_Modifiers = 0; + this.hotkeyTextBox1.TabIndex = 4; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 39); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(101, 12); + this.label1.TabIndex = 3; + this.label1.Text = "显示主界面快捷键"; + // + // ChkHideAfterRun + // + this.ChkHideAfterRun.AutoSize = true; + this.ChkHideAfterRun.Location = new System.Drawing.Point(8, 85); + this.ChkHideAfterRun.Name = "ChkHideAfterRun"; + this.ChkHideAfterRun.Size = new System.Drawing.Size(132, 16); + this.ChkHideAfterRun.TabIndex = 6; + this.ChkHideAfterRun.Text = "启动软件后隐藏自身"; + this.ChkHideAfterRun.UseVisualStyleBackColor = true; + // + // FrmSetting + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 502); + this.Controls.Add(this.chromeTabControl1); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.btnOK); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FrmSetting"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "设置"; + this.Load += new System.EventHandler(this.FrmSetting_Load); + this.Resize += new System.EventHandler(this.FrmSetting_Resize); + this.chromeTabControl1.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + private ryControls.ButtonEx btnCancel; + private ryControls.ButtonEx btnOK; + private System.Windows.Forms.CheckBox ChkAutoRun; + private ryControls.ChromeTabControl chromeTabControl1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Label label1; + private ryControls.HotkeyTextBox hotkeyTextBox1; + private System.Windows.Forms.CheckBox ChkOpenByClick; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.CheckBox ChkHideAfterRun; + } +} \ No newline at end of file diff --git a/Source/VSoft_Dll/Config/frmSetting.cs b/Source/VSoft_Dll/Config/frmSetting.cs new file mode 100644 index 0000000..1154a8c --- /dev/null +++ b/Source/VSoft_Dll/Config/frmSetting.cs @@ -0,0 +1,49 @@ +using ryCommon; +using ryControls; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace VSoft.Config +{ + public partial class FrmSetting : Form + { + public FrmSetting() + { + InitializeComponent(); + } + + private void FrmSetting_Resize(object sender, EventArgs e) + { + } + + private void BtnCancel_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + } + + private void BtnOK_Click(object sender, EventArgs e) + { + mySetting.Save(); + ryCommon.RyRegedit.RegRoot = Microsoft.Win32.RegistryHive.CurrentUser; + ryCommon.RyRegedit.SetAutoRun(ChkAutoRun.Checked, Soft_Info.Soft_Id, "\"" + Application.ExecutablePath.Replace("/","\\") + "\" "+ Soft_Info.Soft_Pram); + DialogResult = DialogResult.OK; + } + ryControls.RySetting mySetting = new ryControls.RySetting(); + private void FrmSetting_Load(object sender, EventArgs e) + { + mySetting.FilePath = Soft_Info.UserDataFolder + "\\Setting.xml"; + mySetting.Add("ShowMainHotKey", hotkeyTextBox1, "1+88"); + mySetting.Add("OpenByClick", ChkOpenByClick); + mySetting.Add("HideAfterRun", ChkHideAfterRun,true); + mySetting.Read(); + ryCommon.RyRegedit.RegRoot = Microsoft.Win32.RegistryHive.CurrentUser; + ChkAutoRun.Checked = ryCommon.RyRegedit.IsAutoRun(Soft_Info.Soft_Id, "\"" + Application.ExecutablePath.Replace("/", "\\") + "\" "+ Soft_Info.Soft_Pram); + } + } +} diff --git a/Source/VSoft_Dll/Config/frmSetting.resx b/Source/VSoft_Dll/Config/frmSetting.resx new file mode 100644 index 0000000..7f05ee6 --- /dev/null +++ b/Source/VSoft_Dll/Config/frmSetting.resx @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALu+nQCUlIQAfXx1WoaF + eteGhXrXhoV614WEetN7enNGh4d7AHNxbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdFjcAHRY3AB0WNwAdFjcAHRY3AAAAAAA4MkgAZGFlAFpX + XguNjH+2lZWE/5WVhP+VlYT/lZWE/4uKfZ8pIj8EVFFbACkjPwAAAAAAHRY3AB0WNwAdFjcAHRY3AB0W + NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRY3AJiYhgB2dXAAkZCBAGZkZgAzLkUAFQ0yABQM + MQCoqZAAf352WpOTg/eVlYT/lZWE/5WVhP+VlYT/kpGC7nt5c0WQkIEAAAAAAA8ILgAyLEUAaWZoAIWE + egBhXmIAY2BkAB0WNwAAAAAAAAAAAAAAAAAAAAAAAAAAAB0WNwCkpY4AeHZxAGNgZBlzcW5XYV5iKCAZ + OQj///8A////AG5sazaOjX/XlZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/jIt+yGdlZyno7bkA///2ABkS + NAdiX2MqcG1sSExIVQlgXWIAYl9jAB0WNwAAAAAAAAAAAAAAAAAdFjcAo6SNAHh2cQBdWmAXh4Z7qZKR + gvuMjH7ihYR5tX59dpN/fXaUjIx+2pWVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/i4p9z3x6 + dIZ9fHWKhIN5so2Mf+KQkIHzgH93fCkiPwZfXGEAYV5jAB0WNwAAAAAAAAAAAAAAEwB/fnYAYF1iGIaG + e6mUlIP/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WV + hP+VlYT/lJSD/5SUhP+VlYT/lZWE/5WVhP+SkoL3gH52ejgzSQddWmAAAAAAAAAAAAAAAAAAYl9jAAIA + JgGIiHyOlJSD/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WV + hP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+SkoL3g4J4YJmahwAxK0QAAAAAAAAA + AAB6eHIAoqOMAJOTg3mVlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WV + hP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhPuSkYJXl5eFAD45 + TAAAAAAAAAAAAIB+dgCRkYEAj4+ANJSUhO6VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WV + hP+VlYT/lJSD/5SUg/+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lJSD2o2N + fxyNjX8ARUBQAAAAAAAAAAAAHRY3AIeGewCIh3sTk5OD0ZWVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WV + hP+UlIP/lpaF/5ubi/+fn4//n5+P/5qaiv+VlYT/lJSD/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WV + hP+TkoKzeXdyBXx6dAAAAAAAAAAAAAAAAAAjHTsAcG5sAHd2cQqSkYLDlZWE/5WVhP+VlYT/lZWE/5WV + hP+VlYT/lZWE/6Kikv+0tKf/vr6y/8HBtf/BwbX/vb2x/7KypP+fn4//lZWE/5WVhP+VlYT/lZWE/5WV + hP+VlYT/lZWE/5CQgaH///8AJyE+AB0WNwAAAAAAQj1PACkiPgCMjH4Ac3FuMZGRgeKVlYT/lZWE/5WV + hP+VlYT/lZWE/5aWhf+rq53/wcG1/8XFufzExLjZxMS4t8TEuLvExLjgxcW5/7+/s/+np5f/lZWE/5WV + hP+VlYT/lZWE/5WVhP+VlYT/j46Ay2ViZRt5d3IAAAAaADAqQwByb20AAAAAAG1qajuKin3FlZWE/5WV + hP+VlYT/lZWE/5WVhP+VlYT/qama/8PDt//ExLjmw8O4bcPDtxvDw7cGw8O3B8PDtyPDw7iCxMS48cHB + tf+jo5T/lJSD/5WVhP+VlYT/lZWE/5WVhP+UlIP+h4Z7rmRhZCj5/8QAZ2VnAGdlZzN+fXWIjo6A5pWV + hP+VlYT/lZWE/5WVhP+VlYT/lZWE/5ycjP++vrH/xMS47sLCt1LGx7oAw8O3AMPDtwDDw7cAw8O3AAAA + AADCwrdvxcW5+bm5rP+YmIj/lZWE/5WVhP+VlYT/lZWE/5WVhP+UlIT/jIt+2Hp4c3RhXmMkjYx/3pSU + g/+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+UlIP/qama/8TEuP/CwraakpCRAby7sgDAwLUAAAAAACAZ + OQDBwbUAvr2zALm4rwvCwre6w8O3/6OjlP+UlIP/lZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/k5OD/4uK + fbuTk4PwlZWE/5WVhP+VlYT/lZWE/5WVhP+VlYT/lZWE/5WVhP+zs6X/xMS4+728slPCwrcAv7+0AAAA + AAAAAAAAAAAAAAAAAADb3MoAzc2/AL6+tHbExLj/rKyd/5SUg/+VlYT/lZWE/5WVhP+VlYT/lZWE/5WV + hP+VlYT/kpKC0Zybi+2fno3/n52N/p+djf6fnY3+n52N/p+djf6fnY3+n56N/rm4q//Dw7j2tbWtQLu7 + sQAhGjoAAAAAAAAAAAAAAAAAAAAAAFVQYgDGxroAubmwYcTEuP+zs6X/np2M/p+djf6fnY3+n52N/p+d + jf6fnY3+n52N/p+ejf+bmovPpKKR8aakk/+mpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJP/ubiq/8PD + uPyysapaxMS4AJybmQAdFjcAAAAAAAAAAAAdFjcA////AO7w2QC2tq19xMS4/7W0pf+mpJP/pqST/6ak + k/+mpJP/pqST/6akk/+mpJP/pqST/6OgkdOkopKgpqST6aakk/+mpJP/pqST/6akk/+mpJP/pqST/6ak + kv+zsqP/xMS4/7a2rqhFQFYHcW14AGhkcQAdFjcAHRY3AIyKjQCIhooAgH2EFLu6scXDw7f/r62e/6ak + kv+mpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJPlpKKRiqalkwSlo5M1pqSTp6akk/qmpJP/pqST/6ak + k/+mpJP/pqST/6qomP/AwLP/wcC29aOin2kAAAACjYuOAFlVZgBfW2oAmpmYAC8pRQirqaSGw8O3/L29 + r/+oppX/pqST/6akk/+mpJP/pqST/6akk/+mpJP2pqSTmaWjky2oppQDpKKSAKakkwCjoZEJpaOSgaak + k/qmpJP/pqST/6akk/+mpJP/pqST/7Kxov/Dw7f/vr608KakoYyBfoQyXFhoFWFdaxeIhYk8q6qkn8HA + tfjCwrX/r62e/6akk/+mpJP/pqST/6akk/+mpJP/pqST86WjkmyioJAEpqOTAKSikgCal4sApaOSAJ6c + jgCZlooSpKKSzqakk/+mpJP/pqST/6akk/+mpJP/p6WU/7SzpP/Cwrb/w8O3/7q6seq0s6vRtLSs1Ly8 + su/ExLj/wcG0/7GvoP+mpJP/pqST/6akk/+mpJP/pqST/6akk/+joZGrj4yEBKGfkAClo5IAjYuCAAAA + AAAdFjcAgHx5AIJ/ewuioJDEpqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/66snP+6uav/wcCz/8PD + tv/Dw7b/wMCz/7i3qf+sqpr/pqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/6Cdj5f//+8AAAAOAAAA + AAAAAAAAAAAAAB0WNwCLiIEAioeAHaKgkdumpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/6ak + lP+pqJf/rKqa/6yqmv+pp5f/pqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJP/oJ6Ptmhk + agdtaW0AHRY3AAAAAAAAAAAA/P3NAKOhkQCTkIZLpKKS96akk/+mpJP/pqST/6akk/+mpJP/pqST/6ak + k/+mpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/6ak + k/+ioJDhiYZ/Jo6LgwAdFjcAAAAAAAAAAABhXGUA////AJyajJOmpJP/pqST/6akk/+mpJP/pqST/6ak + k/+mpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/6ak + k/+mpJP/pqST/6Wjkv6YlopdqKaUAB0WNwAAAAAAAAAAAIB9egDS0rEApKKSUqakk+empJP/pqST/6ak + k/+mpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/6ak + k/+mpJP/pqST/6akk/+mpJP/pqSTwqOhkSWoppUAHRY3AAAAAAAAAAAAhIF8AJqYiwCoppQApaOSTqak + k+SmpJP/pqST/6akk/empJPnpqST5qakk/umpJP/pqST/6akk/+mpJP/pqST/6akk/+mpJP/pqST/6ak + k/mmpJPkpqST6aakk/mmpJP/pqST/6akk8KkopImpaOSAK+tmQAdFjcAAAAAAAAAAAAAAAAAoqCQAKKg + kACqqJUApaOSTaakk7+mpJOHpqSTR6akkyampJMkpaOTdaakk/OmpJP/pqST/6akk/+mpJP/pqST/6ak + k/+mpJPnpaOTYKakkyKmpJMppqSTTqakk5OmpJOspKKSJ6akkwCwr5oAm5mMAAAAAAAAAAAAAAAAAAAA + AAAAAAAAop+QAKKgkAD///8ApaOSDKimlQCmpJMApqSTAKWjkgCNioIBpaOShqakk/+mpJP/pqST/6ak + k/+mpJP/pqST+aSikmeqqJYApaOTAKakkwCmpJMAm5mMAKSikgimpJMAsK+aAJuZjAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAoqCRAKOhkQClo5IApaOSAKSikgB1cnIAo6GRAKKgkQChn5AZpaOSzqak + k/+mpJP/pqST/6akk/+lo5KynpyOCqGfkAChn5AAlZKHAKWjkgClo5IApKKSAJ+djgCcmo0AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdFjcA////AK6s + mACkopJ2pqST+Kakk/ampJP2pqST8qOhkVWnpZMAqKaUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/+AH//BAAg/gAAAHwAAAA4AAAAGAAAABgAAAAYAAAAGAAAABgAAAA4AA + AAEAAAAAAAAAAAAAAAAAAQAAAAPAAAADwAAAAYAAAAAAAAAAAAAAAAAAAAAAAIAAAAOAAAABgAAAAYAA + AAGAAAABgAAAAcAAAAPgAAAH8AAAD//AB/8= + + + \ No newline at end of file diff --git a/Source/VSoft_Dll/FrmAbout.Designer.cs b/Source/VSoft_Dll/FrmAbout.Designer.cs new file mode 100644 index 0000000..35948d8 --- /dev/null +++ b/Source/VSoft_Dll/FrmAbout.Designer.cs @@ -0,0 +1,207 @@ +namespace VSoft +{ + partial class FrmAbout + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmAbout)); + this.pnlTopLogo = new System.Windows.Forms.Panel(); + this.lblTitle = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.lblVisitUrl = new System.Windows.Forms.Label(); + this.LblQQ_Qun = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.pnlTopLogo.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // pnlTopLogo + // + this.pnlTopLogo.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(12)))), ((int)(((byte)(125)))), ((int)(((byte)(182))))); + this.pnlTopLogo.Controls.Add(this.lblTitle); + this.pnlTopLogo.Dock = System.Windows.Forms.DockStyle.Top; + this.pnlTopLogo.Location = new System.Drawing.Point(0, 0); + this.pnlTopLogo.Name = "pnlTopLogo"; + this.pnlTopLogo.Size = new System.Drawing.Size(493, 59); + this.pnlTopLogo.TabIndex = 8; + // + // lblTitle + // + this.lblTitle.AutoSize = true; + this.lblTitle.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblTitle.ForeColor = System.Drawing.Color.White; + this.lblTitle.Location = new System.Drawing.Point(12, 22); + this.lblTitle.Name = "lblTitle"; + this.lblTitle.Size = new System.Drawing.Size(110, 16); + this.lblTitle.TabIndex = 0; + this.lblTitle.Text = "睿元管理系统"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 67); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(35, 12); + this.label1.TabIndex = 9; + this.label1.Text = "官网:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(53, 67); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(0, 12); + this.label2.TabIndex = 10; + // + // lblVisitUrl + // + this.lblVisitUrl.AutoSize = true; + this.lblVisitUrl.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblVisitUrl.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblVisitUrl.ForeColor = System.Drawing.Color.Blue; + this.lblVisitUrl.Location = new System.Drawing.Point(53, 67); + this.lblVisitUrl.Name = "lblVisitUrl"; + this.lblVisitUrl.Size = new System.Drawing.Size(77, 12); + this.lblVisitUrl.TabIndex = 11; + this.lblVisitUrl.Text = "立即访问官网"; + this.lblVisitUrl.Click += new System.EventHandler(this.LblVisitUrl_Click); + // + // LblQQ_Qun + // + this.LblQQ_Qun.AutoSize = true; + this.LblQQ_Qun.Cursor = System.Windows.Forms.Cursors.Hand; + this.LblQQ_Qun.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.LblQQ_Qun.ForeColor = System.Drawing.Color.Blue; + this.LblQQ_Qun.Location = new System.Drawing.Point(234, 67); + this.LblQQ_Qun.Name = "LblQQ_Qun"; + this.LblQQ_Qun.Size = new System.Drawing.Size(59, 12); + this.LblQQ_Qun.TabIndex = 14; + this.LblQQ_Qun.Text = "183161992"; + this.toolTip1.SetToolTip(this.LblQQ_Qun, "点击复制"); + this.LblQQ_Qun.Click += new System.EventHandler(this.LblQQ_Qun_Click); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(234, 67); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(0, 12); + this.label4.TabIndex = 13; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(193, 67); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(35, 12); + this.label5.TabIndex = 12; + this.label5.Text = "QQ群:"; + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(85, 105); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(319, 174); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pictureBox1.TabIndex = 17; + this.pictureBox1.TabStop = false; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.label3.Location = new System.Drawing.Point(13, 297); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(365, 12); + this.label3.TabIndex = 18; + this.label3.Text = "注:本软件永久免费,您可以任意分发分享本软件,但不得破解本软件"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label6.Location = new System.Drawing.Point(100, 90); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(285, 12); + this.label6.TabIndex = 19; + this.label6.Text = "支持微信或支付宝进行捐助,您可以捐助任意金额"; + // + // FrmAbout + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(493, 318); + this.Controls.Add(this.label6); + this.Controls.Add(this.label3); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.LblQQ_Qun); + this.Controls.Add(this.label4); + this.Controls.Add(this.label5); + this.Controls.Add(this.lblVisitUrl); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.pnlTopLogo); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "FrmAbout"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "关于"; + this.Load += new System.EventHandler(this.FrmAbout_Load); + this.pnlTopLogo.ResumeLayout(false); + this.pnlTopLogo.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Panel pnlTopLogo; + private System.Windows.Forms.Label lblTitle; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label lblVisitUrl; + private System.Windows.Forms.Label LblQQ_Qun; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label6; + } +} \ No newline at end of file diff --git a/Source/VSoft_Dll/FrmAbout.cs b/Source/VSoft_Dll/FrmAbout.cs new file mode 100644 index 0000000..01b9d07 --- /dev/null +++ b/Source/VSoft_Dll/FrmAbout.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using VSoft.Config; + +namespace VSoft +{ + public partial class FrmAbout : Form + { + public FrmAbout() + { + InitializeComponent(); + } + + private void FrmAbout_Load(object sender, EventArgs e) + { + lblTitle.Text = Soft_Info.Soft_Title + " V" + ryCommon.RySoft.VersionStr; + LblQQ_Qun.Text = Soft_Info.QQ_Qun; + if (Soft_Info.Soft_Url.Length == 0) { lblVisitUrl.Enabled = false; } + } + + private void LblVisitUrl_Click(object sender, EventArgs e) + { + ryCommon.RyFiles.OpenUrl(Soft_Info.Soft_Url); + } + + private void BtnCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + } + + private void LblQQ_Qun_Click(object sender, EventArgs e) + { + try + { + Clipboard.SetText(LblQQ_Qun.Text); + MessageBox.Show("已成功复制到剪切板,请复制到QQ搜索。","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); + } + catch { } + } + } +} diff --git a/Source/VSoft_Dll/FrmAbout.resx b/Source/VSoft_Dll/FrmAbout.resx new file mode 100644 index 0000000..a94005d --- /dev/null +++ b/Source/VSoft_Dll/FrmAbout.resx @@ -0,0 +1,1255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAAT8AAACuCAYAAABA6wr5AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAA9eVJREFUeF7s/QegZkWRP37fSeQchjSBMDAMYUhDzjBkJCM5g0RzAsyoYBZxDZiz + iK5p1XV31XWDYYM5rRFRsuTMBOo9n3P5XpvHCwMM+xve/VvQ0+c5p0N1dXV1VXWdc4fqr/BX+P8MzO/T + gw/OG867f13d/1DK87+mp2Z6sE81Mm/y4Wdzux9z+l+PB/4q/P4K/5+BkQVjocx/oLuwYOb39/3Kwvpr + emqmmntnN133dj/m9r87kTd8H3T3Hi/8Vfj9Ff6/A3M7YXfr9TXnV/9V9/7n5+qeb36g7v/G5fXAP19e + c//lfXX/N9//1/QUTrf97N/r/mt+WXVvJwQ7qUfwzZfn4nHCw4Tf/PlUyD/n4MG+5WFo7wc8T2phtHqP + VP+R+htsc+7ch0v31Eu5wfJg3jz7+p9hEAd12vptG4O/weBvMFqbgfSftkar397XVq4H7+V32mzHNlgn + ORjEbxDattv+0/6cOY/fpPjfgB6rOcOmz9wHOpzm0QK6sUHPzS7Ne7DT4QyXZtf9nl/31INX/6Ru/8QF + 9cBLpteNJy5Z1x8yVNfvN1RX79GlvcfXtfuOqWv2Garr9hn317QI07V7j33U9IfDJ9R1Rw3VvWdNqXsu + Pqju+sYHuom+t+6qO7up7mTD/Hk9G8yfi2/vHtbm59MSR9cKHyb8sggsgLvuuqvuvvvuuv/+++vee+/t + k+v77rtv5Ldr93I/z+T33HPPyHPttGXzWz9JFpi6+lVXSp/y/H7ggQdG2vY7ArEVBNrzW1I2dZSX9C/X + hn7lygQGhYr2gNzvjOPOO+/s+08ZqR2jHDxe4aEd+LXjDJ6S/oIjvDMeye/U0X/qSIO/2/uSunJ1tWls + rsHgxrMooMfAHJBupqQzde7tLlB3TsfqD3bLAFWkOd0qmHvtD+v6i4+pGzphd92eY+s3B3f5kWPr9uMX + q1uOH1M3nThUfzp5TP3ppKG6rUt/OvmvaVGmm0959HTDCV3+9KW6Oew2rW6zunn2hLrxpIn1wGffVXUf + fujmHZN0+X2d8MMIHcc/5M/9S/gL4Qcw/uc///l6//vfXx/96Efrwx/+cH3kIx+pj33sY33+oQ99qE+5 + L8/v5JK6H//4x/syacfz973vffXZz362brvttr4/8L3vfa8v88EPfnCk/mCf7uU33N797nfX17/+9RHB + FSGUcfzmN7+pD3zgA3X55Zf3basbHPzWjufvfe976+c//3m/8EEES9pJDtDmE5/4RF/nHe94R33729/u + +1fmpptuqr/7u7/r8TKOf/zHf3yo1rAAVObRUgTMNddc09fXDjyl97znPT3dvvSlL/UCC6jzb//2b/19 + 44CX5Fr90MwchJ6jpfShjhydtOGZfm+44Ya+v0UNqMNDN5e464SfcwuUcOdB+7wCPSvMqbs//+q65aCh + unHPobr26CXqlk64XXdap/V1i+jG7vqWbrHdeupQ3dRdX3N8t/i66z+dPO6vaRGmm04a+6jpzm6urj1z + qK46vdPcT+vmsBOGtx44pn63x+J183Nn1pyr/61jhoc2Rpt2r/p1vDG8XP4CRhV+V111Ve277761+OKL + 92nJJZesZZZZps+XWGKJPs+158mlxRZbrE+5P1odadasWfXTn/50RGN60YteVEsvvfRftLfUUkuN1Mlz + 7YwfP75/dvbZZ9eNN97Y4x38AWFj8a+//vp9ueClrrGkHfe0+653vasXbAA+IMKobfcXv/hFTZo0aQTP + c889t6699tr+2Xe/+93aZZdd+jaXXXbZOvHEE0faAtpJCgzeI0i//OUv1zrrrPMwnEM78/Lb3/62Lwvf + Zz/72bX88sv39JgwYUJfxnjdUyd4asf1Y0nKt7SxET4VND8kGtb7bCSdyBveo7qJ6h506A1TcE5d+5rd + 6vfbLV7XP31c3XVGp9l1gu66U5etm7vFctPRY+u6gxer3+3TaYKdYLx678Xqur2Wq+t3X77TDmmIf02L + Kl0/+9HTrXtPqFsO6DT3k8bXTd2c3nb64nXNMzqB2AnF23fvNMJDO5P4Wx8rng/MgD3u6dIjce6ows9i + 3m233WpoaKjGjh3b54NpzJgxD7tuf4+W8lxuoW655Zb9Io7WdOaZZz6sTHvd5pL648aN669PO+20uvnm + m/s2Wu0K0PgIgdSTjCdttWMj/ILLoNBrBRiBs+66647Ue+UrX9lrjLRF2uP+++/f3ydEzjrrrL5OcEoa + hMFn//Ef/1FrrbXWw8aca/Pyxz/+sS9HAyT8CSn0aMczOMbBtpJyb7AMQSrX7j/90z/1/S1yQB5T0eVz + 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 + fOgxmp82CE5tKCtUQPBu+kz/g7mDE387xAFI+pG0ZRETGkyLYQE4p+bNva9nuBkbdUJn3JK1+Cpr1tJT + 1+7/Bu9SG02vFWZ1Zu9mnQBcd72auu22tdVRh9dGRx7U/wnKd3zuM/WZ73273vDFT9Ye53VMc/Lhtfuz + T6+NOuaZdOh+tcN5p9UFn/5QnXzZJbXlqU+vGUfsX1P32bX/i25Tdtm51tltx96XOGm77Wtip70tt8lG + terGG/bCb7XVV+p3VmNCO/gam9wCI8SNy5iETTjUyIRjStqHjYAAdRCCFmiJLupItOpofhYOV4L7BKq5 + 0X7oH1rKLUZzFQj9szDh0S7SRQU9VsOodfDENb8sKOB36CykJxtCwj5CC5CPnaKlhQlaLcdmg97KcBEB + i97vNqmPZ1tA39POPKvGjOtM6a7M73/3kNl89+211e6dFTFtxdp0p/Vrk63XrnU2XrtWn7FebbzrVrXx + zuvX5G0n1REXnlHnvOPjtfdr31Lbvf7NtckFr6otzzu/tjrxzNr25GNri5M7K6Xb6KcdsUvHt9vX7NOf + Vlvuu1W97xMP+dLmDn8FvR1PK3Bco0Xo0W6UAP7hEcIvY6UBp1xLg/i2H8mlknvyx857T4LZSxNhVmUi + +X58l0vIiZNXk+wP74h459gU28dnxWfBVHJSDJi98fkRVnxYvjwspEA4ByEbAus7hHedQWNUC1MfTEO5 + EBpCT3K6nJPjOffdWf/0j1+t5z7vBbX65PVq3LIT+2/4+ZzV0muvUxNnzqzF11m71tt2uzripNPqmDPP + 6b/avPfZZ9Txr3hJveS976xz3/TaevqLn1U7nHxkbXbCITXz1CNrg2MOqQ2OOrTWPXjfWuegfWrS/rvW + hofv14fATNtvj1pzh21rSqd1rb3nrrXKjI1qjQ02qT2PPKp2Pf7oWnzdyTW01JK11qqr9eER0VIJPC4C + ZqwNQ3gKf57EEex0FqAl1wKHr7JMKy/NOyAyHzaRbFAOl8yHRcpvgs5hNuab7/15OT1/vFxf+Wv4Fmvm + gJAFYTq5Z4saegxG0Hhiwi88xmeMVwm8zEkr3MyHZ2ifcg44Qk9z5JmT8NApf8NDEqcGzHO+mN3+GQFz + SUjYzLQjP/+Cl/XuC58+u+H64Q+C3HHP3bXt7tvVauutWjvtNas22XJaTV5/zVp92pq19Z6zas/DdqwN + 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 + LwBaya8VrWjFFxKt5NeKVrTiCwjp/wC1GUU+XPdJNAAAAABJRU5ErkJggg== + + + + + AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAEZcAABGXAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANygSADcoEgA3KBIANyg + SADcoEgA3KBIANygSADcoEgA3KBIANygSADcoEgA3KBIANygSADcoEgAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANygSADcoEgA3KBIANyg + SADcoEgA3KBIFtygSDjcoEhS3KBIVtygSFbcoEhT3KBIPNygSBncoEgC3KBIANygSADcoEgA3KBIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcoEgA3KBIANyg + SADcoEgG3KBIQdygSJXcoEjT3KBI8dygSPzcoEj93KBI/dygSPzcoEjz3KBI2NygSJ7coEhJ3KBICtyg + SADcoEgA3KBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3KBIANyg + SADcoEgA3KBIL9ygSKTcoEjy3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yg + SPXcoEiw3KBIOtygSADcoEgA3KBIANygSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANyg + SADcoEgA3KBIAdygSFrcoEjf3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yg + SP/coEj/3KBI/9ygSP/coEjn3KBIatygSAXcoEgA3KBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADcoEgA3KBIANygSAHcoEhp3KBI8dygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yg + SP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj33KBIfNygSAXcoEgA3KBIAAAAAAAAAAAAAAAAAAAA + AAAAAAAA3KBIANygSADcoEgA3KBIVtygSPDcoEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yf + R//cn0f/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj33KBIatygSADcoEgA3KBIAAAA + AAAAAAAAAAAAAAAAAADcoEgA3KBIANygSCrcoEjb3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yg + SP/cn0f/5rx+/+jAhv/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEjn3KBIOtyg + SADcoEgAAAAAAAAAAAAAAAAA3KBIANygSADcoEgE3KBIm9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yg + SP/coEj/3KBI/9yfR//nvX//6MGI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yg + SP/coEiw3KBICtygSADcoEgAAAAAAAAAAADcoEgA3KBIANygSDbcoEjs3KBI/9ygSP/coEj/3KBI/9yg + SP/coEj/3KBI/9ygSP/coEj/3KBI/9yfR//cn0f/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yg + SP/coEj/3KBI/9ygSPXcoEhJ3KBIANygSAAAAAAAAAAAANygSADcoEgA3KBIh9ygSP/coEj/3KBI/9yg + SP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3aJM/92iTP/coEj/3KBI/9ygSP/coEj/3KBI/9yg + SP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSJ7coEgC3KBIAAAAAAAAAAAA3KBIANygSA7coEjG3KBI/9yg + SP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yfRv/qxpH/7Muc/9ygR//coEj/3KBI/9yg + SP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI2NygSBncoEgAAAAAAAAAAADcoEgA3KBIKdyg + SOjcoEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3J9F/+7Sqf/y27r/3KBH/9yg + SP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEjz3KBIPNygSAAAAAAAAAAAANyg + SADcoEhD3KBI99ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/bnkX/68qZ//Ti + x//doUv/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSPzcoEhT3KBIAAAA + AAAAAAAA3KBIANygSFLcoEj83KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yf + Rv/kt3T/+e/f/+KvZf/cn0b/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/dyg + SFbcoEgAAAAAAAAAAADcoEgA3KBIUdygSPvcoEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yg + SP/coEj/3KBI/92jTv/z3sD/89/A/9+nVf/cn0b/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yg + SP/coEj93KBIVtygSAAAAAAAAAAAANygSADcoEhA3KBI9tygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yg + SP/coEj/3KBI/9ygSP/coEj/3J9G/+GtYv/25s//9OLG/+CrXf/cn0f/3KBI/9ygSP/coEj/3KBI/9yg + SP/coEj/3KBI/9ygSPzcoEhS3KBIAAAAAAAAAAAA3KBIANygSCbcoEjm3KBI/9ygSP/coEj/3KBI/9yg + SP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3J9G/+CqW//04sf/8ty7/92iTf/coEj/3KBI/9yg + SP/coEj/3KBI/9ygSP/coEj/3KBI8dygSDjcoEgAAAAAAAAAAADcoEgA3KBIDNygSMHcoEj/3KBI/9yg + SP/coEj/3KBI/9ygSP/coEj/3KBH/9yfRv/coEj/3KBI/9ygSP/coEj/259F/+Kxaf/57+D/47Ru/9yf + Rv/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEjT3KBIFtygSAAAAAAAAAAAANygSADcoEgA3KBIftyg + SP/coEj/3KBI/9ygSP/coEj/3KBI/9ygR//eplT/5bh3/92jTv/coEj/3KBI/9ygSP/coEf/3qRQ//fo + 0//owIb/255F/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSJXcoEgA3KBIAAAAAAAAAAAA3KBIANyg + SADcoEgv3KBI59ygSP/coEj/3KBI/9ygSP/coEj/3J9G/+KxaP/47d3/4a9k/9yfRv/coEj/3KBI/9yf + R//fqVn/+Ozb/+W5ef/bn0X/3KBI/9ygSP/coEj/3KBI/9ygSP/coEjy3KBIQdygSADcoEgAAAAAAAAA + AADcoEgA3KBIANygSAHcoEiP3KBI/9ygSP/coEj/3KBI/9ygSP/coEf/3qVS//bmzv/u0af/3KBJ/9ue + Rf/bn0X/3J9H/+zLmv/36tf/36hY/9yfR//coEj/3KBI/9ygSP/coEj/3KBI/9ygSKTcoEgG3KBIANyg + SAAAAAAAAAAAAAAAAADcoEgA3KBIANygSCHcoEjQ3KBI/9ygSP/coEj/3KBI/9ygSP/cn0b/5bh3//nv + 4f/w17H/5bl3/+W3df/v06r/+vDj/+e+gv/cn0b/3KBI/9ygSP/coEj/3KBI/9ygSP/coEjf3KBIL9yg + SADcoEgAAAAAAAAAAAAAAAAAAAAAANygSADcoEgA3KBIANygSEjcoEjo3KBI/9ygSP/coEj/3KBI/9yg + SP/coEj/5LVx//Pfwf/47Nv/+O3c//Thxf/luXf/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI8dyg + SFrcoEgA3KBIANygSAAAAAAAAAAAAAAAAAAAAAAAAAAAANygSADcoEgA3KBIANygSFjcoEjo3KBI/9yg + SP/coEj/3KBI/9ygSP/cn0b/3aJL/9+pWf/gqlr/3aJM/9yfRv/coEj/3KBI/9ygSP/coEj/3KBI/9yg + SPDcoEhp3KBIAdygSADcoEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANygSADcoEgA3KBIANyg + SEjcoEjQ3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3J9H/9yfR//coEj/3KBI/9ygSP/coEj/3KBI/9yg + SP/coEjb3KBIVtygSAHcoEgA3KBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANyg + SADcoEgA3KBIANygSCHcoEiP3KBI59ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9ygSP/coEj/3KBI/9yg + SP/coEjs3KBIm9ygSCrcoEgA3KBIANygSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANygSADcoEgA3KBIANygSAHcoEgv3KBIftygSMHcoEjm3KBI9tygSPvcoEj83KBI99yg + SOjcoEjG3KBIh9ygSDbcoEgE3KBIANygSADcoEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANygSADcoEgA3KBIANygSADcoEgA3KBIDNygSCbcoEhB3KBIUdyg + SFHcoEhD3KBIKdygSA7coEgA3KBIANygSADcoEgA3KBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcoEgA3KBIANygSADcoEgA3KBIANyg + SADcoEgA3KBIANygSADcoEgA3KBIANygSADcoEgA3KBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA//////+AAf/+AAB//AAAP/gAAA/wAAAP4AAAB8AAAAPAAAADgAAAAYAA + AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAHAAAADwAAAA+AA + AAfwAAAP+AAAH/wAAD/+AAB//4AB//////8= + + + \ No newline at end of file diff --git a/Source/VSoft_Dll/FrmAddColumn.Designer.cs b/Source/VSoft_Dll/FrmAddColumn.Designer.cs new file mode 100644 index 0000000..fe4ee31 --- /dev/null +++ b/Source/VSoft_Dll/FrmAddColumn.Designer.cs @@ -0,0 +1,153 @@ +namespace VSoft +{ + partial class FrmAddColumn + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmAddColumn)); + this.BtnCancel = new ryControls.ButtonEx(); + this.BtnOK = new ryControls.ButtonEx(); + this.label1 = new System.Windows.Forms.Label(); + this.TxtName = new ryControls.TextBoxEx2(); + this.label2 = new System.Windows.Forms.Label(); + this.TxtDes = new ryControls.TextBoxEx2(); + this.SuspendLayout(); + // + // BtnCancel + // + this.BtnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.BtnCancel.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95))))); + this.BtnCancel.Location = new System.Drawing.Point(264, 117); + this.BtnCancel.Name = "BtnCancel"; + this.BtnCancel.Size = new System.Drawing.Size(75, 27); + this.BtnCancel.TabIndex = 10; + this.BtnCancel.Text = "取消"; + this.BtnCancel.UseVisualStyleBackColor = true; + this.BtnCancel.Click += new System.EventHandler(this.BtnCancel_Click); + // + // BtnOK + // + this.BtnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.BtnOK.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95))))); + this.BtnOK.Location = new System.Drawing.Point(183, 117); + this.BtnOK.Name = "BtnOK"; + this.BtnOK.Size = new System.Drawing.Size(75, 27); + this.BtnOK.TabIndex = 9; + this.BtnOK.Text = "确定"; + this.BtnOK.UseVisualStyleBackColor = true; + this.BtnOK.Click += new System.EventHandler(this.BtnOK_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(29, 12); + this.label1.TabIndex = 12; + this.label1.Text = "名称"; + // + // TxtName + // + this.TxtName.BackColor = System.Drawing.Color.White; + this.TxtName.EmptyText = ""; + this.TxtName.Location = new System.Drawing.Point(12, 29); + this.TxtName.MaxLength = 999999999; + this.TxtName.Multiline = false; + this.TxtName.Name = "TxtName"; + this.TxtName.OnlyNumeric = false; + this.TxtName.PasswordChar = '\0'; + this.TxtName.ReadOnly = false; + this.TxtName.SelectedText = ""; + this.TxtName.SelectionLength = 0; + this.TxtName.SelectionStart = 0; + this.TxtName.Size = new System.Drawing.Size(327, 22); + this.TxtName.TabIndex = 11; + this.TxtName.TextAlign = System.Windows.Forms.HorizontalAlignment.Left; + this.TxtName.ToolTip = ""; + this.TxtName.WordWrap = true; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 57); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(29, 12); + this.label2.TabIndex = 14; + this.label2.Text = "备注"; + // + // TxtDes + // + this.TxtDes.BackColor = System.Drawing.Color.White; + this.TxtDes.EmptyText = ""; + this.TxtDes.Location = new System.Drawing.Point(12, 77); + this.TxtDes.MaxLength = 999999999; + this.TxtDes.Multiline = false; + this.TxtDes.Name = "TxtDes"; + this.TxtDes.OnlyNumeric = false; + this.TxtDes.PasswordChar = '\0'; + this.TxtDes.ReadOnly = false; + this.TxtDes.SelectedText = ""; + this.TxtDes.SelectionLength = 0; + this.TxtDes.SelectionStart = 0; + this.TxtDes.Size = new System.Drawing.Size(327, 22); + this.TxtDes.TabIndex = 13; + this.TxtDes.TextAlign = System.Windows.Forms.HorizontalAlignment.Left; + this.TxtDes.ToolTip = ""; + this.TxtDes.WordWrap = true; + // + // FrmAddColumn + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(350, 156); + this.Controls.Add(this.label2); + this.Controls.Add(this.TxtDes); + this.Controls.Add(this.label1); + this.Controls.Add(this.TxtName); + this.Controls.Add(this.BtnCancel); + this.Controls.Add(this.BtnOK); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "FrmAddColumn"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "添加栏目"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private ryControls.ButtonEx BtnCancel; + private ryControls.ButtonEx BtnOK; + private System.Windows.Forms.Label label1; + public ryControls.TextBoxEx2 TxtName; + private System.Windows.Forms.Label label2; + public ryControls.TextBoxEx2 TxtDes; + } +} \ No newline at end of file diff --git a/Source/VSoft_Dll/FrmAddColumn.cs b/Source/VSoft_Dll/FrmAddColumn.cs new file mode 100644 index 0000000..309fbc9 --- /dev/null +++ b/Source/VSoft_Dll/FrmAddColumn.cs @@ -0,0 +1,78 @@ +using ryCommonDb; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using VSoft.Prams; + +namespace VSoft +{ + public partial class FrmAddColumn : Form + { + public string SQLConnStr { get; set; } = Itrycn_Db.SQLConnStr; + public FrmAddColumn() + { + InitializeComponent(); + } + public string tableName = "Columns"; + public int IsAdd { get; set; } = 1; + public int SelectId { get; set; } = -1; + public void GetInfo(int id) + { + SelectId = id; + Text = "修改栏目"; + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData(tableName, id.ToString()); + if (mydb.HaveData(ds)) + { + DataRow reader = ds.Tables[0].Rows[0]; + #region 读取信息 + TxtName.Text = reader["Name"].ToString(); + TxtDes.Text = reader["Des"].ToString(); + #endregion + } + } + db.Free(); + } + private void BtnCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + } + + private void BtnOK_Click(object sender, EventArgs e) + { + if (TxtName.Text.Length == 0) + { + MessageBox.Show("名称不能为空。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + RyQuickSQL mySQL = new RyQuickSQL(tableName); + mySQL.AddField("Name", TxtName.Text); + mySQL.AddField("Des", TxtDes.Text); + mySQL.AddField("editTime", DateTime.Now); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + if (IsAdd >= 1) + { + mySQL.AddField("sortindex", Itrycn_Db.GetColumnCount(db, 0) + 1); + mySQL.AddField("addTime", DateTime.Now); + db.ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL); + } + else + { + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + SelectId, mySQL); + } + } + db.Free(); + DialogResult = DialogResult.OK; + } + } +} diff --git a/Source/VSoft_Dll/FrmAddColumn.resx b/Source/VSoft_Dll/FrmAddColumn.resx new file mode 100644 index 0000000..347def7 --- /dev/null +++ b/Source/VSoft_Dll/FrmAddColumn.resx @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAACMuAAAjLgAAAAAAAAAA + AAAAAAAAAAAAAKizMQCVogAAoKscAJ2pFQCVowUAtrpDAqmwKAWmriMGpq4kB6auJAemriQHpq4kB6au + JAemriQHpq4kB6auJAemriQHpq4kB6auJAemriQHpq4jBqiwKAW0uT4Ck6IBAJ2pFQCgrBwAh5QAAKey + LgAAAAAAAAAAAAAAAACfriQAorApAJupFgCgrB0Tn6oYU56pFomeqRalnqkVsJ6pFbSeqRW0nqkVtJ6p + FbSeqRW0nqkVtJ6pFbSeqRW0nqkVtJ6pFbSeqRW0nqkVtJ6pFbSeqRW0nqkVsZ6pFqaeqRaLn6oYVqCs + HRaaqRUAoa8mAJ+tIwAAAAAAo7IwAKGwKQCVpQsAnqscQp2qGMScqRf7nKkW/5ypFv+cqRb/nKkW/5yp + Fv+cqRb/nKkW/5ypFv+cqRb/nKkW/5ypFv+cqRb/nKkW/5ypFv+cqRb/nKkW/5ypFv+cqRb/nKkW/5yp + Fv+cqRf8naoYyZ2rHEiKnQAAoK4lAKCxKwCGogAAmaoZAJysHkSbqhvjm6oa/5uqGv+bqhr/m6oa/5uq + Gv+bqhr/m6oa/5uqGv+bqhr/m6oa/5uqGv+bqhr/m6oa/5uqGv+bqhr/m6oa/5uqGv+bqhr/m6oa/5uq + Gv+bqhr/m6oa/5uqGv+bqhr/m6ob6JyrHk2YqRYA1s2DAJyuJACcriYZmqwfy5mrHf+Zqx3/masd/5mr + Hf+Zqx3/masd/5mrHf+Zqx3/masd/5mrHf+Zqx3/masc/5mrHP+Zqxz/masc/5mrHf+Zqx3/masd/5mr + Hf+Zqx3/masd/5mrHf+Zqx3/masd/5mrHf+Zqx3/mqwe0puuJB6brSMAl6sfAJmtJGGYrCD+mKwg/5is + IP+YrCD/mKwg/5isIP+YrCD/mKwg/5isIP+XrB//lqsd/5isIv+dsCz/obM1/6GzNP+dsCv/mKwh/5ar + Hf+XrB//mKwg/5esH/+YrCH/mKwg/5esH/+YrCD/mKwg/5isIP+YrCD/ma0jbJaqHAD///8Al64mm5et + JP+XrST/l60k/5etJP+XrST/l60k/5etJP+WrSP/lawi/6G1Ov+9y3X/2eGu/+jt0P/v8t3/7/Lc/+fs + zf/W36n/uslu/5+zNf+UqyD/p7lG/9bfqf/Z4a7/tcRj/5asIv+XrST/l60k/5etJP+XriamprtJA520 + OgiWryu4la4p/5WuKf+Vrin/la4p/5WuKf+Vrin/la0o/5mxMP+/zXz/7PDY//7+/f////////////// + ///////////////////9/vz/6O3Q/8LQg//l68v////////////R3KP/lK0n/5WuKf+Vrin/la4p/5au + K8KbszYNm7Q8DZWvMMOUry//lK8v/5SvL/+Ury//lK8v/5SuLf+ctT7/1N6r//39+/////////////// + ///7/Pj/9vnv//f57//8/fn//////////////////////////////////////8vYm/+Uri3/lK8v/5Sv + L/+Ury//la8wzJqzOxOctkYPlLA2x5OwNP+TsDT/k7A0/5OwNP+TrzP/mLM+/9bhsv////////////// + ///t8t//ydic/6/Fa/+lvVf/pr1Y/7HGbv/M2qL/8/bq///////////////////////b5Lz/nbdH/5Kv + M/+TsDT/k7A0/5OwNP+TsDXQlrI6FZy4TBCTsT3HkrA6/5KxOv+SsTr/krA6/5KwOv/E1JT//v79//// + ///9/vz/0+Cy/5+6U/+RsDj/kK83/5GwOP+RsDj/j641/6K8WP/r8Nr//////////////////v7+/7/R + jP+Qrzf/krE6/5KxOv+SsTr/krA6/5KxO9CUsj4Wm7lREJKyQseRskD/kbJA/5GyQP+QsT7/o75f//L2 + 6P///////////9Derv+VtEf/kLE+/5GyQP+RskD/kbJA/4+xPv+hvV3/5ezS//////////////////// + ////////6/Hd/526Vf+QsT//kbJA/5GyQP+RskD/kbJA0JOzQxaZulcQkbRIx4+zRv+Ps0b/j7NG/46y + RP/H2aL////////////m7tb/mblW/46yRP+Ps0b/j7NG/4+zRv+OskT/oL5h/+Xt0/////////////// + ///g6s3/7vTk////////////vdKR/46yQ/+Ps0b/j7NG/4+zRv+Qs0bQkbRJFpi6WxCPtE3HjrRL/460 + S/+Ns0r/lLdU/+Xt1f///////v79/7nQkP+Mskj/jrRL/460S/+OtEv/jbNJ/5+/Zv/k7dT///////// + ////////2ebD/5e5Wf/C15/////////////c58f/kLVP/46zS/+OtEv/jrRL/460S9CQtU4WlrtfEI22 + UceMtU//jLVP/4u0Tf+dwGn/9Pju///////y9+z/nL9o/4u0Tf+MtU//jLVP/4u0Tv+bvmb/5O3V//// + /////////////9jmxf+Wu17/irNL/6TEdP/4+vT//////+3z5P+XvF//i7RO/4y1T/+MtU//jLVP0I62 + UhaVvGIQjLdVx4q2Uv+LtlP/ibVQ/6XGef/5+/f//////+fw3P+Rul3/irZS/4u2U/+LtlP/ibVQ/8PZ + pv/////////////////Y58b/lLxi/4m1Uf+KtVH/l71l/+/15///////9Pjv/5zBbf+JtVH/i7ZT/4u2 + U/+LtlPQjbdWFpS9ZRCKt1jHibdW/4m3Vv+HtlT/pch+//r8+P//////5e/Z/4+6Xv+Jtlb/ibdW/4m3 + Vv+HtlT/ttKX//3+/P//////1+fG/5O9Zf+ItlT/ibdW/4i2Vf+UvWb/7fTl///////1+fH/nMNy/4i2 + VP+Jt1b/ibdW/4m3VtCLuFkWkr5pEIm4XMeHt1r/h7da/4a3WP+dxXj/9vrz///////t9Ob/k75q/4e3 + Wf+Ht1r/h7da/4e3Wf+MumD/sdCU/7bUm/+RvWf/hrdY/4e4Wv+Ht1r/hrdY/5rDdP/0+PD///////D2 + 6/+WwG7/h7dY/4e3Wv+Ht1r/iLha0Iq5XRaRv2wQh7lfx4a4Xf+GuF3/hbhd/5C+bP/r8+T///////r8 + +f+my4n/hLdb/4a4Xf+GuF3/hrhd/4a4Xf+Et1v/hLdb/4W4Xf+GuF3/hrhd/4a4Xf+Et1v/sNGW//3+ + /f//////4u7Y/4u8Zf+GuF3/hrhd/4a4Xf+GuF7QiLphFo+/bxCGumPHhLlh/4S5Yf+EuWH/hbpi/9Dk + wv///////////9HlxP+GumP/hLlh/4S5Yf+EuWH/hLlh/4S5Yf+EuWH/hLlh/4S5Yf+EuWH/hLlg/4m8 + aP/b6tH////////////E3rT/g7lg/4S5Yf+EuWH/hLlh/4W5YdCHumQWjsByEIS7ZseDumT/g7pk/4O6 + ZP+BuWL/pc2Q//r8+P//////+fz4/67Smv+BuWL/g7pk/4O6ZP+DumT/g7pk/4O6ZP+DumT/g7pk/4K6 + ZP+CumP/uNem//z9/P//////9fnz/5zIhP+BuWL/g7pk/4O6ZP+DumT/g7pk0IW7ZxaMwXQQg7xox4G7 + Z/+Bu2f/gbtn/4G7Zv+FvWv/0ufJ////////////8vjv/6vSmf+CvGj/f7tl/4G7Zv+Bu2f/gbtn/4G7 + Zv9/umX/g71q/7PWo//2+vT////////////H4bz/grxo/4G7Z/+Bu2f/gbtn/4G7Z/+BvGfQg71qFovD + dxCBvWvHf71q/3+9av9/vWr/f71q/368aP+Tx4H/6PPk////////////+Pv2/8njv/+ay4n/hsBy/4G+ + bP+Bvmz/h8Fz/57Mjf/P5sb/+v35////////////4O/b/43Eev9+vGn/f71q/3+9av9/vWr/f71q/4C9 + atCCvm0WhsJ3Dn++bsV+vm3/fr5t/36+bf9+vm3/fr5t/3y9a/+bzY7/6fTm//////////////////b6 + 9f/j8d//1urQ/9fq0f/l8uH/+Pv3/////////////////+Lx3/+UyYb/fL1r/36+bf9+vm3/fr5t/36+ + bf9+vm3/f75uzoXBdRSFw3kKfb9xvHy/cP98v3D/fL9w/3y/cP98v3D/fL9w/3u+bv+Syoj/1evR//z9 + +/////////////////////////////////////////////r8+f/O58r/jceD/3u+bv98v3D/fL9w/3y/ + cP98v3D/fL9w/3y/cP99v3HGg8J4D5XNjQJ7wXSlesBz/3rAc/96wHP/esBz/3rAc/96wHP/esBz/3nA + cf+Aw3n/ptWi/9Tr0//w+O//+/37//7+/v/+/v7/+v36/+737f/Q6c7/odOc/37Cdv95wHH/esBz/3rA + c/96wHP/esBz/3rAc/96wHP/esBz/3vBdLCIxoAFdcByAHrCd3J4wXb/eMF2/3jBdv94wXb/eMF2/3jB + dv94wXb/eMF2/3jBdf92wHT/e8N5/4vKif+b0pr/pdak/6XWpP+a0Zn/icmH/3rCeP92wHT/eMF1/3jB + dv94wXb/eMF2/3jBdv94wXb/eMF2/3jBdv94wXb/esJ3fnG+bwB5w3oAesR7KXfDeOB2wnj/dsJ4/3bC + eP92wnj/dsJ4/3bCeP92wnj/dsJ4/3bCeP92wnj/dcJ3/3TBdv90wXb/dMF2/3TBdv91wnf/dsJ4/3bC + eP92wnj/dsJ4/3bCeP92wnj/dsJ4/3bCeP92wnj/dsJ4/3fDeOd5w3sxeMN5AIHJhgBbuWYAdsR8aXTE + e/d0xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv/dMR7/3TE + e/90xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv5dsR8c8vlvQB/x4MAfseBAHjG + gAB5yIUEdMV/bnPFfuhyxX7/csV+/3LFfv9yxX7/csV+/3LFfv9yxX7/csV+/3LFfv9yxX7/csV+/3LF + fv9yxX7/csV+/3LFfv9yxX7/csV+/3LFfv9yxX7/csV+/3LFfv9yxX7/c8V+63TFf3Z6yIUHeMaAAH3G + gAAAAAAAdsV/AHfGgQDZ//wAdMaCNHLGgYpyxoG+ccaB1HHGgd1xxoHfccaB33HGgd9xxoHfccaB33HG + gd9xxoHfccaB33HGgd9xxoHfccaB33HGgd9xxoHfccaB33HGgd1xxoHVcsaBwHLGgY10xoI5iNKaAXfG + gQB3xoAAAAAAAAAAAAAAAAAAeciFAHzJhwBzxoEAYLtqAHjKigx2yYcZdMiGIXbIhyR2yYgkdsmIJHbJ + iCR2yYgkdsmIJHbJiCR2yYgkdsmIJHbJiCR2yYgkdsmIJHbJiCR2yIckdMiGIXbJhxp4yooMV7VfAHPG + gAB6yIYAeMeEAAAAAAAAAAAAwAAAA4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAgAAAAcAAAAM= + + + \ No newline at end of file diff --git a/Source/VSoft_Dll/FrmAddSoft.Designer.cs b/Source/VSoft_Dll/FrmAddSoft.Designer.cs new file mode 100644 index 0000000..2b1b877 --- /dev/null +++ b/Source/VSoft_Dll/FrmAddSoft.Designer.cs @@ -0,0 +1,443 @@ +namespace VSoft +{ + partial class FrmAddSoft + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmAddSoft)); + this.label1 = new System.Windows.Forms.Label(); + this.PicImg = new System.Windows.Forms.PictureBox(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.选择图标ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.使用应用图标ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.label4 = new System.Windows.Forms.Label(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.TxtDes = new ryControls.TextBoxEx2(); + this.chromeTabControl1 = new ryControls.ChromeTabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.ChkRunAsAdmin = new System.Windows.Forms.CheckBox(); + this.BtnBrowser = new ryControls.ButtonEx(); + this.TxtStartPath = new ryControls.TextBoxEx2(); + this.label5 = new System.Windows.Forms.Label(); + this.TxtPath = new ryControls.TextBoxEx2(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.TxtRunPram = new ryControls.TextBoxEx2(); + this.BtnCancel = new ryControls.ButtonEx(); + this.BtnOK = new ryControls.ButtonEx(); + this.TxtName = new ryControls.TextBoxEx2(); + this.LblCustomImg = new System.Windows.Forms.Label(); + this.of_File = new System.Windows.Forms.OpenFileDialog(); + this.label6 = new System.Windows.Forms.Label(); + this.TxtCmdId = new ryControls.TextBoxEx2(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + ((System.ComponentModel.ISupportInitialize)(this.PicImg)).BeginInit(); + this.contextMenuStrip1.SuspendLayout(); + this.chromeTabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(10, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(41, 12); + this.label1.TabIndex = 1; + this.label1.Text = "软件名"; + // + // PicImg + // + this.PicImg.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.PicImg.ContextMenuStrip = this.contextMenuStrip1; + this.PicImg.Cursor = System.Windows.Forms.Cursors.Hand; + this.PicImg.Location = new System.Drawing.Point(476, 12); + this.PicImg.Name = "PicImg"; + this.PicImg.Size = new System.Drawing.Size(86, 86); + this.PicImg.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.PicImg.TabIndex = 6; + this.PicImg.TabStop = false; + this.PicImg.Click += new System.EventHandler(this.PicImg_Click); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.选择图标ToolStripMenuItem, + this.使用应用图标ToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(173, 48); + // + // 选择图标ToolStripMenuItem + // + this.选择图标ToolStripMenuItem.Name = "选择图标ToolStripMenuItem"; + this.选择图标ToolStripMenuItem.Size = new System.Drawing.Size(172, 22); + this.选择图标ToolStripMenuItem.Text = "选择自定义图标"; + this.选择图标ToolStripMenuItem.Click += new System.EventHandler(this.选择图标ToolStripMenuItem_Click); + // + // 使用应用图标ToolStripMenuItem + // + this.使用应用图标ToolStripMenuItem.Name = "使用应用图标ToolStripMenuItem"; + this.使用应用图标ToolStripMenuItem.Size = new System.Drawing.Size(172, 22); + this.使用应用图标ToolStripMenuItem.Text = "使用当前应用图标"; + this.使用应用图标ToolStripMenuItem.Click += new System.EventHandler(this.使用应用图标ToolStripMenuItem_Click); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(12, 41); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(29, 12); + this.label4.TabIndex = 10; + this.label4.Text = "备注"; + // + // openFileDialog1 + // + this.openFileDialog1.Filter = "图片文件|*.jpg;*.gif;*.bmp;*.png;*.jpeg;*.ico|应用程序|*.exe"; + // + // TxtDes + // + this.TxtDes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TxtDes.BackColor = System.Drawing.Color.White; + this.TxtDes.EmptyText = ""; + this.TxtDes.Location = new System.Drawing.Point(57, 41); + this.TxtDes.MaxLength = 999999999; + this.TxtDes.Multiline = true; + this.TxtDes.Name = "TxtDes"; + this.TxtDes.OnlyNumeric = false; + this.TxtDes.PasswordChar = '\0'; + this.TxtDes.ReadOnly = false; + this.TxtDes.SelectedText = ""; + this.TxtDes.SelectionLength = 0; + this.TxtDes.SelectionStart = 0; + this.TxtDes.Size = new System.Drawing.Size(413, 80); + this.TxtDes.TabIndex = 11; + this.TxtDes.TextAlign = System.Windows.Forms.HorizontalAlignment.Left; + this.TxtDes.ToolTip = ""; + this.TxtDes.WordWrap = true; + // + // chromeTabControl1 + // + this.chromeTabControl1.AllowDragTab = false; + this.chromeTabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.chromeTabControl1.BackTabPageImage = null; + this.chromeTabControl1.Controls.Add(this.tabPage1); + this.chromeTabControl1.Cursor = System.Windows.Forms.Cursors.Default; + this.chromeTabControl1.ItemSize = new System.Drawing.Size(100, 25); + this.chromeTabControl1.Location = new System.Drawing.Point(12, 127); + this.chromeTabControl1.Name = "chromeTabControl1"; + this.chromeTabControl1.SelectedIndex = 0; + this.chromeTabControl1.ShowAddButton = false; + this.chromeTabControl1.ShowCloseButton = false; + this.chromeTabControl1.Size = new System.Drawing.Size(551, 355); + this.chromeTabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.chromeTabControl1.TabContextMenuStrip = null; + this.chromeTabControl1.TabIndex = 9; + this.chromeTabControl1.TabMaxWidth = 100; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.ChkRunAsAdmin); + this.tabPage1.Controls.Add(this.BtnBrowser); + this.tabPage1.Controls.Add(this.TxtStartPath); + this.tabPage1.Controls.Add(this.label5); + this.tabPage1.Controls.Add(this.TxtPath); + this.tabPage1.Controls.Add(this.label2); + this.tabPage1.Controls.Add(this.label3); + this.tabPage1.Controls.Add(this.TxtRunPram); + this.tabPage1.Location = new System.Drawing.Point(1, 29); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(549, 325); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "运行"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // ChkRunAsAdmin + // + this.ChkRunAsAdmin.AutoSize = true; + this.ChkRunAsAdmin.Location = new System.Drawing.Point(8, 131); + this.ChkRunAsAdmin.Name = "ChkRunAsAdmin"; + this.ChkRunAsAdmin.Size = new System.Drawing.Size(144, 16); + this.ChkRunAsAdmin.TabIndex = 9; + this.ChkRunAsAdmin.Text = "强制以管理员方式启动"; + this.ChkRunAsAdmin.UseVisualStyleBackColor = true; + // + // BtnBrowser + // + this.BtnBrowser.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95))))); + this.BtnBrowser.Location = new System.Drawing.Point(463, 20); + this.BtnBrowser.Name = "BtnBrowser"; + this.BtnBrowser.Size = new System.Drawing.Size(33, 27); + this.BtnBrowser.TabIndex = 8; + this.BtnBrowser.Text = "..."; + this.BtnBrowser.UseVisualStyleBackColor = true; + this.BtnBrowser.Click += new System.EventHandler(this.BtnBrowser_Click); + // + // TxtStartPath + // + this.TxtStartPath.BackColor = System.Drawing.Color.White; + this.TxtStartPath.EmptyText = "留空则表示使用默认设置"; + this.TxtStartPath.Location = new System.Drawing.Point(8, 103); + this.TxtStartPath.MaxLength = 999999999; + this.TxtStartPath.Multiline = false; + this.TxtStartPath.Name = "TxtStartPath"; + this.TxtStartPath.OnlyNumeric = false; + this.TxtStartPath.PasswordChar = '\0'; + this.TxtStartPath.ReadOnly = false; + this.TxtStartPath.SelectedText = ""; + this.TxtStartPath.SelectionLength = 0; + this.TxtStartPath.SelectionStart = 0; + this.TxtStartPath.Size = new System.Drawing.Size(449, 22); + this.TxtStartPath.TabIndex = 7; + this.TxtStartPath.TextAlign = System.Windows.Forms.HorizontalAlignment.Left; + this.TxtStartPath.ToolTip = ""; + this.TxtStartPath.WordWrap = true; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(6, 88); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(53, 12); + this.label5.TabIndex = 6; + this.label5.Text = "当前路径"; + // + // TxtPath + // + this.TxtPath.BackColor = System.Drawing.Color.White; + this.TxtPath.EmptyText = ""; + this.TxtPath.Location = new System.Drawing.Point(6, 23); + this.TxtPath.MaxLength = 999999999; + this.TxtPath.Multiline = false; + this.TxtPath.Name = "TxtPath"; + this.TxtPath.OnlyNumeric = false; + this.TxtPath.PasswordChar = '\0'; + this.TxtPath.ReadOnly = false; + this.TxtPath.SelectedText = ""; + this.TxtPath.SelectionLength = 0; + this.TxtPath.SelectionStart = 0; + this.TxtPath.Size = new System.Drawing.Size(451, 22); + this.TxtPath.TabIndex = 3; + this.TxtPath.TextAlign = System.Windows.Forms.HorizontalAlignment.Left; + this.TxtPath.ToolTip = ""; + this.TxtPath.WordWrap = true; + this.TxtPath.TextChanged2 += new System.EventHandler(this.TxtPath_TextChanged2); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 8); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(29, 12); + this.label2.TabIndex = 2; + this.label2.Text = "路径"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(6, 48); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(29, 12); + this.label3.TabIndex = 4; + this.label3.Text = "参数"; + // + // TxtRunPram + // + this.TxtRunPram.BackColor = System.Drawing.Color.White; + this.TxtRunPram.EmptyText = ""; + this.TxtRunPram.Location = new System.Drawing.Point(6, 63); + this.TxtRunPram.MaxLength = 999999999; + this.TxtRunPram.Multiline = false; + this.TxtRunPram.Name = "TxtRunPram"; + this.TxtRunPram.OnlyNumeric = false; + this.TxtRunPram.PasswordChar = '\0'; + this.TxtRunPram.ReadOnly = false; + this.TxtRunPram.SelectedText = ""; + this.TxtRunPram.SelectionLength = 0; + this.TxtRunPram.SelectionStart = 0; + this.TxtRunPram.Size = new System.Drawing.Size(451, 22); + this.TxtRunPram.TabIndex = 5; + this.TxtRunPram.TextAlign = System.Windows.Forms.HorizontalAlignment.Left; + this.TxtRunPram.ToolTip = ""; + this.TxtRunPram.WordWrap = true; + // + // BtnCancel + // + this.BtnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.BtnCancel.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95))))); + this.BtnCancel.Location = new System.Drawing.Point(488, 488); + this.BtnCancel.Name = "BtnCancel"; + this.BtnCancel.Size = new System.Drawing.Size(75, 27); + this.BtnCancel.TabIndex = 8; + this.BtnCancel.Text = "取消"; + this.BtnCancel.UseVisualStyleBackColor = true; + this.BtnCancel.Click += new System.EventHandler(this.BtnCancel_Click); + // + // BtnOK + // + this.BtnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.BtnOK.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95))))); + this.BtnOK.Location = new System.Drawing.Point(407, 488); + this.BtnOK.Name = "BtnOK"; + this.BtnOK.Size = new System.Drawing.Size(75, 27); + this.BtnOK.TabIndex = 7; + this.BtnOK.Text = "确定"; + this.BtnOK.UseVisualStyleBackColor = true; + this.BtnOK.Click += new System.EventHandler(this.BtnOK_Click); + // + // TxtName + // + this.TxtName.BackColor = System.Drawing.Color.White; + this.TxtName.EmptyText = ""; + this.TxtName.Location = new System.Drawing.Point(57, 11); + this.TxtName.MaxLength = 999999999; + this.TxtName.Multiline = false; + this.TxtName.Name = "TxtName"; + this.TxtName.OnlyNumeric = false; + this.TxtName.PasswordChar = '\0'; + this.TxtName.ReadOnly = false; + this.TxtName.SelectedText = ""; + this.TxtName.SelectionLength = 0; + this.TxtName.SelectionStart = 0; + this.TxtName.Size = new System.Drawing.Size(203, 22); + this.TxtName.TabIndex = 0; + this.TxtName.TextAlign = System.Windows.Forms.HorizontalAlignment.Left; + this.TxtName.ToolTip = ""; + this.TxtName.WordWrap = true; + // + // LblCustomImg + // + this.LblCustomImg.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.LblCustomImg.BackColor = System.Drawing.Color.Transparent; + this.LblCustomImg.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.LblCustomImg.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.LblCustomImg.ForeColor = System.Drawing.Color.DodgerBlue; + this.LblCustomImg.Location = new System.Drawing.Point(476, 101); + this.LblCustomImg.Name = "LblCustomImg"; + this.LblCustomImg.Size = new System.Drawing.Size(86, 18); + this.LblCustomImg.TabIndex = 12; + this.LblCustomImg.Text = "自动获取"; + this.LblCustomImg.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // of_File + // + this.of_File.Filter = "所有文件|*.*"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(266, 16); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(65, 12); + this.label6.TabIndex = 13; + this.label6.Text = "唯一命令ID"; + // + // TxtCmdId + // + this.TxtCmdId.BackColor = System.Drawing.Color.White; + this.TxtCmdId.EmptyText = "默认为空"; + this.TxtCmdId.Location = new System.Drawing.Point(337, 11); + this.TxtCmdId.MaxLength = 999999999; + this.TxtCmdId.Multiline = false; + this.TxtCmdId.Name = "TxtCmdId"; + this.TxtCmdId.OnlyNumeric = false; + this.TxtCmdId.PasswordChar = '\0'; + this.TxtCmdId.ReadOnly = false; + this.TxtCmdId.SelectedText = ""; + this.TxtCmdId.SelectionLength = 0; + this.TxtCmdId.SelectionStart = 0; + this.TxtCmdId.Size = new System.Drawing.Size(133, 22); + this.TxtCmdId.TabIndex = 14; + this.TxtCmdId.TextAlign = System.Windows.Forms.HorizontalAlignment.Left; + this.TxtCmdId.ToolTip = "当输入了唯一命令ID后,用户可以根据该ID来运行当前软件\r\n或执行当前命令。\r\n\r\n*.命令ID只支持英文和数字字符"; + this.TxtCmdId.WordWrap = true; + // + // FrmAddSoft + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(575, 527); + this.Controls.Add(this.TxtCmdId); + this.Controls.Add(this.label6); + this.Controls.Add(this.LblCustomImg); + this.Controls.Add(this.TxtDes); + this.Controls.Add(this.label4); + this.Controls.Add(this.chromeTabControl1); + this.Controls.Add(this.BtnCancel); + this.Controls.Add(this.BtnOK); + this.Controls.Add(this.PicImg); + this.Controls.Add(this.label1); + this.Controls.Add(this.TxtName); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FrmAddSoft"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "添加软件"; + this.Load += new System.EventHandler(this.FrmAddSoft_Load); + ((System.ComponentModel.ISupportInitialize)(this.PicImg)).EndInit(); + this.contextMenuStrip1.ResumeLayout(false); + this.chromeTabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private ryControls.TextBoxEx2 TxtName; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private ryControls.TextBoxEx2 TxtPath; + private System.Windows.Forms.Label label3; + private ryControls.TextBoxEx2 TxtRunPram; + private System.Windows.Forms.PictureBox PicImg; + private ryControls.ButtonEx BtnOK; + private ryControls.ButtonEx BtnCancel; + private ryControls.ChromeTabControl chromeTabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.Label label4; + private ryControls.TextBoxEx2 TxtDes; + private ryControls.TextBoxEx2 TxtStartPath; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.Label LblCustomImg; + private ryControls.ButtonEx BtnBrowser; + private System.Windows.Forms.OpenFileDialog of_File; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem 选择图标ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 使用应用图标ToolStripMenuItem; + private System.Windows.Forms.CheckBox ChkRunAsAdmin; + private System.Windows.Forms.Label label6; + private ryControls.TextBoxEx2 TxtCmdId; + private System.Windows.Forms.ToolTip toolTip1; + } +} \ No newline at end of file diff --git a/Source/VSoft_Dll/FrmAddSoft.cs b/Source/VSoft_Dll/FrmAddSoft.cs new file mode 100644 index 0000000..1b02e54 --- /dev/null +++ b/Source/VSoft_Dll/FrmAddSoft.cs @@ -0,0 +1,217 @@ +using ryCommon; +using ryCommonDb; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using VSoft.Prams; + +namespace VSoft +{ + public partial class FrmAddSoft : Form + { + public string SQLConnStr { get; set; } = Itrycn_Db.SQLConnStr; + public FrmAddSoft() + { + InitializeComponent(); + LblCustomImg.Text = "自动获取"; + } + public string tableName = "Softs"; + private string IconPath { get; set; } = ""; + public int IsAdd { get; set; } = 1; + public int SelectId { get; set; } = -1; + public int ColumnId { get; set; } = -1; + public FrmAddSoft(string path) + { + InitializeComponent(); + if (System.IO.Path.GetExtension(path).ToLower() == ".lnk") + { + var shortcut = API.ReadShortcut(path); + TxtPath.Text = shortcut.TargetPath; + TxtRunPram.Text = shortcut.Arguments; + TxtStartPath.Text = shortcut.WorkDir; + //ShellLink cc = new ShellLink(path); + //PicImg.Image = cc.LargeIcon.ToBitmap(); + } + else + { + TxtPath.Text =RyFiles.GetRelativePath(path); + } + TxtName.Text = System.IO.Path.GetFileNameWithoutExtension(path); + } + private string orgion_IconPath = ""; + public void GetInfo(int id) + { + SelectId = id; + Text = "修改软件"; + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData(tableName, id.ToString()); + if (mydb.HaveData(ds)) + { + DataRow reader = ds.Tables[0].Rows[0]; + #region 读取信息 + TxtName.Text = reader["Name"].ToString(); + TxtCmdId.Text = reader["CmdId"].ToString(); + TxtDes.Text = reader["Des"].ToString(); + TxtPath.Text = reader["Path"].ToString(); + TxtRunPram.Text = reader["RunPram"].ToString(); + TxtStartPath.Text = reader["StartPath"].ToString(); + Json json = new Json(reader["SetJson"].ToString()); + ChkRunAsAdmin.Checked = json.GetJsonValue("RunAsAdmin", false); + var _IconPath = reader["IconPath"].ToString(); + orgion_IconPath = _IconPath; + IconPath = _IconPath; + if (_IconPath.Length==0) + { + _IconPath = reader["Path"].ToString(); + } + else + { + LblCustomImg.Text = "自定义"; + } + PicImg.Image = API.GetImg(RyFiles.GetRealPath(_IconPath)); + #endregion + } + } + db.Free(); + } + + private void BtnOK_Click(object sender, EventArgs e) + { + if (TxtName.Text.Length == 0) + { + MessageBox.Show("名称不能为空。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + if (TxtCmdId.Text.Length> 0 && !TxtCmdId.Text.Replace("_","").IsEngOrNum()) + { + MessageBox.Show("命令ID只支持英文和数字字符。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + if (IconPath.Length>0 && IconPath.IndexOfEx("")!=0 && IconPath!=TxtPath.Text) + { + var _IconPath=RyFiles.AddFileToFolder(RyFiles.GetRealPath(IconPath), Config.Soft_Info.UserDataFolder + "\\SoftLogos", true, out var result); + if(result) + { + IconPath = RyFiles.GetRelativePath(_IconPath); + } + } + if (IconPath != orgion_IconPath) + { + if (orgion_IconPath.Length > 0 && orgion_IconPath.StartsWith("\\UserDb\\SoftLogos", StringComparison.OrdinalIgnoreCase)) + { + RyFiles.DeleteFile(RyFiles.GetRealPath(orgion_IconPath)); + } + } + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + if (TxtCmdId.Text.Length > 0) + { + var ds = db.ReadData("select * from " + tableName + " where CmdId='" + TxtCmdId.Text + "' and id<>" + SelectId + " limit 1"); + if (mydb.HaveData(ds)) + { + MessageBox.Show("当前命令ID已经存在,请更换命令ID。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + ds.Dispose(); return; + } + ds.Dispose(); + } + RyQuickSQL mySQL = new RyQuickSQL(tableName); + mySQL.AddField("Name", TxtName.Text); + mySQL.AddField("CmdId", TxtCmdId.Text); + mySQL.AddField("Path", TxtPath.Text); + mySQL.AddField("RunPram", TxtRunPram.Text); + mySQL.AddField("StartPath", TxtStartPath.Text);//起始路径 + mySQL.AddField("IconPath", IconPath);//图标路径 + Json json = new Json(""); + json.Add("RunAsAdmin", ChkRunAsAdmin.Checked); + mySQL.AddField("SetJson", json.Text);//设置 + mySQL.AddField("Des", TxtDes.Text);//备注 + mySQL.AddField("Pinyin", ryCommon.PinYin.Convert(TxtName.Text) + "\r\n" + ryCommon.PinYin.ConvertFirstPY(TxtName.Text)); + mySQL.AddField("editTime", DateTime.Now); + if (IsAdd >= 1) + { + mySQL.AddField("SoftType", 0);//0表示运行文件,1表示执行快速命令,2表示执行脚本 + mySQL.AddField("ClickCount", 0);//点击量 + mySQL.AddField("ColumnId",ColumnId); + mySQL.AddField("sortindex",Itrycn_Db.GetSoftCount(db, ColumnId) + 1); + mySQL.AddField("addTime", DateTime.Now); + db.ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL); + } + else + { + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + SelectId, mySQL); + } + } + db.Free(); + DialogResult = DialogResult.OK; + } + + private void TxtPath_TextChanged2(object sender, EventArgs e) + { + if (IconPath.Length > 0) + { return; } + var path =RyFiles.GetRealPath(TxtPath.Text); + if(System.IO.File.Exists(path)) + { + PicImg.Image = API.GetImg(path,128); + } + else if (System.IO.Directory.Exists(path)) + { + PicImg.Image = API.GetImg(path,64); + } + else + { + PicImg.Image = null; + } + } + + private void BtnCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + } + + private void PicImg_Click(object sender, EventArgs e) + { + 选择图标ToolStripMenuItem.PerformClick(); + } + + private void FrmAddSoft_Load(object sender, EventArgs e) + { + + } + + private void BtnBrowser_Click(object sender, EventArgs e) + { + if (of_File.ShowDialog() == DialogResult.OK) + { + TxtPath.Text = of_File.FileName; + } + } + + private void 选择图标ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + IconPath =RyFiles.GetRelativePath(openFileDialog1.FileName); + PicImg.Image = API.GetImg(openFileDialog1.FileName); + LblCustomImg.Text = "自定义"; + } + } + + private void 使用应用图标ToolStripMenuItem_Click(object sender, EventArgs e) + { + IconPath = ""; + PicImg.Image = API.GetImg(RyFiles.GetRealPath(TxtPath.Text)); + LblCustomImg.Text = "自动获取"; + } + } +} diff --git a/Source/VSoft_Dll/FrmAddSoft.resx b/Source/VSoft_Dll/FrmAddSoft.resx new file mode 100644 index 0000000..e0aae39 --- /dev/null +++ b/Source/VSoft_Dll/FrmAddSoft.resx @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 254, 17 + + + 17, 17 + + + 165, 17 + + + 419, 17 + + + + + AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAACMuAAAjLgAAAAAAAAAA + AAAAAAAAAAAAAKizMQCVogAAoKscAJ2pFQCVowUAtrpDAqmwKAWmriMGpq4kB6auJAemriQHpq4kB6au + JAemriQHpq4kB6auJAemriQHpq4kB6auJAemriQHpq4jBqiwKAW0uT4Ck6IBAJ2pFQCgrBwAh5QAAKey + LgAAAAAAAAAAAAAAAACfriQAorApAJupFgCgrB0Tn6oYU56pFomeqRalnqkVsJ6pFbSeqRW0nqkVtJ6p + FbSeqRW0nqkVtJ6pFbSeqRW0nqkVtJ6pFbSeqRW0nqkVtJ6pFbSeqRW0nqkVsZ6pFqaeqRaLn6oYVqCs + HRaaqRUAoa8mAJ+tIwAAAAAAo7IwAKGwKQCVpQsAnqscQp2qGMScqRf7nKkW/5ypFv+cqRb/nKkW/5yp + Fv+cqRb/nKkW/5ypFv+cqRb/nKkW/5ypFv+cqRb/nKkW/5ypFv+cqRb/nKkW/5ypFv+cqRb/nKkW/5yp + Fv+cqRf8naoYyZ2rHEiKnQAAoK4lAKCxKwCGogAAmaoZAJysHkSbqhvjm6oa/5uqGv+bqhr/m6oa/5uq + Gv+bqhr/m6oa/5uqGv+bqhr/m6oa/5uqGv+bqhr/m6oa/5uqGv+bqhr/m6oa/5uqGv+bqhr/m6oa/5uq + Gv+bqhr/m6oa/5uqGv+bqhr/m6ob6JyrHk2YqRYA1s2DAJyuJACcriYZmqwfy5mrHf+Zqx3/masd/5mr + Hf+Zqx3/masd/5mrHf+Zqx3/masd/5mrHf+Zqx3/masc/5mrHP+Zqxz/masc/5mrHf+Zqx3/masd/5mr + Hf+Zqx3/masd/5mrHf+Zqx3/masd/5mrHf+Zqx3/mqwe0puuJB6brSMAl6sfAJmtJGGYrCD+mKwg/5is + IP+YrCD/mKwg/5isIP+YrCD/mKwg/5isIP+XrB//lqsd/5isIv+dsCz/obM1/6GzNP+dsCv/mKwh/5ar + Hf+XrB//mKwg/5esH/+YrCH/mKwg/5esH/+YrCD/mKwg/5isIP+YrCD/ma0jbJaqHAD///8Al64mm5et + JP+XrST/l60k/5etJP+XrST/l60k/5etJP+WrSP/lawi/6G1Ov+9y3X/2eGu/+jt0P/v8t3/7/Lc/+fs + zf/W36n/uslu/5+zNf+UqyD/p7lG/9bfqf/Z4a7/tcRj/5asIv+XrST/l60k/5etJP+XriamprtJA520 + OgiWryu4la4p/5WuKf+Vrin/la4p/5WuKf+Vrin/la0o/5mxMP+/zXz/7PDY//7+/f////////////// + ///////////////////9/vz/6O3Q/8LQg//l68v////////////R3KP/lK0n/5WuKf+Vrin/la4p/5au + K8KbszYNm7Q8DZWvMMOUry//lK8v/5SvL/+Ury//lK8v/5SuLf+ctT7/1N6r//39+/////////////// + ///7/Pj/9vnv//f57//8/fn//////////////////////////////////////8vYm/+Uri3/lK8v/5Sv + L/+Ury//la8wzJqzOxOctkYPlLA2x5OwNP+TsDT/k7A0/5OwNP+TrzP/mLM+/9bhsv////////////// + ///t8t//ydic/6/Fa/+lvVf/pr1Y/7HGbv/M2qL/8/bq///////////////////////b5Lz/nbdH/5Kv + M/+TsDT/k7A0/5OwNP+TsDXQlrI6FZy4TBCTsT3HkrA6/5KxOv+SsTr/krA6/5KwOv/E1JT//v79//// + ///9/vz/0+Cy/5+6U/+RsDj/kK83/5GwOP+RsDj/j641/6K8WP/r8Nr//////////////////v7+/7/R + jP+Qrzf/krE6/5KxOv+SsTr/krA6/5KxO9CUsj4Wm7lREJKyQseRskD/kbJA/5GyQP+QsT7/o75f//L2 + 6P///////////9Derv+VtEf/kLE+/5GyQP+RskD/kbJA/4+xPv+hvV3/5ezS//////////////////// + ////////6/Hd/526Vf+QsT//kbJA/5GyQP+RskD/kbJA0JOzQxaZulcQkbRIx4+zRv+Ps0b/j7NG/46y + RP/H2aL////////////m7tb/mblW/46yRP+Ps0b/j7NG/4+zRv+OskT/oL5h/+Xt0/////////////// + ///g6s3/7vTk////////////vdKR/46yQ/+Ps0b/j7NG/4+zRv+Qs0bQkbRJFpi6WxCPtE3HjrRL/460 + S/+Ns0r/lLdU/+Xt1f///////v79/7nQkP+Mskj/jrRL/460S/+OtEv/jbNJ/5+/Zv/k7dT///////// + ////////2ebD/5e5Wf/C15/////////////c58f/kLVP/46zS/+OtEv/jrRL/460S9CQtU4WlrtfEI22 + UceMtU//jLVP/4u0Tf+dwGn/9Pju///////y9+z/nL9o/4u0Tf+MtU//jLVP/4u0Tv+bvmb/5O3V//// + /////////////9jmxf+Wu17/irNL/6TEdP/4+vT//////+3z5P+XvF//i7RO/4y1T/+MtU//jLVP0I62 + UhaVvGIQjLdVx4q2Uv+LtlP/ibVQ/6XGef/5+/f//////+fw3P+Rul3/irZS/4u2U/+LtlP/ibVQ/8PZ + pv/////////////////Y58b/lLxi/4m1Uf+KtVH/l71l/+/15///////9Pjv/5zBbf+JtVH/i7ZT/4u2 + U/+LtlPQjbdWFpS9ZRCKt1jHibdW/4m3Vv+HtlT/pch+//r8+P//////5e/Z/4+6Xv+Jtlb/ibdW/4m3 + Vv+HtlT/ttKX//3+/P//////1+fG/5O9Zf+ItlT/ibdW/4i2Vf+UvWb/7fTl///////1+fH/nMNy/4i2 + VP+Jt1b/ibdW/4m3VtCLuFkWkr5pEIm4XMeHt1r/h7da/4a3WP+dxXj/9vrz///////t9Ob/k75q/4e3 + Wf+Ht1r/h7da/4e3Wf+MumD/sdCU/7bUm/+RvWf/hrdY/4e4Wv+Ht1r/hrdY/5rDdP/0+PD///////D2 + 6/+WwG7/h7dY/4e3Wv+Ht1r/iLha0Iq5XRaRv2wQh7lfx4a4Xf+GuF3/hbhd/5C+bP/r8+T///////r8 + +f+my4n/hLdb/4a4Xf+GuF3/hrhd/4a4Xf+Et1v/hLdb/4W4Xf+GuF3/hrhd/4a4Xf+Et1v/sNGW//3+ + /f//////4u7Y/4u8Zf+GuF3/hrhd/4a4Xf+GuF7QiLphFo+/bxCGumPHhLlh/4S5Yf+EuWH/hbpi/9Dk + wv///////////9HlxP+GumP/hLlh/4S5Yf+EuWH/hLlh/4S5Yf+EuWH/hLlh/4S5Yf+EuWH/hLlg/4m8 + aP/b6tH////////////E3rT/g7lg/4S5Yf+EuWH/hLlh/4W5YdCHumQWjsByEIS7ZseDumT/g7pk/4O6 + ZP+BuWL/pc2Q//r8+P//////+fz4/67Smv+BuWL/g7pk/4O6ZP+DumT/g7pk/4O6ZP+DumT/g7pk/4K6 + ZP+CumP/uNem//z9/P//////9fnz/5zIhP+BuWL/g7pk/4O6ZP+DumT/g7pk0IW7ZxaMwXQQg7xox4G7 + Z/+Bu2f/gbtn/4G7Zv+FvWv/0ufJ////////////8vjv/6vSmf+CvGj/f7tl/4G7Zv+Bu2f/gbtn/4G7 + Zv9/umX/g71q/7PWo//2+vT////////////H4bz/grxo/4G7Z/+Bu2f/gbtn/4G7Z/+BvGfQg71qFovD + dxCBvWvHf71q/3+9av9/vWr/f71q/368aP+Tx4H/6PPk////////////+Pv2/8njv/+ay4n/hsBy/4G+ + bP+Bvmz/h8Fz/57Mjf/P5sb/+v35////////////4O/b/43Eev9+vGn/f71q/3+9av9/vWr/f71q/4C9 + atCCvm0WhsJ3Dn++bsV+vm3/fr5t/36+bf9+vm3/fr5t/3y9a/+bzY7/6fTm//////////////////b6 + 9f/j8d//1urQ/9fq0f/l8uH/+Pv3/////////////////+Lx3/+UyYb/fL1r/36+bf9+vm3/fr5t/36+ + bf9+vm3/f75uzoXBdRSFw3kKfb9xvHy/cP98v3D/fL9w/3y/cP98v3D/fL9w/3u+bv+Syoj/1evR//z9 + +/////////////////////////////////////////////r8+f/O58r/jceD/3u+bv98v3D/fL9w/3y/ + cP98v3D/fL9w/3y/cP99v3HGg8J4D5XNjQJ7wXSlesBz/3rAc/96wHP/esBz/3rAc/96wHP/esBz/3nA + cf+Aw3n/ptWi/9Tr0//w+O//+/37//7+/v/+/v7/+v36/+737f/Q6c7/odOc/37Cdv95wHH/esBz/3rA + c/96wHP/esBz/3rAc/96wHP/esBz/3vBdLCIxoAFdcByAHrCd3J4wXb/eMF2/3jBdv94wXb/eMF2/3jB + dv94wXb/eMF2/3jBdf92wHT/e8N5/4vKif+b0pr/pdak/6XWpP+a0Zn/icmH/3rCeP92wHT/eMF1/3jB + dv94wXb/eMF2/3jBdv94wXb/eMF2/3jBdv94wXb/esJ3fnG+bwB5w3oAesR7KXfDeOB2wnj/dsJ4/3bC + eP92wnj/dsJ4/3bCeP92wnj/dsJ4/3bCeP92wnj/dcJ3/3TBdv90wXb/dMF2/3TBdv91wnf/dsJ4/3bC + eP92wnj/dsJ4/3bCeP92wnj/dsJ4/3bCeP92wnj/dsJ4/3fDeOd5w3sxeMN5AIHJhgBbuWYAdsR8aXTE + e/d0xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv/dMR7/3TE + e/90xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv5dsR8c8vlvQB/x4MAfseBAHjG + gAB5yIUEdMV/bnPFfuhyxX7/csV+/3LFfv9yxX7/csV+/3LFfv9yxX7/csV+/3LFfv9yxX7/csV+/3LF + fv9yxX7/csV+/3LFfv9yxX7/csV+/3LFfv9yxX7/csV+/3LFfv9yxX7/c8V+63TFf3Z6yIUHeMaAAH3G + gAAAAAAAdsV/AHfGgQDZ//wAdMaCNHLGgYpyxoG+ccaB1HHGgd1xxoHfccaB33HGgd9xxoHfccaB33HG + gd9xxoHfccaB33HGgd9xxoHfccaB33HGgd9xxoHfccaB33HGgd1xxoHVcsaBwHLGgY10xoI5iNKaAXfG + gQB3xoAAAAAAAAAAAAAAAAAAeciFAHzJhwBzxoEAYLtqAHjKigx2yYcZdMiGIXbIhyR2yYgkdsmIJHbJ + iCR2yYgkdsmIJHbJiCR2yYgkdsmIJHbJiCR2yYgkdsmIJHbJiCR2yIckdMiGIXbJhxp4yooMV7VfAHPG + gAB6yIYAeMeEAAAAAAAAAAAAwAAAA4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAgAAAAcAAAAM= + + + \ No newline at end of file diff --git a/Source/VSoft_Dll/FrmAddType.Designer.cs b/Source/VSoft_Dll/FrmAddType.Designer.cs new file mode 100644 index 0000000..7e6c761 --- /dev/null +++ b/Source/VSoft_Dll/FrmAddType.Designer.cs @@ -0,0 +1,153 @@ +namespace VSoft +{ + partial class FrmAddType + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmAddType)); + this.BtnCancel = new ryControls.ButtonEx(); + this.BtnOK = new ryControls.ButtonEx(); + this.label1 = new System.Windows.Forms.Label(); + this.TxtName = new ryControls.TextBoxEx2(); + this.label2 = new System.Windows.Forms.Label(); + this.TxtDes = new ryControls.TextBoxEx2(); + this.SuspendLayout(); + // + // BtnCancel + // + this.BtnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.BtnCancel.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95))))); + this.BtnCancel.Location = new System.Drawing.Point(264, 116); + this.BtnCancel.Name = "BtnCancel"; + this.BtnCancel.Size = new System.Drawing.Size(75, 27); + this.BtnCancel.TabIndex = 10; + this.BtnCancel.Text = "取消"; + this.BtnCancel.UseVisualStyleBackColor = true; + this.BtnCancel.Click += new System.EventHandler(this.BtnCancel_Click); + // + // BtnOK + // + this.BtnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.BtnOK.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95))))); + this.BtnOK.Location = new System.Drawing.Point(183, 116); + this.BtnOK.Name = "BtnOK"; + this.BtnOK.Size = new System.Drawing.Size(75, 27); + this.BtnOK.TabIndex = 9; + this.BtnOK.Text = "确定"; + this.BtnOK.UseVisualStyleBackColor = true; + this.BtnOK.Click += new System.EventHandler(this.BtnOK_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(29, 12); + this.label1.TabIndex = 12; + this.label1.Text = "名称"; + // + // TxtName + // + this.TxtName.BackColor = System.Drawing.Color.White; + this.TxtName.EmptyText = ""; + this.TxtName.Location = new System.Drawing.Point(12, 29); + this.TxtName.MaxLength = 999999999; + this.TxtName.Multiline = false; + this.TxtName.Name = "TxtName"; + this.TxtName.OnlyNumeric = false; + this.TxtName.PasswordChar = '\0'; + this.TxtName.ReadOnly = false; + this.TxtName.SelectedText = ""; + this.TxtName.SelectionLength = 0; + this.TxtName.SelectionStart = 0; + this.TxtName.Size = new System.Drawing.Size(327, 22); + this.TxtName.TabIndex = 11; + this.TxtName.TextAlign = System.Windows.Forms.HorizontalAlignment.Left; + this.TxtName.ToolTip = ""; + this.TxtName.WordWrap = true; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 56); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(29, 12); + this.label2.TabIndex = 16; + this.label2.Text = "备注"; + // + // TxtDes + // + this.TxtDes.BackColor = System.Drawing.Color.White; + this.TxtDes.EmptyText = ""; + this.TxtDes.Location = new System.Drawing.Point(12, 76); + this.TxtDes.MaxLength = 999999999; + this.TxtDes.Multiline = false; + this.TxtDes.Name = "TxtDes"; + this.TxtDes.OnlyNumeric = false; + this.TxtDes.PasswordChar = '\0'; + this.TxtDes.ReadOnly = false; + this.TxtDes.SelectedText = ""; + this.TxtDes.SelectionLength = 0; + this.TxtDes.SelectionStart = 0; + this.TxtDes.Size = new System.Drawing.Size(327, 22); + this.TxtDes.TabIndex = 15; + this.TxtDes.TextAlign = System.Windows.Forms.HorizontalAlignment.Left; + this.TxtDes.ToolTip = ""; + this.TxtDes.WordWrap = true; + // + // FrmAddType + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(350, 155); + this.Controls.Add(this.label2); + this.Controls.Add(this.TxtDes); + this.Controls.Add(this.label1); + this.Controls.Add(this.TxtName); + this.Controls.Add(this.BtnCancel); + this.Controls.Add(this.BtnOK); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "FrmAddType"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "添加分类"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private ryControls.ButtonEx BtnCancel; + private ryControls.ButtonEx BtnOK; + private System.Windows.Forms.Label label1; + public ryControls.TextBoxEx2 TxtName; + private System.Windows.Forms.Label label2; + public ryControls.TextBoxEx2 TxtDes; + } +} \ No newline at end of file diff --git a/Source/VSoft_Dll/FrmAddType.cs b/Source/VSoft_Dll/FrmAddType.cs new file mode 100644 index 0000000..0e55ed7 --- /dev/null +++ b/Source/VSoft_Dll/FrmAddType.cs @@ -0,0 +1,81 @@ +using ryCommonDb; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using VSoft.Prams; + +namespace VSoft +{ + public partial class FrmAddType : Form + { + public string SQLConnStr { get; set; } = Itrycn_Db.SQLConnStr; + public FrmAddType() + { + InitializeComponent(); + } + public string tableName = "Columns"; + public int IsAdd { get; set; } = 1; + public int SelectId { get; set; } = -1; + public int ParentId { get; set; } = -1; + public void GetInfo(int id) + { + SelectId = id; + Text = "修改分类"; + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData(tableName, id.ToString()); + if (mydb.HaveData(ds)) + { + DataRow reader = ds.Tables[0].Rows[0]; + #region 读取信息 + TxtName.Text = reader["Name"].ToString(); + TxtDes.Text = reader["Des"].ToString(); + #endregion + } + ds.Dispose(); + } + db.Free(); + } + private void BtnCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + } + + private void BtnOK_Click(object sender, EventArgs e) + { + if (TxtName.Text.Length == 0) + { + MessageBox.Show("名称不能为空。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + RyQuickSQL mySQL = new RyQuickSQL(tableName); + mySQL.AddField("Name", TxtName.Text); + mySQL.AddField("Des", TxtDes.Text); + mySQL.AddField("editTime", DateTime.Now); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + if (IsAdd >= 1) + { + mySQL.AddField("sortindex", Itrycn_Db.GetColumnCount(db, ParentId) + 1); + mySQL.AddField("parentId", ParentId); + mySQL.AddField("addTime", DateTime.Now); + db.ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL); + } + else + { + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + SelectId, mySQL); + } + } + db.Free(); + DialogResult = DialogResult.OK; + } + } +} diff --git a/Source/VSoft_Dll/FrmAddType.resx b/Source/VSoft_Dll/FrmAddType.resx new file mode 100644 index 0000000..bff782e --- /dev/null +++ b/Source/VSoft_Dll/FrmAddType.resx @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAGBgAAAEAIACICQAAFgAAACgAAAAYAAAAMAAAAAEAIAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAA + AAAAAAAUAAAAagAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACOAAAAjgAA + AI4AAACOAAAAjgAAAI4AAACOAAAAjgAAAI4AAACNAAAAVAAAAAgAAABOAAAA5AAAAPkAAAD4AAAA+AAA + APgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAA + APgAAAD6AAAAywAAACYBAQFrAQEB+wEBAf8BAQH/AQEB/wEBAf8BAQH/AQEB/wEBAf8BAQH/AQEB/wEB + Af8BAQH/AQEB/wEBAf8BAQH/AQEB/wEBAf8BAQH/AQEB/wEBAf8BAQH/AQEB6gEBATgDAwNrBAQE+gQE + BP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQE + BP8EBAT/BAQE/wQEBP8EBAT/BAQE6gMDAzgGBgZrBwcH+gcHCP8HBwj/BwcI/wcHCP8HBwf/BQUF/wQE + BP8EBAT/BAQE/wYGBv8HBwj/BwcI/wcHCP8HBwj/BwcI/wcHCP8HBwj/BwcI/wcHCP8HBwj/BwcH6gUF + BTgICAlrCwsL+gsLC/8LCwv/CwsL/wsLC/8NDQ3/Li4v/zc3N/83Nzf/Nzc3/yAgIP8KCgr/CwsL/wsL + C/8LCwv/CwsL/wsLC/8LCwv/CwsL/wsLC/8LCwv/CgoL6gcHBzgLCwxrDw8P+g8PD/8PDw//Dw8P/w0N + Df8qKiv/n5+f/66urv+tra3/r6+v/3l5ef8RERH/Dg4P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8P + D/8PDw//Dg4O6gkJCjgPDw9rExMU+hMTFP8TExT/ExMU/xAQEf9fX1//u7u7/76+vv+/v7//vb29/6mp + qf8uLi//ERES/xMTFP8TExT/ExMU/xMTFP8TExT/ExMU/xMTFP8TExT/EhIT6gwMDDgSEhNrFxcY+hcX + GP8XFxj/FxcY/x8fIP+ZmZn/ycnJ/87Ozv/Q0ND/zMzM/8XFxf9kZGT/FBQV/xgYGf8XFxj/FxcY/xcX + GP8XFxj/FxcY/xcXGP8YGBn/FhYX6g8PDzgWFhZrHBwd+h0dHf8dHR3/GRka/0ZGR//CwsL/1NTU/9zc + 3P/e3t7/2dnZ/9LS0v+enp7/IyMk/xwcHf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/Gxsc6hIS + EzgZGRprICAh+iEhIv8hISL/Hh4f/4CAgP/U1NT/3t7e/+Xl5f/o6Oj/4+Pj/9ra2v/Fxcb/SUlK/x4e + H/8hISL/ISEi/yEhIv8hISL/ISEi/yEhIv8hISL/Hx8h6hUVFjgdHR5rJSUn+iYmJ/8kJCb/NDQ1/7W1 + tf/c3Nz/5eXl/+Dg4P/Fxcb/6enp/+Hh4f/Y2Nj/goKD/yMjJP8mJif/JiYn/yYmJ/8mJij/JiYo/yYm + J/8mJif/JCQm6hgYGTghISJrKyss+iwsLf8nJyj/YmJj/9TU1P/i4uL/7Ozs/729vf9ra2v/4+Pj/+jo + 6P/f39//t7e3/zg4Of8qKiv/Kyst/ycnKP8hISL/IyMk/yoqK/8sLC3/Kior6hsbHDglJSZrLy8w+i8v + Mf8vLzD/nJyd/+Dg4P/p6en/7u7u/4aGh/84ODn/wcHB/+7u7v/l5eX/1tbW/2VlZf8rKy3/LCwt/0BA + Qf9ubm//X19f/zAwMf8vLzD/Li4v6h4eHzgoKClrMzM1+jIyNP9MTE3/ysrK/+fn5//u7u7/29vb/1RU + Vf8vLzH/iYmK/+/v7//s7Oz/4+Pj/56en/8yMjP/QkJD/6qqqv/Kysr/x8fG/3t7fP8yMjT/MjI06iEh + IjgsLC1rODg6+jQ0Nv9+foD/4eHh/+3t7f/09PP/sLCx/zw8Pv83Nzn/WFha/93d3v/y8vL/6enp/83N + zv9MTE7/Xl5g/8/Pz//V1dX/1tbW/6qqqv89PT//NjY56iQkJTgvLzFrPDw++kRERf+3t7f/6urq//Pz + 8//v7+//enp7/zs7Pf89PT//QUFC/7OztP/29vb/8PDw/+bm5v+FhYX/S0tN/7y8vP/l5eX/3t7e/4mJ + iv89PT//Ozs96icnKDgyMjRrQEBC+k1NT/9+fn//iYmK/42Njv+FhYb/Tk5Q/0FBQ/9CQkT/QEBC/2Rk + Zf+NjY7/i4uM/4iIif9wcHH/QkJE/1paXP+FhYb/d3d4/0lJS/9BQUP/Pz9B6ioqKzg2NjdrRUVH+kVF + SP9DQ0X/QkJF/0JCRf9DQ0X/RUVH/0ZGSP9GRkj/RkZI/0RERv9CQkX/QkJF/0JCRf9EREb/RkZI/0RE + R/9CQkX/Q0NF/0VFSP9GRkj/Q0NF6iwsLTg5OTprSEhL+kpKTP9KSkz/SkpM/0pKTP9KSkz/SUlM/0lJ + TP9JSUz/SUlM/0pKTP9KSkz/SkpM/0pKTP9KSkz/SUlM/0lJTP9KSkz/SkpM/0lJTP9KSkz/R0dJ6i4u + MDg7Oz1rS0tN+k1NT/9NTU//TU1P/01NT/9NTU//TU1P/01NT/9NTU//TU1P/01NT/9NTU//TU1P/01N + T/9NTU//TU1P/01NT/9NTU//TU1P/01NT/9NTU//SkpM6jExMjg/P0FoTk5R+09PUv9PT1L/T09S/09P + Uv9PT1L/T09S/09PUv9PT1L/T09S/09PUv9PT1L/T09S/09PUv9PT1L/T09S/09PUv9PT1L/T09S/09P + Uv9PT1L/TExP6jQ0NjZMTE9AVlZZ31VVWPlVVVj4VVVY+FVVWPhVVVj4VVVY+FVVWPhVVVj4VVVY+FVV + WPhVVVj4VVVY+FVVWPhVVVj4VVVY+FVVWPhVVVj4VVVY+FVVWPhVVVn6VlZZw0RERRxgYGIFcXF1PW1t + cVpsbHBZbGxwWWxscFlsbHBZbGxwWWxscFlsbHBZbGxwWWxscFlsbHBZbGxwWWxscFlsbHBZbGxwWWxs + cFlsbHBZbGxwWWxscFltbXJZcHBzLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA= + + + \ No newline at end of file diff --git a/Source/VSoft_Dll/FrmInCMD.Designer.cs b/Source/VSoft_Dll/FrmInCMD.Designer.cs new file mode 100644 index 0000000..444a5d5 --- /dev/null +++ b/Source/VSoft_Dll/FrmInCMD.Designer.cs @@ -0,0 +1,424 @@ +namespace VSoft +{ + partial class FrmInCMD + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmInCMD)); + this.panelEx1 = new ryControls.PanelEx(); + this.IconViewEx1 = new ryControls.IconViewEx(); + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.MenuList = new System.Windows.Forms.ContextMenuStrip(this.components); + this.以管理员方式启动ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); + this.新增软件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.复制并新增软件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.修改软件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.从列表删除该软件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.打开软件所在位置ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.panel1 = new System.Windows.Forms.Panel(); + this.LblDes = new System.Windows.Forms.Label(); + this.rySearch1 = new ryControls.rySearch(); + this.BtnAddColumn = new System.Windows.Forms.Button(); + this.MenuTabColumn = new System.Windows.Forms.ContextMenuStrip(this.components); + this.修改栏目ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.删除栏目ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.MenuTabType = new System.Windows.Forms.ContextMenuStrip(this.components); + this.新增分类ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Menu修改分类 = new System.Windows.Forms.ToolStripMenuItem(); + this.Menu删除分类 = new System.Windows.Forms.ToolStripMenuItem(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.LblDrag = new System.Windows.Forms.Label(); + this.TabList_Type = new ryControls.TabList(); + this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.TabList_Column = new ryControls.TabList(); + this.panelEx1.SuspendLayout(); + this.MenuList.SuspendLayout(); + this.panel1.SuspendLayout(); + this.MenuTabColumn.SuspendLayout(); + this.MenuTabType.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // panelEx1 + // + this.panelEx1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panelEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(213)))), ((int)(((byte)(216)))), ((int)(((byte)(223))))); + this.panelEx1.Controls.Add(this.IconViewEx1); + this.panelEx1.Controls.Add(this.panel1); + this.panelEx1.Location = new System.Drawing.Point(84, 65); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Padding = new System.Windows.Forms.Padding(3); + this.panelEx1.RoundeStyle = ryControls.RoundStyle.None; + this.panelEx1.Size = new System.Drawing.Size(556, 401); + this.panelEx1.TabIndex = 1; + this.panelEx1.TileBackColor = System.Drawing.Color.White; + // + // IconViewEx1 + // + this.IconViewEx1.AllowDrop = true; + this.IconViewEx1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.IconViewEx1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1}); + this.IconViewEx1.ContextMenuStrip = this.MenuList; + this.IconViewEx1.Dock = System.Windows.Forms.DockStyle.Fill; + this.IconViewEx1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.IconViewEx1.HideSelection = false; + this.IconViewEx1.Icon = ((System.Drawing.Image)(resources.GetObject("IconViewEx1.Icon"))); + this.IconViewEx1.IsDrawGridLines = false; + this.IconViewEx1.IsDrawIcon = true; + this.IconViewEx1.Location = new System.Drawing.Point(3, 33); + this.IconViewEx1.MultiSelect = false; + this.IconViewEx1.Name = "IconViewEx1"; + this.IconViewEx1.OwnerDraw = true; + this.IconViewEx1.SelectedBackColor = System.Drawing.Color.LightYellow; + this.IconViewEx1.ShowItemToolTips = true; + this.IconViewEx1.Size = new System.Drawing.Size(550, 365); + this.IconViewEx1.TabIndex = 0; + this.IconViewEx1.TileSize = new System.Drawing.Size(90, 90); + this.IconViewEx1.UseCompatibleStateImageBehavior = false; + this.IconViewEx1.View = System.Windows.Forms.View.Tile; + this.IconViewEx1.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.IconViewEx1_ItemDrag); + this.IconViewEx1.DragDrop += new System.Windows.Forms.DragEventHandler(this.IconViewEx1_DragDrop); + this.IconViewEx1.DragEnter += new System.Windows.Forms.DragEventHandler(this.IconViewEx1_DragEnter); + this.IconViewEx1.DragOver += new System.Windows.Forms.DragEventHandler(this.IconViewEx1_DragOver); + this.IconViewEx1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IconViewEx1_KeyDown); + this.IconViewEx1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.IconViewEx1_MouseDoubleClick); + // + // MenuList + // + this.MenuList.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.以管理员方式启动ToolStripMenuItem, + this.toolStripMenuItem2, + this.新增软件ToolStripMenuItem, + this.复制并新增软件ToolStripMenuItem, + this.修改软件ToolStripMenuItem, + this.从列表删除该软件ToolStripMenuItem, + this.toolStripMenuItem1, + this.打开软件所在位置ToolStripMenuItem}); + this.MenuList.Name = "contextMenuStrip1"; + this.MenuList.Size = new System.Drawing.Size(185, 148); + // + // 以管理员方式启动ToolStripMenuItem + // + this.以管理员方式启动ToolStripMenuItem.Name = "以管理员方式启动ToolStripMenuItem"; + this.以管理员方式启动ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.以管理员方式启动ToolStripMenuItem.Text = "启动"; + this.以管理员方式启动ToolStripMenuItem.Click += new System.EventHandler(this.以管理员方式启动ToolStripMenuItem_Click); + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(181, 6); + // + // 新增软件ToolStripMenuItem + // + this.新增软件ToolStripMenuItem.Name = "新增软件ToolStripMenuItem"; + this.新增软件ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.新增软件ToolStripMenuItem.Text = "新增软件"; + this.新增软件ToolStripMenuItem.Click += new System.EventHandler(this.新增软件ToolStripMenuItem_Click); + // + // 复制并新增软件ToolStripMenuItem + // + this.复制并新增软件ToolStripMenuItem.Name = "复制并新增软件ToolStripMenuItem"; + this.复制并新增软件ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.复制并新增软件ToolStripMenuItem.Text = "复制并新增软件"; + this.复制并新增软件ToolStripMenuItem.Click += new System.EventHandler(this.复制并新增软件ToolStripMenuItem_Click); + // + // 修改软件ToolStripMenuItem + // + this.修改软件ToolStripMenuItem.Name = "修改软件ToolStripMenuItem"; + this.修改软件ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.修改软件ToolStripMenuItem.Text = "修改软件"; + this.修改软件ToolStripMenuItem.Click += new System.EventHandler(this.修改软件ToolStripMenuItem_Click); + // + // 从列表删除该软件ToolStripMenuItem + // + this.从列表删除该软件ToolStripMenuItem.Name = "从列表删除该软件ToolStripMenuItem"; + this.从列表删除该软件ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.从列表删除该软件ToolStripMenuItem.Text = "从列表删除选定软件"; + this.从列表删除该软件ToolStripMenuItem.Click += new System.EventHandler(this.从列表删除该软件ToolStripMenuItem_Click); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(181, 6); + // + // 打开软件所在位置ToolStripMenuItem + // + this.打开软件所在位置ToolStripMenuItem.Name = "打开软件所在位置ToolStripMenuItem"; + this.打开软件所在位置ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.打开软件所在位置ToolStripMenuItem.Text = "打开软件所在位置"; + this.打开软件所在位置ToolStripMenuItem.Click += new System.EventHandler(this.打开软件所在位置ToolStripMenuItem_Click); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.SystemColors.Info; + this.panel1.Controls.Add(this.LblDes); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(3, 3); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(550, 30); + this.panel1.TabIndex = 1; + this.panel1.Visible = false; + // + // LblDes + // + this.LblDes.AutoSize = true; + this.LblDes.Location = new System.Drawing.Point(5, 9); + this.LblDes.Name = "LblDes"; + this.LblDes.Size = new System.Drawing.Size(35, 12); + this.LblDes.TabIndex = 0; + this.LblDes.Text = "说明:"; + // + // rySearch1 + // + this.rySearch1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(236)))), ((int)(((byte)(239)))), ((int)(((byte)(244))))); + this.rySearch1.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95))))); + this.rySearch1.EmptyText = "输入名称或拼音即可搜索"; + this.rySearch1.Location = new System.Drawing.Point(87, 6); + this.rySearch1.Name = "rySearch1"; + this.rySearch1.Size = new System.Drawing.Size(278, 27); + this.rySearch1.TabIndex = 2; + this.rySearch1.OnSearch += new System.EventHandler(this.rySearch1_OnSearch); + this.rySearch1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.rySearch1_KeyDown); + // + // BtnAddColumn + // + this.BtnAddColumn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.BtnAddColumn.Image = ((System.Drawing.Image)(resources.GetObject("BtnAddColumn.Image"))); + this.BtnAddColumn.Location = new System.Drawing.Point(612, 34); + this.BtnAddColumn.Name = "BtnAddColumn"; + this.BtnAddColumn.Size = new System.Drawing.Size(27, 28); + this.BtnAddColumn.TabIndex = 3; + this.BtnAddColumn.UseVisualStyleBackColor = true; + this.BtnAddColumn.Click += new System.EventHandler(this.BtnAddColumn_Click); + // + // MenuTabColumn + // + this.MenuTabColumn.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.修改栏目ToolStripMenuItem, + this.删除栏目ToolStripMenuItem}); + this.MenuTabColumn.Name = "MenuTab"; + this.MenuTabColumn.Size = new System.Drawing.Size(125, 48); + // + // 修改栏目ToolStripMenuItem + // + this.修改栏目ToolStripMenuItem.Name = "修改栏目ToolStripMenuItem"; + this.修改栏目ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.修改栏目ToolStripMenuItem.Text = "修改栏目"; + this.修改栏目ToolStripMenuItem.Click += new System.EventHandler(this.修改栏目ToolStripMenuItem_Click); + // + // 删除栏目ToolStripMenuItem + // + this.删除栏目ToolStripMenuItem.Name = "删除栏目ToolStripMenuItem"; + this.删除栏目ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.删除栏目ToolStripMenuItem.Text = "删除栏目"; + this.删除栏目ToolStripMenuItem.Click += new System.EventHandler(this.删除栏目ToolStripMenuItem_Click); + // + // MenuTabType + // + this.MenuTabType.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.新增分类ToolStripMenuItem, + this.Menu修改分类, + this.Menu删除分类}); + this.MenuTabType.Name = "MenuTab"; + this.MenuTabType.Size = new System.Drawing.Size(125, 70); + // + // 新增分类ToolStripMenuItem + // + this.新增分类ToolStripMenuItem.Name = "新增分类ToolStripMenuItem"; + this.新增分类ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.新增分类ToolStripMenuItem.Text = "新增分类"; + this.新增分类ToolStripMenuItem.Click += new System.EventHandler(this.新增分类ToolStripMenuItem_Click); + // + // Menu修改分类 + // + this.Menu修改分类.Name = "Menu修改分类"; + this.Menu修改分类.Size = new System.Drawing.Size(124, 22); + this.Menu修改分类.Text = "修改分类"; + this.Menu修改分类.Click += new System.EventHandler(this.Menu修改分类_Click); + // + // Menu删除分类 + // + this.Menu删除分类.Name = "Menu删除分类"; + this.Menu删除分类.Size = new System.Drawing.Size(124, 22); + this.Menu删除分类.Text = "删除分类"; + this.Menu删除分类.Click += new System.EventHandler(this.Menu删除分类_Click); + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(4, 3); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(80, 60); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 5; + this.pictureBox1.TabStop = false; + // + // LblDrag + // + this.LblDrag.BackColor = System.Drawing.Color.Black; + this.LblDrag.Location = new System.Drawing.Point(716, 111); + this.LblDrag.Name = "LblDrag"; + this.LblDrag.Size = new System.Drawing.Size(2, 89); + this.LblDrag.TabIndex = 6; + this.LblDrag.Visible = false; + // + // TabList_Type + // + this.TabList_Type.AllowDrop = true; + this.TabList_Type.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.TabList_Type.BackColor = System.Drawing.SystemColors.Control; + this.TabList_Type.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TabList_Type.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader2}); + this.TabList_Type.ContextMenuStrip = this.MenuTabType; + this.TabList_Type.HideSelection = false; + this.TabList_Type.Icon = null; + this.TabList_Type.IsDrawGridLines = false; + this.TabList_Type.IsDrawIcon = false; + this.TabList_Type.Location = new System.Drawing.Point(4, 65); + this.TabList_Type.MultiSelect = false; + this.TabList_Type.Name = "TabList_Type"; + this.TabList_Type.OwnerDraw = true; + this.TabList_Type.Scrollable = false; + this.TabList_Type.SelectedBackColor = System.Drawing.Color.LightSkyBlue; + this.TabList_Type.Size = new System.Drawing.Size(74, 398); + this.TabList_Type.TabIndex = 4; + this.TabList_Type.TileSize = new System.Drawing.Size(80, 28); + this.TabList_Type.UseCompatibleStateImageBehavior = false; + this.TabList_Type.View = System.Windows.Forms.View.Tile; + this.TabList_Type.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.TabList_Type_ItemDrag); + this.TabList_Type.SelectedIndexChanged += new System.EventHandler(this.TabList_Type_SelectedIndexChanged); + this.TabList_Type.DragDrop += new System.Windows.Forms.DragEventHandler(this.TabList_Type_DragDrop); + this.TabList_Type.DragEnter += new System.Windows.Forms.DragEventHandler(this.TabList_Type_DragEnter); + this.TabList_Type.DragOver += new System.Windows.Forms.DragEventHandler(this.IconViewEx1_DragOver); + this.TabList_Type.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TabList_Type_KeyDown); + // + // columnHeader2 + // + this.columnHeader2.Width = 80; + // + // TabList_Column + // + this.TabList_Column.Alignment = System.Windows.Forms.ListViewAlignment.Left; + this.TabList_Column.AllowDrop = true; + this.TabList_Column.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TabList_Column.BackColor = System.Drawing.SystemColors.Control; + this.TabList_Column.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TabList_Column.ContextMenuStrip = this.MenuTabColumn; + this.TabList_Column.HideSelection = false; + this.TabList_Column.Icon = null; + this.TabList_Column.IsDrawGridLines = false; + this.TabList_Column.IsDrawIcon = false; + this.TabList_Column.Location = new System.Drawing.Point(87, 34); + this.TabList_Column.MultiSelect = false; + this.TabList_Column.Name = "TabList_Column"; + this.TabList_Column.OwnerDraw = true; + this.TabList_Column.Scrollable = false; + this.TabList_Column.SelectedBackColor = System.Drawing.Color.LightSkyBlue; + this.TabList_Column.Size = new System.Drawing.Size(519, 29); + this.TabList_Column.TabIndex = 1; + this.TabList_Column.TileSize = new System.Drawing.Size(70, 28); + this.TabList_Column.UseCompatibleStateImageBehavior = false; + this.TabList_Column.View = System.Windows.Forms.View.Tile; + this.TabList_Column.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.TabList_Column_ItemDrag); + this.TabList_Column.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.TabList_Column_ItemSelectionChanged); + this.TabList_Column.DragDrop += new System.Windows.Forms.DragEventHandler(this.TabList_Column_DragDrop); + this.TabList_Column.DragEnter += new System.Windows.Forms.DragEventHandler(this.TabList_Column_DragEnter); + this.TabList_Column.DragOver += new System.Windows.Forms.DragEventHandler(this.IconViewEx1_DragOver); + this.TabList_Column.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TabList_Column_KeyDown); + // + // FrmInCMD + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(652, 478); + this.Controls.Add(this.LblDrag); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.TabList_Type); + this.Controls.Add(this.BtnAddColumn); + this.Controls.Add(this.TabList_Column); + this.Controls.Add(this.rySearch1); + this.Controls.Add(this.panelEx1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FrmInCMD"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "内置功能"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmVSoft_FormClosing); + this.Load += new System.EventHandler(this.FrmVSoft_Load); + this.Shown += new System.EventHandler(this.FrmVSoft_Shown); + this.panelEx1.ResumeLayout(false); + this.MenuList.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.MenuTabColumn.ResumeLayout(false); + this.MenuTabType.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private ryControls.IconViewEx IconViewEx1; + private ryControls.PanelEx panelEx1; + private ryControls.rySearch rySearch1; + private System.Windows.Forms.ContextMenuStrip MenuList; + private System.Windows.Forms.ToolStripMenuItem 从列表删除该软件ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 新增软件ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 修改软件ToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem 打开软件所在位置ToolStripMenuItem; + private ryControls.TabList TabList_Column; + private System.Windows.Forms.Button BtnAddColumn; + private System.Windows.Forms.ContextMenuStrip MenuTabColumn; + private System.Windows.Forms.ToolStripMenuItem 修改栏目ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 删除栏目ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 以管理员方式启动ToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2; + private ryControls.TabList TabList_Type; + private System.Windows.Forms.ContextMenuStrip MenuTabType; + private System.Windows.Forms.ToolStripMenuItem 新增分类ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem Menu修改分类; + private System.Windows.Forms.ToolStripMenuItem Menu删除分类; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.Label LblDrag; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.ToolStripMenuItem 复制并新增软件ToolStripMenuItem; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label LblDes; + } +} \ No newline at end of file diff --git a/Source/VSoft_Dll/FrmInCMD.cs b/Source/VSoft_Dll/FrmInCMD.cs new file mode 100644 index 0000000..085d76b --- /dev/null +++ b/Source/VSoft_Dll/FrmInCMD.cs @@ -0,0 +1,1121 @@ +using ryCommon; +using ryCommonDb; +using ryControls; +using SysFuns; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using VSoft.Config; +using VSoft.Prams; + +namespace VSoft +{ + public partial class FrmInCMD : Form + { + public string SQLConnStr = Itrycn_Db.SQLConnStr_SysDb; + private bool ReadOnly { get; set; } = true; + public FrmInCMD() + { + InitializeComponent(); + if(ReadOnly) + { + IconViewEx1.ContextMenuStrip = null; + TabList_Column.ContextMenuStrip = null; + TabList_Type.ContextMenuStrip = null; + BtnAddColumn.Visible = false; + } + } + private bool IsProcUse = false; + /// + /// 获取当前页面所属的分类或栏目ID + /// + /// + private int GetCurColumnId() + { + var ColumnId = 0; + if (TabList_Type.SelectedItems.Count > 0) + { + var info = (ColumnInfo)TabList_Type.SelectedItems[0].Tag; + ColumnId = info.Id; + } + if (ColumnId == 0) + { + if (TabList_Column.SelectedItems.Count > 0) + { + var info = (ColumnInfo)TabList_Column.SelectedItems[0].Tag; + ColumnId = info.Id; + } + } + return ColumnId; + } + private void LoadDb() + { + LoadDb(false); + } + private void LoadDb(bool isSearch) + { + IconViewEx1.Items.Clear(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + var id = GetCurColumnId(); + RyQuickSQL mySQL = new RyQuickSQL("Softs"); + mySQL.AddField("SearchText", "%" + rySearch1.Text + "%"); + var sql = "select * from Softs where (Name like @SearchText or Path like @SearchText or Des like @SearchText or PinYin like @SearchText)"; + if (isSearch) + { + IsProcUse = true; + TabList_Column.SelectedItems.Clear(); + TabList_Type.Items.Clear(); + TabList_Type.Items.Add("默认分类").Tag =new ColumnInfo(); + IsProcUse = false; + } + else + { + if (id > 0) + { + sql += " and ColumnId=" + id; + } + else { sql += " and ColumnId<=0"; } + } + DataSet ds = db.ReadData(sql + " order by sortindex asc,AddTime desc", mySQL); + IconViewEx1.BeginUpdate(); + for (int i = 0; i < ds.Tables[0].Rows.Count; i++) + { + DataRow row = ds.Tables[0].Rows[i]; + SoftInfo info = new SoftInfo(); + info.Id = row["id"].ToInt(); + info.ColumnId = row["ColumnId"].ToInt(); + info.Name = row["Name"].ToString(); + info.Path = row["Path"].ToString(); + info.RunPram = row["RunPram"].ToString(); + info.SetJson = row["SetJson"].ToString(); + info.StartPath= row["StartPath"].ToString(); + info.IconPath = row["IconPath"].ToString(); + info.CmdId = row["CmdId"].ToString(); + info.Des = row["Des"].ToString(); + if (info.IconPath.Length == 0) + { + info.Image = API.GetImg(info.TruePath,128); + } + else + { + info.Image = API.GetImg(RyFiles.GetRealPath(row["IconPath"].ToString()),128); + } + IconViewEx1.Items.Add(info.Name).Tag = info ; + } + IconViewEx1.EndUpdate(); + db.Free(); + } + } + private void LoadColumn() + { + TabList_Column.Items.Clear(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + TabList_Column.BeginUpdate(); + DataSet ds = db.ReadData("select * from Columns where parentId=0 order by sortindex asc"); + for (int i = 0; i < ds.Tables[0].Rows.Count; i++) + { + DataRow row = ds.Tables[0].Rows[i]; + ColumnInfo info = new ColumnInfo + { + Id = row["id"].ToInt(), + Name = row["Name"].ToString(), + Des = row["Des"].ToString() + }; + TabList_Column.Items.Add(row["Name"].ToString()).Tag = info; + } + if(ds.Tables[0].Rows.Count==0) + { + #region 如果没有栏目,则创建一个栏目 + RyQuickSQL mySQL = new RyQuickSQL("Columns"); + mySQL.AddField("Name", "默认栏目"); + mySQL.AddField("editTime", DateTime.Now); + mySQL.AddField("sortindex", 1); + mySQL.AddField("parentId", 0); + mySQL.AddField("addTime", DateTime.Now); + db.ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL); + DataSet ds2 = db.ReadData("select * from Columns where parentId=0 order by sortindex asc"); + for (int i = 0; i < ds2.Tables[0].Rows.Count; i++) + { + DataRow row = ds2.Tables[0].Rows[i]; + ColumnInfo info = new ColumnInfo + { + Id = row["id"].ToInt(), + Name = row["Name"].ToString(), + Des = row["Des"].ToString() + }; + TabList_Column.Items.Add(row["Name"].ToString()).Tag = info; + } + ds2.Dispose(); + #endregion + } + ds.Dispose(); + TabList_Column.EndUpdate(); + db.Free(); + } + if(TabList_Column.Items.Count>0) + { + TabList_Column.Items[0].Selected = true; + } + } + private void LoadTypeColumn(int id) + { + TabList_Type.Items.Clear(); + TabList_Type.Items.Add("默认分类").Tag =new ColumnInfo(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData("select * from Columns where parentId="+ id + " order by sortindex asc"); + TabList_Type.BeginUpdate(); + for (int i = 0; i < ds.Tables[0].Rows.Count; i++) + { + DataRow row = ds.Tables[0].Rows[i]; + ColumnInfo info = new ColumnInfo + { + Id = row["id"].ToInt(), + Name = row["Name"].ToString(), + Des = row["Des"].ToString() + }; + TabList_Type.Items.Add(row["Name"].ToString()).Tag = info; + } + ds.Dispose(); + TabList_Type.EndUpdate(); + db.Free(); + } + if (TabList_Type.Items.Count > 0) + { + TabList_Type.Items[0].Selected = true; + } + } + private void FrmVSoft_Load(object sender, EventArgs e) + { + Config.Soft_Info.UserDataFolder = ryCommon.RyFiles.GetRealPath(Config.Soft_Info.UserDataFolder); + VSoft.Prams.Itrycn_Db.CreateTable(); + VSoft.Config.Soft_Config.LoadSetting(); + LoadColumn(); + //rySearch1.PerformClick(); + } + + private void rySearch1_OnSearch(object sender, EventArgs e) + { + LoadDb(true); + } + #region 对栏目标签进行操作 + /// + /// 将栏目列表中的第几个栏目修改 + /// + /// + /// + private void SetColumnRow(int id, int index) + { + #region 重新载入数据 + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData("select * from Columns where id=" + id); + if (mydb.HaveData(ds)) + { + DataRow row = ds.Tables[0].Rows[0]; + var item = TabList_Column.Items[index]; + var info = (ColumnInfo)item.Tag; + info.Name= row["Name"].ToString(); + info.Des = row["Des"].ToString(); + item.Text = row["Name"].ToString(); + if (info.Des.Length > 0) + { + LblDes.Text = info.Des; + panel1.Visible = true; + } + else + { + panel1.Visible = false; + } + } + db.Free(); + } + #endregion + } + private void BtnAddColumn_Click(object sender, EventArgs e) + { + FrmAddColumn frm = new FrmAddColumn(); + frm.SQLConnStr = SQLConnStr; + if (frm.ShowDialog() == DialogResult.OK) + { + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData("select * from Columns where parentId=0 order by sortindex desc limit 1"); + TabList_Column.BeginUpdate(); + if (ds.Tables[0].Rows.Count > 0) + { + DataRow row = ds.Tables[0].Rows[0]; + ColumnInfo info = new ColumnInfo + { + Id = row["id"].ToInt(), + Name = row["Name"].ToString(), + Des = row["Des"].ToString() + }; + TabList_Column.Items.Add(row["Name"].ToString()).Tag = info; + } + TabList_Column.EndUpdate(); + db.Free(); + } + } + frm.Dispose(); + } + private void 修改栏目ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (TabList_Column.SelectedItems.Count == 0) { return; } + var info = (ColumnInfo)TabList_Column.SelectedItems[0].Tag; + FrmAddColumn frm = new FrmAddColumn(); + frm.SQLConnStr = SQLConnStr; + frm.IsAdd = 0; + frm.GetInfo(info.Id); + if (frm.ShowDialog() == DialogResult.OK) + { + SetColumnRow(info.Id, TabList_Column.SelectedItems[0].Index); + } + frm.Dispose(); + } + + private void 删除栏目ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (TabList_Column.SelectedItems.Count == 0) { return; } + if (MessageBox.Show("确定要删除选定项吗?一旦删除将不可恢复。", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No) + { + return; + } + if (TabList_Column.Items.Count ==1) { + MessageBox.Show("请至少保留一个栏目。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + var info2 = (ColumnInfo)TabList_Column.SelectedItems[0].Tag; + var column_id = info2.Id; + var ds = db.ReadData("select count(*) from Columns where parentId=" + column_id); + if (mydb.HaveData(ds)) + { + if (mydb.GetValue(ds) > 0) + { + ds.Dispose(); + MessageBox.Show("当前栏目下还有分类,请先移除再删除栏目。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + db.Free(); + return; + } + } + ds.Dispose(); + db.DelById("Columns", column_id.ToString()); + TabList_Column.SelectedItems[0].Remove(); + db.BeginTransaction(); + for (int i = 1; i < TabList_Column.Items.Count; i++) + { + var info = (ColumnInfo)TabList_Column.Items[i].Tag; + RyQuickSQL mySQL = new RyQuickSQL("Columns"); + mySQL.AddField("sortindex", i); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + info.Id, mySQL); + } + db.Commit(); + } + db.Free(); + } + #endregion + #region 对分类标签进行操作 + /// + ///将分类列表中的第几个分类进行修改 + /// + /// + /// + private void SetTypeRow(int id, int index) + { + #region 重新载入数据 + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData("select * from Columns where id=" + id); + if (mydb.HaveData(ds)) + { + DataRow row = ds.Tables[0].Rows[0]; + var item = TabList_Type.Items[index]; + var info = (ColumnInfo)item.Tag; + info.Name = row["Name"].ToString(); + info.Des = row["Des"].ToString(); + item.Text = row["Name"].ToString(); + } + db.Free(); + } + #endregion + } + private void 新增分类ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (TabList_Column.SelectedItems.Count == 0) + { + MessageBox.Show("请先选择一个栏目。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + var id = ((ColumnInfo)TabList_Column.SelectedItems[0].Tag).Id; + FrmAddType frm = new FrmAddType + { + ParentId = id, + SQLConnStr = SQLConnStr + }; + if (frm.ShowDialog() == DialogResult.OK) + { + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData("select * from Columns where parentId=" + id + " order by sortindex desc limit 1"); + TabList_Type.BeginUpdate(); + if(ds.Tables[0].Rows.Count>0) + { + DataRow row = ds.Tables[0].Rows[0]; + ColumnInfo info = new ColumnInfo + { + Id = row["id"].ToInt(), + Name = row["Name"].ToString(), + Des = row["Des"].ToString() + }; + TabList_Type.Items.Add(row["Name"].ToString()).Tag = info; + } + TabList_Type.EndUpdate(); + db.Free(); + } + } + frm.Dispose(); + } + + private void Menu修改分类_Click(object sender, EventArgs e) + { + if (TabList_Column.SelectedItems.Count == 0) + { + MessageBox.Show("请先选择一个栏目。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + if (TabList_Type.SelectedItems.Count == 0) + { + MessageBox.Show("请先选择一个分类。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + var info = (ColumnInfo)TabList_Type.SelectedItems[0].Tag; + if (info.Id == 0) { + MessageBox.Show("默认分类不支持修改", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + FrmAddType frm = new FrmAddType + { + IsAdd = 0, + SQLConnStr = SQLConnStr + }; + frm.GetInfo(info.Id); + if (frm.ShowDialog() == DialogResult.OK) + { + SetTypeRow(info.Id, TabList_Type.SelectedItems[0].Index); + } + frm.Dispose(); + } + + private void Menu删除分类_Click(object sender, EventArgs e) + { + if (TabList_Type.SelectedItems.Count == 0) { return; } + if (MessageBox.Show("确定要删除选定项吗?一旦删除将不可恢复。", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No) + { + return; + } + if (TabList_Type.SelectedItems.Count == 0) { return; } + var info2= (ColumnInfo)TabList_Type.SelectedItems[0].Tag; + var column_id = info2.Id; + if (column_id == 0) { + MessageBox.Show("默认分类不支持删除", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + var ds = db.ReadData("select count(*) from Softs where ColumnId=" + column_id); + if (mydb.HaveData(ds)) + { + if (mydb.GetValue(ds) > 0) + { + ds.Dispose(); + MessageBox.Show("当前分类下还有软件,请先移除再删除分类。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + db.Free(); + return; + } + } + ds.Dispose(); + db.DelById("Columns", column_id.ToString()); + TabList_Type.SelectedItems[0].Remove(); + db.BeginTransaction(); + for (int i = 1; i < TabList_Type.Items.Count; i++) + { + var info = (ColumnInfo)TabList_Type.Items[i].Tag; + RyQuickSQL mySQL = new RyQuickSQL("Columns"); + mySQL.AddField("sortindex", i); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + info.Id, mySQL); + } + db.Commit(); + } + db.Free(); + } + #endregion + #region 对软件列表进行操作 + private void SetSoftRow(int id, int index) + { + #region 重新载入数据 + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData("select * from Softs where id=" + id); + if (mydb.HaveData(ds)) + { + DataRow row = ds.Tables[0].Rows[0]; + var item = IconViewEx1.Items[index]; + SoftInfo info = (SoftInfo)item.Tag; + info.Id = row["id"].ToInt(); + info.Name = row["Name"].ToString(); + info.Path = row["Path"].ToString(); + info.RunPram = row["RunPram"].ToString(); + info.SetJson = row["SetJson"].ToString(); + info.StartPath = row["StartPath"].ToString(); + info.IconPath = row["IconPath"].ToString(); + info.CmdId = row["CmdId"].ToString(); + info.Des = row["Des"].ToString(); + if (info.IconPath.Length == 0) + { + info.Image = API.GetImg(info.TruePath, 128); + } + else + { + info.Image = API.GetImg(RyFiles.GetRealPath(row["IconPath"].ToString()), 128); + } + item.Text = row["Name"].ToString(); + } + db.Free(); + } + #endregion + } + private void 新增软件ToolStripMenuItem_Click(object sender, EventArgs e) + { + var ColumnId =GetCurColumnId(); + if (ColumnId == 0) + { + MessageBox.Show("当前模式下不支持添加软件。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + FrmAddSoft frm = new FrmAddSoft + { + SQLConnStr = SQLConnStr, + ColumnId = ColumnId + }; + if (frm.ShowDialog() == DialogResult.OK) + { + LoadDb(); + } + frm.Dispose(); + } + private void 修改软件ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + var info = (SoftInfo)IconViewEx1.SelectedItems[0].Tag; + FrmAddSoft frm = new FrmAddSoft + { + SelectId = info.Id, + SQLConnStr = SQLConnStr, + IsAdd = 0 + }; + frm.GetInfo(info.Id); + if (frm.ShowDialog() == DialogResult.OK) + { + SetSoftRow(info.Id, IconViewEx1.SelectedItems[0].Index); + } + frm.Dispose(); + } + private void 从列表删除该软件ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + if (MessageBox.Show("确定要删除选定项吗?一旦删除将不可恢复。", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No) + { + return; + } + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + for (int i = IconViewEx1.SelectedItems.Count - 1; i >= 0; i--) + { + var info = (SoftInfo)IconViewEx1.SelectedItems[i].Tag; + if(info.IconPath.Length>0 && info.IconPath.StartsWith("\\UserDb\\SoftLogos", StringComparison.OrdinalIgnoreCase)) + { + RyFiles.DeleteFile(RyFiles.GetRealPath(info.IconPath)); + } + db.DelById("Softs", info.Id.ToString()); + IconViewEx1.SelectedItems[i].Remove(); + } + ReSortSoftByList(db); + } + db.Free(); + } + private void 以管理员方式启动ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + var info = (SoftInfo)IconViewEx1.SelectedItems[0].Tag; + VSoft.Prams.Run.Open(info, false); + } + private void 打开软件所在位置ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + var info = (SoftInfo)IconViewEx1.SelectedItems[0].Tag; + if (System.IO.File.Exists(info.TruePath) || System.IO.Directory.Exists(info.TruePath)) + { + RyFiles.OpenFolderGotoFile(info.TruePath); + } + else + { + MessageBox.Show("没有找到文件。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + private void IconViewEx1_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + var info = (SoftInfo)IconViewEx1.SelectedItems[0].Tag; + VSoft.Prams.Run.Open(info, false); + } + else if (e.KeyCode == Keys.Up) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + var item = IconViewEx1.SelectedItems[0]; + if(item.Position.Y== IconViewEx1.Items[0].Position.Y) + { + IconViewEx1.SelectedItems.Clear(); + if (TabList_Column.SelectedItems.Count == 0) + { + TabList_Column.Items[0].Selected = true; + } + TabList_Column.Focus(); + var color = TabList_Column.SelectedBackColor; + TabList_Column.SelectedBackColor = Color.LightYellow; + using (var bg = new BackgroundWorker()) + { + bg.DoWork += delegate { System.Threading.Thread.Sleep(500); };//180秒后,3分钟 + bg.RunWorkerCompleted += delegate { + this.Invoke(new Action(() => + { + TabList_Column.SelectedBackColor = color; + })); + }; // 线程执行完成后会执行 RunWorkerCompleted 事伯的代码块 + bg.RunWorkerAsync(); + } + } + } + else if (e.KeyCode == Keys.Left) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + var item = IconViewEx1.SelectedItems[0]; + if (item.Index==0 || item.Position.X== IconViewEx1.Items[0].Position.X) + { + IconViewEx1.SelectedItems.Clear(); + if (TabList_Type.SelectedItems.Count == 0) + { + TabList_Type.Items[0].Selected = true; + } + TabList_Type.Focus(); + var color = TabList_Type.SelectedBackColor; + TabList_Type.SelectedBackColor = Color.LightYellow; + using (var bg = new BackgroundWorker()) + { + bg.DoWork += delegate { System.Threading.Thread.Sleep(500); };//180秒后,3分钟 + bg.RunWorkerCompleted += delegate { + this.Invoke(new Action(() => + { + TabList_Type.SelectedBackColor = color; + })); + }; // 线程执行完成后会执行 RunWorkerCompleted 事伯的代码块 + bg.RunWorkerAsync(); + } + } + } + } + public SoftInfo SelectedInfo { get; set; } = null; + private void IconViewEx1_MouseDoubleClick(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + SelectedInfo = (SoftInfo)IconViewEx1.SelectedItems[0].Tag; + DialogResult = DialogResult.OK; + } + } + #endregion + #region 软件列表拖放 + private void IconViewEx1_ItemDrag(object sender, ItemDragEventArgs e) + { + if (ReadOnly){return;} + this.DoDragDrop(e.Item, DragDropEffects.Move); + } + + private void IconViewEx1_DragEnter(object sender, DragEventArgs e) + { + if (ReadOnly) { + e.Effect = DragDropEffects.None; + return; + } + LblDrag.Height = IconViewEx1.TileSize.Height; + LblDrag.Parent = IconViewEx1; + ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); + if (lvi != null) + { + if (lvi.ListView != IconViewEx1) + { + e.Effect = DragDropEffects.None; + return; + } + } + e.Effect = DragDropEffects.Move; + } + private void IconViewEx1_DragDrop(object sender, DragEventArgs e) + { + LblDrag.Visible = false; + var filedrop = e.Data.GetData(DataFormats.FileDrop); + if (filedrop != null) + { + #region 拖放文件到软件列表 + var ColumnId = GetCurColumnId(); + if(ColumnId==0) + { + MessageBox.Show("当前模式下不支持添加软件。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + var path = ((string[])filedrop)[0]; + FrmAddSoft frm = new FrmAddSoft(path); + frm.ColumnId = ColumnId; + if (frm.ShowDialog() == DialogResult.OK) + { + LoadDb(); + } + frm.Dispose(); + return; + #endregion + } + Point pt; + pt = ((IconViewEx)(sender)).PointToClient(new Point(e.X, e.Y)); + var to_item = IconViewEx1.GetItemAt(pt.X, pt.Y); + if (to_item == null) { return; } + //获得拖放中的项 + ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); + if (lvi == null) { return; } + if (lvi.ListView!=IconViewEx1) { return; } + if (lvi.Index == to_item.Index) { return; } + IconViewEx1.BeginUpdate(); + IconViewEx1.View = View.List; + IconViewEx1.Items.RemoveAt(lvi.Index); + IconViewEx1.Items.Insert(to_item.Index, lvi); + IconViewEx1.View = View.Tile; + IconViewEx1.EndUpdate(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + ReSortSoftByList(db); + } + db.Free(); + } + private void IconViewEx1_DragOver(object sender, DragEventArgs e) + { + ListViewItem item = null; + if (sender is IconViewEx) + { + var filedrop = e.Data.GetData(DataFormats.FileDrop); + if (filedrop != null) { + if (LblDrag.Visible) { LblDrag.Visible = false; } + return; + } + var lvi = e.Data.GetData(typeof(ListViewItem)); + if(lvi==null) + { + if (LblDrag.Visible) { LblDrag.Visible = false; } + return; + } + else + { + var lvi2 = (ListViewItem)lvi; + if(lvi2.ListView!=IconViewEx1) + { + if (LblDrag.Visible){LblDrag.Visible = false;} + return; + } + } + var list = ((IconViewEx)(sender)); + var pt = list.PointToClient(new Point(e.X, e.Y)); + item = list.GetItemAt(pt.X, pt.Y); + } + else if (sender is TabList) + { + var list = ((TabList)(sender)); + var pt = list.PointToClient(new Point(e.X, e.Y)); + item = list.GetItemAt(pt.X, pt.Y); + } + if (item == null) + { + if (LblDrag.Visible) + { + LblDrag.Visible = false; + } + } + else + { + if (!LblDrag.Visible) + { + LblDrag.Visible = true; + } + LblDrag.Location = item.Position; + } + } + #endregion + #region 栏目拖放 + private void TabList_Column_DragEnter(object sender, DragEventArgs e) + { + if (ReadOnly) + { + e.Effect = DragDropEffects.None; + return; + } + //判定是否现在拖动的数据是LISTVIEW项 + ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); + if (lvi != null) + { + LblDrag.Height = TabList_Column.TileSize.Height; + LblDrag.Parent = TabList_Column; + e.Effect = DragDropEffects.Move; + } + } + private void TabList_Column_DragDrop(object sender, DragEventArgs e) + { + LblDrag.Visible = false; + Point pt; + pt = ((TabList)(sender)).PointToClient(new Point(e.X, e.Y)); + var item = TabList_Column.GetItemAt(pt.X, pt.Y); + if (item == null) { return; } + var columnid = ((ColumnInfo)item.Tag).Id; + //获得拖放中的项 + var drag_item = e.Data.GetData(typeof(ListViewItem)); + if (drag_item == null) { return; } + ListViewItem lvi = (ListViewItem)drag_item; + if (lvi.ListView == IconViewEx1) + { + #region 从软件列表里拖放 + var info = (SoftInfo)lvi.Tag; + RyQuickSQL mySQL = new RyQuickSQL("Softs"); + mySQL.AddField("ColumnId", columnid); + mySQL.AddField("editTime", DateTime.Now); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + mySQL.AddField("sortindex", Itrycn_Db.GetSoftCount(db, columnid) + 1); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + info.Id, mySQL); + if (TabList_Column.SelectedItems.Count > 0) + { + var column_info = (ColumnInfo)TabList_Column.SelectedItems[0].Tag; + if (column_info.Id != columnid) + { + lvi.Remove(); + } + else if (TabList_Type.SelectedItems.Count > 0 && ((ColumnInfo)TabList_Type.SelectedItems[0].Tag).Id > 0) + { + lvi.Remove(); + } + } + else + { + lvi.Remove(); + } + ReSortSoftByList(db); + } + db.Free(); + #endregion + } + else if (lvi.ListView == TabList_Column) + { + if (lvi.Index == item.Index) { return; } + TabList_Column.BeginUpdate(); + TabList_Column.View = View.List; + TabList_Column.Items.RemoveAt(lvi.Index); + TabList_Column.Items.Insert(item.Index, lvi); + TabList_Column.View = View.Tile; + TabList_Column.EndUpdate(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + db.BeginTransaction(); + for (int i = 0; i < TabList_Column.Items.Count; i++) + { + var id = ((ColumnInfo)TabList_Column.Items[i].Tag).Id; + RyQuickSQL mySQL = new RyQuickSQL("Columns"); + mySQL.AddField("sortindex", i + 1); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + id, mySQL); + } + db.Commit(); + } + db.Free(); + } + } + private void TabList_Column_ItemDrag(object sender, ItemDragEventArgs e) + { + if (ReadOnly) { return; } + this.DoDragDrop(e.Item, DragDropEffects.Move); + } + #endregion + #region 分类拖放 + private void TabList_Type_DragEnter(object sender, DragEventArgs e) + { + if (ReadOnly) + { + e.Effect = DragDropEffects.None; + return; + } + //判定是否现在拖动的数据是LISTVIEW项 + ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); + if (lvi != null) + { + LblDrag.Height = TabList_Type.TileSize.Height; + LblDrag.Parent = TabList_Type; + e.Effect = DragDropEffects.Move; + } + } + + private void TabList_Type_DragDrop(object sender, DragEventArgs e) + { + LblDrag.Visible = false; + Point pt; + pt = ((TabList)(sender)).PointToClient(new Point(e.X, e.Y)); + var item = TabList_Type.GetItemAt(pt.X, pt.Y); + if (item == null) { return; } + var columnid = ((ColumnInfo)item.Tag).Id; + if (columnid == 0) + { + if (TabList_Column.SelectedItems.Count > 0) + { + columnid = ((ColumnInfo)TabList_Column.SelectedItems[0].Tag).Id; + } + } + //获得拖放中的项 + var drag_item = e.Data.GetData(typeof(ListViewItem)); + if (drag_item == null) { return; } + ListViewItem lvi = (ListViewItem)drag_item; + if (lvi.ListView == IconViewEx1) + { + #region 来源自软件列表 + var info = (SoftInfo)lvi.Tag; + RyQuickSQL mySQL = new RyQuickSQL("Softs"); + mySQL.AddField("ColumnId", columnid); + mySQL.AddField("editTime", DateTime.Now); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + mySQL.AddField("sortindex", Itrycn_Db.GetSoftCount(db, columnid) + 1); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + info.Id, mySQL); + if (TabList_Type.SelectedItems.Count > 0) + { + if (((ColumnInfo)TabList_Type.SelectedItems[0].Tag).Id != columnid) + { + lvi.Remove(); + } + } + else { lvi.Remove(); } + ReSortSoftByList(db); + } + db.Free(); + #endregion + } + else if (lvi.ListView == TabList_Type) + { + if (lvi.Index == item.Index || item.Index==0 || lvi.Index==0) { return; } + TabList_Type.BeginUpdate(); + TabList_Type.View = View.List; + TabList_Type.Items.RemoveAt(lvi.Index); + TabList_Type.Items.Insert(item.Index, lvi); + TabList_Type.View = View.Tile; + TabList_Type.EndUpdate(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + db.BeginTransaction(); + for (int i = 1; i < TabList_Type.Items.Count; i++) + { + var id = ((ColumnInfo)TabList_Type.Items[i].Tag).Id; + RyQuickSQL mySQL = new RyQuickSQL("Columns"); + mySQL.AddField("sortindex", i); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" +id, mySQL); + } + db.Commit(); + } + db.Free(); + } + } + private void TabList_Type_ItemDrag(object sender, ItemDragEventArgs e) + { + if (ReadOnly) { return; } + this.DoDragDrop(e.Item, DragDropEffects.Move); + } + #endregion + private void FrmVSoft_Shown(object sender, EventArgs e) + { + } + private void TabList_Type_SelectedIndexChanged(object sender, EventArgs e) + { + if (IsProcUse) { return; } + LoadDb(); + } + private void TabList_Column_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) + { + if (IsProcUse) { return; } + if (TabList_Column.SelectedItems.Count > 0) + { + var info = (ColumnInfo)TabList_Column.SelectedItems[0].Tag; + if (info.Des.Length > 0) + { + LblDes.Text = info.Des; + panel1.Visible = true; + } + else + { + panel1.Visible = false; + } + LoadTypeColumn(info.Id); + } + else + { + panel1.Visible = false; + LoadTypeColumn(-1); + } + //LoadDb(); + } + /// + /// 将当前列表中的软件在数据库中排序 + /// + /// + private void ReSortSoftByList(IDbInterface db) + { + db.BeginTransaction(); + for (int i = 0; i < IconViewEx1.Items.Count; i++) + { + var info = (SoftInfo)IconViewEx1.Items[i].Tag; + RyQuickSQL mySQL = new RyQuickSQL("Softs"); + mySQL.AddField("sortindex", i + 1); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + info.Id, mySQL); + } + db.Commit(); + } + + private void FrmVSoft_FormClosing(object sender, FormClosingEventArgs e) + { + } + + private void TabList_Column_KeyDown(object sender, KeyEventArgs e) + { + if(e.KeyCode==Keys.Down) + { + if(IconViewEx1.Items.Count>0) + { + if(IconViewEx1.SelectedItems.Count==0) + { + IconViewEx1.Items[0].Selected = true ; + } + IconViewEx1.Focus(); + } + } + else if (e.KeyCode == Keys.Up) + { + rySearch1.Focus(); + } + } + + private void TabList_Type_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Right) + { + if (IconViewEx1.Items.Count > 0) + { + if (IconViewEx1.SelectedItems.Count == 0) + { + IconViewEx1.Items[0].Selected = true; + } + IconViewEx1.Focus(); + } + } + } + + private void rySearch1_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Down) + { + if (TabList_Column.SelectedItems.Count == 0) + { + if (IconViewEx1.Items.Count > 0) + { + if (IconViewEx1.SelectedItems.Count == 0) + { + IconViewEx1.Items[0].Selected = true; + } + IconViewEx1.Focus(); + return; + } + } + TabList_Column.Focus(); + var color = TabList_Column.SelectedBackColor; + TabList_Column.SelectedBackColor = Color.LightYellow; + using (var bg = new BackgroundWorker()) + { + bg.DoWork += delegate { System.Threading.Thread.Sleep(500); };//180秒后,3分钟 + bg.RunWorkerCompleted += delegate { + this.Invoke(new Action(() => + { + TabList_Column.SelectedBackColor = color; + })); + }; // 线程执行完成后会执行 RunWorkerCompleted 事伯的代码块 + bg.RunWorkerAsync(); + } + } + } + + + private void 复制并新增软件ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + var info = (SoftInfo)IconViewEx1.SelectedItems[0].Tag; + var ColumnId =GetCurColumnId(); + if (ColumnId == 0) + { + MessageBox.Show("当前模式下不支持添加软件。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + FrmAddSoft frm = new FrmAddSoft + { + SQLConnStr = SQLConnStr, + ColumnId = ColumnId + }; + frm.GetInfo(info.Id); + frm.Text = "复制并新增软件"; + frm.SelectId = -1; + if (frm.ShowDialog() == DialogResult.OK) + { + LoadDb(); + } + frm.Dispose(); + } + } +} diff --git a/Source/VSoft_Dll/FrmInCMD.resx b/Source/VSoft_Dll/FrmInCMD.resx new file mode 100644 index 0000000..6672c6e --- /dev/null +++ b/Source/VSoft_Dll/FrmInCMD.resx @@ -0,0 +1,278 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 167, 18 + + + + + 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 + 7NsAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABGdBTUEAALGPC/xhBQAAAPFJREFUSEvt + l7EKwjAQhrM4OCazz6m77g5Cii6+gTgquuhrJG7u6mBd6/0apIQTG0wolPzwQeld86ft5dqIIE3PfVXY + JVES1Qtt7jiHmMuKL6VP44+hD8VcWnypwuxZU6DNzqXFl9TmyJoSsrAHlxZf2bhONo6qjhgvqh4NOERz + wMU/uHGmADEvl4UazUrN7AB3MecGSonUdiNoFhcumBIyvlLjtw8umJiyPWN61F8LJhV4vfSps1s/kBoU + tEBp0wzWKPUG/LWc3JIdYQm7xdxMHelcAcrGdbJxVLVm3NoPPRlPWFOQcgvDbtrex4GbNiGeSkzyFPRt + h10AAAAASUVORK5CYII= + + + + 17, 17 + + + 273, 18 + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAAA8CAYAAADxJz2MAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAu + IwAALiMBeKU/dgAABJxJREFUeF7tmM1tGzEQhX3OIYDvObkFt6ACcnELbkFIBVEJcQtqQYc0ICBpwC24 + BeW9zcxiyB2Rsz/6WYMDfIA05JIzs49c7j6cTqfGDFxnI47rbMRxnY04rrMRx3U24rjORhzX2YjjOhtx + XGcjzk3ty5+fe3AAr15wa+BmxqKBk+GdPi/Ie+ZmhmIdTfHyQj57wd4jNzEUaGMK5tEKWDIUiPueVzhy + 8AK9V65uKFBNfRsv0Hvl6oYCldT37gV5z2hSj2ALPiSR7f+WZQ3jPsn451jfUxhB28Ip/P8oeS9mGPPN + zJGzOvURJuUlQxZVIcb7dOojpQIuqkKM9enUR0oFJIuoEOPU1Lf1glsDNWUsokKMwX3WG590c3jBrYGQ + OqQOkwzX8wmfP6Qsq1Uf0SQvpkJc+2nVRzTJi6gQ19XUt/OCWhO9IZnFVYhrSuojT15Qa6I3JpMll7OT + rmHDNfw05Y1F3tjHC2pNJIakqoqRrlVD3/yDaU43lhfUmkgMSdX2rE41EUPfqvpoXlBrYmBIbrYK0aem + vmfp6ga1JgaG5GarEH3Ofa4nB+nWmRfUmnANSU5WIdqKH0y//v71/duPv3twEo7gIGyFV7ARFv8qdHFD + opNViLbi53opkBZvLKNPAjczJDtahfBVP9ejCHMKmCz/JQxjPoEd+ABHcc83JDtahfAVP9ezD4K0BeTv + R6DLlUuXPsJlrktb+4dPATXDWJzXbiXKRrrMNyQdViF/Z205r+yHAJMCdhffwDA3VWcLR6jCF+kyMLTZ + 2PfiLhsSD53n+Dtrs3Tqo2FiG/isAuJ6T7k5bkHgt8p+B90NLhn6cDy9JrYakHz1TAdC6qNhYhv45AIy + ATNOjUER4bNxeO12ayEsHk8Meg2LHtuTUYCSCrnvhdRH46QmCAZlA1XV6P7HILUvldsfaYw/wuBGwWfj + GOx7pq2IdC8bilBTYYkkeExqAx9Lr5TMr4VXeDOsQr0Ccr/T9ssWkIZClFR4jsFnMEw6p4B9IaxfXImx + r+njFbC/HngFpOIZK+HNsOOR7kZJ97qhEFNU6AX+DOzd7/YSoEGqgrrg5L/27fYcthnfEgUMve1k1/Tv + 82FDQcaocKC+KYZAB8XyfLnBnxQeJGoxbaFliH7cq0ddMzAUZIwKF3ntygMHVLAt4FG6Jga/LWCOXQGE + fckL4NiDGy/+/hpxjzcUJqrC6mevqCFge3xgojz36X/3KCH9tM9YvD3RFjA5WYwyFKb2vksmv3IhOL6b + MliiB2R7nOERxxaHbfxvoZLycyKXsR2nhFdAO+e8d3IUqPTOS1z1YWIWxyaqTzmrsBrsb5OJkCSM/yyw + tnFujUefvIMHhLTbMXkzpm1TKFBJhWfVhwnHJu7R7VEgqiaSJIr/No6QmtAv2QMVaR5vKBSL6HH2yYsJ + 7d7lwc1dValLVWECvTLw2y51kr8Pq5oGKpF2nTO8HNGXc3DMPmb3M/WlwIR2CffJS3xXM5lfizA4I9YM + 13AFcBvYuYlek1sYEqeSdAsYXcDEvKQacVxnI47rbMRxnY04rrMRx3U24rjORhzX2YhyevgH9KfBo50b + JekAAAAASUVORK5CYII= + + + + + AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3t7j/tbW2/7Oz + tP+xsbL/r66w/62trv+rq6z/qaiq/6emqP+kpKX/oqKk/wAAAAAAAAAAt7e4/7W1tv+zs7T/sbGy/6+u + sP+tra7/q6us/6moqv+npqj/pKSl/6KipP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALm5 + uf/7+/v/+/v7//r6+v/6+vr/+fn5//n5+f/5+fn/+Pj4//j4+P+kpKX/AAAAAAAAAAC5ubn/+/v7//v7 + +//6+vr/+vr6//n5+f/5+fn/+fn5//j4+P/4+Pj/pKSl/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAu7u7//v7+//39/f/9vb2//X19f/09PT/8/Pz//Ly8v/y8vL/+Pj4/6emqP8AAAAAAAAAALu7 + u//7+/v/9/f3//b29v/19fX/9PT0//Pz8//y8vL/8vLy//j4+P+npqj/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC9vb3/+/v7//f39//39/f/9vb2//X19f/09PT/8/Pz//Ly8v/5+fn/qaiq/wAA + AAAAAAAAvb29//v7+//39/f/9/f3//b29v/19fX/9PT0//Pz8//y8vL/+fn5/6moqv8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAL6+v//7+/v/9/f3//f39//39/f/9vb2//X19f/09PT/8/Pz//n5 + +f+rq6z/AAAAAAAAAAC+vr//+/v7//f39//39/f/9/f3//b29v/19fX/9PT0//Pz8//5+fn/q6us/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDB//v7+//39/f/9/f3//f39//39/f/9vb2//X1 + 9f/09PT/+fn5/62trv8AAAAAAAAAAMDAwf/7+/v/9/f3//f39//39/f/9/f3//b29v/19fX/9PT0//n5 + +f+tra7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCwsL/+/v7//f39//39/f/9/f3//f3 + 9//39/f/9vb2//X19f/6+vr/r66w/wAAAAAAAAAAwsLC//v7+//39/f/9/f3//f39//39/f/9/f3//b2 + 9v/19fX/+vr6/6+usP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTExP/7+/v/9/f3//f3 + 9//39/f/9/f3//f39//39/f/9vb2//r6+v+xsbL/AAAAAAAAAADExMT/+/v7//f39//39/f/9/f3//f3 + 9//39/f/9/f3//b29v/6+vr/sbGy/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxsbG//v7 + +//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+/v7/7OztP8AAAAAAAAAAMbGxv/7+/v/9/f3//f3 + 9//39/f/9/f3//f39//39/f/9/f3//v7+/+zs7T/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADHx8f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/tbW2/wAAAAAAAAAAx8fH//v7 + +//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/7W1tv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMnJyf/Hx8f/xsbG/8TExP/CwsL/wMDB/76+v/+9vb3/u7u7/7m5uf+3t7j/9/f3IAAA + AADJycn/x8fH/8bGxv/ExMT/wsLC/8DAwf++vr//vb29/7u7u/+5ubn/t7e4//f39yAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALe3uP+1tbb/s7O0/7Gxsv+vrrD/ra2u/6ur + rP+pqKr/p6ao/6Skpf+ioqT/AAAAAAAAAAC3t7j/tbW2/7OztP+xsbL/r66w/62trv+rq6z/qaiq/6em + qP+kpKX/oqKk/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAubm5//v7+//7+/v/+vr6//r6 + +v/5+fn/+fn5//n5+f/4+Pj/+Pj4/6Skpf8AAAAAAAAAALm5uf/7+/v/+/v7//r6+v/6+vr/+fn5//n5 + +f/5+fn/+Pj4//j4+P+kpKX/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7u7v/+/v7//f3 + 9//29vb/9fX1//T09P/z8/P/8vLy//Ly8v/4+Pj/p6ao/wAAAAAAAAAAu7u7//v7+//39/f/9vb2//X1 + 9f/09PT/8/Pz//Ly8v/y8vL/+Pj4/6emqP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL29 + vf/7+/v/9/f3//f39//29vb/9fX1//T09P/z8/P/8vLy//n5+f+pqKr/AAAAAAAAAAC9vb3/+/v7//f3 + 9//39/f/9vb2//X19f/09PT/8/Pz//Ly8v/5+fn/qaiq/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAvr6///v7+//39/f/9/f3//f39//29vb/9fX1//T09P/z8/P/+fn5/6urrP8AAAAAAAAAAL6+ + v//7+/v/9/f3//f39//39/f/9vb2//X19f/09PT/8/Pz//n5+f+rq6z/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADAwMH/+/v7//f39//39/f/9/f3//f39//29vb/9fX1//T09P/5+fn/ra2u/wAA + AAAAAAAAwMDB//v7+//39/f/9/f3//f39//39/f/9vb2//X19f/09PT/+fn5/62trv8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMLCwv/7+/v/9/f3//f39//39/f/9/f3//f39//29vb/9fX1//r6 + +v+vrrD/AAAAAAAAAADCwsL/+/v7//f39//39/f/9/f3//f39//39/f/9vb2//X19f/6+vr/r66w/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMTE//v7+//39/f/9/f3//f39//39/f/9/f3//f3 + 9//29vb/+vr6/7Gxsv8AAAAAAAAAAMTExP/7+/v/9/f3//f39//39/f/9/f3//f39//39/f/9vb2//r6 + +v+xsbL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGxsb/+/v7//f39//39/f/9/f3//f3 + 9//39/f/9/f3//f39//7+/v/s7O0/wAAAAAAAAAAxsbG//v7+//39/f/9/f3//f39//39/f/9/f3//f3 + 9//39/f/+/v7/7OztP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMfHx//7+/v/+/v7//v7 + +//7+/v/+/v7//v7+//7+/v/+/v7//v7+/+1tbb/AAAAAAAAAADHx8f/+/v7//v7+//7+/v/+/v7//v7 + +//7+/v/+/v7//v7+//7+/v/tbW2/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAycnJ/8fH + x//Gxsb/xMTE/8LCwv/AwMH/vr6//729vf+7u7v/ubm5/7e3uP/39/cgAAAAAMnJyf/Hx8f/xsbG/8TE + xP/CwsL/wMDB/76+v/+9vb3/u7u7/7m5uf+3t7j/9/f3IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA//////////////////////ABgA/wAYAP8AGAD/ABgA/wAYAP8AGAD/AB + gA/wAYAP8AGAD/ABgA/wAIAH///////////wAYAP8AGAD/ABgA/wAYAP8AGAD/ABgA/wAYAP8AGAD/AB + gA/wAYAP8ACAB/////////////////////8= + + + \ No newline at end of file diff --git a/Source/VSoft_Dll/FrmVSoft.Designer.cs b/Source/VSoft_Dll/FrmVSoft.Designer.cs new file mode 100644 index 0000000..7bf7d0a --- /dev/null +++ b/Source/VSoft_Dll/FrmVSoft.Designer.cs @@ -0,0 +1,521 @@ +namespace VSoft +{ + partial class FrmVSoft + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmVSoft)); + this.panelEx1 = new ryControls.PanelEx(); + this.LblEmpty = new System.Windows.Forms.Label(); + this.MenuList = new System.Windows.Forms.ContextMenuStrip(this.components); + this.以管理员方式启动ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); + this.新增软件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.新增内置功能ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.修改软件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.从列表删除该软件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.打开软件所在位置ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.rySearch1 = new ryControls.rySearch(); + this.BtnAddColumn = new System.Windows.Forms.Button(); + this.MenuTabColumn = new System.Windows.Forms.ContextMenuStrip(this.components); + this.添加栏目ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.修改栏目ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.删除栏目ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.MenuTabType = new System.Windows.Forms.ContextMenuStrip(this.components); + this.新增分类ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.Menu修改分类 = new System.Windows.Forms.ToolStripMenuItem(); + this.Menu删除分类 = new System.Windows.Forms.ToolStripMenuItem(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.LblDrag = new System.Windows.Forms.Label(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); + this.MenuTray = new System.Windows.Forms.ContextMenuStrip(this.components); + this.显示主窗体ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.打开官网ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.捐助ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.设置ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.退出软件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.LblSetting = new System.Windows.Forms.Label(); + this.TabList_Type = new ryControls.TabList(); + this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.TabList_Column = new ryControls.TabList(); + this.IconViewEx1 = new ryControls.IconViewEx(); + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.panelEx1.SuspendLayout(); + this.MenuList.SuspendLayout(); + this.MenuTabColumn.SuspendLayout(); + this.MenuTabType.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.MenuTray.SuspendLayout(); + this.SuspendLayout(); + // + // panelEx1 + // + this.panelEx1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panelEx1.BackColor = System.Drawing.Color.White; + this.panelEx1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(213)))), ((int)(((byte)(216)))), ((int)(((byte)(223))))); + this.panelEx1.Controls.Add(this.LblEmpty); + this.panelEx1.Controls.Add(this.IconViewEx1); + this.panelEx1.Location = new System.Drawing.Point(84, 65); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Padding = new System.Windows.Forms.Padding(3); + this.panelEx1.RoundeStyle = ryControls.RoundStyle.None; + this.panelEx1.Size = new System.Drawing.Size(626, 448); + this.panelEx1.TabIndex = 1; + this.panelEx1.TileBackColor = System.Drawing.Color.White; + this.panelEx1.Resize += new System.EventHandler(this.panelEx1_Resize); + // + // LblEmpty + // + this.LblEmpty.AutoSize = true; + this.LblEmpty.BackColor = System.Drawing.Color.Transparent; + this.LblEmpty.Font = new System.Drawing.Font("宋体", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.LblEmpty.ForeColor = System.Drawing.Color.Silver; + this.LblEmpty.Location = new System.Drawing.Point(31, 196); + this.LblEmpty.Name = "LblEmpty"; + this.LblEmpty.Size = new System.Drawing.Size(456, 19); + this.LblEmpty.TabIndex = 1; + this.LblEmpty.Text = "暂无软件,请右击列表或者直接拖放文件到列表中添加"; + this.LblEmpty.Visible = false; + // + // MenuList + // + this.MenuList.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.以管理员方式启动ToolStripMenuItem, + this.toolStripMenuItem2, + this.新增软件ToolStripMenuItem, + this.新增内置功能ToolStripMenuItem, + this.修改软件ToolStripMenuItem, + this.从列表删除该软件ToolStripMenuItem, + this.toolStripMenuItem1, + this.打开软件所在位置ToolStripMenuItem}); + this.MenuList.Name = "contextMenuStrip1"; + this.MenuList.Size = new System.Drawing.Size(185, 148); + this.MenuList.Opening += new System.ComponentModel.CancelEventHandler(this.MenuList_Opening); + // + // 以管理员方式启动ToolStripMenuItem + // + this.以管理员方式启动ToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("以管理员方式启动ToolStripMenuItem.Image"))); + this.以管理员方式启动ToolStripMenuItem.Name = "以管理员方式启动ToolStripMenuItem"; + this.以管理员方式启动ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.以管理员方式启动ToolStripMenuItem.Text = "以管理员方式启动"; + this.以管理员方式启动ToolStripMenuItem.Click += new System.EventHandler(this.以管理员方式启动ToolStripMenuItem_Click); + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(181, 6); + // + // 新增软件ToolStripMenuItem + // + this.新增软件ToolStripMenuItem.Name = "新增软件ToolStripMenuItem"; + this.新增软件ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.新增软件ToolStripMenuItem.Text = "添加软件"; + this.新增软件ToolStripMenuItem.Click += new System.EventHandler(this.新增软件ToolStripMenuItem_Click); + // + // 新增内置功能ToolStripMenuItem + // + this.新增内置功能ToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("新增内置功能ToolStripMenuItem.Image"))); + this.新增内置功能ToolStripMenuItem.Name = "新增内置功能ToolStripMenuItem"; + this.新增内置功能ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.新增内置功能ToolStripMenuItem.Text = "添加内置功能"; + this.新增内置功能ToolStripMenuItem.Click += new System.EventHandler(this.新增内置功能ToolStripMenuItem_Click); + // + // 修改软件ToolStripMenuItem + // + this.修改软件ToolStripMenuItem.Name = "修改软件ToolStripMenuItem"; + this.修改软件ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.修改软件ToolStripMenuItem.Text = "修改软件"; + this.修改软件ToolStripMenuItem.Click += new System.EventHandler(this.修改软件ToolStripMenuItem_Click); + // + // 从列表删除该软件ToolStripMenuItem + // + this.从列表删除该软件ToolStripMenuItem.Name = "从列表删除该软件ToolStripMenuItem"; + this.从列表删除该软件ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.从列表删除该软件ToolStripMenuItem.Text = "从列表删除选定软件"; + this.从列表删除该软件ToolStripMenuItem.Click += new System.EventHandler(this.从列表删除该软件ToolStripMenuItem_Click); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(181, 6); + // + // 打开软件所在位置ToolStripMenuItem + // + this.打开软件所在位置ToolStripMenuItem.Name = "打开软件所在位置ToolStripMenuItem"; + this.打开软件所在位置ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.打开软件所在位置ToolStripMenuItem.Text = "打开软件所在位置"; + this.打开软件所在位置ToolStripMenuItem.Click += new System.EventHandler(this.打开软件所在位置ToolStripMenuItem_Click); + // + // rySearch1 + // + this.rySearch1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(236)))), ((int)(((byte)(239)))), ((int)(((byte)(244))))); + this.rySearch1.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95))))); + this.rySearch1.EmptyText = "输入名称或拼音即可搜索"; + this.rySearch1.Location = new System.Drawing.Point(87, 6); + this.rySearch1.Name = "rySearch1"; + this.rySearch1.Size = new System.Drawing.Size(228, 27); + this.rySearch1.TabIndex = 2; + this.rySearch1.OnSearch += new System.EventHandler(this.rySearch1_OnSearch); + this.rySearch1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.rySearch1_KeyDown); + // + // BtnAddColumn + // + this.BtnAddColumn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.BtnAddColumn.Image = ((System.Drawing.Image)(resources.GetObject("BtnAddColumn.Image"))); + this.BtnAddColumn.Location = new System.Drawing.Point(682, 34); + this.BtnAddColumn.Name = "BtnAddColumn"; + this.BtnAddColumn.Size = new System.Drawing.Size(27, 28); + this.BtnAddColumn.TabIndex = 3; + this.BtnAddColumn.UseVisualStyleBackColor = true; + this.BtnAddColumn.Click += new System.EventHandler(this.BtnAddColumn_Click); + // + // MenuTabColumn + // + this.MenuTabColumn.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.添加栏目ToolStripMenuItem, + this.修改栏目ToolStripMenuItem, + this.删除栏目ToolStripMenuItem}); + this.MenuTabColumn.Name = "MenuTab"; + this.MenuTabColumn.Size = new System.Drawing.Size(125, 70); + this.MenuTabColumn.Opening += new System.ComponentModel.CancelEventHandler(this.MenuTabColumn_Opening); + // + // 添加栏目ToolStripMenuItem + // + this.添加栏目ToolStripMenuItem.Name = "添加栏目ToolStripMenuItem"; + this.添加栏目ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.添加栏目ToolStripMenuItem.Text = "添加栏目"; + this.添加栏目ToolStripMenuItem.Click += new System.EventHandler(this.添加栏目ToolStripMenuItem_Click); + // + // 修改栏目ToolStripMenuItem + // + this.修改栏目ToolStripMenuItem.Name = "修改栏目ToolStripMenuItem"; + this.修改栏目ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.修改栏目ToolStripMenuItem.Text = "修改栏目"; + this.修改栏目ToolStripMenuItem.Click += new System.EventHandler(this.修改栏目ToolStripMenuItem_Click); + // + // 删除栏目ToolStripMenuItem + // + this.删除栏目ToolStripMenuItem.Name = "删除栏目ToolStripMenuItem"; + this.删除栏目ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.删除栏目ToolStripMenuItem.Text = "删除栏目"; + this.删除栏目ToolStripMenuItem.Click += new System.EventHandler(this.删除栏目ToolStripMenuItem_Click); + // + // MenuTabType + // + this.MenuTabType.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.新增分类ToolStripMenuItem, + this.Menu修改分类, + this.Menu删除分类}); + this.MenuTabType.Name = "MenuTab"; + this.MenuTabType.Size = new System.Drawing.Size(125, 70); + this.MenuTabType.Opening += new System.ComponentModel.CancelEventHandler(this.MenuTabType_Opening); + // + // 新增分类ToolStripMenuItem + // + this.新增分类ToolStripMenuItem.Name = "新增分类ToolStripMenuItem"; + this.新增分类ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.新增分类ToolStripMenuItem.Text = "新增分类"; + this.新增分类ToolStripMenuItem.Click += new System.EventHandler(this.新增分类ToolStripMenuItem_Click); + // + // Menu修改分类 + // + this.Menu修改分类.Name = "Menu修改分类"; + this.Menu修改分类.Size = new System.Drawing.Size(124, 22); + this.Menu修改分类.Text = "修改分类"; + this.Menu修改分类.Click += new System.EventHandler(this.Menu修改分类_Click); + // + // Menu删除分类 + // + this.Menu删除分类.Name = "Menu删除分类"; + this.Menu删除分类.Size = new System.Drawing.Size(124, 22); + this.Menu删除分类.Text = "删除分类"; + this.Menu删除分类.Click += new System.EventHandler(this.Menu删除分类_Click); + // + // pictureBox1 + // + this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); + this.pictureBox1.Location = new System.Drawing.Point(4, 3); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(80, 60); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 5; + this.pictureBox1.TabStop = false; + // + // LblDrag + // + this.LblDrag.BackColor = System.Drawing.Color.Black; + this.LblDrag.Location = new System.Drawing.Point(716, 111); + this.LblDrag.Name = "LblDrag"; + this.LblDrag.Size = new System.Drawing.Size(2, 89); + this.LblDrag.TabIndex = 6; + this.LblDrag.Visible = false; + // + // notifyIcon1 + // + this.notifyIcon1.ContextMenuStrip = this.MenuTray; + this.notifyIcon1.Visible = true; + this.notifyIcon1.DoubleClick += new System.EventHandler(this.显示主窗体ToolStripMenuItem_Click); + // + // MenuTray + // + this.MenuTray.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.显示主窗体ToolStripMenuItem, + this.打开官网ToolStripMenuItem, + this.捐助ToolStripMenuItem, + this.设置ToolStripMenuItem, + this.退出软件ToolStripMenuItem}); + this.MenuTray.Name = "MenuTray"; + this.MenuTray.Size = new System.Drawing.Size(137, 114); + // + // 显示主窗体ToolStripMenuItem + // + this.显示主窗体ToolStripMenuItem.Name = "显示主窗体ToolStripMenuItem"; + this.显示主窗体ToolStripMenuItem.Size = new System.Drawing.Size(136, 22); + this.显示主窗体ToolStripMenuItem.Text = "显示主窗体"; + this.显示主窗体ToolStripMenuItem.Click += new System.EventHandler(this.显示主窗体ToolStripMenuItem_Click); + // + // 打开官网ToolStripMenuItem + // + this.打开官网ToolStripMenuItem.Name = "打开官网ToolStripMenuItem"; + this.打开官网ToolStripMenuItem.Size = new System.Drawing.Size(136, 22); + this.打开官网ToolStripMenuItem.Text = "打开官网"; + this.打开官网ToolStripMenuItem.Click += new System.EventHandler(this.打开官网ToolStripMenuItem_Click); + // + // 捐助ToolStripMenuItem + // + this.捐助ToolStripMenuItem.Name = "捐助ToolStripMenuItem"; + this.捐助ToolStripMenuItem.Size = new System.Drawing.Size(136, 22); + this.捐助ToolStripMenuItem.Text = "捐助"; + this.捐助ToolStripMenuItem.Click += new System.EventHandler(this.捐助ToolStripMenuItem_Click); + // + // 设置ToolStripMenuItem + // + this.设置ToolStripMenuItem.Name = "设置ToolStripMenuItem"; + this.设置ToolStripMenuItem.Size = new System.Drawing.Size(136, 22); + this.设置ToolStripMenuItem.Text = "设置"; + this.设置ToolStripMenuItem.Click += new System.EventHandler(this.设置ToolStripMenuItem_Click); + // + // 退出软件ToolStripMenuItem + // + this.退出软件ToolStripMenuItem.Name = "退出软件ToolStripMenuItem"; + this.退出软件ToolStripMenuItem.Size = new System.Drawing.Size(136, 22); + this.退出软件ToolStripMenuItem.Text = "退出软件"; + this.退出软件ToolStripMenuItem.Click += new System.EventHandler(this.退出软件ToolStripMenuItem_Click); + // + // LblSetting + // + this.LblSetting.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.LblSetting.AutoSize = true; + this.LblSetting.Cursor = System.Windows.Forms.Cursors.Hand; + this.LblSetting.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.LblSetting.ForeColor = System.Drawing.Color.Blue; + this.LblSetting.Location = new System.Drawing.Point(681, 9); + this.LblSetting.Name = "LblSetting"; + this.LblSetting.Size = new System.Drawing.Size(29, 12); + this.LblSetting.TabIndex = 7; + this.LblSetting.Text = "设置"; + this.LblSetting.Click += new System.EventHandler(this.LblSetting_Click); + // + // TabList_Type + // + this.TabList_Type.AllowDrop = true; + this.TabList_Type.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.TabList_Type.BackColor = System.Drawing.SystemColors.Control; + this.TabList_Type.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TabList_Type.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader2}); + this.TabList_Type.ContextMenuStrip = this.MenuTabType; + this.TabList_Type.HideSelection = false; + this.TabList_Type.Icon = null; + this.TabList_Type.IsDrawGridLines = false; + this.TabList_Type.IsDrawIcon = false; + this.TabList_Type.Location = new System.Drawing.Point(4, 65); + this.TabList_Type.MultiSelect = false; + this.TabList_Type.Name = "TabList_Type"; + this.TabList_Type.OwnerDraw = true; + this.TabList_Type.Scrollable = false; + this.TabList_Type.SelectedBackColor = System.Drawing.Color.LightSkyBlue; + this.TabList_Type.Size = new System.Drawing.Size(74, 445); + this.TabList_Type.TabIndex = 4; + this.TabList_Type.TileSize = new System.Drawing.Size(80, 28); + this.TabList_Type.UseCompatibleStateImageBehavior = false; + this.TabList_Type.View = System.Windows.Forms.View.Tile; + this.TabList_Type.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.TabList_Type_ItemDrag); + this.TabList_Type.SelectedIndexChanged += new System.EventHandler(this.TabList_Type_SelectedIndexChanged); + this.TabList_Type.DragDrop += new System.Windows.Forms.DragEventHandler(this.TabList_Type_DragDrop); + this.TabList_Type.DragEnter += new System.Windows.Forms.DragEventHandler(this.TabList_Type_DragEnter); + this.TabList_Type.DragOver += new System.Windows.Forms.DragEventHandler(this.IconViewEx1_DragOver); + this.TabList_Type.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TabList_Type_KeyDown); + // + // columnHeader2 + // + this.columnHeader2.Width = 80; + // + // TabList_Column + // + this.TabList_Column.Alignment = System.Windows.Forms.ListViewAlignment.Left; + this.TabList_Column.AllowDrop = true; + this.TabList_Column.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TabList_Column.BackColor = System.Drawing.SystemColors.Control; + this.TabList_Column.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.TabList_Column.ContextMenuStrip = this.MenuTabColumn; + this.TabList_Column.HideSelection = false; + this.TabList_Column.Icon = null; + this.TabList_Column.IsDrawGridLines = false; + this.TabList_Column.IsDrawIcon = false; + this.TabList_Column.Location = new System.Drawing.Point(87, 34); + this.TabList_Column.MultiSelect = false; + this.TabList_Column.Name = "TabList_Column"; + this.TabList_Column.OwnerDraw = true; + this.TabList_Column.Scrollable = false; + this.TabList_Column.SelectedBackColor = System.Drawing.Color.LightSkyBlue; + this.TabList_Column.Size = new System.Drawing.Size(589, 29); + this.TabList_Column.TabIndex = 1; + this.TabList_Column.TileSize = new System.Drawing.Size(70, 28); + this.TabList_Column.UseCompatibleStateImageBehavior = false; + this.TabList_Column.View = System.Windows.Forms.View.Tile; + this.TabList_Column.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.TabList_Column_ItemDrag); + this.TabList_Column.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.TabList_Column_ItemSelectionChanged); + this.TabList_Column.DragDrop += new System.Windows.Forms.DragEventHandler(this.TabList_Column_DragDrop); + this.TabList_Column.DragEnter += new System.Windows.Forms.DragEventHandler(this.TabList_Column_DragEnter); + this.TabList_Column.DragOver += new System.Windows.Forms.DragEventHandler(this.IconViewEx1_DragOver); + this.TabList_Column.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TabList_Column_KeyDown); + // + // IconViewEx1 + // + this.IconViewEx1.AllowDrop = true; + this.IconViewEx1.BackColor = System.Drawing.Color.White; + this.IconViewEx1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.IconViewEx1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1}); + this.IconViewEx1.ContextMenuStrip = this.MenuList; + this.IconViewEx1.Dock = System.Windows.Forms.DockStyle.Fill; + this.IconViewEx1.HideSelection = false; + this.IconViewEx1.Icon = ((System.Drawing.Image)(resources.GetObject("IconViewEx1.Icon"))); + this.IconViewEx1.IsDrawGridLines = false; + this.IconViewEx1.IsDrawIcon = true; + this.IconViewEx1.Location = new System.Drawing.Point(3, 3); + this.IconViewEx1.MultiSelect = false; + this.IconViewEx1.Name = "IconViewEx1"; + this.IconViewEx1.OwnerDraw = true; + this.IconViewEx1.SelectedBackColor = System.Drawing.Color.LightYellow; + this.IconViewEx1.Size = new System.Drawing.Size(620, 442); + this.IconViewEx1.TabIndex = 0; + this.IconViewEx1.TileSize = new System.Drawing.Size(100, 100); + this.IconViewEx1.UseCompatibleStateImageBehavior = false; + this.IconViewEx1.View = System.Windows.Forms.View.Tile; + this.IconViewEx1.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.IconViewEx1_ItemDrag); + this.IconViewEx1.DragDrop += new System.Windows.Forms.DragEventHandler(this.IconViewEx1_DragDrop); + this.IconViewEx1.DragEnter += new System.Windows.Forms.DragEventHandler(this.IconViewEx1_DragEnter); + this.IconViewEx1.DragOver += new System.Windows.Forms.DragEventHandler(this.IconViewEx1_DragOver); + this.IconViewEx1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IconViewEx1_KeyDown); + this.IconViewEx1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.IconViewEx1_MouseClick); + this.IconViewEx1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.IconViewEx1_MouseDoubleClick); + this.IconViewEx1.Resize += new System.EventHandler(this.IconViewEx1_Resize); + // + // FrmVSoft + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(722, 525); + this.Controls.Add(this.LblSetting); + this.Controls.Add(this.LblDrag); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.TabList_Type); + this.Controls.Add(this.BtnAddColumn); + this.Controls.Add(this.TabList_Column); + this.Controls.Add(this.rySearch1); + this.Controls.Add(this.panelEx1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FrmVSoft"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "VSoft"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmVSoft_FormClosing); + this.Load += new System.EventHandler(this.FrmVSoft_Load); + this.Shown += new System.EventHandler(this.FrmVSoft_Shown); + this.ResizeEnd += new System.EventHandler(this.FrmVSoft_ResizeEnd); + this.Resize += new System.EventHandler(this.FrmVSoft_Resize); + this.panelEx1.ResumeLayout(false); + this.panelEx1.PerformLayout(); + this.MenuList.ResumeLayout(false); + this.MenuTabColumn.ResumeLayout(false); + this.MenuTabType.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.MenuTray.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private ryControls.IconViewEx IconViewEx1; + private ryControls.PanelEx panelEx1; + private ryControls.rySearch rySearch1; + private System.Windows.Forms.ContextMenuStrip MenuList; + private System.Windows.Forms.ToolStripMenuItem 从列表删除该软件ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 新增软件ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 修改软件ToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem 打开软件所在位置ToolStripMenuItem; + private ryControls.TabList TabList_Column; + private System.Windows.Forms.Button BtnAddColumn; + private System.Windows.Forms.ContextMenuStrip MenuTabColumn; + private System.Windows.Forms.ToolStripMenuItem 修改栏目ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 删除栏目ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 以管理员方式启动ToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2; + private ryControls.TabList TabList_Type; + private System.Windows.Forms.ContextMenuStrip MenuTabType; + private System.Windows.Forms.ToolStripMenuItem 新增分类ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem Menu修改分类; + private System.Windows.Forms.ToolStripMenuItem Menu删除分类; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.Label LblDrag; + private System.Windows.Forms.Timer timer1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.NotifyIcon notifyIcon1; + private System.Windows.Forms.ContextMenuStrip MenuTray; + private System.Windows.Forms.ToolStripMenuItem 显示主窗体ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 退出软件ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 打开官网ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 捐助ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 设置ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 新增内置功能ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 添加栏目ToolStripMenuItem; + private System.Windows.Forms.Label LblEmpty; + private System.Windows.Forms.Label LblSetting; + } +} \ No newline at end of file diff --git a/Source/VSoft_Dll/FrmVSoft.cs b/Source/VSoft_Dll/FrmVSoft.cs new file mode 100644 index 0000000..d98a22a --- /dev/null +++ b/Source/VSoft_Dll/FrmVSoft.cs @@ -0,0 +1,1333 @@ +using ryCommon; +using ryCommonDb; +using ryControls; +using SysFuns; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using VSoft.Config; +using VSoft.Prams; + +namespace VSoft +{ + public partial class FrmVSoft : Form + { + string[] prog_args; + string SQLConnStr = Itrycn_Db.SQLConnStr; + public FrmVSoft(string[] args) + { + InitializeComponent(); + prog_args = args; + //配置软件信息 + notifyIcon1.Text = Config.Soft_Info.Soft_Title; + Text = Config.Soft_Info.Soft_Title + " V" + RySoft.VersionStr; + if (!Config.Soft_Info.ShowTray) { notifyIcon1.Visible = false; } + if (!Config.Soft_Info.DonateVisabled) { 捐助ToolStripMenuItem.Text = "关于"; } + if (Config.Soft_Info.Soft_Url.Length == 0) { 打开官网ToolStripMenuItem.PerformClick(); } + notifyIcon1.Icon = Icon; + } + private bool IsProcUse = false; + private void LoadDb() + { + LoadDb(false); + } + private void LoadDb(bool isSearch) + { + IconViewEx1.Items.Clear(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + var id = GetCurColumnId(); + RyQuickSQL mySQL = new RyQuickSQL("Softs"); + mySQL.AddField("SearchText", "%" + rySearch1.Text + "%"); + var sql = "select * from Softs where (Name like @SearchText or Path like @SearchText or Des like @SearchText or PinYin like @SearchText)"; + if (isSearch) + { + IsProcUse = true; + TabList_Column.SelectedItems.Clear(); + TabList_Type.Items.Clear(); + TabList_Type.Items.Add("默认分类").Tag = 0; + IsProcUse = false; + } + else + { + if (id > 0) + { + sql += " and ColumnId=" + id; + } + else { sql += " and ColumnId<=0"; } + } + DataSet ds = db.ReadData(sql + " order by sortindex asc,AddTime desc", mySQL); + IconViewEx1.BeginUpdate(); + for (int i = 0; i < ds.Tables[0].Rows.Count; i++) + { + DataRow row = ds.Tables[0].Rows[i]; + SoftInfo info = new SoftInfo(); + info.Id = row["id"].ToInt(); + info.SoftType = row["SoftType"].ToInt(); + info.ColumnId = row["ColumnId"].ToInt(); + info.Name = row["Name"].ToString(); + info.Path = row["Path"].ToString(); + info.RunPram = row["RunPram"].ToString(); + info.SetJson = row["SetJson"].ToString(); + info.StartPath= row["StartPath"].ToString(); + info.IconPath = row["IconPath"].ToString(); + if (info.IconPath.Length == 0) + { + info.Image = API.GetImg(info.TruePath,128); + } + else + { + info.Image = API.GetImg(RyFiles.GetRealPath(row["IconPath"].ToString()),128); + } + IconViewEx1.Items.Add(info.Name).Tag = info ; + } + IconViewEx1.EndUpdate(); + db.Free(); + if(IconViewEx1.Items.Count==0) + { + LblEmpty.Visible = true; + } + else { LblEmpty.Visible = false; } + } + } + private void LoadColumn() + { + TabList_Column.Items.Clear(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + TabList_Column.BeginUpdate(); + DataSet ds = db.ReadData("select * from Columns where parentId=0 order by sortindex asc"); + for (int i = 0; i < ds.Tables[0].Rows.Count; i++) + { + DataRow row = ds.Tables[0].Rows[i]; + TabList_Column.Items.Add(row["Name"].ToString()).Tag = row["id"].ToInt(); + } + if(ds.Tables[0].Rows.Count==0) + { + #region 如果没有栏目,则创建一个栏目 + RyQuickSQL mySQL = new RyQuickSQL("Columns"); + mySQL.AddField("Name", "默认栏目"); + mySQL.AddField("editTime", DateTime.Now); + mySQL.AddField("sortindex", 1); + mySQL.AddField("parentId", 0); + mySQL.AddField("addTime", DateTime.Now); + db.ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL); + DataSet ds2 = db.ReadData("select * from Columns where parentId=0 order by sortindex asc"); + for (int i = 0; i < ds2.Tables[0].Rows.Count; i++) + { + DataRow row = ds2.Tables[0].Rows[i]; + TabList_Column.Items.Add(row["Name"].ToString()).Tag = row["id"].ToInt(); + } + ds2.Dispose(); + #endregion + } + ds.Dispose(); + TabList_Column.EndUpdate(); + db.Free(); + } + if(TabList_Column.Items.Count>0) + { + TabList_Column.Items[0].Selected = true; + } + } + private void LoadTypeColumn(int id) + { + TabList_Type.Items.Clear(); + TabList_Type.Items.Add("默认分类").Tag = 0; + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData("select * from Columns where parentId="+ id + " order by sortindex asc"); + TabList_Type.BeginUpdate(); + for (int i = 0; i < ds.Tables[0].Rows.Count; i++) + { + DataRow row = ds.Tables[0].Rows[i]; + TabList_Type.Items.Add(row["Name"].ToString()).Tag = row["id"].ToInt(); + } + ds.Dispose(); + TabList_Type.EndUpdate(); + db.Free(); + } + if (TabList_Type.Items.Count > 0) + { + TabList_Type.Items[0].Selected = true; + } + } + SysFuns.WinHotReg hotkey; + private void FrmVSoft_Load(object sender, EventArgs e) + { + MinimumSize = new Size(400, 200); + LblEmpty.Left =((panelEx1.Width - LblEmpty.Width) / 2); + Config.Soft_Info.UserDataFolder = ryCommon.RyFiles.GetRealPath(Config.Soft_Info.UserDataFolder); + VSoft.Prams.Itrycn_Db.CreateTable(); + VSoft.Config.Soft_Config.LoadSetting(); + LoadColumn(); + //rySearch1.PerformClick(); + if(RySoft.IsAdministrator()) + { + MessageBox.Show("管理员模式下启动本软件,可能会导致无法拖放图标到本软件。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + hotkey = new SysFuns.WinHotReg(Handle); + HotkeyValue hot = new HotkeyValue(Soft_Config.ShowMainHotKey); + hotkey.RegHotKey(100,hot.Modifiers_Int, hot.KeyCode); + hotkey.OnHotkey += Hotkey_OnHotkey; + ryCommon.RyRegedit.RegRoot = Microsoft.Win32.RegistryHive.CurrentUser; + //如果开机启动没有启动 + if(!ryCommon.RyRegedit.IsAutoRun(Soft_Info.Soft_Id, "\"" + Application.ExecutablePath.Replace("/", "\\") + "\" " + Soft_Info.Soft_Pram)) + { + switch (MessageBox.Show("您暂未设置开机启动,下次开机后软件将无法自动运行。\r\n设置过程中可能会遇到安全软件提示,请选择允许。\r\n\r\n是否要设置开机启动?", "开机启动", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2)) + { + case DialogResult.Yes: + ryCommon.RyRegedit.SetAutoRun(true, Soft_Info.Soft_Id, "\"" + Application.ExecutablePath.Replace("/", "\\") + "\" " + Soft_Info.Soft_Pram); + break; + } + } + LiveUpdate.RyUpdate update = new LiveUpdate.RyUpdate(Soft_Info.Update_Url); + update.CheckUpdate(); + } + + private void Hotkey_OnHotkey(int HotKeyID) + { + switch (HotKeyID) + { + case 100: + if (this.Visible && RyForm.GetActiveWindow()==Handle) + { + this.Hide(); + } + else + { + 显示主窗体ToolStripMenuItem.PerformClick(); + this.BringToFront(); + this.Select(); + this.Focus(); + RyForm.BringToTop(Handle); + rySearch1.Focus(); + } + break; + } + } + + protected override void WndProc(ref System.Windows.Forms.Message msg) + { + switch (msg.Msg) + { + case 17189: //处理消息 + { + #region 激活窗体 + switch (msg.WParam.ToInt32()) + { + case 100:// + #region 显示界面 + if ((int)msg.LParam.ToInt32() == 100) + { + this.Show(); + this.WindowState = FormWindowState.Normal; + this.Top = (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2; + this.Left = (Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2; + //RyForm.SetActiveWindow(Handle); + RyForm.BringToTop(Handle); + 显示主窗体ToolStripMenuItem.PerformClick(); + this.BringToFront(); + this.Select(); + this.Focus(); + RyForm.BringToTop(Handle); + rySearch1.Focus(); + } + #endregion + break; + } + #endregion + } + break; + default: + base.WndProc(ref msg);//调用基类函数处理非自定义消息。 + break; + } + } + + private void rySearch1_OnSearch(object sender, EventArgs e) + { + if(rySearch1.Text.Length==0) + { + MessageBox.Show("请输入内容。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + + } + LoadDb(true); + } + #region 对栏目标签进行操作 + /// + /// 将栏目列表中的第几个栏目修改 + /// + /// + /// + private void SetColumnRow(int id, int index) + { + #region 重新载入数据 + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData("select * from Columns where id=" + id); + if (mydb.HaveData(ds)) + { + DataRow row = ds.Tables[0].Rows[0]; + var item = TabList_Column.Items[index]; + item.Text = row["Name"].ToString(); + } + db.Free(); + } + #endregion + } + private void BtnAddColumn_Click(object sender, EventArgs e) + { + FrmAddColumn frm = new FrmAddColumn(); + if (frm.ShowDialog() == DialogResult.OK) + { + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData("select * from Columns where parentId=0 order by sortindex desc limit 1"); + TabList_Column.BeginUpdate(); + if (ds.Tables[0].Rows.Count > 0) + { + DataRow row = ds.Tables[0].Rows[0]; + TabList_Column.Items.Add(row["Name"].ToString()).Tag = row["id"].ToInt(); + } + TabList_Column.EndUpdate(); + db.Free(); + } + } + frm.Dispose(); + } + private void 修改栏目ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (TabList_Column.SelectedItems.Count == 0) { return; } + FrmAddColumn frm = new FrmAddColumn(); + frm.IsAdd = 0; + frm.GetInfo(TabList_Column.SelectedItems[0].Tag.ToInt()); + if (frm.ShowDialog() == DialogResult.OK) + { + SetColumnRow(TabList_Column.SelectedItems[0].Tag.ToInt(), TabList_Column.SelectedItems[0].Index); + } + frm.Dispose(); + } + + private void 删除栏目ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (TabList_Column.SelectedItems.Count == 0) { return; } + if (MessageBox.Show("确定要删除选定项吗?一旦删除将不可恢复。", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No) + { + return; + } + if (TabList_Column.Items.Count ==1) { + MessageBox.Show("请至少保留一个栏目。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + var column_id = TabList_Column.SelectedItems[0].Tag.ToInt(); + var ds = db.ReadData("select count(*) from Columns where parentId=" + column_id); + if (mydb.HaveData(ds)) + { + if (mydb.GetValue(ds) > 0) + { + ds.Dispose(); + MessageBox.Show("当前栏目下还有分类,请先移除再删除栏目。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + db.Free(); + return; + } + } + ds.Dispose(); + db.DelById("Columns", column_id.ToString()); + TabList_Column.SelectedItems[0].Remove(); + db.BeginTransaction(); + for (int i = 1; i < TabList_Column.Items.Count; i++) + { + var id = TabList_Column.Items[i].Tag.ToInt(); + RyQuickSQL mySQL = new RyQuickSQL("Columns"); + mySQL.AddField("sortindex", i); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + id, mySQL); + } + db.Commit(); + } + db.Free(); + } + #endregion + #region 对分类标签进行操作 + /// + ///将分类列表中的第几个分类进行修改 + /// + /// + /// + private void SetTypeRow(int id, int index) + { + #region 重新载入数据 + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData("select * from Columns where id=" + id); + if (mydb.HaveData(ds)) + { + DataRow row = ds.Tables[0].Rows[0]; + var item = TabList_Type.Items[index]; + item.Text = row["Name"].ToString(); + } + db.Free(); + } + #endregion + } + private void 新增分类ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (TabList_Column.SelectedItems.Count == 0) + { + MessageBox.Show("请先选择一个栏目。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + var id = TabList_Column.SelectedItems[0].Tag.ToInt(); + FrmAddType frm = new FrmAddType(); + frm.ParentId = id; + if (frm.ShowDialog() == DialogResult.OK) + { + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData("select * from Columns where parentId=" + id + " order by sortindex desc limit 1"); + TabList_Type.BeginUpdate(); + if(ds.Tables[0].Rows.Count>0) + { + DataRow row = ds.Tables[0].Rows[0]; + TabList_Type.Items.Add(row["Name"].ToString()).Tag = row["id"].ToInt(); + } + TabList_Type.EndUpdate(); + db.Free(); + } + } + frm.Dispose(); + } + + private void Menu修改分类_Click(object sender, EventArgs e) + { + if (TabList_Column.SelectedItems.Count == 0) + { + MessageBox.Show("请先选择一个栏目。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + if (TabList_Type.SelectedItems.Count == 0) + { + MessageBox.Show("请先选择一个分类。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + var id = TabList_Type.SelectedItems[0].Tag.ToInt(); + if (id == 0) { + MessageBox.Show("默认分类不支持修改", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + FrmAddType frm = new FrmAddType(); + frm.IsAdd = 0; + frm.GetInfo(id); + if (frm.ShowDialog() == DialogResult.OK) + { + SetTypeRow(id, TabList_Type.SelectedItems[0].Index); + } + frm.Dispose(); + } + + private void Menu删除分类_Click(object sender, EventArgs e) + { + if (TabList_Type.SelectedItems.Count == 0) { return; } + if (MessageBox.Show("确定要删除选定项吗?一旦删除将不可恢复。", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No) + { + return; + } + if (TabList_Type.SelectedItems.Count == 0) { return; } + var column_id = TabList_Type.SelectedItems[0].Tag.ToInt(); + if (column_id == 0) { + MessageBox.Show("默认分类不支持删除", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + var ds = db.ReadData("select count(*) from Softs where ColumnId=" + column_id); + if (mydb.HaveData(ds)) + { + if (mydb.GetValue(ds) > 0) + { + ds.Dispose(); + MessageBox.Show("当前分类下还有软件,请先移除再删除分类。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + db.Free(); + return; + } + } + ds.Dispose(); + db.DelById("Columns", column_id.ToString()); + TabList_Type.SelectedItems[0].Remove(); + db.BeginTransaction(); + for (int i = 1; i < TabList_Type.Items.Count; i++) + { + var id = TabList_Type.Items[i].Tag.ToInt(); + RyQuickSQL mySQL = new RyQuickSQL("Columns"); + mySQL.AddField("sortindex", i); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + id, mySQL); + } + db.Commit(); + } + db.Free(); + } + #endregion + #region 对软件列表进行操作 + private void SetSoftRow(int id, int index) + { + #region 重新载入数据 + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + DataSet ds = db.ReadData("select * from Softs where id=" + id); + if (mydb.HaveData(ds)) + { + DataRow row = ds.Tables[0].Rows[0]; + var item = IconViewEx1.Items[index]; + SoftInfo info = (SoftInfo)item.Tag; + info.Id = row["id"].ToInt(); + info.Name = row["Name"].ToString(); + info.Path = row["Path"].ToString(); + info.RunPram = row["RunPram"].ToString(); + info.SetJson = row["SetJson"].ToString(); + info.StartPath = row["StartPath"].ToString(); + info.IconPath = row["IconPath"].ToString(); + info.SoftType = row["SoftType"].ToInt(); + if (info.IconPath.Length == 0) + { + info.Image = API.GetImg(info.TruePath, 128); + } + else + { + info.Image = API.GetImg(RyFiles.GetRealPath(row["IconPath"].ToString()), 128); + } + item.Text = row["Name"].ToString(); + } + db.Free(); + } + #endregion + } + /// + /// 获取当前页面所属的分类或栏目ID + /// + /// + private int GetCurColumnId() + { + var ColumnId = 0; + if (TabList_Type.SelectedItems.Count > 0) + { + ColumnId = TabList_Type.SelectedItems[0].Tag.ToInt(); + } + if (ColumnId == 0) + { + if (TabList_Column.SelectedItems.Count > 0) + { + ColumnId = TabList_Column.SelectedItems[0].Tag.ToInt(); + } + } + return ColumnId; + } + private void 新增软件ToolStripMenuItem_Click(object sender, EventArgs e) + { + var ColumnId = GetCurColumnId(); + if (ColumnId == 0) + { + MessageBox.Show("当前模式下不支持添加软件。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + FrmAddSoft frm = new FrmAddSoft(); + frm.ColumnId = ColumnId; + if (frm.ShowDialog() == DialogResult.OK) + { + LoadDb(); + } + frm.Dispose(); + } + private void 修改软件ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + var info = (SoftInfo)IconViewEx1.SelectedItems[0].Tag; + FrmAddSoft frm = new FrmAddSoft(); + frm.SelectId = info.Id; + frm.IsAdd = 0; + frm.GetInfo(info.Id); + if (frm.ShowDialog() == DialogResult.OK) + { + SetSoftRow(info.Id, IconViewEx1.SelectedItems[0].Index); + } + frm.Dispose(); + } + private void 从列表删除该软件ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + if (MessageBox.Show("确定要删除选定项吗?一旦删除将不可恢复。", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No) + { + return; + } + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + for (int i = IconViewEx1.SelectedItems.Count - 1; i >= 0; i--) + { + var info = (SoftInfo)IconViewEx1.SelectedItems[i].Tag; + if(info.IconPath.Length>0 && info.IconPath.StartsWith("\\UserDb\\SoftLogos", StringComparison.OrdinalIgnoreCase)) + { + RyFiles.DeleteFile(RyFiles.GetRealPath(info.IconPath)); + } + db.DelById("Softs", info.Id.ToString()); + IconViewEx1.SelectedItems[i].Remove(); + if (IconViewEx1.Items.Count == 0) + { + LblEmpty.Visible = true; + } + else { LblEmpty.Visible = false; } + } + ReSortSoftByList(db); + } + db.Free(); + } + private void 以管理员方式启动ToolStripMenuItem_Click(object sender, EventArgs e) + { + RunByListSelected(true); + } + private void 打开软件所在位置ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + var info = (SoftInfo)IconViewEx1.SelectedItems[0].Tag; + if (System.IO.File.Exists(info.TruePath) || System.IO.Directory.Exists(info.TruePath)) + { + RyFiles.OpenFolderGotoFile(info.TruePath); + } + else + { + MessageBox.Show("没有找到文件。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + private void RunByListSelected(bool RunasAdmin) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + var info = (SoftInfo)IconViewEx1.SelectedItems[0].Tag; + var result= VSoft.Prams.Run.Open(info, RunasAdmin); + if (result>36 && VSoft.Config.Soft_Config.HideAfterRun) { this.Hide(); } + } + private void IconViewEx1_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + RunByListSelected(false); + } + else if (e.KeyCode == Keys.Up) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + var item = IconViewEx1.SelectedItems[0]; + if(item.Position.Y== IconViewEx1.Items[0].Position.Y) + { + IconViewEx1.SelectedItems.Clear(); + if (TabList_Column.SelectedItems.Count == 0) + { + TabList_Column.Items[0].Selected = true; + } + TabList_Column.Focus(); + var color = TabList_Column.SelectedBackColor; + TabList_Column.SelectedBackColor = Color.LightYellow; + using (var bg = new BackgroundWorker()) + { + bg.DoWork += delegate { System.Threading.Thread.Sleep(500); };//180秒后,3分钟 + bg.RunWorkerCompleted += delegate { + this.Invoke(new Action(() => + { + TabList_Column.SelectedBackColor = color; + })); + }; // 线程执行完成后会执行 RunWorkerCompleted 事伯的代码块 + bg.RunWorkerAsync(); + } + } + } + else if (e.KeyCode == Keys.Left) + { + if (IconViewEx1.SelectedItems.Count == 0) { return; } + var item = IconViewEx1.SelectedItems[0]; + if (item.Index==0 || item.Position.X== IconViewEx1.Items[0].Position.X) + { + IconViewEx1.SelectedItems.Clear(); + if (TabList_Type.SelectedItems.Count == 0) + { + TabList_Type.Items[0].Selected = true; + } + TabList_Type.Focus(); + var color = TabList_Type.SelectedBackColor; + TabList_Type.SelectedBackColor = Color.LightYellow; + using (var bg = new BackgroundWorker()) + { + bg.DoWork += delegate { System.Threading.Thread.Sleep(500); };//180秒后,3分钟 + bg.RunWorkerCompleted += delegate { + this.Invoke(new Action(() => + { + TabList_Type.SelectedBackColor = color; + })); + }; // 线程执行完成后会执行 RunWorkerCompleted 事伯的代码块 + bg.RunWorkerAsync(); + } + } + } + } + private void IconViewEx1_MouseDoubleClick(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + if (Soft_Config.OpenByClick) { return; } + RunByListSelected(false); + } + } + #endregion + + #region 软件列表拖放 + private void IconViewEx1_ItemDrag(object sender, ItemDragEventArgs e) + { + this.DoDragDrop(e.Item, DragDropEffects.Move); + } + + private void IconViewEx1_DragEnter(object sender, DragEventArgs e) + { + LblDrag.Height = IconViewEx1.TileSize.Height; + LblDrag.Parent = IconViewEx1; + ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); + if (lvi != null) + { + if (lvi.ListView != IconViewEx1) + { + e.Effect = DragDropEffects.None; + return; + } + } + e.Effect = DragDropEffects.Move; + } + private void IconViewEx1_DragDrop(object sender, DragEventArgs e) + { + LblDrag.Visible = false; + var filedrop = e.Data.GetData(DataFormats.FileDrop); + if (filedrop != null) + { + #region 拖放文件到软件列表 + var ColumnId = 0; + if (TabList_Type.SelectedItems.Count > 0) + { + ColumnId = TabList_Type.SelectedItems[0].Tag.ToInt(); + } + if (ColumnId == 0) + { + if (TabList_Column.SelectedItems.Count > 0) + { + ColumnId = TabList_Column.SelectedItems[0].Tag.ToInt(); + } + } + if(ColumnId==0) + { + MessageBox.Show("当前模式下不支持添加软件。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + var path = ((string[])filedrop)[0]; + FrmAddSoft frm = new FrmAddSoft(path); + frm.ColumnId = ColumnId; + if (frm.ShowDialog() == DialogResult.OK) + { + LoadDb(); + } + frm.Dispose(); + return; + #endregion + } + Point pt; + pt = ((IconViewEx)(sender)).PointToClient(new Point(e.X, e.Y)); + var to_item = IconViewEx1.GetItemAt(pt.X, pt.Y); + if (to_item == null) { return; } + //获得拖放中的项 + ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); + if (lvi == null) { return; } + if (lvi.ListView!=IconViewEx1) { return; } + if (lvi.Index == to_item.Index) { return; } + IconViewEx1.BeginUpdate(); + IconViewEx1.View = View.List; + IconViewEx1.Items.RemoveAt(lvi.Index); + IconViewEx1.Items.Insert(to_item.Index, lvi); + IconViewEx1.View = View.Tile; + IconViewEx1.EndUpdate(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + ReSortSoftByList(db); + } + db.Free(); + } + private void IconViewEx1_DragOver(object sender, DragEventArgs e) + { + ListViewItem item = null; + if (sender is IconViewEx) + { + var filedrop = e.Data.GetData(DataFormats.FileDrop); + if (filedrop != null) { + if (LblDrag.Visible) { LblDrag.Visible = false; } + return; + } + var lvi = e.Data.GetData(typeof(ListViewItem)); + if(lvi==null) + { + if (LblDrag.Visible) { LblDrag.Visible = false; } + return; + } + else + { + var lvi2 = (ListViewItem)lvi; + if(lvi2.ListView!=IconViewEx1) + { + if (LblDrag.Visible){LblDrag.Visible = false;} + return; + } + } + var list = ((IconViewEx)(sender)); + var pt = list.PointToClient(new Point(e.X, e.Y)); + item = list.GetItemAt(pt.X, pt.Y); + } + else if (sender is TabList) + { + var list = ((TabList)(sender)); + var pt = list.PointToClient(new Point(e.X, e.Y)); + item = list.GetItemAt(pt.X, pt.Y); + } + if (item == null) + { + if (LblDrag.Visible) + { + LblDrag.Visible = false; + } + } + else + { + if (!LblDrag.Visible) + { + LblDrag.Visible = true; + } + LblDrag.Location = item.Position; + } + } + #endregion + #region 栏目拖放 + private void TabList_Column_DragEnter(object sender, DragEventArgs e) + { + //判定是否现在拖动的数据是LISTVIEW项 + ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); + if (lvi != null) + { + LblDrag.Height = TabList_Column.TileSize.Height; + LblDrag.Parent = TabList_Column; + e.Effect = DragDropEffects.Move; + } + } + private void TabList_Column_DragDrop(object sender, DragEventArgs e) + { + LblDrag.Visible = false; + Point pt; + pt = ((TabList)(sender)).PointToClient(new Point(e.X, e.Y)); + var item = TabList_Column.GetItemAt(pt.X, pt.Y); + if (item == null) { return; } + var columnid = item.Tag.ToInt(); + //获得拖放中的项 + var drag_item = e.Data.GetData(typeof(ListViewItem)); + if (drag_item == null) { return; } + ListViewItem lvi = (ListViewItem)drag_item; + if (lvi.ListView == IconViewEx1) + { + #region 从软件列表里拖放 + var info = (SoftInfo)lvi.Tag; + RyQuickSQL mySQL = new RyQuickSQL("Softs"); + mySQL.AddField("ColumnId", columnid); + mySQL.AddField("editTime", DateTime.Now); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + mySQL.AddField("sortindex", Itrycn_Db.GetSoftCount(db, columnid) + 1); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + info.Id, mySQL); + if (TabList_Column.SelectedItems.Count > 0) + { + if (TabList_Column.SelectedItems[0].Tag.ToInt() != columnid) + { + lvi.Remove(); + } + else if (TabList_Type.SelectedItems.Count > 0 && TabList_Type.SelectedItems[0].Tag.ToInt() > 0) + { + lvi.Remove(); + } + } + else + { + lvi.Remove(); + } + ReSortSoftByList(db); + } + db.Free(); + #endregion + } + else if (lvi.ListView == TabList_Column) + { + if (lvi.Index == item.Index) { return; } + TabList_Column.BeginUpdate(); + TabList_Column.View = View.List; + TabList_Column.Items.RemoveAt(lvi.Index); + TabList_Column.Items.Insert(item.Index, lvi); + TabList_Column.View = View.Tile; + TabList_Column.EndUpdate(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + db.BeginTransaction(); + for (int i = 0; i < TabList_Column.Items.Count; i++) + { + var id = TabList_Column.Items[i].Tag.ToInt(); + RyQuickSQL mySQL = new RyQuickSQL("Columns"); + mySQL.AddField("sortindex", i + 1); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + id, mySQL); + } + db.Commit(); + } + db.Free(); + } + } + private void TabList_Column_ItemDrag(object sender, ItemDragEventArgs e) + { + this.DoDragDrop(e.Item, DragDropEffects.Move); + } + #endregion + #region 分类拖放 + private void TabList_Type_DragEnter(object sender, DragEventArgs e) + { + //判定是否现在拖动的数据是LISTVIEW项 + ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); + if (lvi != null) + { + LblDrag.Height = TabList_Type.TileSize.Height; + LblDrag.Parent = TabList_Type; + e.Effect = DragDropEffects.Move; + } + } + + private void TabList_Type_DragDrop(object sender, DragEventArgs e) + { + LblDrag.Visible = false; + Point pt; + pt = ((TabList)(sender)).PointToClient(new Point(e.X, e.Y)); + var item = TabList_Type.GetItemAt(pt.X, pt.Y); + if (item == null) { return; } + var columnid = item.Tag.ToInt(); + if (columnid == 0) + { + if (TabList_Column.SelectedItems.Count>0) + { + columnid = TabList_Column.SelectedItems[0].Tag.ToInt(); + } + } + //获得拖放中的项 + var drag_item = e.Data.GetData(typeof(ListViewItem)); + if (drag_item == null) { return; } + ListViewItem lvi = (ListViewItem)drag_item; + if (lvi.ListView == IconViewEx1) + { + #region 来源自软件列表 + var info = (SoftInfo)lvi.Tag; + RyQuickSQL mySQL = new RyQuickSQL("Softs"); + mySQL.AddField("ColumnId", columnid); + mySQL.AddField("editTime", DateTime.Now); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + mySQL.AddField("sortindex", Itrycn_Db.GetSoftCount(db, columnid) + 1); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + info.Id, mySQL); + if (TabList_Type.SelectedItems.Count > 0) + { + if (TabList_Type.SelectedItems[0].Tag.ToInt() != columnid) + { + lvi.Remove(); + } + } + else { lvi.Remove(); } + ReSortSoftByList(db); + } + db.Free(); + #endregion + } + else if (lvi.ListView == TabList_Type) + { + if (lvi.Index == item.Index || item.Index==0 || lvi.Index==0) { return; } + TabList_Type.BeginUpdate(); + TabList_Type.View = View.List; + TabList_Type.Items.RemoveAt(lvi.Index); + TabList_Type.Items.Insert(item.Index, lvi); + TabList_Type.View = View.Tile; + TabList_Type.EndUpdate(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + db.BeginTransaction(); + for (int i = 1; i < TabList_Type.Items.Count; i++) + { + var id = TabList_Type.Items[i].Tag.ToInt(); + RyQuickSQL mySQL = new RyQuickSQL("Columns"); + mySQL.AddField("sortindex", i); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" +id, mySQL); + } + db.Commit(); + } + db.Free(); + } + } + private void TabList_Type_ItemDrag(object sender, ItemDragEventArgs e) + { + this.DoDragDrop(e.Item, DragDropEffects.Move); + } + #endregion + private void FrmVSoft_Shown(object sender, EventArgs e) + { + ryCommon.Ini ini = new Ini(VSoft.Config.Soft_Info.UserDataFolder + "\\Win.dat"); + ini.WriteIni(VSoft.Config.Soft_Info.Soft_Id, "hwnd", Handle.ToInt32()); + var width=ini.ReadIni(VSoft.Config.Soft_Info.Soft_Id, "width",Width); + var height = ini.ReadIni(VSoft.Config.Soft_Info.Soft_Id, "height", Height); + if(width>=400 && height>=200) + { + Width = width; + Height = height; + } + if (prog_args.Length >= 1) + { + //如果是自启动,并且开启了右下角托盘图标,则隐藏自身。 + if (prog_args[0] == Soft_Info.Soft_Pram && Soft_Info.ShowTray) + this.Hide(); + } + } + private void TabList_Type_SelectedIndexChanged(object sender, EventArgs e) + { + if (IsProcUse) { return; } + LoadDb(); + } + private void TabList_Column_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) + { + if (IsProcUse) { return; } + if (TabList_Column.SelectedItems.Count > 0) + { + LoadTypeColumn(TabList_Column.SelectedItems[0].Tag.ToInt()); + } + else + { + LoadTypeColumn(-1); + } + //LoadDb(); + } + /// + /// 将当前列表中的软件在数据库中排序 + /// + /// + private void ReSortSoftByList(IDbInterface db) + { + db.BeginTransaction(); + for (int i = 0; i < IconViewEx1.Items.Count; i++) + { + var info = (SoftInfo)IconViewEx1.Items[i].Tag; + RyQuickSQL mySQL = new RyQuickSQL("Softs"); + mySQL.AddField("sortindex", i + 1); + db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where id=" + info.Id, mySQL); + } + db.Commit(); + } + + + private void 显示主窗体ToolStripMenuItem_Click(object sender, EventArgs e) + { + this.WindowState = FormWindowState.Normal; + var topmost = this.TopMost; + this.TopMost = true; + this.Show(); + this.TopMost = topmost; + } + + private void 退出软件ToolStripMenuItem_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void 打开官网ToolStripMenuItem_Click(object sender, EventArgs e) + { + ryCommon.RyFiles.OpenUrl(Config.Soft_Info.Soft_Url); + } + + private void 捐助ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (Config.Soft_Info.DonateVisabled) + { + FrmAbout frm = new FrmAbout(); + frm.ShowDialog(); + frm.Dispose(); + } + else + { + MessageBox.Show(Config.Soft_Info.AboutText.Replace("#softname#", Config.Soft_Info.Soft_Title).Replace("#ver#", "V" + RySoft.VersionStr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void 设置ToolStripMenuItem_Click(object sender, EventArgs e) + { + hotkey.Enabled = false; + FrmSetting frm = new FrmSetting(); + if(frm.ShowDialog()==DialogResult.OK) + { + VSoft.Config.Soft_Config.LoadSetting(); + hotkey.UnHotKey(); + HotkeyValue hot = new HotkeyValue(Soft_Config.ShowMainHotKey); + hotkey.RegHotKey(100,hot.Modifiers_Int, hot.KeyCode); + } + frm.Dispose(); + hotkey.Enabled = true; + } + + private void FrmVSoft_FormClosing(object sender, FormClosingEventArgs e) + { + if (Soft_Info.ShowTray && Soft_Config.HideByCloseBtn && e.CloseReason == CloseReason.UserClosing) + { + e.Cancel = true; + this.Hide(); + notifyIcon1.ShowBalloonTip(3000, Soft_Info.Soft_Title, "软件已经最小化到此处,请右击托盘图标进行关闭。", ToolTipIcon.Info); + return; + } + } + + private void TabList_Column_KeyDown(object sender, KeyEventArgs e) + { + if(e.KeyCode==Keys.Down) + { + if(IconViewEx1.Items.Count>0) + { + if(IconViewEx1.SelectedItems.Count==0) + { + IconViewEx1.Items[0].Selected = true ; + } + IconViewEx1.Focus(); + } + } + else if (e.KeyCode == Keys.Up) + { + rySearch1.Focus(); + } + } + + private void TabList_Type_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Right) + { + if (IconViewEx1.Items.Count > 0) + { + if (IconViewEx1.SelectedItems.Count == 0) + { + IconViewEx1.Items[0].Selected = true; + } + IconViewEx1.Focus(); + } + } + } + + private void rySearch1_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Down) + { + if (TabList_Column.SelectedItems.Count == 0) + { + if (IconViewEx1.Items.Count > 0) + { + if (IconViewEx1.SelectedItems.Count == 0) + { + IconViewEx1.Items[0].Selected = true; + } + IconViewEx1.Focus(); + return; + } + else + { + TabList_Column.Items[0].Selected = true; + } + } + TabList_Column.Focus(); + var color = TabList_Column.SelectedBackColor; + TabList_Column.SelectedBackColor = Color.LightYellow; + using (var bg = new BackgroundWorker()) + { + bg.DoWork += delegate { System.Threading.Thread.Sleep(500); };//180秒后,3分钟 + bg.RunWorkerCompleted += delegate { + this.Invoke(new Action(() => + { + TabList_Column.SelectedBackColor = color; + })); + }; // 线程执行完成后会执行 RunWorkerCompleted 事伯的代码块 + bg.RunWorkerAsync(); + } + } + } + + private void IconViewEx1_MouseClick(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + if (!Soft_Config.OpenByClick) { return; } + RunByListSelected(false); + } + } + + private void 新增内置功能ToolStripMenuItem_Click(object sender, EventArgs e) + { + var ColumnId = 0; + if (TabList_Type.SelectedItems.Count > 0) + { + ColumnId = TabList_Type.SelectedItems[0].Tag.ToInt(); + } + if (ColumnId == 0) + { + if (TabList_Column.SelectedItems.Count > 0) + { + ColumnId = TabList_Column.SelectedItems[0].Tag.ToInt(); + } + } + if (ColumnId == 0) + { + MessageBox.Show("当前模式下不支持添加软件。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + FrmInCMD frm = new FrmInCMD(); + if(frm.ShowDialog()==DialogResult.OK) + { + var info = frm.SelectedInfo; + RyQuickSQL mySQL = new RyQuickSQL("Softs"); + mySQL.AddField("Name", info.Name); + mySQL.AddField("SoftType",1);//0表示运行文件,1表示执行内置命令,2表示执行脚本 + mySQL.AddField("Path",frm.SQLConnStr); + if (info.CmdId.Length > 0) + { mySQL.AddField("RunPram","cmdid="+ info.CmdId); } + else + { + mySQL.AddField("RunPram","id="+ info.Id); + } + mySQL.AddField("StartPath","");//起始路径 + mySQL.AddField("IconPath", info.IconPath.Length>0? info.IconPath: info.Path);//图标路径 + mySQL.AddField("SetJson","");//设置 + mySQL.AddField("Des", info.Des);//备注 + mySQL.AddField("Pinyin", ryCommon.PinYin.Convert(info.Name) + "\r\n" + ryCommon.PinYin.ConvertFirstPY(info.Name)); + mySQL.AddField("editTime", DateTime.Now); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(SQLConnStr) == 1) + { + mySQL.AddField("ClickCount", 0);//点击量 + mySQL.AddField("ColumnId", ColumnId); + mySQL.AddField("sortindex", Itrycn_Db.GetSoftCount(db, ColumnId) + 1); + mySQL.AddField("addTime", DateTime.Now); + db.ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL); + LoadDb(); + } + db.Free(); + } + frm.Dispose(); + } + + private void FrmVSoft_ResizeEnd(object sender, EventArgs e) + { + if (Width > 200 && Height > 200) + { + ryCommon.Ini ini = new Ini(VSoft.Config.Soft_Info.UserDataFolder + "\\Win.dat"); + ini.WriteIni(VSoft.Config.Soft_Info.Soft_Id, "width", Width); + ini.WriteIni(VSoft.Config.Soft_Info.Soft_Id, "height", Height); + } + } + + private void 添加栏目ToolStripMenuItem_Click(object sender, EventArgs e) + { + BtnAddColumn.PerformClick(); + } + + private void MenuTabType_Opening(object sender, CancelEventArgs e) + { + if(TabList_Type.SelectedItems.Count==0) + { + Menu修改分类.Enabled = false; + Menu删除分类.Enabled = false; + } + else + { + if (TabList_Type.SelectedItems[0].Index == 0) + { + Menu修改分类.Enabled = false; + Menu删除分类.Enabled = false; + } + else + { + Menu修改分类.Enabled = true; + Menu删除分类.Enabled = true; + } + } + } + + private void MenuTabColumn_Opening(object sender, CancelEventArgs e) + { + if (TabList_Column.SelectedItems.Count == 0) + { + 修改栏目ToolStripMenuItem.Enabled = false; + 删除栏目ToolStripMenuItem.Enabled = false; + } + else + { + 修改栏目ToolStripMenuItem.Enabled = true; + 删除栏目ToolStripMenuItem.Enabled = true; + } + } + + private void MenuList_Opening(object sender, CancelEventArgs e) + { + bool isSelected = IconViewEx1.SelectedItems.Count>0; + 以管理员方式启动ToolStripMenuItem.Enabled = isSelected; + 修改软件ToolStripMenuItem.Enabled = isSelected; + 从列表删除该软件ToolStripMenuItem.Enabled = isSelected; + 打开软件所在位置ToolStripMenuItem.Enabled = isSelected; + } + + private void IconViewEx1_Resize(object sender, EventArgs e) + { + //LblEmpty.Left = (IconViewEx1.Width - LblEmpty.Width) / 2 + IconViewEx1.Left; + } + + private void FrmVSoft_Resize(object sender, EventArgs e) + { + LblEmpty.Left =((panelEx1.Width - LblEmpty.Width) / 2); + + } + + private void panelEx1_Resize(object sender, EventArgs e) + { + // LblEmpty.Left = panelEx1.Left + ((panelEx1.Width - LblEmpty.Width) / 2); + } + + private void LblSetting_Click(object sender, EventArgs e) + { + 设置ToolStripMenuItem.PerformClick(); + } + } +} diff --git a/Source/VSoft_Dll/FrmVSoft.resx b/Source/VSoft_Dll/FrmVSoft.resx new file mode 100644 index 0000000..cd400f0 --- /dev/null +++ b/Source/VSoft_Dll/FrmVSoft.resx @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 240, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAYRJREFUOE+NkztPwlAUx8/gakIYWFwYHB1w8FUQCEpI1KiTYpSHQVQisviYjZsJ + k4OJMT6ILhgTFheDiongc4AP4HdgcO/xnPZWaG81/JN/Qu49v1972wJ2iUQiQWqFiqL82yO2/w4Nuann + DA3MrqMrWcDaSRB30uOGiPfcYrwVWuQr1HnIPxXFnsQxQvYDYeMd1Scf1Yt3hwGMz4UNEc9WBK4JsHfx + AJ0r1wibBAoYMizwolpR9D6OYOPCh5f7AU0kcF0AuU8JhsybCVYfhvXeD9kIbGBYEwILrJYHZYEzVZRg + WH21hRtniixwJQoSDGkSWGBu7cgrCUr57THpgTEIqReE5RpCkpqoIsSr2Dezy4KSwDVBko1fxVHpzFa4 + e+FGuzozAtdDC/VMLCyduR2G2DMqk3GG6wJrhRY91GZ+K/QL83nbYXHrTZ4VmDmGZC8bwu9bISC4a6mM + /dO5/2EjhoQ/28apgs7oFfon5juDjdCgg2r9NzrEduchiN+O+WmbAvADQWOC4qBCLEQAAAAASUVORK5C + YII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAIpJREFUOE/tktEGxDAQRef/v6NLly5dQpfQtSXkixJJHu661R36NC/70NJhiDnH + mImRv0SMESEELJ8F73mG9x6vacKGTS6ErbVdOudUsLiwM4s55zX5fo6jChYXjvUTUkqoteIxDCpYXLgT + BSZhKQX3vlfB4sIP4U4ci50Jb12ngsUPENcdnPsORL5USPZgYQ6cHAAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + EwAACxMBAJqcGAAABvRJREFUeF7tnE2IHEUUxwcjIjkE1JMREnMWD7phd7uzfuBJEPSkd0+55BLQc9ds + ooIXT+bix8kgbtSYgxA1hsWLImLAPYTEXBRUNGiMEojpnpTvdWpIT2/Nm+6e7uqerv+DH0tPVfVs7/t1 + ffTHDopEoPS9QTQ6FKrkbKjiC/TzCqFBp6CcpLk5G6h4GK7rYKD0HSaF1WL5iN4XqOR4ECU3cl8GFoAg + ii8eWNePmXQWjyWld4ZRcox2kuR3ChYPOonfeVLpu0165TgQ6d3UlWzZdgQWF+oNvufcmjTbIzyq99KZ + /6ttB6AHUG5XlX7QpHsyVpTeRZUubWsEegUNBz9yrk3abwdN9D62NQD9gyQ4adJ+K2hs2G+rCPpLEOll + k/707D9jqwR6zZdp8pde0fdbCoEHrCm9ZxAMRwdthaD/UO5fxuTPbz4fhCo+ZykAXhBvkQDJH9sLgCdc + 5iHgpqUAeADnnnsAayHwAwjgORDAcyCA50AAz4EAngMBPAcCeA4E8BwI4DkQwHM6IUCgkquBijcXjh68 + MNORHiD+On08acEiWNdPkLzX7Me0GECAOYMkeISO4a/tx7QYQIAagiR4mI5jISXopAC0raxjbhcYJs+b + X3MiWAIaDv62H1936aQA9Ic8Ya/XPqvD0WHza26LVaUfpTr/5tt0GQhQkrwA+bduV9f1CtVbGAkgQEny + AtBS8PRDSt9lNtNgCRZldQABSpIXgD+zSbCi9FoYJdfz7bsGBCiJTQCGJaDh4E7zcRp0XE91XQIIUJJp + AhhO2SSg4/kvV68zQICSzBCAOTXY0DtMcRq0fHyaPo9z9ToBBChJAQH43saJvASrKnmWyjonAQQoSREB + mFSC3L9pMxJ06h9vQYCSFBXA8N42CaLkBfq8Mz0BBChJXoAqEQ6TZ2hfnZAAApSkDgE4gij+xrZ/13gr + wAdfjfS161pfvqr1+Z9vptvPvW6vmwUCNII7Ad7+bJQm3RY//X5zpgR8wYd+X1WW/F1ECDBB8wIM35+e + +GwUkaAKdEwb5vDSgAATNCcAJ567+DLRhAQQQKR+AV58M9HfXSyX+GzULQEEEKlPAE785g/VE5+NOiWA + ACLzC8CJGs/siwaL8sYncpu6JIAAIvMJUCXx3FOM2x9+t3kJIIBINQGkJZ0teDLIk0LbvlgCKeaVAAKI + lBdgVsKywcmblvgsLJQU3HPY2hUBAohU6wFmTfa4d+Ck2tpOoykJIIBINQF4HLcFj+c8L7C1KcIsCars + GwKIVJ8Efvrt7V5gnPg6Zu2SBBCgdqoLwMnmxHPXXEfiGd6PdBEJAtROdQGYuhLPFLlnUGRCmQcCiMwn + QF1khxMpeAViay8BAUTaFYATykvFWcFDDV85tO1jFhBApD0BeDwvEjwnmGeogQAi7gXgJWSR28TzLinH + QAARtwLwEo8TOytYkOw9g3mAACLuBCja5ddx1meBACJuBBhfM5CCJ4NVZvmzgAAibgSYdfbzMtDWrg4g + gIgbAaZN+vjCT5WLO2WAACJuBJh2oafp5DMQQKTdIaDuCZ8NCCDiRgA+023R5Ng/BgKIuBFg2vMDPDew + 1a8TCCDiRgDGFjwJtNWtEwgg4k6AaTd9bHXrBAKIuBNg2oMeTVz8yQIBRNwJwPcB+OkhnvnzpLDpxI+B + ACLuBGgLCCACAdoCAjgCAohAgLaAAI6AACJuBeAHO11c/88CAUTcCMAPhGTvCLpaAjIQQKR5AXjNn3/h + g7frfKlEAgKINCsAd/nTwsWdQAYCiDTfA0gvflR92aMMEECkeQF4vJ/2QCh/3vRQAAFE3EwCpYdC+SaR + rU1dQAARNwIw0mvfTT4bCAFE3AlgezeAt5ueB0AAEXcCMNlVAT8O5mIpCAFE3ArA8PLP5dVACCDiXgDX + QAARCNAWEMAREEAEArQFBHAEBBCBAG3RSQFoWwUq3uwT4XAUmcNLAwJMMCmADwEBJoAAbQEBWgoIkIEm + SFdt42afCaPkH9vfwjUd6QFAW0AAz4EAngMBPAcCeA4E8BwI4DkQwHMggOdAAM+BAJ4DATyHn77501YA + vOAy9QDxlqUAeEF8bhBEyWl7Ieg71PufpCFg9JKtEPSfYDg6OFhTeo+tEPSf5Vf1fbceT1LJF7YKoL/Q + 0H8mTT7HgUjvt1UC/YVzbtJ/K8Io+dBWEfQP6vE/Mmm/HWuv6Xuo8FK+MugXgYrPryi9y6R9MsKjei/Z + 8ZutIegFvwRH9QMm3fagsWE3Lg71kXiLc2vSLMeS0jup0VvbdwIWkITmd8c4pya9xSNU+nHaAeYFCwgt + 827QcH58+YjeZ9JZMTb0jnBdBzR5GKZvtKj4An3BlfwXgtahnMQXeH0fRKNDPKk3GRRiMPgf0ROZOwlS + 7NsAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABGdBTUEAALGPC/xhBQAAAPFJREFUSEvt + l7EKwjAQhrM4OCazz6m77g5Cii6+gTgquuhrJG7u6mBd6/0apIQTG0wolPzwQeld86ft5dqIIE3PfVXY + JVES1Qtt7jiHmMuKL6VP44+hD8VcWnypwuxZU6DNzqXFl9TmyJoSsrAHlxZf2bhONo6qjhgvqh4NOERz + wMU/uHGmADEvl4UazUrN7AB3MecGSonUdiNoFhcumBIyvlLjtw8umJiyPWN61F8LJhV4vfSps1s/kBoU + tEBp0wzWKPUG/LWc3JIdYQm7xdxMHelcAcrGdbJxVLVm3NoPPRlPWFOQcgvDbtrex4GbNiGeSkzyFPRt + h10AAAAASUVORK5CYII= + + + + 17, 17 + + + 346, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAAFAAAAA8CAYAAADxJz2MAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAu + IwAALiMBeKU/dgAABJxJREFUeF7tmM1tGzEQhX3OIYDvObkFt6ACcnELbkFIBVEJcQtqQYc0ICBpwC24 + BeW9zcxiyB2Rsz/6WYMDfIA05JIzs49c7j6cTqfGDFxnI47rbMRxnY04rrMRx3U24rjORhzX2YjjOhtx + XGcjzk3ty5+fe3AAr15wa+BmxqKBk+GdPi/Ie+ZmhmIdTfHyQj57wd4jNzEUaGMK5tEKWDIUiPueVzhy + 8AK9V65uKFBNfRsv0Hvl6oYCldT37gV5z2hSj2ALPiSR7f+WZQ3jPsn451jfUxhB28Ip/P8oeS9mGPPN + zJGzOvURJuUlQxZVIcb7dOojpQIuqkKM9enUR0oFJIuoEOPU1Lf1glsDNWUsokKMwX3WG590c3jBrYGQ + OqQOkwzX8wmfP6Qsq1Uf0SQvpkJc+2nVRzTJi6gQ19XUt/OCWhO9IZnFVYhrSuojT15Qa6I3JpMll7OT + rmHDNfw05Y1F3tjHC2pNJIakqoqRrlVD3/yDaU43lhfUmkgMSdX2rE41EUPfqvpoXlBrYmBIbrYK0aem + vmfp6ga1JgaG5GarEH3Ofa4nB+nWmRfUmnANSU5WIdqKH0y//v71/duPv3twEo7gIGyFV7ARFv8qdHFD + opNViLbi53opkBZvLKNPAjczJDtahfBVP9ejCHMKmCz/JQxjPoEd+ABHcc83JDtahfAVP9ezD4K0BeTv + R6DLlUuXPsJlrktb+4dPATXDWJzXbiXKRrrMNyQdViF/Z205r+yHAJMCdhffwDA3VWcLR6jCF+kyMLTZ + 2PfiLhsSD53n+Dtrs3Tqo2FiG/isAuJ6T7k5bkHgt8p+B90NLhn6cDy9JrYakHz1TAdC6qNhYhv45AIy + ATNOjUER4bNxeO12ayEsHk8Meg2LHtuTUYCSCrnvhdRH46QmCAZlA1XV6P7HILUvldsfaYw/wuBGwWfj + GOx7pq2IdC8bilBTYYkkeExqAx9Lr5TMr4VXeDOsQr0Ccr/T9ssWkIZClFR4jsFnMEw6p4B9IaxfXImx + r+njFbC/HngFpOIZK+HNsOOR7kZJ97qhEFNU6AX+DOzd7/YSoEGqgrrg5L/27fYcthnfEgUMve1k1/Tv + 82FDQcaocKC+KYZAB8XyfLnBnxQeJGoxbaFliH7cq0ddMzAUZIwKF3ntygMHVLAt4FG6Jga/LWCOXQGE + fckL4NiDGy/+/hpxjzcUJqrC6mevqCFge3xgojz36X/3KCH9tM9YvD3RFjA5WYwyFKb2vksmv3IhOL6b + MliiB2R7nOERxxaHbfxvoZLycyKXsR2nhFdAO+e8d3IUqPTOS1z1YWIWxyaqTzmrsBrsb5OJkCSM/yyw + tnFujUefvIMHhLTbMXkzpm1TKFBJhWfVhwnHJu7R7VEgqiaSJIr/No6QmtAv2QMVaR5vKBSL6HH2yYsJ + 7d7lwc1dValLVWECvTLw2y51kr8Pq5oGKpF2nTO8HNGXc3DMPmb3M/WlwIR2CffJS3xXM5lfizA4I9YM + 13AFcBvYuYlek1sYEqeSdAsYXcDEvKQacVxnI47rbMRxnY04rrMRx3U24rjORhzX2YhyevgH9KfBo50b + JekAAAAASUVORK5CYII= + + + + 482, 17 + + + 572, 17 + + + 690, 17 + + + + AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAACMuAAAjLgAAAAAAAAAA + AAAAAAAAAAAAAKizMQCVogAAoKscAJ2pFQCVowUAtrpDAqmwKAWmriMGpq4kB6auJAemriQHpq4kB6au + JAemriQHpq4kB6auJAemriQHpq4kB6auJAemriQHpq4jBqiwKAW0uT4Ck6IBAJ2pFQCgrBwAh5QAAKey + LgAAAAAAAAAAAAAAAACfriQAorApAJupFgCgrB0Tn6oYU56pFomeqRalnqkVsJ6pFbSeqRW0nqkVtJ6p + FbSeqRW0nqkVtJ6pFbSeqRW0nqkVtJ6pFbSeqRW0nqkVtJ6pFbSeqRW0nqkVsZ6pFqaeqRaLn6oYVqCs + HRaaqRUAoa8mAJ+tIwAAAAAAo7IwAKGwKQCVpQsAnqscQp2qGMScqRf7nKkW/5ypFv+cqRb/nKkW/5yp + Fv+cqRb/nKkW/5ypFv+cqRb/nKkW/5ypFv+cqRb/nKkW/5ypFv+cqRb/nKkW/5ypFv+cqRb/nKkW/5yp + Fv+cqRf8naoYyZ2rHEiKnQAAoK4lAKCxKwCGogAAmaoZAJysHkSbqhvjm6oa/5uqGv+bqhr/m6oa/5uq + Gv+bqhr/m6oa/5uqGv+bqhr/m6oa/5uqGv+bqhr/m6oa/5uqGv+bqhr/m6oa/5uqGv+bqhr/m6oa/5uq + Gv+bqhr/m6oa/5uqGv+bqhr/m6ob6JyrHk2YqRYA1s2DAJyuJACcriYZmqwfy5mrHf+Zqx3/masd/5mr + Hf+Zqx3/masd/5mrHf+Zqx3/masd/5mrHf+Zqx3/masc/5mrHP+Zqxz/masc/5mrHf+Zqx3/masd/5mr + Hf+Zqx3/masd/5mrHf+Zqx3/masd/5mrHf+Zqx3/mqwe0puuJB6brSMAl6sfAJmtJGGYrCD+mKwg/5is + IP+YrCD/mKwg/5isIP+YrCD/mKwg/5isIP+XrB//lqsd/5isIv+dsCz/obM1/6GzNP+dsCv/mKwh/5ar + Hf+XrB//mKwg/5esH/+YrCH/mKwg/5esH/+YrCD/mKwg/5isIP+YrCD/ma0jbJaqHAD///8Al64mm5et + JP+XrST/l60k/5etJP+XrST/l60k/5etJP+WrSP/lawi/6G1Ov+9y3X/2eGu/+jt0P/v8t3/7/Lc/+fs + zf/W36n/uslu/5+zNf+UqyD/p7lG/9bfqf/Z4a7/tcRj/5asIv+XrST/l60k/5etJP+XriamprtJA520 + OgiWryu4la4p/5WuKf+Vrin/la4p/5WuKf+Vrin/la0o/5mxMP+/zXz/7PDY//7+/f////////////// + ///////////////////9/vz/6O3Q/8LQg//l68v////////////R3KP/lK0n/5WuKf+Vrin/la4p/5au + K8KbszYNm7Q8DZWvMMOUry//lK8v/5SvL/+Ury//lK8v/5SuLf+ctT7/1N6r//39+/////////////// + ///7/Pj/9vnv//f57//8/fn//////////////////////////////////////8vYm/+Uri3/lK8v/5Sv + L/+Ury//la8wzJqzOxOctkYPlLA2x5OwNP+TsDT/k7A0/5OwNP+TrzP/mLM+/9bhsv////////////// + ///t8t//ydic/6/Fa/+lvVf/pr1Y/7HGbv/M2qL/8/bq///////////////////////b5Lz/nbdH/5Kv + M/+TsDT/k7A0/5OwNP+TsDXQlrI6FZy4TBCTsT3HkrA6/5KxOv+SsTr/krA6/5KwOv/E1JT//v79//// + ///9/vz/0+Cy/5+6U/+RsDj/kK83/5GwOP+RsDj/j641/6K8WP/r8Nr//////////////////v7+/7/R + jP+Qrzf/krE6/5KxOv+SsTr/krA6/5KxO9CUsj4Wm7lREJKyQseRskD/kbJA/5GyQP+QsT7/o75f//L2 + 6P///////////9Derv+VtEf/kLE+/5GyQP+RskD/kbJA/4+xPv+hvV3/5ezS//////////////////// + ////////6/Hd/526Vf+QsT//kbJA/5GyQP+RskD/kbJA0JOzQxaZulcQkbRIx4+zRv+Ps0b/j7NG/46y + RP/H2aL////////////m7tb/mblW/46yRP+Ps0b/j7NG/4+zRv+OskT/oL5h/+Xt0/////////////// + ///g6s3/7vTk////////////vdKR/46yQ/+Ps0b/j7NG/4+zRv+Qs0bQkbRJFpi6WxCPtE3HjrRL/460 + S/+Ns0r/lLdU/+Xt1f///////v79/7nQkP+Mskj/jrRL/460S/+OtEv/jbNJ/5+/Zv/k7dT///////// + ////////2ebD/5e5Wf/C15/////////////c58f/kLVP/46zS/+OtEv/jrRL/460S9CQtU4WlrtfEI22 + UceMtU//jLVP/4u0Tf+dwGn/9Pju///////y9+z/nL9o/4u0Tf+MtU//jLVP/4u0Tv+bvmb/5O3V//// + /////////////9jmxf+Wu17/irNL/6TEdP/4+vT//////+3z5P+XvF//i7RO/4y1T/+MtU//jLVP0I62 + UhaVvGIQjLdVx4q2Uv+LtlP/ibVQ/6XGef/5+/f//////+fw3P+Rul3/irZS/4u2U/+LtlP/ibVQ/8PZ + pv/////////////////Y58b/lLxi/4m1Uf+KtVH/l71l/+/15///////9Pjv/5zBbf+JtVH/i7ZT/4u2 + U/+LtlPQjbdWFpS9ZRCKt1jHibdW/4m3Vv+HtlT/pch+//r8+P//////5e/Z/4+6Xv+Jtlb/ibdW/4m3 + Vv+HtlT/ttKX//3+/P//////1+fG/5O9Zf+ItlT/ibdW/4i2Vf+UvWb/7fTl///////1+fH/nMNy/4i2 + VP+Jt1b/ibdW/4m3VtCLuFkWkr5pEIm4XMeHt1r/h7da/4a3WP+dxXj/9vrz///////t9Ob/k75q/4e3 + Wf+Ht1r/h7da/4e3Wf+MumD/sdCU/7bUm/+RvWf/hrdY/4e4Wv+Ht1r/hrdY/5rDdP/0+PD///////D2 + 6/+WwG7/h7dY/4e3Wv+Ht1r/iLha0Iq5XRaRv2wQh7lfx4a4Xf+GuF3/hbhd/5C+bP/r8+T///////r8 + +f+my4n/hLdb/4a4Xf+GuF3/hrhd/4a4Xf+Et1v/hLdb/4W4Xf+GuF3/hrhd/4a4Xf+Et1v/sNGW//3+ + /f//////4u7Y/4u8Zf+GuF3/hrhd/4a4Xf+GuF7QiLphFo+/bxCGumPHhLlh/4S5Yf+EuWH/hbpi/9Dk + wv///////////9HlxP+GumP/hLlh/4S5Yf+EuWH/hLlh/4S5Yf+EuWH/hLlh/4S5Yf+EuWH/hLlg/4m8 + aP/b6tH////////////E3rT/g7lg/4S5Yf+EuWH/hLlh/4W5YdCHumQWjsByEIS7ZseDumT/g7pk/4O6 + ZP+BuWL/pc2Q//r8+P//////+fz4/67Smv+BuWL/g7pk/4O6ZP+DumT/g7pk/4O6ZP+DumT/g7pk/4K6 + ZP+CumP/uNem//z9/P//////9fnz/5zIhP+BuWL/g7pk/4O6ZP+DumT/g7pk0IW7ZxaMwXQQg7xox4G7 + Z/+Bu2f/gbtn/4G7Zv+FvWv/0ufJ////////////8vjv/6vSmf+CvGj/f7tl/4G7Zv+Bu2f/gbtn/4G7 + Zv9/umX/g71q/7PWo//2+vT////////////H4bz/grxo/4G7Z/+Bu2f/gbtn/4G7Z/+BvGfQg71qFovD + dxCBvWvHf71q/3+9av9/vWr/f71q/368aP+Tx4H/6PPk////////////+Pv2/8njv/+ay4n/hsBy/4G+ + bP+Bvmz/h8Fz/57Mjf/P5sb/+v35////////////4O/b/43Eev9+vGn/f71q/3+9av9/vWr/f71q/4C9 + atCCvm0WhsJ3Dn++bsV+vm3/fr5t/36+bf9+vm3/fr5t/3y9a/+bzY7/6fTm//////////////////b6 + 9f/j8d//1urQ/9fq0f/l8uH/+Pv3/////////////////+Lx3/+UyYb/fL1r/36+bf9+vm3/fr5t/36+ + bf9+vm3/f75uzoXBdRSFw3kKfb9xvHy/cP98v3D/fL9w/3y/cP98v3D/fL9w/3u+bv+Syoj/1evR//z9 + +/////////////////////////////////////////////r8+f/O58r/jceD/3u+bv98v3D/fL9w/3y/ + cP98v3D/fL9w/3y/cP99v3HGg8J4D5XNjQJ7wXSlesBz/3rAc/96wHP/esBz/3rAc/96wHP/esBz/3nA + cf+Aw3n/ptWi/9Tr0//w+O//+/37//7+/v/+/v7/+v36/+737f/Q6c7/odOc/37Cdv95wHH/esBz/3rA + c/96wHP/esBz/3rAc/96wHP/esBz/3vBdLCIxoAFdcByAHrCd3J4wXb/eMF2/3jBdv94wXb/eMF2/3jB + dv94wXb/eMF2/3jBdf92wHT/e8N5/4vKif+b0pr/pdak/6XWpP+a0Zn/icmH/3rCeP92wHT/eMF1/3jB + dv94wXb/eMF2/3jBdv94wXb/eMF2/3jBdv94wXb/esJ3fnG+bwB5w3oAesR7KXfDeOB2wnj/dsJ4/3bC + eP92wnj/dsJ4/3bCeP92wnj/dsJ4/3bCeP92wnj/dcJ3/3TBdv90wXb/dMF2/3TBdv91wnf/dsJ4/3bC + eP92wnj/dsJ4/3bCeP92wnj/dsJ4/3bCeP92wnj/dsJ4/3fDeOd5w3sxeMN5AIHJhgBbuWYAdsR8aXTE + e/d0xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv/dMR7/3TE + e/90xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv/dMR7/3TEe/90xHv5dsR8c8vlvQB/x4MAfseBAHjG + gAB5yIUEdMV/bnPFfuhyxX7/csV+/3LFfv9yxX7/csV+/3LFfv9yxX7/csV+/3LFfv9yxX7/csV+/3LF + fv9yxX7/csV+/3LFfv9yxX7/csV+/3LFfv9yxX7/csV+/3LFfv9yxX7/c8V+63TFf3Z6yIUHeMaAAH3G + gAAAAAAAdsV/AHfGgQDZ//wAdMaCNHLGgYpyxoG+ccaB1HHGgd1xxoHfccaB33HGgd9xxoHfccaB33HG + gd9xxoHfccaB33HGgd9xxoHfccaB33HGgd9xxoHfccaB33HGgd1xxoHVcsaBwHLGgY10xoI5iNKaAXfG + gQB3xoAAAAAAAAAAAAAAAAAAeciFAHzJhwBzxoEAYLtqAHjKigx2yYcZdMiGIXbIhyR2yYgkdsmIJHbJ + iCR2yYgkdsmIJHbJiCR2yYgkdsmIJHbJiCR2yYgkdsmIJHbJiCR2yIckdMiGIXbJhxp4yooMV7VfAHPG + gAB6yIYAeMeEAAAAAAAAAAAAwAAAA4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAgAAAAcAAAAM= + + + \ No newline at end of file diff --git a/Source/VSoft_Dll/IconViewEx.cs b/Source/VSoft_Dll/IconViewEx.cs new file mode 100644 index 0000000..346188b --- /dev/null +++ b/Source/VSoft_Dll/IconViewEx.cs @@ -0,0 +1,186 @@ +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace ryControls +{ + public class IconViewEx : ListView + { + private ColumnHeader columnHeader1; + + public IconViewEx() : + base() + { + // 开启双缓冲 + this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); + this.OwnerDraw = true;//用于启用重绘 + this.View = View.Tile; + this.TileSize = new Size(100,100); + this.MultiSelect = false; + } + + /// + /// 图标 + /// + public Image Icon { get; set; } + + /// + /// 重绘图标 + /// + public bool IsDrawIcon { get; set; } + + /// + /// 重绘网格线 + /// + public bool IsDrawGridLines { get; set; } + protected override void OnDrawItem(DrawListViewItemEventArgs e) + { + Rectangle r = e.Bounds; + Graphics g = e.Graphics; + + DrawSelectedBackground(e, g, r); + + int paddingHeight = 0; + if (IsDrawIcon) + { + var soft = (VSoft.Prams.SoftInfo)e.Item.Tag; + if (soft == null || soft.Image == null) + { paddingHeight = this.DrawIcon(g, r, this.Icon, e.Item.BackColor).Height; } + else + { + paddingHeight = this.DrawIcon(g, r, soft.Image, e.Item.BackColor).Height; + } + } + + //if (IsDrawGridLines) + //{ + // using (Pen pen = new Pen(Color.Gray)) + // { + // g.DrawRectangle(pen, r.X, r.Y, r.Width, r.Height + 1);//高度加1使横向线条重叠 + // } + //} + + if (!string.IsNullOrEmpty(e.Item.Text)) + { + this.DrawText(e, g, r, paddingHeight); + } + } + private Color _SelectedBackColor = Color.LightYellow; + [Description("选择项的背景颜色")] + public Color SelectedBackColor + { + get + { + return _SelectedBackColor; + } + set + { + _SelectedBackColor = value; + this.Refresh(); + } + } + /// + /// 重绘选中时背景 + /// + private void DrawSelectedBackground(DrawListViewItemEventArgs e, Graphics g, Rectangle r) + { + if (e.Item.Selected) + { + using (SolidBrush brush = new SolidBrush(_SelectedBackColor)) + { + g.FillRectangle(brush, r); + } + } + } + + /// + /// 重绘图标 + /// + private Size DrawIcon(Graphics g, Rectangle r, Image image, Color backColor) + { + Rectangle imageBounds = new Rectangle(new Point(r.X+10, r.Y+3), new Size(64,64)); + if (r.Width > r.Height-20) + { + imageBounds.Width = r.Height-20; + imageBounds.Height = r.Height - 20; + } + else + { + imageBounds.Width = r.Width - 20; + imageBounds.Height = r.Width - 20; + } + imageBounds.X = r.X + (r.Width - imageBounds.Width) / 2; + //使图标不会紧贴着每一列的左上角 + //imageBounds.X += 1; + //imageBounds.Y += 1; + + g.DrawImage(image, imageBounds); + return imageBounds.Size; + } + + /// + /// 重绘文本 + /// + private void DrawText(DrawListViewItemEventArgs e, Graphics g, Rectangle r, int paddingHeight) + { + TextFormatFlags flags = GetFormatFlags(HorizontalAlignment.Center); + var r1 = new Rectangle(r.Location,r.Size); + r1.Y=r.Y+ paddingHeight+2;//重绘图标时,文本右移 + r1.Height = r.Height - paddingHeight - 2; + TextRenderer.DrawText( + g, + e.Item.Text, + e.Item.Font, + r1, + e.Item.ForeColor, + flags); + } + + /// + /// 获取文本对齐 + /// + private TextFormatFlags GetFormatFlags( + HorizontalAlignment align) + { + TextFormatFlags flags = + TextFormatFlags.EndEllipsis | + TextFormatFlags.VerticalCenter; + + switch (align) + { + case HorizontalAlignment.Center: + flags |= TextFormatFlags.HorizontalCenter; + break; + case HorizontalAlignment.Right: + flags |= TextFormatFlags.Right; + break; + case HorizontalAlignment.Left: + flags |= TextFormatFlags.Left; + break; + } + + return flags; + } + + private void InitializeComponent() + { + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.SuspendLayout(); + // + // columnHeader1 + // + this.columnHeader1.Width = 10; + // + // IconViewEx + // + this.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1}); + this.LabelWrap = false; + this.ShowItemToolTips = true; + this.TileSize = new System.Drawing.Size(60, 60); + this.View = System.Windows.Forms.View.Tile; + this.ResumeLayout(false); + + } + } +} \ No newline at end of file diff --git a/Source/VSoft_Dll/IconViewEx.resx b/Source/VSoft_Dll/IconViewEx.resx new file mode 100644 index 0000000..e5858cc --- /dev/null +++ b/Source/VSoft_Dll/IconViewEx.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/Source/VSoft_Dll/Prams/API.cs b/Source/VSoft_Dll/Prams/API.cs new file mode 100644 index 0000000..ce256f2 --- /dev/null +++ b/Source/VSoft_Dll/Prams/API.cs @@ -0,0 +1,80 @@ +using Microsoft.Win32; +using ryCommon; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace VSoft.Prams +{ + public static class API + { + // 关闭64位(文件系统)的操作转向 + [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + static extern int Wow64DisableWow64FsRedirection(ref IntPtr ptr); + // 开启64位(文件系统)的操作转向 + [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr); + public static Image GetImg(string url) + { + return GetImg(url, 128); + } + public static Image GetImg(string url,int maxSize) + { + var ext = System.IO.Path.GetExtension(url).ToLower(); + var img_ext = ";.jpg;.png;.bmp;.gif;.jpeg;.jfif;.jpe;.tif;.ico;"; + if (img_ext.IndexOfEx(";" + ext + ";") >= 0) + { + return RyFiles.LoadPicFromFile(url); + } + else + { + var exe_ext = ";.exe;.dll;"; + if (exe_ext.IndexOfEx(";" + ext + ";") >= 0) + { + var img= RyFiles.GetFileIcon(url, 0, out _, maxSize); + if (img == null) + { + var icon = ShellIcon.GetLargeIcon(url); + return icon; + } + return img; + } + //FileIcon ico = new FileIcon(url); + //ico.GetInfo(); + //var icon2 = ico.ShellIcon; + var icon2 = ShellIcon.GetLargeIcon(url); + return icon2; + } + } + /// + /// 读取一个快捷方式的信息 + /// + /// + /// + public static ShortcutDescription ReadShortcut(string lnkFilePath) + { + var shellType = Type.GetTypeFromProgID("WScript.Shell"); + dynamic shell = Activator.CreateInstance(shellType); + var shortcut = shell.CreateShortcut(lnkFilePath); + string TargetPath = shortcut.TargetPath; + if (TargetPath.StartsWith("C:\\Program Files (x86)", StringComparison.OrdinalIgnoreCase)) + { + if (!System.IO.File.Exists(TargetPath) && !System.IO.Directory.Exists(TargetPath)) + { + TargetPath = TargetPath.Replace("C:\\Program Files (x86)\\", "C:\\Program Files\\"); + } + } + return new ShortcutDescription() + { + TargetPath = TargetPath, + Arguments = shortcut.Arguments, + WorkDir = shortcut.WorkingDirectory, + IconLocation= shortcut.IconLocation + }; + } + } +} diff --git a/Source/VSoft_Dll/Prams/FileIcon.cs b/Source/VSoft_Dll/Prams/FileIcon.cs new file mode 100644 index 0000000..6785742 --- /dev/null +++ b/Source/VSoft_Dll/Prams/FileIcon.cs @@ -0,0 +1,122 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace VSoft.Prams +{ + public class FileIcon + { + // Fields + private const int MAX_PATH = 260; + private const int FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x100; + private const int FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x2000; + private const int FORMAT_MESSAGE_FROM_HMODULE = 0x800; + private const int FORMAT_MESSAGE_FROM_STRING = 0x400; + private const int FORMAT_MESSAGE_FROM_SYSTEM = 0x1000; + private const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x200; + private const int FORMAT_MESSAGE_MAX_WIDTH_MASK = 0xff; + + // Methods + public FileIcon() + { + this.Flags = SHGetFileInfoConstants.SHGFI_EXETYPE | SHGetFileInfoConstants.SHGFI_ATTRIBUTES | SHGetFileInfoConstants.SHGFI_TYPENAME | SHGetFileInfoConstants.SHGFI_DISPLAYNAME | SHGetFileInfoConstants.SHGFI_ICON; + } + + public FileIcon(string fileName) : this() + { + this.FileName = fileName; + this.GetInfo(); + } + + public FileIcon(string fileName, SHGetFileInfoConstants flags) + { + this.FileName = fileName; + this.Flags = flags; + this.GetInfo(); + } + + [DllImport("user32.dll")] + private static extern int DestroyIcon(IntPtr hIcon); + [DllImport("kernel32", CharSet = CharSet.Unicode)] + private static extern int FormatMessage(int dwFlags, IntPtr lpSource, int dwMessageId, int dwLanguageId, string lpBuffer, uint nSize, int argumentsLong); + public void GetInfo() + { + this.ShellIcon = null; + this.TypeName = ""; + this.DisplayName = ""; + SHFILEINFO psfi = new SHFILEINFO(); + uint cbFileInfo = (uint)Marshal.SizeOf(psfi.GetType()); + if (SHGetFileInfo(this.FileName, 0, ref psfi, cbFileInfo, (uint)this.Flags) != 0) + { + if (psfi.hIcon != IntPtr.Zero) + { + this.ShellIcon = Icon.FromHandle(psfi.hIcon); + } + this.TypeName = psfi.szTypeName; + this.DisplayName = psfi.szDisplayName; + } + else + { + int lastError = GetLastError(); + Console.WriteLine("Error {0}", lastError); + string lpBuffer = new string('\0', 0x100); + int num4 = FormatMessage(0x1200, IntPtr.Zero, lastError, 0, lpBuffer, 0x100, 0); + Console.WriteLine("Len {0} text {1}", num4, lpBuffer); + } + } + + [DllImport("kernel32")] + private static extern int GetLastError(); + [DllImport("shell32", CharSet = CharSet.Unicode)] + private static extern int SHGetFileInfo(string pszPath, int dwFileAttributes, ref SHFILEINFO psfi, uint cbFileInfo, uint uFlags); + + // Properties + public SHGetFileInfoConstants Flags { get; set; } + + public string FileName { get; set; } + + public Icon ShellIcon { get; private set; } + + public string DisplayName { get; private set; } + + public string TypeName { get; private set; } + + // Nested Types + [StructLayout(LayoutKind.Sequential)] + private struct SHFILEINFO + { + public IntPtr hIcon; + public int iIcon; + public int dwAttributes; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] + public string szDisplayName; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] + public string szTypeName; + } + + [Flags] + public enum SHGetFileInfoConstants + { + SHGFI_ICON = 0x100, + SHGFI_DISPLAYNAME = 0x200, + SHGFI_TYPENAME = 0x400, + SHGFI_ATTRIBUTES = 0x800, + SHGFI_ICONLOCATION = 0x1000, + SHGFI_EXETYPE = 0x2000, + SHGFI_SYSICONINDEX = 0x4000, + SHGFI_LINKOVERLAY = 0x8000, + SHGFI_SELECTED = 0x10000, + SHGFI_ATTR_SPECIFIED = 0x20000, + SHGFI_LARGEICON = 0, + SHGFI_SMALLICON = 1, + SHGFI_OPENICON = 2, + SHGFI_SHELLICONSIZE = 4, + SHGFI_USEFILEATTRIBUTES = 0x10, + SHGFI_ADDOVERLAYS = 0x20, + SHGFI_OVERLAYINDEX = 0x40 + } + } +} diff --git a/Source/VSoft_Dll/Prams/IImageList.cs b/Source/VSoft_Dll/Prams/IImageList.cs new file mode 100644 index 0000000..a76b03e --- /dev/null +++ b/Source/VSoft_Dll/Prams/IImageList.cs @@ -0,0 +1,229 @@ +using ryControls; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace VSoft.Prams +{ + class IImageList2 + { + [StructLayout(LayoutKind.Sequential)] + struct RECT + { + public int left, top, right, bottom; + } + + [StructLayout(LayoutKind.Sequential)] + private struct POINT + { + int x; + int y; + } + + [StructLayout(LayoutKind.Sequential)] + private struct IMAGELISTDRAWPARAMS + { + public int cbSize; + public IntPtr himl; + public int i; + public IntPtr hdcDst; + public int x; + public int y; + public int cx; + public int cy; + public int xBitmap; // x offest from the upperleft of bitmap + public int yBitmap; // y offset from the upperleft of bitmap + public int rgbBk; + public int rgbFg; + public int fStyle; + public int dwRop; + public int fState; + public int Frame; + public int crEffect; + } + + [StructLayout(LayoutKind.Sequential)] + private struct IMAGEINFO + { + public IntPtr hbmImage; + public IntPtr hbmMask; + public int Unused1; + public int Unused2; + public RECT rcImage; + } + [ComImportAttribute()] + [GuidAttribute("46EB5926-582E-4017-9FDF-E8998DAA0950")] + [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] + interface IImageList + { + [PreserveSig] + int Add( + IntPtr hbmImage, + IntPtr hbmMask, + ref int pi); + + [PreserveSig] + int ReplaceIcon( + int i, + IntPtr hicon, + ref int pi); + + [PreserveSig] + int SetOverlayImage( + int iImage, + int iOverlay); + + [PreserveSig] + int Replace( + int i, + IntPtr hbmImage, + IntPtr hbmMask); + + [PreserveSig] + int AddMasked( + IntPtr hbmImage, + int crMask, + ref int pi); + + [PreserveSig] + int Draw( + ref IMAGELISTDRAWPARAMS pimldp); + + [PreserveSig] + int Remove( + int i); + + [PreserveSig] + int GetIcon( + int i, + int flags, + ref IntPtr picon); + + [PreserveSig] + int GetImageInfo( + int i, + ref IMAGEINFO pImageInfo); + + [PreserveSig] + int Copy( + int iDst, + IImageList punkSrc, + int iSrc, + int uFlags); + + [PreserveSig] + int Merge( + int i1, + IImageList punk2, + int i2, + int dx, + int dy, + ref Guid riid, + ref IntPtr ppv); + + [PreserveSig] + int Clone( + ref Guid riid, + ref IntPtr ppv); + + [PreserveSig] + int GetImageRect( + int i, + ref RECT prc); + + [PreserveSig] + int GetIconSize( + ref int cx, + ref int cy); + + [PreserveSig] + int SetIconSize( + int cx, + int cy); + + [PreserveSig] + int GetImageCount( + ref int pi); + + [PreserveSig] + int SetImageCount( + int uNewCount); + + [PreserveSig] + int SetBkColor( + int clrBk, + ref int pclr); + + [PreserveSig] + int GetBkColor( + ref int pclr); + + [PreserveSig] + int BeginDrag( + int iTrack, + int dxHotspot, + int dyHotspot); + + [PreserveSig] + int EndDrag(); + + [PreserveSig] + int DragEnter( + IntPtr hwndLock, + int x, + int y); + + [PreserveSig] + int DragLeave( + IntPtr hwndLock); + + [PreserveSig] + int DragMove( + int x, + int y); + + [PreserveSig] + int SetDragCursorImage( + ref IImageList punk, + int iDrag, + int dxHotspot, + int dyHotspot); + + [PreserveSig] + int DragShowNolock( + int fShow); + + [PreserveSig] + int GetDragImage( + ref POINT ppt, + ref POINT pptHotspot, + ref Guid riid, + ref IntPtr ppv); + + [PreserveSig] + int GetItemFlags( + int i, + ref int dwFlags); + + [PreserveSig] + int GetOverlayImage( + int iOverlay, + ref int piIndex); + }; + [DllImport("shell32.dll", EntryPoint = "#727")] + private extern static int SHGetImageList(uint iImageList, ref Guid riid, out IImageList ppv); + //public Image GetExtImage() + //{ + // IImageList iml; + // Guid riid=new Guid("46EB5926-582E-4017-9FDF-E8998DAA0950"); + // SHGetImageList(Prams.ShellIcon.Win32.SHGFI_LARGEICON,ref riid, out iml); + // IntPtr hIcon = IntPtr.Zero; + // iml.GetIcon(0, Prams.ShellIcon.Win32.ILD_TRANSPARENT | ILD_IMAGE, ref hIcon); + // Icon ico = (Icon)System.Drawing.Icon.FromHandle(hIcon).Clone(); + // ShellIcon.Win32.DestroyIcon(hIcon); + //} + } +} diff --git a/Source/VSoft_Dll/Prams/Itrycn_Db.cs b/Source/VSoft_Dll/Prams/Itrycn_Db.cs new file mode 100644 index 0000000..b998cca --- /dev/null +++ b/Source/VSoft_Dll/Prams/Itrycn_Db.cs @@ -0,0 +1,214 @@ +using ryCommon; +using ryCommonDb; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using static ryCommonDb.DataProvider; + +namespace VSoft.Prams +{ + public class Itrycn_Db + { + public static string SQLConnStr_SysDb = "\\SysDb\\SysConfig.dat"; + public static string SQLConnStr = "\\UserDb\\Softs.dat|"; + public static string SQLConnStr_Logs = "\\UserDb\\logs.dat|"; + public static DataProvider.DataProviderType dataType = DataProvider.DataProviderType.SQLiteDataProvider; + public static IDbInterface CreateDataProvider(DataProviderType dataProviderType) + { + switch (dataProviderType) + { + //case DataProviderType.OdbcDataProvider: + // return new OdbcDataProvider(); + //case DataProviderType.OleDbDataProvider: + // return new OleDbDataProvider(); + //case DataProviderType.OracleDataProvider: + // return new OracleDataProvider(); + case DataProviderType.SQLiteDataProvider: + return new SQLiteDataProvider(); + default: + return null; + } + } + /// + /// 写入设置 + /// + /// + /// + public static void SetSetting(string _SQLConnStr, string name, string value) + { + IDbInterface db = CreateDataProvider(dataType); + if (db.ConnDb(_SQLConnStr) == 1) + { + RyQuickSQL mySQL = new RyQuickSQL("Setting"); + mySQL.AddField("sName", name); + mySQL.AddField("sValue", value); + if (db.ExecuteNonQuery(mySQL.GetUpdateSQL() + " where sName=@sName", mySQL) == 0) + { + db.ExecuteNonQuery(mySQL.GetInsertSQL(), mySQL); + } + } + db.Free(); + } + /// + /// 写入设置 + /// + /// + /// + public static void SetSetting(string name, string value) + { + SetSetting(SQLConnStr, name, value); + } + /// + /// 读取设置 + /// + /// + /// + /// + public static string GetSetting(string _SQLConnStr, string name, string def_value) + { + DataProvider mydb = new DataProvider(); + IDbInterface db = CreateDataProvider(dataType); + string _value = def_value; + if (db.ConnDb(_SQLConnStr) == 1) + { + RyQuickSQL mySQL = new RyQuickSQL("Setting"); + mySQL.AddField("sName", name); + DataSet ds = db.ReadData("select * from Setting where sName=@sName", mySQL); + if (mydb.HaveData(ds)) + { + DataRow reader = ds.Tables[0].Rows[0]; + _value = reader["sValue"].ToString(); + } + } + db.Free(); + return _value; + } + /// + /// 读取设置 + /// + /// + /// + /// + public static string GetSetting(string name, string def_value) + { + return GetSetting(SQLConnStr, name, def_value); + } + public static int GetColumnCount(IDbInterface db, int ColumnId) + { + var ds = db.ReadData("select count(*) from Columns where parentId=" + ColumnId); + var icount = ds.Tables[0].Rows[0][0].ToInt(); + ds.Dispose(); + return icount; + } + public static int GetSoftCount(IDbInterface db, int ColumnId) + { + var ds = db.ReadData("select count(*) from Softs where ColumnId=" + ColumnId); + var icount = ds.Tables[0].Rows[0][0].ToInt(); + ds.Dispose(); + return icount; + } + public static void CreateTable(DataProvider.DataProviderType dataType, string ConnStr) + { + IDbInterface db = CreateDataProvider(dataType); + if (db.ConnDb(ConnStr) == 1) + { + #region 软件表 + RyQuickSQL mySQL = new RyQuickSQL("Softs"); + mySQL.AddField("Name", ""); + mySQL.AddField("CmdId", ""); + mySQL.AddField("SoftType", 0);//0表示运行文件,1表示执行快速命令,2表示执行脚本 + mySQL.AddField("Path", ""); + mySQL.AddField("RunPram", ""); + mySQL.AddField("StartPath", "");//起始路径 + mySQL.AddField("IconPath","");//图标路径 + mySQL.AddField("ClickCount",0);//点击量 + mySQL.AddField("SetJson", "");//设置 + mySQL.AddField("Des", "");//备注 + mySQL.AddField("PinYin", "");//拼音 + mySQL.AddField("ColumnId", 0);//栏目ID + mySQL.AddField("sortindex", 0); + mySQL.AddField("editTime", DateTime.Now); + mySQL.AddField("addTime", DateTime.Now); + db.CreateDb(mySQL); + #endregion + #region 栏目表 + mySQL.Clear(); + mySQL.TableName = "Columns"; + mySQL.AddField("Name", ""); + mySQL.AddField("sortindex", 0); + mySQL.AddField("depth", 0);//深度,0表示栏目,1表示分类 + mySQL.AddField("parentId", 0); + mySQL.AddField("Des", "");//备注 + mySQL.AddField("editTime", DateTime.Now); + mySQL.AddField("addTime", DateTime.Now); + db.CreateDb(mySQL); + #endregion + // + #region 设置表 + mySQL.Clear(); + mySQL.TableName = "Setting"; + mySQL.AddField("sName", ""); + mySQL.AddField("sValue", ""); + db.CreateDb(mySQL); + #endregion + } + db.Free(); + } + public static void CreateSysTable(DataProvider.DataProviderType dataType, string ConnStr) + { + DataProvider mydb = new DataProvider(); + IDbInterface db = CreateDataProvider(dataType); + if (db.ConnDb(ConnStr) == 1) + { + // + #region 设置表 + RyQuickSQL mySQL = new RyQuickSQL("Setting"); + mySQL.AddField("sName", ""); + mySQL.AddField("sValue", ""); + db.CreateDb(mySQL); + #endregion + } + db.Free(); + } + public static void CreateTable_Logs(DataProvider.DataProviderType dataType) + { + DataProvider mydb = new DataProvider(); + IDbInterface db = CreateDataProvider(dataType); + if (db.ConnDb(SQLConnStr_Logs) == 1) + { + #region 日志表 + RyQuickSQL mySQL = new RyQuickSQL("Logs"); + mySQL.AddField("LogId", ""); + mySQL.AddField("LogStr", ""); + mySQL.AddField("TaskId", 1); + mySQL.AddField("TaskGUID", ""); + mySQL.AddField("LogResult", ""); + mySQL.AddField("CreateId", 1); + mySQL.AddField("addTime", DateTime.Now); + db.CreateDb(mySQL); + #endregion + // + #region 设置表 + mySQL.Clear(); + mySQL.TableName = "Setting"; + mySQL.AddField("sName", ""); + mySQL.AddField("sValue", ""); + db.CreateDb(mySQL); + #endregion + } + db.Free(); + } + /// + /// 创建数据库 + /// + public static void CreateTable() + { + CreateTable(dataType, SQLConnStr_SysDb); + CreateTable(dataType, SQLConnStr); + CreateTable_Logs(dataType); + //CreateSysTable(dataType, SQLConnStr_SysDb); + } + } +} diff --git a/Source/VSoft_Dll/Prams/Json.cs b/Source/VSoft_Dll/Prams/Json.cs new file mode 100644 index 0000000..c3a29e1 --- /dev/null +++ b/Source/VSoft_Dll/Prams/Json.cs @@ -0,0 +1,134 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using ryCommon; +using System; +using System.Data; + +/// +/// json 的摘要说明 +/// +public class Json +{ + string jsonText = ""; + public JObject jo; + public Json(string _jsonText) + { + string xx = _jsonText.GetStr("descUrl", "counterApi",0,out int pos1,""); + jsonText = _jsonText.Replace("+new Date,", "'',"); + jsonText = jsonText.Replace("!true,", "false,"); + if (xx != "") { jsonText = jsonText.Replace(xx, " :'',\r\n "); } + try + { + if (jsonText == "") + { jo = new JObject(); } + else + jo = (JObject)JsonConvert.DeserializeObject(jsonText); + } + catch(Exception) + { + jo = new JObject(); + } + } + public string Text + { + get { return jo.ToString(); } + set { jo = (JObject)JsonConvert.DeserializeObject(jsonText); } + } + public string GetJsonValue(string name) + { + if (jo[name] == null) { return ""; } + else + { return jo[name].ToString(); } + } + public string GetJsonValue(string name,string defvalue) + { + if (jo[name] == null) { return defvalue; } + else + { return jo[name].ToString(); } + } + public bool GetJsonValue(string name,bool defvalue) + { + if (jo[name] == null) { return defvalue; } + else + { + string value = jo[name].ToString().ToLower(); + return value == "1" || value == "true"; } + } + public int GetJsonValue(string name, int defvalue) + { + if (jo[name] == null) { return defvalue; } + else + { return jo[name].ToInt(defvalue); } + } + public Int64 GetJsonValue(string name, Int64 defvalue) + { + if (jo[name] == null) { return defvalue; } + else + { return jo[name].ToInt64(defvalue); } + } + public decimal GetJsonValue(string name, decimal defvalue) + { + if (jo[name] == null) { return defvalue; } + else + { return jo[name].ToDecimal(defvalue); } + } + public double GetJsonValue(string name, double defvalue) + { + if (jo[name] == null) { return defvalue; } + else + { return jo[name].ToDouble(defvalue); } + } + public DataTable GetJsonValueByTable(string name) + { + if (jo[name] == null) { return new DataTable(); } + else + { + try + { + return JsonConvert.DeserializeObject(jo[name].ToString(), typeof(DataTable)) as DataTable; + } + catch { return new DataTable(); } + } + } + public void Add(string Name, string value) + { + try + { + jo.Add(Name, value); + } + catch { } + } + public void Add(string Name, int value) + { + try + { + jo.Add(Name, value); + } + catch { } + } + public void Add(string Name, bool value) + { + try + { + jo.Add(Name, value?1:0); + } + catch { } + } + public void Add(string Name, decimal value) + { + try + { + jo.Add(Name, value); + } + catch { } + } + public void Add(string Name, DataTable value) + { + try + { + jo.Add(Name, Newtonsoft.Json.JsonConvert.SerializeObject(value)); + } + catch { } + } + +} \ No newline at end of file diff --git a/Source/VSoft_Dll/Prams/Run.cs b/Source/VSoft_Dll/Prams/Run.cs new file mode 100644 index 0000000..fb7f7da --- /dev/null +++ b/Source/VSoft_Dll/Prams/Run.cs @@ -0,0 +1,128 @@ +using ryCommon; +using ryCommonDb; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; + +namespace VSoft.Prams +{ + public static class Run + { + [DllImportAttribute("shell32.dll")] + private static extern int SHEmptyRecycleBin(IntPtr handle, string root, int falgs); + const int SHERB_NOCONFIRMATION = 0x000001; + const int SHERB_NOPROGRESSUI = 0x000002; + const int SHERB_NOSOUND = 0x000004; + /// + /// 打开软件 + /// + /// + /// + /// + public static int Open(SoftInfo info, bool RunasAdmin) + { + var path = info.TruePath; + var parm = info.RunPram; + var StartPath = info.StartPath; + var SetJson = info.SetJson; + if (info.SoftType == 1) + { + #region 重新载入数据 + DataProvider mydb = new DataProvider(); + IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); + if (db.ConnDb(info.Path) == 1) + { + RyQuickSQL mySQL = new RyQuickSQL("Softs"); + string where = ""; + if(parm.StartsWith("cmdid=",StringComparison.OrdinalIgnoreCase)) + { + where = "CmdId=@CmdId"; + mySQL.AddField("CmdId", parm.Substring(6)); + } + else if (parm.StartsWith("id=", StringComparison.OrdinalIgnoreCase)) + { + where = "id=@id"; + mySQL.AddField("id", parm.Substring(3).ToInt()); + } + if (where.Length > 0) + { + DataSet ds = db.ReadData("select * from Softs where " + where, mySQL); + if (mydb.HaveData(ds)) + { + DataRow row = ds.Tables[0].Rows[0]; + path = RyFiles.GetRealPath(row["Path"].ToString()); + parm = row["RunPram"].ToString(); + SetJson = row["SetJson"].ToString(); + StartPath = row["StartPath"].ToString(); + } + } + db.Free(); + } + #endregion + } + if (path.StartsWith("@", StringComparison.OrdinalIgnoreCase)) //如果路径是@开头,则表示这个是一个命令 + { + switch(path.Substring(1).ToLower()) + { + case "emptyrecyclebin"://清空回收站 + + switch (MessageBox.Show("是否确认要清空回收站?\r\n\r\n该操作不可逆!!!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2)) + { + case DialogResult.Yes: + SHEmptyRecycleBin(IntPtr.Zero, "", SHERB_NOCONFIRMATION + SHERB_NOPROGRESSUI + SHERB_NOSOUND); + return 1; + } + break; + } + return 0; + } + if (RunasAdmin) + { + return RunProcessAsAdmin(path, parm, StartPath); + } + else + { + Json json = new Json(SetJson); + if (json.GetJsonValue("RunAsAdmin", false)) + { + return RunProcessAsAdmin(path, parm, StartPath); + } + else + { + return RyFiles.RunFile(path, parm, StartPath); + } + } + } + /// + /// 以管理员方式打开 + /// + /// + /// + /// + /// + public static int RunProcessAsAdmin(string exeName, string parameters, string CurrentDirectory) + { + try + { + System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); + startInfo.UseShellExecute = true; + startInfo.WorkingDirectory = CurrentDirectory; + startInfo.FileName = exeName; + startInfo.Verb = "runas"; + //MLHIDE + startInfo.Arguments = parameters; + startInfo.ErrorDialog = true; + var process = System.Diagnostics.Process.Start(startInfo); + return 37; + } + catch + { + return -1; + } + } + } +} diff --git a/Source/VSoft_Dll/Prams/ShellIcon.cs b/Source/VSoft_Dll/Prams/ShellIcon.cs new file mode 100644 index 0000000..d541359 --- /dev/null +++ b/Source/VSoft_Dll/Prams/ShellIcon.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; +using System.Drawing; +using System.IO; + +namespace VSoft.Prams +{ + public static class ShellIcon + { + [StructLayout(LayoutKind.Sequential)] + public struct SHFILEINFO + { + public IntPtr hIcon; + public IntPtr iIcon; + public uint dwAttributes; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] + public string szDisplayName; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] + public string szTypeName; + }; + + + public static class Win32 + { + public const uint SHGFI_ICON = 0x000000100;// get icon + public const uint SHGFI_DISPLAYNAME = 0x000000200;// get display name + public const uint SHGFI_TYPENAME = 0x000000400;// get type name + public const uint SHGFI_ATTRIBUTES = 0x000000800;// get attributes + public const uint SHGFI_ICONLOCATION = 0x000001000;// get icon location + public const uint SHGFI_EXETYPE = 0x000002000;// return exe type + public const uint SHGFI_SYSICONINDEX = 0x000004000;// get system icon index + public const uint SHGFI_LINKOVERLAY = 0x000008000;// put a link overlay on icon + public const uint SHGFI_SELECTED = 0x000010000;// show icon in selected state + public const uint SHGFI_ATTR_SPECIFIED = 0x000020000;// get only specified attributes + public const uint SHGFI_JUMBO = 0x000000004;// get large icon + public const uint SHGFI_LARGEICON = 0x000000000;// get large icon + public const uint SHGFI_SMALLICON = 0x000000001;// get small icon + public const uint SHGFI_OPENICON = 0x000000002;// get open icon + public const uint SHGFI_SHELLICONSIZE = 0x000000004;// get shell size icon + public const uint SHGFI_PIDL = 0x000000008;// pszPath is a pidl + public const uint SHGFI_USEFILEATTRIBUTES = 0x000000010;// use passed dwFileAttribute + + public const uint FILE_ATTRIBUTE_READONLY = 0x00000001; + public const uint FILE_ATTRIBUTE_HIDDEN = 0x00000002; + public const uint FILE_ATTRIBUTE_SYSTEM = 0x00000004; + public const uint FILE_ATTRIBUTE_DIRECTORY = 0x00000010; + public const uint FILE_ATTRIBUTE_ARCHIVE = 0x00000020; + public const uint FILE_ATTRIBUTE_DEVICE = 0x00000040; + public const uint FILE_ATTRIBUTE_NORMAL = 0x00000080; + public const uint FILE_ATTRIBUTE_TEMPORARY = 0x00000100; + public const uint FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200; + public const uint FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400; + public const uint FILE_ATTRIBUTE_COMPRESSED = 0x00000800; + public const uint FILE_ATTRIBUTE_OFFLINE = 0x00001000; + public const uint FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000; + public const uint FILE_ATTRIBUTE_ENCRYPTED = 0x00004000; + + [DllImport("shell32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags); + + [DllImport("User32.dll")] + public static extern int DestroyIcon(System.IntPtr hIcon); + } + + /// + /// 获取扩展名信息 + /// + /// + /// + public static string GetTypeInfo(string ext) + { + SHFILEINFO shinfo = new SHFILEINFO(); + Win32.SHGetFileInfo(ext, Win32.FILE_ATTRIBUTE_NORMAL, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_TYPENAME | Win32.SHGFI_USEFILEATTRIBUTES); + return shinfo.szTypeName; + } + + /// + /// 获取扩展名的图标 + /// + /// + /// + public static Icon GetSmallTypeIcon(string ext) + { + SHFILEINFO shinfo = new SHFILEINFO(); + Win32.SHGetFileInfo(ext, Win32.FILE_ATTRIBUTE_NORMAL, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON | Win32.SHGFI_USEFILEATTRIBUTES); + if (shinfo.hIcon.ToInt32() == 0) return null; + Icon shellIcon = (Icon)System.Drawing.Icon.FromHandle(shinfo.hIcon).Clone(); + Win32.DestroyIcon(shinfo.hIcon); + return shellIcon; + } + + /// + /// 获取文件的小图标 + /// + /// + /// + public static Icon GetSmallIcon(string fileName) + { + SHFILEINFO shinfo = new SHFILEINFO(); + Win32.SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON); + if (shinfo.hIcon.ToInt32() == 0) return null; + Icon shellIcon = (Icon)System.Drawing.Icon.FromHandle(shinfo.hIcon).Clone(); + Win32.DestroyIcon(shinfo.hIcon); + return shellIcon; + } + + /// + /// 获取文件的大图标 + /// + /// + /// + public static Bitmap GetLargeIcon(string fileName) + { + var icon = c_icon_of_path.icon_of_path_large(fileName, true, true); + if (icon == null) { return null; } + return icon.ToBitmap(); + //SHFILEINFO shinfo = new SHFILEINFO(); + //Win32.SHGetFileInfo(fileName, Win32.FILE_ATTRIBUTE_NORMAL, ref shinfo, (uint)Marshal.SizeOf(shinfo),Win32.SHGFI_ICON | Win32.SHGFI_SHELLICONSIZE); + //if (shinfo.hIcon.ToInt32() == 0) return null; + //Icon shellIcon = (Icon)System.Drawing.Icon.FromHandle(shinfo.hIcon).Clone(); + //Win32.DestroyIcon(shinfo.hIcon); + //return shellIcon; + } + } +} diff --git a/Source/VSoft_Dll/Prams/ShellLink.cs b/Source/VSoft_Dll/Prams/ShellLink.cs new file mode 100644 index 0000000..80169fe --- /dev/null +++ b/Source/VSoft_Dll/Prams/ShellLink.cs @@ -0,0 +1,614 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; + +namespace VSoft.Prams +{ + public class ShellLink : IDisposable + { + // Fields + private IShellLinkW linkW; + private IShellLinkA linkA; + private string shortcutFile; + + // Methods + public ShellLink() + { + this.shortcutFile = ""; + if (Environment.OSVersion.Platform == PlatformID.Win32NT) + { + this.linkW = (IShellLinkW)new CShellLink(); + } + else + { + this.linkA = (IShellLinkA)new CShellLink(); + } + } + + public ShellLink(string linkFile) : this() + { + this.Open(linkFile); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + private bool disposed = false; + // Dispose(bool disposing) executes in two distinct scenarios. + // If disposing equals true, the method has been called directly + // or indirectly by a user's code. Managed and unmanaged resources + // can be disposed. + // If disposing equals false, the method has been called by the + // runtime from inside the finalizer and you should not reference + // other objects. Only unmanaged resources can be disposed. + protected virtual void Dispose(bool disposing) + { + // Check to see if Dispose has already been called. + if (!this.disposed) + { + // If disposing equals true, dispose all managed + // and unmanaged resources. + if (disposing) + { + if (this.linkW != null) + { + Marshal.ReleaseComObject(this.linkW); + this.linkW = null; + } + if (this.linkA != null) + { + Marshal.ReleaseComObject(this.linkA); + this.linkA = null; + } + // Dispose managed resources. + this.Dispose(); + } + + // Call the appropriate methods to clean up + // unmanaged resources here. + // If disposing is false, + // only the following code is executed. + + // Note disposing has been done. + disposed = true; + + } + } + ~ShellLink() + { + this.Dispose(false); + } + + private Icon getIcon(bool large) + { + int piIcon = 0; + StringBuilder pszIconPath = new StringBuilder(260, 260); + if (this.linkA == null) + { + this.linkW.GetIconLocation(pszIconPath, pszIconPath.Capacity, out piIcon); + } + else + { + this.linkA.GetIconLocation(pszIconPath, pszIconPath.Capacity, out piIcon); + } + string lpszFile = pszIconPath.ToString(); + if (lpszFile.Length == 0) + { + FileIcon.SHGetFileInfoConstants flags = FileIcon.SHGetFileInfoConstants.SHGFI_ATTRIBUTES | FileIcon.SHGetFileInfoConstants.SHGFI_ICON; + if (large) + { + //flags = flags; + } + else + { + flags |= FileIcon.SHGetFileInfoConstants.SHGFI_SMALLICON; + } + FileIcon icon = new FileIcon(this.Target, flags); + return icon.ShellIcon; + } + IntPtr[] phIconLarge = new IntPtr[] { IntPtr.Zero }; + if (large) + { + UnManagedMethods.ExtractIconEx(lpszFile, piIcon, phIconLarge, null, 1); + } + else + { + UnManagedMethods.ExtractIconEx(lpszFile, piIcon, null, phIconLarge, 1); + } + Icon icon2 = null; + if (phIconLarge[0] != IntPtr.Zero) + { + icon2 = Icon.FromHandle(phIconLarge[0]); + } + return icon2; + } + + public void Open(string linkFile) + { + this.Open(linkFile, IntPtr.Zero, EShellLinkResolveFlags.SLR_ANY_MATCH | EShellLinkResolveFlags.SLR_NO_UI, 1); + } + + public void Open(string linkFile, IntPtr hWnd, EShellLinkResolveFlags resolveFlags) + { + this.Open(linkFile, hWnd, resolveFlags, 1); + } + + public void Open(string linkFile, IntPtr hWnd, EShellLinkResolveFlags resolveFlags, ushort timeOut) + { + uint num; + if ((resolveFlags & EShellLinkResolveFlags.SLR_NO_UI) == EShellLinkResolveFlags.SLR_NO_UI) + { + num = (uint)(resolveFlags | ((EShellLinkResolveFlags)(timeOut << 0x10))); + } + else + { + num = (uint)resolveFlags; + } + if (this.linkA == null) + { + ((IPersistFile)this.linkW).Load(linkFile, 0); + this.linkW.Resolve(hWnd, num); + this.shortcutFile = linkFile; + } + else + { + ((IPersistFile)this.linkA).Load(linkFile, 0); + this.linkA.Resolve(hWnd, num); + this.shortcutFile = linkFile; + } + } + + public void Save() + { + this.Save(this.shortcutFile); + } + + public void Save(string linkFile) + { + if (this.linkA == null) + { + ((IPersistFile)this.linkW).Save(linkFile, true); + this.shortcutFile = linkFile; + } + else + { + ((IPersistFile)this.linkA).Save(linkFile, true); + this.shortcutFile = linkFile; + } + } + + // Properties + public string ShortCutFile + { + get => + this.shortcutFile; + set => + this.shortcutFile = value; + } + + public Icon LargeIcon => + this.getIcon(true); + + public Icon SmallIcon => + this.getIcon(false); + + public string IconPath + { + get + { + StringBuilder pszIconPath = new StringBuilder(260, 260); + int piIcon = 0; + if (this.linkA == null) + { + this.linkW.GetIconLocation(pszIconPath, pszIconPath.Capacity, out piIcon); + } + else + { + this.linkA.GetIconLocation(pszIconPath, pszIconPath.Capacity, out piIcon); + } + return pszIconPath.ToString(); + } + set + { + StringBuilder pszIconPath = new StringBuilder(260, 260); + int piIcon = 0; + if (this.linkA == null) + { + this.linkW.GetIconLocation(pszIconPath, pszIconPath.Capacity, out piIcon); + } + else + { + this.linkA.GetIconLocation(pszIconPath, pszIconPath.Capacity, out piIcon); + } + if (this.linkA == null) + { + this.linkW.SetIconLocation(value, piIcon); + } + else + { + this.linkA.SetIconLocation(value, piIcon); + } + } + } + + public int IconIndex + { + get + { + StringBuilder pszIconPath = new StringBuilder(260, 260); + int piIcon = 0; + if (this.linkA == null) + { + this.linkW.GetIconLocation(pszIconPath, pszIconPath.Capacity, out piIcon); + return piIcon; + } + this.linkA.GetIconLocation(pszIconPath, pszIconPath.Capacity, out piIcon); + return piIcon; + } + set + { + StringBuilder pszIconPath = new StringBuilder(260, 260); + int piIcon = 0; + if (this.linkA == null) + { + this.linkW.GetIconLocation(pszIconPath, pszIconPath.Capacity, out piIcon); + } + else + { + this.linkA.GetIconLocation(pszIconPath, pszIconPath.Capacity, out piIcon); + } + if (this.linkA == null) + { + this.linkW.SetIconLocation(pszIconPath.ToString(), value); + } + else + { + this.linkA.SetIconLocation(pszIconPath.ToString(), value); + } + } + } + + public string Target + { + get + { + StringBuilder pszFile = new StringBuilder(260, 260); + if (this.linkA == null) + { + _WIN32_FIND_DATAW pfd = new _WIN32_FIND_DATAW(); + this.linkW.GetPath(pszFile, pszFile.Capacity, ref pfd, 2); + } + else + { + _WIN32_FIND_DATAA pfd = new _WIN32_FIND_DATAA(); + this.linkA.GetPath(pszFile, pszFile.Capacity, ref pfd, 2); + } + return pszFile.ToString(); + } + set + { + if (this.linkA == null) + { + this.linkW.SetPath(value); + } + else + { + this.linkA.SetPath(value); + } + } + } + + public string WorkingDirectory + { + get + { + StringBuilder pszDir = new StringBuilder(260, 260); + if (this.linkA == null) + { + this.linkW.GetWorkingDirectory(pszDir, pszDir.Capacity); + } + else + { + this.linkA.GetWorkingDirectory(pszDir, pszDir.Capacity); + } + return pszDir.ToString(); + } + set + { + if (this.linkA == null) + { + this.linkW.SetWorkingDirectory(value); + } + else + { + this.linkA.SetWorkingDirectory(value); + } + } + } + + public string Description + { + get + { + StringBuilder pszFile = new StringBuilder(0x400, 0x400); + if (this.linkA == null) + { + this.linkW.GetDescription(pszFile, pszFile.Capacity); + } + else + { + this.linkA.GetDescription(pszFile, pszFile.Capacity); + } + return pszFile.ToString(); + } + set + { + if (this.linkA == null) + { + this.linkW.SetDescription(value); + } + else + { + this.linkA.SetDescription(value); + } + } + } + + public string Arguments + { + get + { + StringBuilder pszArgs = new StringBuilder(260, 260); + if (this.linkA == null) + { + this.linkW.GetArguments(pszArgs, pszArgs.Capacity); + } + else + { + this.linkA.GetArguments(pszArgs, pszArgs.Capacity); + } + return pszArgs.ToString(); + } + set + { + if (this.linkA == null) + { + this.linkW.SetArguments(value); + } + else + { + this.linkA.SetArguments(value); + } + } + } + + public LinkDisplayMode DisplayMode + { + get + { + uint piShowCmd = 0; + if (this.linkA == null) + { + this.linkW.GetShowCmd(out piShowCmd); + } + else + { + this.linkA.GetShowCmd(out piShowCmd); + } + return (LinkDisplayMode)piShowCmd; + } + set + { + if (this.linkA == null) + { + this.linkW.SetShowCmd((uint)value); + } + else + { + this.linkA.SetShowCmd((uint)value); + } + } + } + + public Keys HotKey + { + get + { + short pwHotkey = 0; + if (this.linkA == null) + { + this.linkW.GetHotkey(out pwHotkey); + } + else + { + this.linkA.GetHotkey(out pwHotkey); + } + return (Keys)pwHotkey; + } + set + { + if (this.linkA == null) + { + this.linkW.SetHotkey((short)value); + } + else + { + this.linkA.SetHotkey((short)value); + } + } + } + + // Nested Types + [StructLayout(LayoutKind.Sequential, Pack = 4)] + private struct _FILETIME + { + public uint dwLowDateTime; + public uint dwHighDateTime; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4)] + private struct _WIN32_FIND_DATAA + { + public uint dwFileAttributes; + public ShellLink._FILETIME ftCreationTime; + public ShellLink._FILETIME ftLastAccessTime; + public ShellLink._FILETIME ftLastWriteTime; + public uint nFileSizeHigh; + public uint nFileSizeLow; + public uint dwReserved0; + public uint dwReserved1; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] + public string cFileName; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] + public string cAlternateFileName; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 4)] + private struct _WIN32_FIND_DATAW + { + public uint dwFileAttributes; + public ShellLink._FILETIME ftCreationTime; + public ShellLink._FILETIME ftLastAccessTime; + public ShellLink._FILETIME ftLastWriteTime; + public uint nFileSizeHigh; + public uint nFileSizeLow; + public uint dwReserved0; + public uint dwReserved1; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] + public string cFileName; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] + public string cAlternateFileName; + } + + [ComImport, ClassInterface(ClassInterfaceType.None), Guid("00021401-0000-0000-C000-000000000046")] + private class CShellLink + { + } + + private enum EShellLinkGP : uint + { + SLGP_SHORTPATH = 1, + SLGP_UNCPRIORITY = 2 + } + + [Flags] + public enum EShellLinkResolveFlags : uint + { + SLR_ANY_MATCH = 2, + SLR_INVOKE_MSI = 0x80, + SLR_NOLINKINFO = 0x40, + SLR_NO_UI = 1, + SLR_NO_UI_WITH_MSG_PUMP = 0x101, + SLR_NOUPDATE = 8, + SLR_NOSEARCH = 0x10, + SLR_NOTRACK = 0x20, + SLR_UPDATE = 4 + } + + [Flags] + private enum EShowWindowFlags : uint + { + SW_HIDE = 0, + SW_SHOWNORMAL = 1, + SW_NORMAL = 1, + SW_SHOWMINIMIZED = 2, + SW_SHOWMAXIMIZED = 3, + SW_MAXIMIZE = 3, + SW_SHOWNOACTIVATE = 4, + SW_SHOW = 5, + SW_MINIMIZE = 6, + SW_SHOWMINNOACTIVE = 7, + SW_SHOWNA = 8, + SW_RESTORE = 9, + SW_SHOWDEFAULT = 10, + SW_MAX = 10 + } + + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("0000010C-0000-0000-C000-000000000046")] + private interface IPersist + { + [PreserveSig] + void GetClassID(out Guid pClassID); + } + + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("0000010B-0000-0000-C000-000000000046")] + private interface IPersistFile + { + [PreserveSig] + void GetClassID(out Guid pClassID); + void IsDirty(); + void Load([MarshalAs(UnmanagedType.LPWStr)] string pszFileName, uint dwMode); + void Save([MarshalAs(UnmanagedType.LPWStr)] string pszFileName, [MarshalAs(UnmanagedType.Bool)] bool fRemember); + void SaveCompleted([MarshalAs(UnmanagedType.LPWStr)] string pszFileName); + void GetCurFile([MarshalAs(UnmanagedType.LPWStr)] out string ppszFileName); + } + + [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("000214EE-0000-0000-C000-000000000046")] + private interface IShellLinkA + { + void GetPath([Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszFile, int cchMaxPath, ref ShellLink._WIN32_FIND_DATAA pfd, uint fFlags); + void GetIDList(out IntPtr ppidl); + void SetIDList(IntPtr pidl); + void GetDescription([Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszFile, int cchMaxName); + void SetDescription([MarshalAs(UnmanagedType.LPStr)] string pszName); + void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszDir, int cchMaxPath); + void SetWorkingDirectory([MarshalAs(UnmanagedType.LPStr)] string pszDir); + void GetArguments([Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszArgs, int cchMaxPath); + void SetArguments([MarshalAs(UnmanagedType.LPStr)] string pszArgs); + void GetHotkey(out short pwHotkey); + void SetHotkey(short pwHotkey); + void GetShowCmd(out uint piShowCmd); + void SetShowCmd(uint piShowCmd); + void GetIconLocation([Out, MarshalAs(UnmanagedType.LPStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon); + void SetIconLocation([MarshalAs(UnmanagedType.LPStr)] string pszIconPath, int iIcon); + void SetRelativePath([MarshalAs(UnmanagedType.LPStr)] string pszPathRel, uint dwReserved); + void Resolve(IntPtr hWnd, uint fFlags); + void SetPath([MarshalAs(UnmanagedType.LPStr)] string pszFile); + } + + [ComImport, Guid("000214F9-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + private interface IShellLinkW + { + void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, ref ShellLink._WIN32_FIND_DATAW pfd, uint fFlags); + void GetIDList(out IntPtr ppidl); + void SetIDList(IntPtr pidl); + void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxName); + void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName); + void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath); + void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir); + void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath); + void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs); + void GetHotkey(out short pwHotkey); + void SetHotkey(short pwHotkey); + void GetShowCmd(out uint piShowCmd); + void SetShowCmd(uint piShowCmd); + void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon); + void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon); + void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, uint dwReserved); + void Resolve(IntPtr hWnd, uint fFlags); + void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile); + } + + public enum LinkDisplayMode : uint + { + edmNormal = 1, + edmMinimized = 7, + edmMaximized = 3 + } + + private class UnManagedMethods + { + // Methods + [DllImport("user32")] + internal static extern int DestroyIcon(IntPtr hIcon); + [DllImport("shell32", CharSet = CharSet.Auto)] + internal static extern int ExtractIconEx([MarshalAs(UnmanagedType.LPWStr)] string lpszFile, int nIconIndex, IntPtr[] phIconLarge, IntPtr[] phIconSmall, int nIcons); + } + } +} diff --git a/Source/VSoft_Dll/Prams/ShortcutDescription.cs b/Source/VSoft_Dll/Prams/ShortcutDescription.cs new file mode 100644 index 0000000..6b700bf --- /dev/null +++ b/Source/VSoft_Dll/Prams/ShortcutDescription.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace VSoft.Prams +{ + public class ShortcutDescription + { + public string TargetPath { get; set; } = ""; + public string Arguments { get; set; } = ""; + public string WorkDir { get; set; } = ""; + public string IconLocation { get; set; } = ""; + } +} diff --git a/Source/VSoft_Dll/Prams/SoftInfo.cs b/Source/VSoft_Dll/Prams/SoftInfo.cs new file mode 100644 index 0000000..dd7f49b --- /dev/null +++ b/Source/VSoft_Dll/Prams/SoftInfo.cs @@ -0,0 +1,92 @@ +using ryCommon; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; + +namespace VSoft.Prams +{ + /// + /// 软件信息 + /// + public class SoftInfo + { + /// + /// id + /// + public int Id { get; set; } = 0; + /// + /// id + /// + public int ColumnId { get; set; } = 0; + /// + /// 0表示运行文件,1表示执行内置命令,2表示执行脚本 + /// + public int SoftType { get; set; } = 0; + /// + /// 命令ID + /// + public string CmdId { get; set; } = ""; + /// + /// 名称 + /// + public string Name { get; set; } = ""; + /// + /// 路径 + /// + public string Path { get; set; } = ""; + /// + /// 绝对路径 + /// + public string TruePath + { + get + { + return RyFiles.GetRealPath(Path); + } + } + /// + /// 运行参数 + /// + public string RunPram { get; set; } = ""; + /// + /// 起始路径 + /// + public string StartPath { get; set; } = ""; + /// + /// 文件图标 + /// + public string IconPath { get; set; } = ""; + /// + /// 设置 + /// + public string SetJson { get; set; } = ""; + /// + /// 备注 + /// + public string Des { get; set; } = ""; + /// + /// 文件图标 + /// + public Image Image { get; set; } = null; + } + /// + /// 栏目或分类信息 + /// + public class ColumnInfo + { + /// + /// id + /// + public int Id { get; set; } = 0; + /// + /// 名称 + /// + public string Name { get; set; } = ""; + /// + /// 备注 + /// + public string Des { get; set; } = ""; + } +} diff --git a/Source/VSoft_Dll/Prams/c_icon_of_path.cs b/Source/VSoft_Dll/Prams/c_icon_of_path.cs new file mode 100644 index 0000000..be3db93 --- /dev/null +++ b/Source/VSoft_Dll/Prams/c_icon_of_path.cs @@ -0,0 +1,441 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Runtime.InteropServices; +using System.Windows; +using System.Diagnostics; +using System.Drawing; + +namespace VSoft.Prams +{ + public static class c_icon_of_path + { + private struct RECT + { + public int Left; + public int Top; + public int Right; + public int Bottom; + } + private struct POINT + { + public int x; + public int y; + } + // Constants that we need in the function call + + private const int SHGFI_ICON = 0x100; + + private const int SHGFI_SMALLICON = 0x1; + + private const int SHGFI_LARGEICON = 0x0; + + private const int SHIL_JUMBO = 0x4; + private const int SHIL_EXTRALARGE = 0x2; + + // This structure will contain information about the file + + public struct SHFILEINFO + { + + // Handle to the icon representing the file + + public IntPtr hIcon; + + // Index of the icon within the image list + + public int iIcon; + + // Various attributes of the file + + public uint dwAttributes; + + // Path to the file + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] + + public string szDisplayName; + + // File type + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] + + public string szTypeName; + + }; + + [System.Runtime.InteropServices.DllImport("Kernel32.dll")] + public static extern Boolean CloseHandle(IntPtr handle); + + private struct IMAGELISTDRAWPARAMS + { + public int cbSize; + public IntPtr himl; + public int i; + public IntPtr hdcDst; + public int x; + public int y; + public int cx; + public int cy; + public int xBitmap; // x offest from the upperleft of bitmap + public int yBitmap; // y offset from the upperleft of bitmap + public int rgbBk; + public int rgbFg; + public int fStyle; + public int dwRop; + public int fState; + public int Frame; + public int crEffect; + } + + [StructLayout(LayoutKind.Sequential)] + private struct IMAGEINFO + { + public IntPtr hbmImage; + public IntPtr hbmMask; + public int Unused1; + public int Unused2; + public RECT rcImage; + } + + #region Private ImageList COM Interop (XP) + [ComImportAttribute()] + [GuidAttribute("46EB5926-582E-4017-9FDF-E8998DAA0950")] + [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] + //helpstring("Image List"), + interface IImageList + { + [PreserveSig] + int Add( + IntPtr hbmImage, + IntPtr hbmMask, + ref int pi); + + [PreserveSig] + int ReplaceIcon( + int i, + IntPtr hicon, + ref int pi); + + [PreserveSig] + int SetOverlayImage( + int iImage, + int iOverlay); + + [PreserveSig] + int Replace( + int i, + IntPtr hbmImage, + IntPtr hbmMask); + + [PreserveSig] + int AddMasked( + IntPtr hbmImage, + int crMask, + ref int pi); + + [PreserveSig] + int Draw( + ref IMAGELISTDRAWPARAMS pimldp); + + [PreserveSig] + int Remove( + int i); + + [PreserveSig] + int GetIcon( + int i, + int flags, + ref IntPtr picon); + + [PreserveSig] + int GetImageInfo( + int i, + ref IMAGEINFO pImageInfo); + + [PreserveSig] + int Copy( + int iDst, + IImageList punkSrc, + int iSrc, + int uFlags); + + [PreserveSig] + int Merge( + int i1, + IImageList punk2, + int i2, + int dx, + int dy, + ref Guid riid, + ref IntPtr ppv); + + [PreserveSig] + int Clone( + ref Guid riid, + ref IntPtr ppv); + + [PreserveSig] + int GetImageRect( + int i, + ref RECT prc); + + [PreserveSig] + int GetIconSize( + ref int cx, + ref int cy); + + [PreserveSig] + int SetIconSize( + int cx, + int cy); + + [PreserveSig] + int GetImageCount( + ref int pi); + + [PreserveSig] + int SetImageCount( + int uNewCount); + + [PreserveSig] + int SetBkColor( + int clrBk, + ref int pclr); + + [PreserveSig] + int GetBkColor( + ref int pclr); + + [PreserveSig] + int BeginDrag( + int iTrack, + int dxHotspot, + int dyHotspot); + + [PreserveSig] + int EndDrag(); + + [PreserveSig] + int DragEnter( + IntPtr hwndLock, + int x, + int y); + + [PreserveSig] + int DragLeave( + IntPtr hwndLock); + + [PreserveSig] + int DragMove( + int x, + int y); + + [PreserveSig] + int SetDragCursorImage( + ref IImageList punk, + int iDrag, + int dxHotspot, + int dyHotspot); + + [PreserveSig] + int DragShowNolock( + int fShow); + + [PreserveSig] + int GetDragImage( + ref POINT ppt, + ref POINT pptHotspot, + ref Guid riid, + ref IntPtr ppv); + + [PreserveSig] + int GetItemFlags( + int i, + ref int dwFlags); + + [PreserveSig] + int GetOverlayImage( + int iOverlay, + ref int piIndex); + }; + #endregion + + /// + /// SHGetImageList is not exported correctly in XP. See KB316931 + /// http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q316931 + /// Apparently (and hopefully) ordinal 727 isn't going to change. + /// + [DllImport("shell32.dll", EntryPoint = "#727")] + private extern static int SHGetImageList( + int iImageList, + ref Guid riid, + out IImageList ppv + ); + + // The signature of SHGetFileInfo (located in Shell32.dll) + [DllImport("Shell32.dll")] + public static extern int SHGetFileInfo(string pszPath, int dwFileAttributes, ref SHFILEINFO psfi, int cbFileInfo, uint uFlags); + + [DllImport("Shell32.dll")] + public static extern int SHGetFileInfo(IntPtr pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, int cbFileInfo, uint uFlags); + + [DllImport("shell32.dll", SetLastError = true)] + static extern int SHGetSpecialFolderLocation(IntPtr hwndOwner, Int32 nFolder, + ref IntPtr ppidl); + + [DllImport("user32")] + public static extern int DestroyIcon(IntPtr hIcon); + + public struct pair + { + public System.Drawing.Icon icon { get; set; } + public IntPtr iconHandleToDestroy { set; get; } + + } + + public static int DestroyIcon2(IntPtr hIcon) + { + return DestroyIcon(hIcon); + } + + //private static BitmapSource bitmap_source_of_icon(System.Drawing.Icon ic) + //{ + // var ic2 = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(ic.Handle, + // System.Windows.Int32Rect.Empty, + // System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); + // ic2.Freeze(); + // return ((BitmapSource)ic2); + //} + + //public static BitmapSource SystemIcon(bool small, ShellLib.ShellApi.CSIDL csidl) + //{ + + // IntPtr pidlTrash = IntPtr.Zero; + // int hr = SHGetSpecialFolderLocation(IntPtr.Zero, (int)csidl, ref pidlTrash); + // Debug.Assert(hr == 0); + + // SHFILEINFO shinfo = new SHFILEINFO(); + + // uint SHGFI_USEFILEATTRIBUTES = 0x000000010; + + // // Get a handle to the large icon + // uint flags; + // uint SHGFI_PIDL = 0x000000008; + // if (!small) + // { + // flags = SHGFI_PIDL | SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES; + // } + // else + // { + // flags = SHGFI_PIDL | SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES; + // } + + // var res = SHGetFileInfo(pidlTrash, 0, ref shinfo, Marshal.SizeOf(shinfo), flags); + // Debug.Assert(res != 0); + + // var myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon); + // Marshal.FreeCoTaskMem(pidlTrash); + // var bs = bitmap_source_of_icon(myIcon); + // myIcon.Dispose(); + // bs.Freeze(); // importantissimo se no fa memory leak + // DestroyIcon(shinfo.hIcon); + // CloseHandle(shinfo.hIcon); + // return bs; + + //} + + public static Icon icon_of_path(string FileName, bool small, bool checkDisk, bool addOverlay) + { + SHFILEINFO shinfo = new SHFILEINFO(); + + uint SHGFI_USEFILEATTRIBUTES = 0x000000010; + uint SHGFI_LINKOVERLAY = 0x000008000; + + uint flags; + if (small) + { + flags = SHGFI_ICON | SHGFI_SMALLICON; + } + else + { + flags = SHGFI_ICON | SHGFI_LARGEICON; + } + if (!checkDisk) + flags |= SHGFI_USEFILEATTRIBUTES; + if (addOverlay) + flags |= SHGFI_LINKOVERLAY; + + var res = SHGetFileInfo(FileName, 0, ref shinfo, Marshal.SizeOf(shinfo), flags); + if (res == 0) + { + throw (new System.IO.FileNotFoundException()); + } + + var myIcon = (Icon)System.Drawing.Icon.FromHandle(shinfo.hIcon).Clone(); + DestroyIcon(shinfo.hIcon); + CloseHandle(shinfo.hIcon); + return myIcon; + + } + + public static Icon icon_of_path_large(string FileName, bool jumbo, bool checkDisk) + { + + SHFILEINFO shinfo = new SHFILEINFO(); + + uint SHGFI_USEFILEATTRIBUTES = 0x000000010; + uint SHGFI_SYSICONINDEX = 0x4000; + + int FILE_ATTRIBUTE_NORMAL = 0x80; + + uint flags; + flags = SHGFI_SYSICONINDEX; + + if (!checkDisk) // This does not seem to work. If I try it, a folder icon is always returned. + flags |= SHGFI_USEFILEATTRIBUTES; + + var res = SHGetFileInfo(FileName, FILE_ATTRIBUTE_NORMAL, ref shinfo, Marshal.SizeOf(shinfo), flags); + if (res == 0) + { + //throw (new System.IO.FileNotFoundException()); + return null; + } + var iconIndex = shinfo.iIcon; + + // Get the System IImageList object from the Shell: + Guid iidImageList = new Guid("46EB5926-582E-4017-9FDF-E8998DAA0950"); + + IImageList iml; + int size = jumbo ? SHIL_JUMBO : SHIL_EXTRALARGE; + var hres = SHGetImageList(size, ref iidImageList, out iml); // writes iml + //if (hres == 0) + //{ + // throw (new System.Exception("Error SHGetImageList")); + //} + + IntPtr hIcon = IntPtr.Zero; + int ILD_TRANSPARENT = 1; + hres = iml.GetIcon(iconIndex, ILD_TRANSPARENT, ref hIcon); + //if (hres == 0) + //{ + // throw (new System.Exception("Error iml.GetIcon")); + //} + + var myIcon = (Icon)System.Drawing.Icon.FromHandle(hIcon).Clone(); + //var bs = bitmap_source_of_icon(myIcon); + //myIcon.Dispose(); + //bs.Freeze(); // very important to avoid memory leak + DestroyIcon(hIcon); + //CloseHandle(hIcon); + + return myIcon; + + } + + [System.Runtime.InteropServices.DllImport("Gdi32.dll")] + private static extern bool DeleteObject(System.IntPtr hObject); + + } +} \ No newline at end of file diff --git a/Source/VSoft_Dll/Properties/AssemblyInfo.cs b/Source/VSoft_Dll/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4b8fe6a --- /dev/null +++ b/Source/VSoft_Dll/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("VSoft")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("睿元网络")] +[assembly: AssemblyProduct("VSoft")] +[assembly: AssemblyCopyright("Copyright itrycn© 2010-2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("13c45e68-2da3-4c9e-9bca-e63d0fa9a760")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.2011.1701")] +[assembly: AssemblyFileVersion("1.0.2011.1701")] \ No newline at end of file diff --git a/Source/VSoft_Dll/Properties/Resources.Designer.cs b/Source/VSoft_Dll/Properties/Resources.Designer.cs new file mode 100644 index 0000000..f6bb76f --- /dev/null +++ b/Source/VSoft_Dll/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace VSoft.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VSoft.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Source/VSoft_Dll/Properties/Resources.resx b/Source/VSoft_Dll/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Source/VSoft_Dll/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/VSoft_Dll/TabList.cs b/Source/VSoft_Dll/TabList.cs new file mode 100644 index 0000000..06169ca --- /dev/null +++ b/Source/VSoft_Dll/TabList.cs @@ -0,0 +1,210 @@ +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace ryControls +{ + public class TabList : ListView + { + private ColumnHeader columnHeader1; + + public TabList() : + base() + { + this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); + this.OwnerDraw = true;//用于启用重绘 + this.View = View.Tile; + this.TileSize = new Size(80,28); + this.Scrollable = false; + this.MultiSelect = false; + } + + /// + /// 图标 + /// + public Image Icon { get; set; } + + /// + /// 重绘图标 + /// + public bool IsDrawIcon { get; set; } + + /// + /// 重绘网格线 + /// + public bool IsDrawGridLines { get; set; } + private int last_selectIndex = 0; + protected override void OnMouseUp(MouseEventArgs e) + { + var pt = this.PointToClient(e.Location); + var item = this.GetItemAt(pt.X, pt.Y); + if (item == null) + { + if (last_selectIndex < this.Items.Count) + { + this.Items[last_selectIndex].Selected = true; + } + } + } + protected override void OnItemSelectionChanged(ListViewItemSelectionChangedEventArgs e) + { + if(e.IsSelected) + { + last_selectIndex = e.ItemIndex; + base.OnItemSelectionChanged(e); + } + else + { + if ( last_selectIndex < this.Items.Count) + { + //this.Items[last_selectIndex].Selected = true; + } + } + } + protected override void OnSelectedIndexChanged(System.EventArgs e) + { + if(this.SelectedItems.Count>0) + { + base.OnSelectedIndexChanged(e); + } + else + { + + } + } + protected override void OnDrawItem(DrawListViewItemEventArgs e) + { + Rectangle r = e.Bounds; + Graphics g = e.Graphics; + + DrawSelectedBackground(e, g, r); + + //if (IsDrawGridLines) + //{ + // using (Pen pen = new Pen(Color.Gray)) + // { + // g.DrawRectangle(pen, r.X, r.Y, r.Width, r.Height + 1);//高度加1使横向线条重叠 + // } + //} + + if (!string.IsNullOrEmpty(e.Item.Text)) + { + this.DrawText(e, g, r); + } + } + private Color _SelectedBackColor = Color.LightSkyBlue; + [Description("选择项的背景颜色")] + public Color SelectedBackColor + { + get + { + return _SelectedBackColor; + } + set + { + _SelectedBackColor = value; + this.Refresh(); + } + } + /// + /// 重绘选中时背景 + /// + private void DrawSelectedBackground(DrawListViewItemEventArgs e, Graphics g, Rectangle r) + { + if (e.Item.Selected) + { + using (SolidBrush brush = new SolidBrush(_SelectedBackColor)) + { + g.FillRectangle(brush, r); + } + } + } + + /// + /// 重绘图标 + /// + private Size DrawIcon(Graphics g, Rectangle r, Image image, Color backColor) + { + Rectangle imageBounds = new Rectangle(new Point(r.X+10, r.Y+3), new Size(64,64)); + if (r.Width > r.Height-20) + { + imageBounds.Width = r.Height-20; + imageBounds.Height = r.Height - 20; + } + else + { + imageBounds.Width = r.Width - 20; + imageBounds.Height = r.Width - 20; + } + imageBounds.X = r.X + (r.Width - imageBounds.Width) / 2; + //使图标不会紧贴着每一列的左上角 + //imageBounds.X += 1; + //imageBounds.Y += 1; + + g.DrawImage(image, imageBounds); + return imageBounds.Size; + } + + /// + /// 重绘文本 + /// + private void DrawText(DrawListViewItemEventArgs e, Graphics g, Rectangle r) + { + TextFormatFlags flags = GetFormatFlags(HorizontalAlignment.Center); + TextRenderer.DrawText( + g, + e.Item.Text, + e.Item.Font, + r, + e.Item.ForeColor, + flags); + } + + /// + /// 获取文本对齐 + /// + private TextFormatFlags GetFormatFlags( + HorizontalAlignment align) + { + TextFormatFlags flags = + TextFormatFlags.EndEllipsis | + TextFormatFlags.VerticalCenter; + + switch (align) + { + case HorizontalAlignment.Center: + flags |= TextFormatFlags.HorizontalCenter; + break; + case HorizontalAlignment.Right: + flags |= TextFormatFlags.Right; + break; + case HorizontalAlignment.Left: + flags |= TextFormatFlags.Left; + break; + } + + return flags; + } + + private void InitializeComponent() + { + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.SuspendLayout(); + // + // columnHeader1 + // + this.columnHeader1.Width = 10; + // + // IconViewEx + // + this.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1}); + this.LabelWrap = false; + this.ShowItemToolTips = true; + this.TileSize = new System.Drawing.Size(60, 60); + this.View = System.Windows.Forms.View.Tile; + this.ResumeLayout(false); + + } + } +} \ No newline at end of file diff --git a/Source/VSoft_Dll/TabList.resx b/Source/VSoft_Dll/TabList.resx new file mode 100644 index 0000000..e5858cc --- /dev/null +++ b/Source/VSoft_Dll/TabList.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/Source/VSoft_Dll/VSoft.csproj b/Source/VSoft_Dll/VSoft.csproj new file mode 100644 index 0000000..44e3651 --- /dev/null +++ b/Source/VSoft_Dll/VSoft.csproj @@ -0,0 +1,177 @@ + + + + + Debug + AnyCPU + {13C45E68-2DA3-4C9E-9BCA-E63D0FA9A760} + Library + Properties + VSoft + VSoft + v4.0 + 512 + true + + + true + full + false + ..\..\Bin\Debug\VSoft\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\Bin\Debug\VSoft\MyDb.dll + + + ..\..\Bin\Debug\VSoft\MyDb_SQLite.dll + + + False + ..\..\..\..\..\C#\私人代码\QO流程管理\Bin\Debug\RySpider\Newtonsoft.Json.dll + + + ..\..\Bin\Debug\VSoft\ryControls.dll + + + ..\..\..\..\..\公共代码\C#\公用控件组\Bin\Debug\CommonControls\.NET4\ryUpdate.dll + + + + + + + + + + + + + + + Form + + + frmSetting.cs + + + + Form + + + FrmAbout.cs + + + Form + + + FrmAddType.cs + + + Form + + + FrmAddColumn.cs + + + Form + + + FrmAddSoft.cs + + + Form + + + FrmInCMD.cs + + + Form + + + FrmVSoft.cs + + + + + + + Component + + + Component + + + + + + + + + + + + True + True + Resources.resx + + + + + frmSetting.cs + + + FrmAbout.cs + + + FrmAddType.cs + + + FrmAddColumn.cs + + + FrmAddSoft.cs + + + FrmInCMD.cs + + + FrmVSoft.cs + + + TabList.cs + + + IconViewEx.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + {F935DC20-1CF0-11D0-ADB9-00C04FD58A0B} + 1 + 0 + 0 + tlbimp + False + True + + + + \ No newline at end of file diff --git a/Source/VSoft_Dll/VSoft.csproj.user b/Source/VSoft_Dll/VSoft.csproj.user new file mode 100644 index 0000000..c10e84b --- /dev/null +++ b/Source/VSoft_Dll/VSoft.csproj.user @@ -0,0 +1,6 @@ + + + + ProjectFiles + + \ No newline at end of file diff --git a/查看项目.ryp b/查看项目.ryp new file mode 100644 index 0000000..1e03bb7 --- /dev/null +++ b/查看项目.ryp @@ -0,0 +1,6 @@ +[project] +name=VSoft +engname=VSoft +usqver=2.1 +proglang=c# +progID=62a39388-ee7c-4377-9262-30574c5e9663