c# 将form变成用户自定义控件,实现windows的控件封装

w_kan 2016-11-09 11:20:27
我现在做好了一个form,有一个数据类,数据用form上的label.text显示。现在老板让我把这个做好的form,变成一个用户自定义控件。网上查了很多,只是在原项目上add了一个usercontrol,然后就完全蒙圈,大神们求指导啊啊啊,实习妹子刚进IT行,boss给我的小任务。
...全文
1270 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
os超级菜鸟 2019-02-01
  • 打赏
  • 举报
回复
引用 4 楼 以专业开发人员为伍 的回复:
组件式开发软件,本来就应该从 usercontrol 开始设计。用户控件可以嵌套组合到其它用户控件,或者窗体。

然后你把 usercontrol 直接拖入 form 就好了。你从form 开始设计程序,这是按照初学者习惯去设计的,因此应该重建一个用户控件,把原来的form 里边的代码全都移植到用户控件,这样才能长久、才符合专业程序设计师的做法。




您好,半路出家自学,想问些不知道是不是愚蠢的问题,想私信但是没有这个功能。就只关于这个框架问题——
我建的解决方案,一个主窗口,上面一个toolstrip带了8个按钮 ,一个panel ,然后新建了8~9个用户控件作为子窗口,用toolstrip的8个按钮,分别对应8个用户控件,加载到panel里,这样实现挺好。
问题是:在控件里编程时,各个控件窗口之间,还有和主窗口之间,所有的数据引用、相互操作对方的控件,改怎么弄?不会要建立无数托管来实现吧?
xuzuning 2016-11-09
  • 打赏
  • 举报
回复
是的,创建 usercontrol控件 后,把 form1 中的控件复制粘贴过去 Form 是窗体和 Control 不是一回事(区别在于响应系统消息的级别不同) 所以无论你怎么继承 Form,都不会变 Control 但你可以把你的 MyForm 制作成 dll,使用时 Form1 : MyForm 就可以了
  • 打赏
  • 举报
回复
组件式开发软件,本来就应该从 usercontrol 开始设计。用户控件可以嵌套组合到其它用户控件,或者窗体。 然后你把 usercontrol 直接拖入 form 就好了。你从form 开始设计程序,这是按照初学者习惯去设计的,因此应该重建一个用户控件,把原来的form 里边的代码全都移植到用户控件,这样才能长久、才符合专业程序设计师的做法。
w_kan 2016-11-09
  • 打赏
  • 举报
回复
引用 1 楼 crystal_lz 的回复:
把你的Form变成UserControl就是了 不要用窗体 其他代码也一样 不同的是Form有关闭按钮最大化按钮什么的。。。
是不是把form界面设计里面的控件,重新做在usercontrol中,然后再在form里面调用usercontrol控件,之前form界面设计种的的控件都不要了,我要被自己蠢死了
w_kan 2016-11-09
  • 打赏
  • 举报
回复
只是单纯的把form1的继承从Form改为UserControl就可以了?不用加usercontrol什么的吗?望指导
我改了继承之后出了错:说不能把‘dicomUI.Form1’转换成‘system.Windows.Forms.Form’
crystal_lz 2016-11-09
  • 打赏
  • 举报
回复
把你的Form变成UserControl就是了 不要用窗体 其他代码也一样 不同的是Form有关闭按钮最大化按钮什么的。。。
在用C#做桌面程序时,有时后会碰到要修改WinForm 窗体的系统边框样式(系统镶边样式)。如,改变标题栏 的背景,系统图标,系统按钮,或者要做一个自己的 窗体,有自己的背景。那么直接调用win32内部c语言函数 很不方便。怎样才能做有自己的系统边框的C#窗体呢? 我想就是有几年工作经验的程序员,也会觉得那是很麻烦的事。那么,为什么不把这个工作封装成一个控件呢? 下面,是我自己根据以往的经验,做了一个自定义系统边框控件。 使用方法是,自己用图形编辑软件画好窗体背景,然后把此图片作为窗体的背景图片。 再把form窗体的FormBorderStyle属性设置成None; 然后,在窗体代码文件中定义一个控件类对象:public partial class Form1 : Form { CustomBorder.CustomBorderEx cbe = null; public Form1() { InitializeComponent(); cbe = new CustomBorder.CustomBorderEx(this); } } 就可以定义能实现窗体拖动功能的边框。 public partial class Form1 : Form { CustomBorder.CustomBorderEx cbe = null; public Form1() { InitializeComponent(); cbe = new CustomBorder.CustomBorderEx(this, true,new Size(100,100)); } } 上面可以定义一个带拖动,拉伸窗体,调整大小的边框。 有时候需要在关联的窗体上放一些可以随窗体大小改变而自动调整成合适大小位置的控件容器,如,Panel控件。 那么应该把它的大小和位置定为一个客户区内。 得到客户区的方法是 Rectangle rt = cbe.ClientRegion;下面是一个可以正常工作的自定义窗体。 public partial class Form1 : Form { CustomBorder.CustomBorderEx cbe = null; public Form1() { InitializeComponent(); cbe = new CustomBorder.CustomBorderEx(this, true,new Size(100,100)); Rectangle rt = cbe.ClientRegion; this.panel1.Location = new Point(rt.X, rt.Y); this.panel1.Size = new Size(rt.Width, rt.Height); } //窗体的Resize事件处理程序 private void Form1_Resize(object sender, EventArgs e) { cbe.InvalidateCompute(); Rectangle rt = cbe.ClientRegion; this.panel1.Location = new Point(rt.X, rt.Y); this.panel1.Size = new Size(rt.Width, rt.Height); } } 上面代码是从边框控件得到可用客户区的位置和大小。 然后,在窗体Resize事件相应方法中把panel1容器的 位置和大小设置成客户区的值。 注意,在调用cbe.ClientRegion之前,最好先调用cbe.InvalidateCompute();方法一下,重新计算一下边框和客户区的位置和大小。 那么,之后我们只要在窗体设计器中,注意把我们的其他一些控件(如,Button 等),放到panel1里面就行。(如果不用上面办法,panel1的大小和位置覆盖住整个winform窗体的话,会导致边框的事件捕捉不到,出现,不能拖动,不能调整大小的情况。) //------------------ 那么自定义系统边框的控件主要的方法有如下几个: 1构造方法: new CustomBorder.CustomBorderEx(this, true,new Size(100,100)); 第一个参数,要关联的winform窗体;第二个参数,表示是否可以改变窗体的 大小;第三个参数,窗体的最小宽和高值。 2属性: cbe.ClientRegion 用来得到窗体从新计算后的客户区大小。 3成员方法: cbe.InvalidateCompute();从新计算调整窗体后的边框位置和大小,客户区位置和大小。 //----------------- 这个控件的版本是v1.0版的,由于工作忙,业余时间少,可能还不够完美。相信以后的版本会好些。
c# xptable NET中最强,最全功能的表格控件 可以定制一个ListView,能够在列中插入图像、下拉框、可上下调整的数字、进度条等等。 [功能] 全定制可视化界面 支持XP风格 轻易添加再定制的控件 可隐藏列 行、列、单元可以被Disable 每个单元、列可以有Tooltip 等等…… [XPTable] XPTable包含下面的组件: 1. Table, 2. ColumnModel 和它的 Columns, 3. TableModel 和它的 Row 和 Cell, 4. Renderer 5. Editor [翻译] Mathew Hall.著XPTable - .NET ListView meets Java's JTable [简介] 由于项目需要,我需要定制一个ListView,它必须能够在列中插入图像、下拉框、可上下调整的数字、进度条等等。由于已经有了一个Java下的背景,我将简单地基于那个JTable封装。 [功能] 全定制可视化界面 支持XP风格 轻易添加再定制的控件 可隐藏列 行、列、单元可以被Disable 每个单元、列可以有Tooltip 等等…… [XPTable] XPTable包含下面的组件: 1. Table, 2. ColumnModel 和它的 Columns, 3. TableModel 和它的 Row 和 Cell, 4. Renderer 5. Editor [控件使用] 首先加载控件到Toolbox上(添加一个Item,引用XPTable.dll) 然后,拖动Table, ColumnModel 和 TableModel到Form上,设置Table的ColumnModel 和 TableModel属性,添加Column到ColumnModel,添加Row 和 Cell到TableModel.

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧