怎么不让winform设计器自动修改属性?

twtyypmb123 2016-05-23 06:19:42
为了省事和方便,准备在工程中写一个基础窗体,规定大小,背景,字体等等一系列属性,其他窗体继承这一个基础窗体就行了,方便统一管理,现在的方法是直接去子类的设计中某行的代码删掉(例如,背景图属性),然后就可以继承基础窗体的属性了,但是有时候打开设计器这些属性又被自动修I改了,怎么把这些固定下来,不被自动修改,但也不是不能修改
...全文
527 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
twtyypmb123 2016-05-24
  • 打赏
  • 举报
回复
引用 9 楼 zhi_ai_yaya 的回复:
[quote=引用 7 楼 xiaoxin3357 的回复:] 最简单的就是写一个公共的窗体然后每个窗体继承那个公共窗体
引用 6 楼 x3230835 的回复:
就拿窗体大小为例,假设我的基类是CommonForm,已经设置了大小1024*768,我新创建一个窗体Form1,窗体大小就会被默认设置为300*300,然后我在From1中把它的父类改成CommonForm,然后再到Form1的design.cs把大小的那句话删除了,Form1的大小就变为了1024*768,但是当某个时候再打开Form1,就会自动在design.cs把设置大小的语句加上(可能是检测到没有设置大小的语句而设计器自动加的),然后就没有从CommonForm中继承大小
楼猪操作步骤不对。既然要继承窗口,就创建时直接继承,干嘛要先创建再继承。[/quote]打开方式不对么?楼上是按照创建“继承的窗体”来的,还是有楼上的问题
twtyypmb123 2016-05-24
  • 打赏
  • 举报
回复
引用 8 楼 daixf_csdn 的回复:
[quote=引用 6 楼 x3230835 的回复:]
[quote=引用 5 楼 daixf_csdn 的回复:]
[quote=引用 3 楼 x3230835 的回复:]



[quote=引用 2 楼 daixf_csdn 的回复:]
在基类Form中,把页面所有控件的修饰符改为protected。最方便的无遗漏的修改,就是直接修改Designer.cs

你可能没理解到我的意思,在设计器打开子类的时候,会在这里面自动生成一些属性赋值语句,但是这些属性应该是继承基础类的而不是重新赋值[/quote]
这应该和你的派生类中,UI的布局模式有关。我做过很复杂的UI继承,也没碰到过这种情况。
你或者可以把全部的Designer.cs贴上来看看[/quote]
就拿窗体大小为例,假设我的基类是CommonForm,已经设置了大小1024*768,我新创建一个窗体Form1,窗体大小就会被默认设置为300*300,然后我在From1中把它的父类改成CommonForm,然后再到Form1的design.cs把大小的那句话删除了,Form1的大小就变为了1024*768,但是当某个时候再打开Form1,就会自动在design.cs把设置大小的语句加上(可能是检测到没有设置大小的语句而设计器自动加的),然后就没有从CommonForm中继承大小[/quote]
我做了个简单测试,并没有发生你说的情况,我从派生窗体里删除的代码也很简单,就一句话:
this.ClientSize = new System.Drawing.Size(371, 232);
就能恢复成基类窗体的大小,而且反复打开派生窗体,都没发生窗体大小变化的情况。

所以我猜测你的情况是种特例,是和你UI设计的某些特殊性有关系,你不贴代码别人也分析不出来[/quote]
我的代码很简单,不是我不帖。。。。
---------------------
基类
private void InitializeComponent()
{
this.SuspendLayout();
//
// CommFrm
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.SystemColors.Control;
this.BackgroundImage = global::Cy.Medical.View.Properties.Resources.bg;
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.ClientSize = new System.Drawing.Size(1280, 1024);
this.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "CommFrm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.CommFrm_FormClosing);
this.ResumeLayout(false);

}

--------
Form2,空的Form,只继承基类
public partial class Form2 : CommFrm
{
public Form2()
{
InitializeComponent();
}
}


然后可以看到红色标记里面基类有设置,但是没有继承过来,Form2的构造函数加或不加base()都一样
我叫小菜菜 2016-05-24
  • 打赏
  • 举报
回复
引用 7 楼 xiaoxin3357 的回复:
最简单的就是写一个公共的窗体然后每个窗体继承那个公共窗体
引用 6 楼 x3230835 的回复:
就拿窗体大小为例,假设我的基类是CommonForm,已经设置了大小1024*768,我新创建一个窗体Form1,窗体大小就会被默认设置为300*300,然后我在From1中把它的父类改成CommonForm,然后再到Form1的design.cs把大小的那句话删除了,Form1的大小就变为了1024*768,但是当某个时候再打开Form1,就会自动在design.cs把设置大小的语句加上(可能是检测到没有设置大小的语句而设计器自动加的),然后就没有从CommonForm中继承大小
楼猪操作步骤不对。既然要继承窗口,就创建时直接继承,干嘛要先创建再继承。
圣殿骑士18 2016-05-24
  • 打赏
  • 举报
回复
引用 6 楼 x3230835 的回复:
[quote=引用 5 楼 daixf_csdn 的回复:] [quote=引用 3 楼 x3230835 的回复:] [quote=引用 2 楼 daixf_csdn 的回复:] 在基类Form中,把页面所有控件的修饰符改为protected。最方便的无遗漏的修改,就是直接修改Designer.cs
你可能没理解到我的意思,在设计器打开子类的时候,会在这里面自动生成一些属性赋值语句,但是这些属性应该是继承基础类的而不是重新赋值[/quote] 这应该和你的派生类中,UI的布局模式有关。我做过很复杂的UI继承,也没碰到过这种情况。 你或者可以把全部的Designer.cs贴上来看看[/quote] 就拿窗体大小为例,假设我的基类是CommonForm,已经设置了大小1024*768,我新创建一个窗体Form1,窗体大小就会被默认设置为300*300,然后我在From1中把它的父类改成CommonForm,然后再到Form1的design.cs把大小的那句话删除了,Form1的大小就变为了1024*768,但是当某个时候再打开Form1,就会自动在design.cs把设置大小的语句加上(可能是检测到没有设置大小的语句而设计器自动加的),然后就没有从CommonForm中继承大小[/quote] 我做了个简单测试,并没有发生你说的情况,我从派生窗体里删除的代码也很简单,就一句话: this.ClientSize = new System.Drawing.Size(371, 232); 就能恢复成基类窗体的大小,而且反复打开派生窗体,都没发生窗体大小变化的情况。 所以我猜测你的情况是种特例,是和你UI设计的某些特殊性有关系,你不贴代码别人也分析不出来
万婷 2016-05-24
  • 打赏
  • 举报
回复
最简单的就是写一个公共的窗体然后每个窗体继承那个公共窗体
twtyypmb123 2016-05-24
  • 打赏
  • 举报
回复
引用 5 楼 daixf_csdn 的回复:
[quote=引用 3 楼 x3230835 的回复:] [quote=引用 2 楼 daixf_csdn 的回复:] 在基类Form中,把页面所有控件的修饰符改为protected。最方便的无遗漏的修改,就是直接修改Designer.cs
你可能没理解到我的意思,在设计器打开子类的时候,会在这里面自动生成一些属性赋值语句,但是这些属性应该是继承基础类的而不是重新赋值[/quote] 这应该和你的派生类中,UI的布局模式有关。我做过很复杂的UI继承,也没碰到过这种情况。 你或者可以把全部的Designer.cs贴上来看看[/quote] 就拿窗体大小为例,假设我的基类是CommonForm,已经设置了大小1024*768,我新创建一个窗体Form1,窗体大小就会被默认设置为300*300,然后我在From1中把它的父类改成CommonForm,然后再到Form1的design.cs把大小的那句话删除了,Form1的大小就变为了1024*768,但是当某个时候再打开Form1,就会自动在design.cs把设置大小的语句加上(可能是检测到没有设置大小的语句而设计器自动加的),然后就没有从CommonForm中继承大小
圣殿骑士18 2016-05-24
  • 打赏
  • 举报
回复
引用 3 楼 x3230835 的回复:
[quote=引用 2 楼 daixf_csdn 的回复:] 在基类Form中,把页面所有控件的修饰符改为protected。最方便的无遗漏的修改,就是直接修改Designer.cs
你可能没理解到我的意思,在设计器打开子类的时候,会在这里面自动生成一些属性赋值语句,但是这些属性应该是继承基础类的而不是重新赋值[/quote] 这应该和你的派生类中,UI的布局模式有关。我做过很复杂的UI继承,也没碰到过这种情况。 你或者可以把全部的Designer.cs贴上来看看
Dobzhansky 2016-05-24
  • 打赏
  • 举报
回复
设置默认值, 以及是否序列化
twtyypmb123 2016-05-24
  • 打赏
  • 举报
回复



引用 2 楼 daixf_csdn 的回复:
在基类Form中,把页面所有控件的修饰符改为protected。最方便的无遗漏的修改,就是直接修改Designer.cs

你可能没理解到我的意思,在设计器打开子类的时候,会在这里面自动生成一些属性赋值语句,但是这些属性应该是继承基础类的而不是重新赋值
Dobzhansky 2016-05-24
  • 打赏
  • 举报
回复
class BaseForm : System.Windows.Forms.Form
{
protected BaseForm()
{
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
}

public bool ShouldSerializeFormBorderStyle()
{
return this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.None;
}
}

这样,子类不是 None 时,才生成代码。
圣殿骑士18 2016-05-24
  • 打赏
  • 举报
回复
引用 14 楼 x3230835 的回复:
[quote=引用 12 楼 daixf_csdn 的回复:] 楼主,我尝试了一下你说的,有点不一样。 虽然如你所说,我把基类的FormBorderStyle 改为: this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 然后发现派生类窗体打开时,仍然是FixedSingle,但是: 1、FixedSingle并没有在派生类的代码中被指定,也就是说派生类代码并没有自己产生代码 2、如果此时,你重新编译整个项目,你会发现派生类的FormBorderStyle也变成了None,UI也变化了。 但是,如果你修改了基类的窗体属性后,没有立即编译整个项目,就对派生类进行了修改,比如添加了控件,这种问题就 通过vs自动生成的代码被固化下来了,也就是你所描述的问题。 也就是说,vs的问题是,vs在派生类UI元素的属性展示上,有点小问题。但这可以通过一些技巧避免的。为什么会产生 这种问题,也肯定是可以解释的,有可能不是bug,只是功能不完善,虽然我现在还没想到
还真是这样,辛苦了兄弟,感谢一起探讨,另外最后个问题,你的头像的番号多少?[/quote] 什么是番号?
twtyypmb123 2016-05-24
  • 打赏
  • 举报
回复
引用 12 楼 daixf_csdn 的回复:
楼主,我尝试了一下你说的,有点不一样。 虽然如你所说,我把基类的FormBorderStyle 改为: this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 然后发现派生类窗体打开时,仍然是FixedSingle,但是: 1、FixedSingle并没有在派生类的代码中被指定,也就是说派生类代码并没有自己产生代码 2、如果此时,你重新编译整个项目,你会发现派生类的FormBorderStyle也变成了None,UI也变化了。 但是,如果你修改了基类的窗体属性后,没有立即编译整个项目,就对派生类进行了修改,比如添加了控件,这种问题就 通过vs自动生成的代码被固化下来了,也就是你所描述的问题。 也就是说,vs的问题是,vs在派生类UI元素的属性展示上,有点小问题。但这可以通过一些技巧避免的。为什么会产生 这种问题,也肯定是可以解释的,有可能不是bug,只是功能不完善,虽然我现在还没想到
还真是这样,辛苦了兄弟,感谢一起探讨,另外最后个问题,你的头像的番号多少?
风吹腚腚凉 2016-05-24
  • 打赏
  • 举报
回复
你是不是在构造函数里面对属性进行处理了? 如果是的话神仙也没招!
圣殿骑士18 2016-05-24
  • 打赏
  • 举报
回复
楼主,我尝试了一下你说的,有点不一样。 虽然如你所说,我把基类的FormBorderStyle 改为: this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 然后发现派生类窗体打开时,仍然是FixedSingle,但是: 1、FixedSingle并没有在派生类的代码中被指定,也就是说派生类代码并没有自己产生代码 2、如果此时,你重新编译整个项目,你会发现派生类的FormBorderStyle也变成了None,UI也变化了。 但是,如果你修改了基类的窗体属性后,没有立即编译整个项目,就对派生类进行了修改,比如添加了控件,这种问题就 通过vs自动生成的代码被固化下来了,也就是你所描述的问题。 也就是说,vs的问题是,vs在派生类UI元素的属性展示上,有点小问题。但这可以通过一些技巧避免的。为什么会产生 这种问题,也肯定是可以解释的,有可能不是bug,只是功能不完善,虽然我现在还没想到
圣殿骑士18 2016-05-24
  • 打赏
  • 举报
回复
在基类Form中,把页面所有控件的修饰符改为protected。最方便的无遗漏的修改,就是直接修改Designer.cs
南天空 2016-05-23
  • 打赏
  • 举报
回复
额你的想法。。。不太符合winform的思想,winform可编辑性强,设计简单,要是按你的想法又想要可编辑,又想固定一些属性变,那你直接在窗体的构造函数中定义属性值好了。
一、软件简介 CodePlus是一款为C#数据库程序员设计自动“笨代码”生成,CodePlus生成的代码基于三层结构设计思想,主要实现数据库中对表、视图的选择(select)、修改(update)、删除(delete)、新建(Insert)和存在(Exist)的存储过程的自动生成;实现在c#中对应数据库中表的基类代码的自动生成,包括生成属性、添加、修改、删除、选择(返回sqldatareader或arraylist)、存在性等基础代码片断,使程序员可以节省大量机械录入的时间,而将精力集中于核心商业逻辑层的开发。 CodePlus同时又是一款简单的代码片断管理程序,您可以很方便地管理自己的日常常用代码,同时也可以从网络上下载他人共享出来的代码。 二、软件使用者 使用C#语言的数据库开发人员,包括从事asp.net或winform开发的程序员。 三、软件使用环境 CodePlus由C#开发实现,所以需要framework支持。正常使用软件需要.net framework 1.0或以上。数据库为SqlServer。 四、版权说明 CodePlus软件由成都易为教育软件工作室设计和维护,易为工作室拥有独立版权,任何个人或组织不得对本软件进行反编译或修改本软件的任何一部分。 五、关于我们 成都易为教育软件工作室。 软件支持网站:http://www.codeplus.net 地址:西南交通大学,四川成都。 联系电话:028-87600309
没法下载,到这里折腾一把试试。 本文由abc2253130贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 C#(WINFORM)学习 一、 C#基础 基础 类型和变量 类型和变量 类型 C# 支持两种类型:“值类型”和“引用类型”。值类型包括简单类型(如 char、int 和 float 等)、枚举类型和结构类型。引用类型包括类 (Class)类 型、接口类型、委托类型和数组类型。 变量的类型声明 变量的类型声明 每个变量必须预先声明其类型。如 int a; int b = 100; float j = 4.5; string s1; 用 object 可以表示所有的类型。 预定义类型 下表列出了预定义类型,并说明如何使用。 类型 object 说明 所有其他类型的最终 基类型 字符串类型; 字符串是 Unicode 字符序列 8 位有符号整型 16 位有符号整型 32 位有符号整型 64 位有符号整型 示例 object o = null; 范围 string sbyte short int long string s = "hello"; sbyte val = 12; short val = 12; int val = 12; long val1 = 12; -128 到 127 -32,768 到 32,767 -2,147,483,648 2,147,483,647 -9,223,372,036,854,775,808 到 第1页 C#(WINFORM)学习 long val2 = 34L; 到 9,223,372,036,854,775,807 byte ushort 8 位无符号整型 16 位无符号整型 byte val1 = 12; ushort val1 = 12; uint val1 = 12; uint 32 位无符号整型 uint val2 = 34U; ulong val1 = 12; ulong val2 = 34U; ulong 64 位无符号整型 ulong val3 = 56L; ulong val4 = 78UL; float 单精度浮点型 float val = 1.23F;7 位 double val1 = 1.23; double 双精度浮点型 double val2 = ±5.0 × 10?324 ±1.7 × 10 308 0 到 255 0 到 65,535 0 到 4,294,967,295 0 到 18,446,744,073,709,551,615 ±1.5 × 10?45 ±3.4 × 10 38 到 到 4.56D;15-16 布尔型;bool 值或为 真或为假 字符类型;char 值是 一个 Unicode 字符 精确的小数类型, 具有 28 个有效数字 bool val1 = true; bool val2 = false; char val = 'h'; decimal val = bool char decimal DateTime ±1.0 × 10?28 ±7.9 × 10 28 到 1.23M;28-29 变量转换 简单转换: float f = 100.1234f; 可以用括号转换: short s = (short)f 也可以利用 Convert 方法来转换: string s1; s1=Convert.ToString(a); MessageBox.Show(s1); 常用 Convert 方法有: 第2页 C#(WINFORM)学习 C# Convert.ToBoolean Convert.ToByte Convert.ToChar Convert.ToDateTime Convert.ToDecimal Convert.ToDouble Convert.ToInt16 Convert.ToInt32 Convert.ToInt64 Convert.ToSByte Convert.ToSingle Convert.ToString Convert.ToUInt16 Convert.ToUInt32 Convert.ToUInt64 备注 Math 类 常用科学计算方法: C# Math.Abs Math.Sqrt Math.Ro
ReportMachine for delphi xe5  Report Machine目前主要能做的:   1、支持屏幕打印,控制方法多样,可以打印全部rxlib控件 全部InfoPower控件,TDBGrid,TStringGrid,TImage,TEdit等,TDBGridEh,f1book, TDecisionGrid等等众多控件。(例子1,例子2,例子3,例子4,例子5)   2、支持最终用户设计修改报表,只需连接相关的数据源,指出数据的位 置(设置报表样式),无论是主从表,子报表,套表,都可迅速生成。开发 一个报表只需几分钟的时间。   3、报表样式可以保存为rmf格式,下次可通过读入使用(配合SQL脚本就可以生成 报表)。并可以把带数据的报表保存为rmp格式,在任何机上都可以浏览、打印, 而不需要数据库。   4、生成后的报表支持修改,包括字体的设置,边框的设置,修改内容等。   5、报表编辑内自带ado,bde,ibx,Diamond dao,dbisam等数据访问控件,可以 通过这些控件开发独立的报表制作工具。其使用方法和delphi中的控件是一样的。   6、完全、自由自定义页面、边距、字体,标题和页眉页脚,并可以在自认合适的 地方插入函数来实现当前日期,页合计,总合计等功能,合计字段可以放在页头,分 组头,并支持条件合计,对分组合计,分页合计,总计等只需简单地设置属性即可。   7、完全支持D5--D7,BCB5--BCB6。   8、报表中可以在自认合适的事件(on beforeprint,on afterprint等)中加入程 序脚本,以控制、或实现更复杂的打印效果。   9、更新迅速,可根据使用人员与用户的意见,不断的加入新的功能。   10、多种格式转换,可以把做出的报表转换为html,xls,pdf,bmp,jpeg等等格式。   11、自动对超长记录折行,超长的内容也会自动折行,中文换行不会乱码。   12、首家支持缩放打印功能,可以根据打印时选择的纸张自动缩放报表。   13、首家支持即打即停.   14、首家提供类似excel的报表设计,给你足够灵活方表的报表设计方式。   15、首家提供双报表设计(第一种,第二种),满足所有的需求。   16、更是提供类似于ObjectPascal的script,实现特殊功能。   17、首家提供web,IntraWeb中的报表解决方案。   18、首家提供报表压缩处理,占用内存更少,生成报表速度更快。   19、首家提供合并单元格功能,更加适应处理复杂的中文报表。   20、自动填空行,每页打印数量等细节处理更完善。 二、ReportMachine版本简介: 1、VCL版:这是ReportMachine基础版本,一般以全部源码形式提供给注册用户,可以用在Delphi5-Delphi 2009,C++ Builder5.0-C++ Builder 2009开发环境中。 2、com版:是个单独的ocx文件(RMReport.ocx),是用Delphi 7.0及以上版本开发的,是对VCL版ReportMachine控件的再封装,具有VCL版的全部功能,安装、使用上更容易些,com版的ReportMachine可以用在vb,vc,vfp,pb等开发语言中。一般以ocx无源码形式提供,也可以有全部源码(包括vcl源码+ocx源码) 3、com版for .net WinForm:跟com版一样,但多了个.net下的数据库接口程序,此版可以用在vb.net,c#中,做winform程序的报表工具。一般以ocx无源码形式提供,也可以有全部源码。 4、webreport版:是对ReportMachine vcl版的再开发,用在asp,asp.net,jsp做的b/s架构的程序中,为客户端ie提供报表预览、打印、导出功能,webreport包括2部分:服务端报表引擎(在asp,asp.net,jsp都能用,webreport对上述3中语言都开发了报表引擎)、客户端ie浏览ActiveX插件(ActiveX插件只有一个,可以自动感知服务端报表引擎版本)。webreport版不具备设计报表模版功能,需要用单独的报表设计程序在服务设计报表,也可以用本站提供的RMDesigner。 5、webreport for IntraWeb版:跟webreport版功能一样,是专为Delphi中的IntraWeb vcl提供的报表插件。 6、RMDesigner:是用vcl版ReportMachine开发的一个报表设计,可以用来为webreport提供报表设计功能。
请登陆到http://52csharp.com本工具是本网站专用的sql小工具。1.直接打开生成项目下面sql文件夹中的sql脚本文件2.填写数据库服务名称3.填写数据库用户名密码4.测试数据连接合法性5.生成数据库同时生成db.ini文件。6.把db.ini文件拷贝到编译完成的应用程序下面7.在web里面要引用 本网站提供在线通过输入数据库结构自动生成代码, 生成的代码基于基于面向对象的思想和三层架构设计,融入了工厂模式,反射机制等等一些思想。采用 Model + DAL + BLL + Web +WinForm设计,主要实现在 C# 中对应数据库中表的基类代码和Web界面、WinForm界面的自动生成,包括生成属性、添加、修改、删除、查询、存在性、 Model 类构造等基础代码片断,使程序员可以节省大量机械录入的时间和重复劳动,而将精力集中于核心业务逻辑的开发。 同时提供方便的数据库查询管理,SQL脚本生成,存储过程生成,数据库文档生成,并直接生成VS2005的项目文件,可以直接用VS2005打开,同时根据本网站提供的辅助工具可以根据生成的SQL脚本文件直接生成SQL2005数据库,您可以很方便地进行项目开发。详细功能说明 1.自动代码生成 。 可以生成三层架构的代码。代码生成效率很高。 它可以生成:实体Model,DAL(数据访问层),IDAL(接口层),DALFactory(类工厂),BLL(业务逻辑层),WEB层等多层的代码,可以节省大量的时间来做业务逻辑的代码,那些重复的代码就交给它去做吧,1分钟生成一个架构所有的基本代码。我感觉有了它开发项目的效率简直好轻松2. 数据库生成 。 通过runsql.exe工具可以直接操作SQL脚本文件直接生成数据库。3. 自动生成存储过程和SQL脚本 。4. 项目文件直接生成。

110,571

社区成员

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

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

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