Winform自定义表单(转)

2023-10-31

出处:http://www.newlifex.com/showtopic-167.aspx

好吧,附件真的损坏了,原始代码我也没有了,再提取我也没精力了,不好意思,哪位之前下过可以重发一遍吗?不过即使没有也可以参考下面几个示例很快就可以做出来了......

最近在做个项目,业务方面较繁琐,用户需要自定义数据库,也就是石头开源的魔方所提供的功能,但winform实现自定义表单,这个......
在网上搜索了前人的代码发现以下几个参考意义:
http://www.codeproject.com/Articles/24385/Have-a-Great-DesignTime-Experience-with-a-Powerful
http://www.codeproject.com/Articles/60175/The-DesignSurface-Extended-Class-is-Back-Together
http://www.cnblogs.com/michael-zhang/articles/655267.html
http://www.cnblogs.com/pvistely/archive/2006/02/09/327656.html

不过功能都不是很全面,相似之处都是在SD中提取的,哈哈。
把这几个例子整合了一下,发现还缺少最重要的功能对设计窗体的序列化功能都没有啊,于是重新翻阅了一个SD3.2的源代码把XmlForm相关的代码提取出来,然后用XML to Linq重新修改了一遍,效果图如下,界面是用dotnetbar组件:



由于整个编辑器关联太多东东,所以我只把核心功能提出出来,有兴趣的朋友可以看看,由于时间关系,菜单命令我只添加了有限的几个,完整的可以自己添加看看效果,全在源代码中。
还有自定义属性在资源文件中Properties.xml设置,由于我用的是多语言包的,所以在分享的源代码中屏蔽了部分代码,在HmCustomProperty类中进行设置,大家看看就会懂的。

另外如果有些控件的属性对象复杂的话,需要对这个属性单独进行序列化,需要在DesignSurfaceExt类的GetElementFor方法和XmlLoader类的SetAttributes方法中分别设置,我用的是SharpSerializer来实现属性对象序列化的。

还有就是比较复杂的控件如Tabcontrol之类的,也需要自己单独设置,大家可以查看一下sd的源代码看看。

还有一个问题没有解决,如果在设计窗体中使用快捷键,我把sd中的FormKeyHandler类提取出来,就会有一个问题,我按del键删除一个控件时没有问题,但是在在属性中编辑某个属性时也会用到del键,这时也会把设计窗体中的选中的控件删除,

.net版本用的是2.0,所以需要手动添加system.core.dll和system.xml.linq.dll的引用,还有newlife.core.dll的引用。

下面是我上传的源代码,运行时的截图:


*******************************************************
压缩包损坏缺少一个文件EventBindingService.cs,现在附件上传不了啦,自己该下命名空间把
using System;
using System.Collections;
using System.ComponentModel;
using System.Reflection;

namespace HmFramework.UI.Sprite.Services
{
internal class EventBindingServiceExt : System.ComponentModel.Design.EventBindingService { public EventBindingServiceExt(IServiceProvider provider) : base(provider) { } protected override String CreateUniqueMethodName(IComponent component, EventDescriptor e) { return String.Format("{0}_{1}", Char.ToUpper(component.Site.Name[0]) + component.Site.Name.Substring(1), e.DisplayName); } // sohuld look around in form class for compatiable methodes protected override ICollection GetCompatibleMethods(EventDescriptor e) { ArrayList al = new ArrayList(); MethodInfo methodInfo = e.EventType.GetMethod("Invoke"); if (null != methodInfo) { al.Add(methodInfo.Name); } return al; } protected override Boolean ShowCode() { //IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow; //if (window == null) { // return false; //} //FormsDesignerViewContent formDesigner = window.ActiveViewContent as FormsDesignerViewContent; //if (formDesigner != null) { // formDesigner.ShowSourceCode(); // return true; //} return false; } protected override Boolean ShowCode(Int32 lineNumber) { //IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow; //if (window == null) { // return false; //} //FormsDesignerViewContent formDesigner = window.ActiveViewContent as FormsDesignerViewContent; //if (formDesigner != null) { // formDesigner.ShowSourceCode(lineNumber); // return true; //} return false; } protected override Boolean ShowCode(IComponent component, EventDescriptor edesc, String methodName) { //System.Windows.Forms.MessageBox.Show("to add:" + component.Site.Name + "\r\n" + methodName); return false; } } }
 
new.png  (94.08 K, 下载次数:2)

(2013/8/13 15:24:02 上传)

 

new.png

designer.png  (133.23 K, 下载次数:8)

(2013/8/13 15:24:02 上传)

 

designer.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Winform自定义表单(转) 的相关文章

随机推荐

  • 一分钟学会对合并单元格填充数据(Excel)

    问题描述 大家有没有发现 我们在使用Excel时有很多情况下需要对某列几行的内容进行合并 但是其他列中需要填写的内容却又完全相同 本文用两种方法解决这一问题 重点是方法二哦 一分钟可搞定数百条数据 如下图 需要按照专业进行单元格合并 但是他
  • vue高德地图初体验地图初始化(一)

    vue高德地图初体验地图初始化 安装依赖 引用依赖 地图初始化 AMap Map参数说明 安装依赖 npm i amap amap jsapi loader save 引用依赖 import AMapLoader from amap ama
  • A level数学真题解析及运用

    在A level考试9709数学科目中pure mathematics 3考卷考察范围内有一章节名为complex number 即复数章节 这部分知识点虽然理解难度不大 但是在我国普通高中的数学学习中涉及的较少 考生在接受上有比较大的难度
  • java设计模式-单例模式

    Java中单例 Singleton 模式是一种广泛使用的设计模式 单例模式的主要作用是保证在Java程序中 某个类只有一个实例存在 一些管理器和控制器常被设计成单例模式 单例模式有很多好处 它能够避免实例对象的重复创建 不仅可以减少每次创建
  • C++ operator == 的一些思考

    最近写代码的时候 需要重载 以前也没有进行过太多的思考 都是顺手就写了 在这里就总结一下 下面的代码是 应该是重载 用的最多的写法了 class Demo public Demo int a a a Demo bool operator c
  • java poi读取pdf word excel文档,读取pdf文字图片

    文章目录 依赖 读取pdf文本和图片 简单读取word docx doc文字 读取word doc表格内容 读取word doc图片 读取excel 输出到excel office转pdf 依赖
  • springCloud Eureka 报错解决方案

    在根据大神的文章安装eureka过程遇到些报错 这里记录下比较好的解决方案 史上最简单的 SpringCloud 教程 终章 方志朋的博客 CSDN博客 springcloud 启动Eureka server 直接启动报错 EMERGENC
  • html5图片并列排版,小编,图片与文字并排怎么排版呢?

    图文排版 H5秀 手机图文 小伙伴 小米 我想左边放图片 右边是文字 但是图片插入之后 再编辑文字只能在下一行 我就直接调整段前距 但有时候预览它会错位 想问图片与文字并排如何排版出来呢 这是一个日经题 设置段前距或许是一个方法 但设定的数
  • Windows下PyTorch1.5的下载安装

    在安装PyTorch之前要先安装好CUDA cudNN 以及anaconda 还有就是编译器pycharm 然后你才能开始安装PyTorch 目录 1 创建虚拟环境 2 去PyTorch官网 3 发现警告 4 解决办法 5 pip list
  • 解析波士顿动力Handle机器人背后的技术(附PPT+视频)

    转 http www leiphone com news 201703 URrR8CG2tmtghNDl html 导语 Boston Dynamics 在机器人动力方面堪称翘楚 其由双足或多足机器人组成的机器人天团总是时不时能给我们带来惊
  • Python3 pip

    Python3 pip pip 是 Python 包管理工具 该工具提供了对 Python 包的查找 下载 安装 卸载的功能 软件包也可以在 https pypi org 中找到 目前最新的 Python 版本已经预装了 pip 注意 Py
  • Nginx添加SSL模块

    目录 一 SSL 概述 SSL证书 HTTPS SSL工作原理 二 创建SSL证书 安装openssl 生成证书 三 nginx配置 nginx打补丁添加模块 nginx conf配置 四 访问 一 SSL 概述 SSL Security
  • 向日葵权限mac

    问题 权限打开后自动关上 解决 mac上几乎所有远程软件都会出现这种权限设置问题 换了腾讯会议或其他也没用 方法一 试试先打开系统的安全性设置 将向日葵软件从隐私框里移出来 点击 号移除 再重新添加进去 方法二 将权限的勾选去掉 再添加 然
  • EFCore 数据模型 和 值转换

    操作中经常要涉及到模型和值转换的问题 这里记录一下 实际使用过程中遇到过的问题 而非功能的全部 模型 EFCore中支持字段 参考地址 https docs microsoft com zh cn ef core modeling back
  • SpringBoot框架详解,实战入门教程

    SpringBoot作为当下Java开发最常用的技术框架 相信你也一定听过很多次了 那么到底什么是SpringBoot SpringBoot又有什么用呢 跟着动力节点的视频快速入门springboot 视频观看资源 https www bi
  • CIKM 2023|TASTE:通过文本匹配缓解序列化推荐中流行偏差问题

    序列化推荐系统旨在根据用户的浏览历史动态地为用户推荐下一个商品 这在Yelp TikTok Amazon等众多Web应用程序中发挥着至关重要的作用 这些推荐系统通过使用不同的神经网络架构来学习用户 商品交互中商品之间的依赖关系 从而对用户行
  • Qt:文管打开方式:选择并设置默认程序

    默认启动APP配置文件 local share applications mimeapps list config mimeapps list etc gnome defaults list 全局 QAction action choose
  • 整理一些spring常见的扩展点

    一 各种后处理器 1 1 BeanDefinition与BeanFactory扩展 1 1 1 BeanDefinitionRegistryPostProcessor接口 Extension to the standard link Bea
  • 解决Vue前端报错——Error: Cannot find module ‘node-sass‘

    解决Vue前端报错 Error Cannot find module node sass 今天在使用VsCode 导入一个新Vue項目文件夹的时候出现了以下的问题 npm run dev提示 Cannot find module node
  • Winform自定义表单(转)

    出处 http www newlifex com showtopic 167 aspx 好吧 附件真的损坏了 原始代码我也没有了 再提取我也没精力了 不好意思 哪位之前下过可以重发一遍吗 不过即使没有也可以参考下面几个示例很快就可以做出来了