C# 多个自定义控件 怎么互不影响

creeper1133 2019-04-30 11:40:43
我在使用C#进行制作毕业设计时候遇到了点问题,希望高手帮助解答一下,谢谢!!
我制作了一个自定义控件,定义了public的变量,用来判断不同的情况,进行GDI画图
public static int ST=1,Dir=1,LR=1,Tem,X=0,Y=0;//定义道岔
public static int SD = 1, DS = 0;//双动 单锁
public static string ID,ID2,ID3,ID4;//道岔名称
public static int ZY=0;//征用标志
public static int ab;
GDI画图是放在重绘的事件里面的
protected override void OnPaint(PaintEventArgs e)
{
//这里写重绘代码
//创建Graphics对象

Graphics GPS = this.CreateGraphics();
//创建画笔对象
Pen MyPen = new Pen(Color.Blue, 2f);
Pen JY = new Pen(Color.Gray, 2f);

然后使用if 判断各种参数的情况
当选择不同的右键菜单的时候
private void 反操ToolStripMenuItem_Click(object sender, EventArgs e)
{
ST = 2;
Tem = ST;
this.Invalidate();
}
改变参数,然后重绘;



之后在窗体应用程序里面调用dll测试,使用button调用自定义控件
UserControl1 Control1 = new UserControl1();
this.Controls.Add(Control1);

但是当我生成多个的时候,改变其中一个,只要点击其他任何一个,都会跟着一起改变,是不是因为参数都是PUBLIC的原因?
如果要改变的话,要怎么才能达到效果,改变其中一个自定义控件,其余的自定义控件不会跟着一起变,尝试过把public改成privata,但是在自定义控件里面设计的时候,也包含了一些新建的form,如果改成private,这些form也都是用不了这些参数了,应该如何解决啊!!
...全文
1984 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_41256954 2019-05-03
  • 打赏
  • 举报
回复
public static int ST=1,Dir=1,LR=1,Tem,X=0,Y=0;//定义道岔 public static int SD = 1, DS = 0;//双动 单锁 public static string ID,ID2,ID3,ID4;//道岔名称 public static int ZY=0;//征用标志 public static int ab; 改为属性 如: public static int ab; 改为 private int _ab; public int ab { get{ return _ab;} set {_ab=value;}; } 使用button调用自定义控件 UserControl1 Control1 = new UserControl1(); Control1.ab=0; //这样赋值 this.Controls.Add(Control1);
红尘待落定 2019-05-03
  • 打赏
  • 举报
回复
铁路毕设???
luj_1768 2019-05-02
  • 打赏
  • 举报
回复
首先不要随便滥用static 修饰,form 间通信需要使用对象的类型操作:class A...; A a[i]; ...; &A -> objects [3] //记不清楚了,可能是可以用这个方式访问第三个对象的数据。具体情况需要查资料。
qq_42299899 2019-05-02
  • 打赏
  • 举报
回复
public static int SD = 1, DS = 0;//双动 单锁
public static string ID,ID2,ID3,ID4;//道岔名称
public static int ZY=0;//征用标志
public static int ab;
更改改属性为
如:
public static int ab;
xunbaidu2018 2019-05-02
  • 打赏
  • 举报
回复
public static int SD = 1, DS = 0;//双动 单锁
public static string ID,ID2,ID3,ID4;//道岔名称
public static int ZY=0;//征用标志
public static int ab;

改为属性

如:
public static int ab;
qq_42299899 2019-05-02
  • 打赏
  • 举报
回复
很不错哦!以前我也写过这样的
jx315425246 2019-05-01
  • 打赏
  • 举报
回复
radiobutton有特点吗吗,比如说:提取radiobutton.Text, 遍历一下窗体的控件,用Controls.GetType区别控件类型,如果满足条件等到自定义控件的初值
艾迷. 2019-05-01
  • 打赏
  • 举报
回复
绑定的数据源不能一致
疯子二哥 2019-05-01
  • 打赏
  • 举报
回复
新人多多关照 这里的CB跟积分哪里弄啊
kinglove888 2019-05-01
  • 打赏
  • 举报
回复
去掉变量的static
creeper1133 2019-05-01
  • 打赏
  • 举报
回复
引用 21 楼 jx315425246 的回复:
radiobutton有特点吗吗,比如说:提取radiobutton.Text, 遍历一下窗体的控件,用Controls.GetType区别控件类型,如果满足条件等到自定义控件的初值
就是判断 radiobutton有没有选中..
zlfzzjqlx 2019-05-01
  • 打赏
  • 举报
回复
如何彼此隔自定义控件 怎么互不影响如何如何彼此隔离自定义控件 怎么互不影响互相不影响彼此隔离互相不影响离互相不影响
creeper1133 2019-04-30
  • 打赏
  • 举报
回复
引用 18 楼 jx315425246 的回复:
[quote=引用 15 楼 weixin_44531664 的回复:]
[quote=引用 14 楼 jx315425246 的回复:]public static int ST=1,Dir=1,LR=1,Tem,X=0,Y=0;//定义道岔
public static int SD = 1, DS = 0;//双动 单锁
public static string ID,ID2,ID3,ID4;//道岔名称
public static int ZY=0;//征用标志
public static int ab;

改为属性

如:
public static int ab;
改为
private int _ab;

public int ab
{
get{ return _ab;}
set {_ab=value;};
}

使用button调用自定义控件
UserControl1 Control1 = new UserControl1();
Control1.ab=0; //这样赋值
this.Controls.Add(Control1);
因为我是在form里面,通过radiobutton给参数赋值,我做的是一个通用的控件,在窗口里面只是调用,这样的话就没法达到效果了吧[/quote]
是不是想把radiobutton的值传给控件?是在同窗体,还是不同窗体?
[/quote]对的,不是同窗,在控件的load时间里面弹出一个form,然后在form选radiobutton确定参数,传回给控件
creeper1133 2019-04-30
  • 打赏
  • 举报
回复
引用 1 楼 stherix 的回复:
对于每个对象自己的属性不能用static 否则是所有对象共用的
好的,我试一下,非常感谢!
stherix 2019-04-30
  • 打赏
  • 举报
回复
对于每个对象自己的属性不能用static 否则是所有对象共用的
jx315425246 2019-04-30
  • 打赏
  • 举报
回复
再就是你在这个控件的构造函数中写提取这几个属性的方法
jx315425246 2019-04-30
  • 打赏
  • 举报
回复
引用 15 楼 weixin_44531664 的回复:
[quote=引用 14 楼 jx315425246 的回复:]public static int ST=1,Dir=1,LR=1,Tem,X=0,Y=0;//定义道岔
public static int SD = 1, DS = 0;//双动 单锁
public static string ID,ID2,ID3,ID4;//道岔名称
public static int ZY=0;//征用标志
public static int ab;

改为属性

如:
public static int ab;
改为
private int _ab;

public int ab
{
get{ return _ab;}
set {_ab=value;};
}

使用button调用自定义控件
UserControl1 Control1 = new UserControl1();
Control1.ab=0; //这样赋值
this.Controls.Add(Control1);
因为我是在form里面,通过radiobutton给参数赋值,我做的是一个通用的控件,在窗口里面只是调用,这样的话就没法达到效果了吧[/quote]
是不是想把radiobutton的值传给控件?是在同窗体,还是不同窗体?
yilanwuyu123 2019-04-30
  • 打赏
  • 举报
回复
mark.。。。。。
大鱼> 2019-04-30
  • 打赏
  • 举报
回复
引用 12 楼 weixin_44531664 的回复:
引用 9 楼 道潯常 的回复:
使用自定义控件难道你不限New一个独立的吗?
我在调用dll文件的时候,new自定义控件的,但是new出来的每一个,相互之前会一起变
如果你确定new了新的,你就看看数据源取的是不是同一个地方,如果是的话就是你绑定的数据源问题
creeper1133 2019-04-30
  • 打赏
  • 举报
回复
引用 14 楼 jx315425246 的回复:
public static int ST=1,Dir=1,LR=1,Tem,X=0,Y=0;//定义道岔
public static int SD = 1, DS = 0;//双动 单锁
public static string ID,ID2,ID3,ID4;//道岔名称
public static int ZY=0;//征用标志
public static int ab;

改为属性

如:
public static int ab;
改为
private int _ab;

public int ab
{
get{ return _ab;}
set {_ab=value;};
}

使用button调用自定义控件
UserControl1 Control1 = new UserControl1();
Control1.ab=0; //这样赋值
this.Controls.Add(Control1);
因为我是在form里面,通过radiobutton给参数赋值,我做的是一个通用的控件,在窗口里面只是调用,这样的话就没法达到效果了吧
加载更多回复(12)
1.引言 几乎所有的Web项目开发都需要客户端验证,尤其是JavaScript的使用,JS结合Html和CSS占据了网页展现市场,不管采用什么技术我们在网页看到的东西最终生成都是这些代码所表示含义。 Web应用如此广泛,其中客户端与服务端交互时所消耗的资源及响应时间,频繁的刷新页面使得人机交互体验极为不好,而对每个页面使用客户端处理技术无疑又加大项目开发周期,脚本调试及修改维护的工作量将占用大量的开发时间,验证控件须对每个控件的元素进行设置且会对页面整体的布局带来影响,占据着页面布局空间的位置,综合考虑及项目整体风格的统一等多种因素中,总得有个折中的考虑。ChkInputs.js应运而生,使用它不需要编写多少代码,只需对验证元素简单配置一下即可,使用方便,也不会影响页面的布局,并可以精确判断客户端输入框的长度、必填、数据类型(整数型、浮点型、字母型、数字字母混合型)和下拉框等,及对需要验证的控件分组验证等。同时提供许多常用的公共函数如类似C#中Trim()方法等。 使用ChkInputs.js,会将光标定位到验证不通过的控件上,若控件上有文本同时将其文本选中高亮度显示,不会刷新页面,只有当所有验证通过时才会将结果提交到后台处理,可以使用鼠标或纯键盘及相结合的方式来操作。 2.ChkInputs.js的使用: ChkInputs.js的使用极为方便,你可以直接将自定义属性像这样添加在Web页面, 也可以在后台代码里这样添加,如在.net下.aspx.cs代码里这样写: this.TextBox1.Attributes.Add("chinese", "测试输入框");//控件名称 this.TextBox1.Attributes.Add("maxsize", "6");//控件接受的字符长度大小 this.TextBox1.Attributes.Add("nullable", "no");//不可为空,默认可为空 this.TextBox1.Attributes.Add("datatype", "number");//控件数据类型 两者代码是一样的,不过一般在后台代码(.cs)写好写,因为这样写有利于项目的维护修改。当页面的控件元素都设置好时,客户端代码通常只需这样写即可: 首先在页面head区域内定义一个这样的JS函数 <script language="javascript"> //例一,全部验证,比较常用,基本满足一般所有的验证功能 function CheckInfoAll() { return verifyAll(document.getElementById("form1")); } 互不影响,示例代码如下: //验证页面所属组group1="group1"的元素 function CheckAllGroup1() { return verifyAllByGroup1(document.getElementById("form1"),"group1") } 其它更多的使用详细代码可见附件示例代码所示。 3.ChkInputs的结构及原理: 这里先简要介绍一下文档对象模型(DOM)与树状结构,DOM可以让HTML元素与其属性,利用JS程序来控制。有两种方法将JS程序用于文档的元素:通过元素的名称和通过树状结构。这两个方法并非独立的,可能同时存在于相同的脚步中。 基本上对象是可以用脚步控制,或者可编程元素,拥有属性(Property)、事件(Event)以及方法(Method)。JS把所有网页元素、屏幕上可见的画面区域,以及浏览器的窗口都当成可编程的对象。所以,只要通过程序,你就可以控制这些对象的属性,执行其方法,以及捕捉这些事件等。 对象都有属性,有的属性就是对象本身。试想将人体当成对象,如果以分级的方式来看,人体对象有个躯干属性,而躯干有个心脏属性,心脏里还有心室属性。这些身体的零件都属于属性,而且全部都与人体对象之间有逻辑化的层次关系。 同样地,任何JavaScript这类面向对象程序语言的元素,也都是对象。这些对象都通过分级系统,作为主体的一部分。举例来说,浏览器窗口是一个对象,包含了几个文档对象,这些对象进而形成其他对象,依此类推,这个分级会变得很长。 由于面向对象的本质,JavaScript允许对象、对象的属性以及其事件都通过脚本来控制。也因为大部分网页浏览器都支持JavaScript,所以它是网页设计时最适合的客户端语言。ChkInputs.js就是通过JavaScript并结合DOM对象的自定义的属性而编写的。当使用时,ChkInputs.js会自动遍历DOM的元素,逐个检测直到所以验证完毕为止,由于事件触发在客户端响应非常及时,不会刷新页面。 该函数库提供许多函数库,就不一一列举了,这里举几个代表性的函数例子加以解释说明,先介绍一个频率用的最多的函数,如函数verifyAll,定义如下: function verifyAll(myform) {…………..} 参数myform指代验证的表单,可以比作验证树DOM的根,之后的JavaScript会遍历所有元素(elements),逐个检验,若没有设置验证则直接跳过,若有一个验证不通过,都不会将表单提交,并将光标定位到该处(focus()),若有文本同时高亮度选中该文本(select())。同样其他函数的原理也是类似。 另外,其他函数如数据长度的验证,是验证内容的实际字节的长度,即汉字两个字节英文及数字两个字节,判断依据ASCII值,计算机在设计字符存储的时候就是超过一个字节的ASCII字符都是以两个字节存放的。同时JavaScript提供了Scripting. FileSystemObject对象,GetFileSize(…)可直接取得待上传文件的字节大小,但也有限制就是客户端浏览须启用ActiveX插件,若没有启用时,会提示用户按步骤设置。CancelClientEvent()是使用事件冒泡阻止了事件的继续执行,同时设置返回值,最终成功阻止事件的继续往后执行,当在客户端触发一要回发的按钮事件是,想在程序里结束让其继续执行时,以往则不是很好处理,如Enter键,这里此方法则大显用武之地。 附有ChkInputs.js完整的源代码及实例代码。
53BK数字报刊发布系统(53BK E-Edition V5.3)免费版 免费版系列号申请网址:http://www.53bk.com/product_key 53BK手机报系统发布后台和53BK数字报刊发布系统后台共用,做到数据同步发布。使用手机报系统用户请先下载53BK数字报刊发布系统,便于后台发布数据。 免费版产品功能限制: 1.热点动画显示限制; 2.在线TTS语音读报功能限制; 3.多管理员操作限制; 4.评论管理限制; 5.前台不可除去版权链接; 6.无官方商业授权认证; 7.无技术支持、升级以及软件维护等服务。 本产品服务器环境: 1.asp.net3.5 sp1 (asp.net 2.0) 2.asp.net mvc 2.0 3.mssql数据库(支持sql2000,sql2005,sql2008) 安装注意事项: 1. 开启asp.net状态服务(重要) 方法:我的电脑-右键-管理-服务-- ASP.NET State Service由手动改为自动-重启电脑 2. 给Img目录和Pdfprocess目录以写入权限 3. 如果更改后台目录名称请更改Web.config和53BKnet.config两个目录名称地方. 4. 如果使用Win2008服务器,请在iis7.5所对应应用程序池选择经典模式 升级注意事项: 1. 最好备份全部网站数据 2. 备份数据库(重要) 4. 备份Img文件夹(重要) 5. 备份config/53bkconfig.net文件 6. 备份任何已经更改的文件 免责声明: 本产品免费版仅供研究、学习和试用。 产品介绍: 53BK数字报刊系统是报社、杂志社、政府、学校、企业发布数字报纸(数字杂志)的首选新型数字报刊发布平台。本产品为B/S应用程序。 53BK多媒体数字报纸(杂志)系统,产品代号为53BK E-Edition(以下简称53BK E-Edition),诞生于2008年,是asp.net技术中最为强大的多媒体数字报纸系统。本系统基于B/S结构和MVC架构创建,它将现行互联网应用功能与传统报纸媒体(杂志)及大型数据库系统相结合,将报纸变为网络的、多媒体的形式,为读者展现更为生动的信息。 53BK数字报(杂志)系统用微软最新ASP.NET MVC技术搭建,开发历时四年,是现在所有数字报系统中运行最快,占用资源最小的多媒体报纸(杂志)发布平台,它后台操作方便,发布每期报纸省时省力,安全性高,扩展性强,企业开发人员容易定制更改模板,维护方便,利于扩展与维护。它是为大系统架构而设计的。 53BK E-Edtition主要实现以下功能: 1. 实现报刊阅读. 2. 实现报刊搜索,快速定位报刊内容. 3. 实现标题导航系统功能. 4. 实现日历导航系统功能. 5. 电子报刊内容电子化,实现每一篇文章的热点显示、动画效果. 6. 原版PDF阅读下载. 7. 实现报刊评论、文章评论. 8. 实现在线下载、在线订阅、在线投稿、友情链接管理功能 9. 实现"杂志"与"报纸"类型切换功能 10. 实现自定义模板、管理模板功能 11. 实现在线TTS语音读报功能 12. 前后台用户体验好,后台发布报纸方便,政府、企业、高校、报社、杂志社报刊数字化成本低。 自定义模板说明: 本系统采用MVC模式开发,系统分层清晰,各层开发时互不影响: 1. 企业开发或设计人员只要会Dreamweaver就可以更改和定制界面,而无须会C#和asp.net知识。(编辑aspx页面时在Dreamweaver中所见即所得.同时可以在运行时保存为http://localhost/view.html静态页面来浏览调试) 2. 企业开发人员更改模板时建议用VS2010打开paperweb目录(可以新建一个WEB应用程序项目,再手动添加我们程序文件至项目中),可用Dreamweaver更新界面和CSS. 3. View层页面中ViewData和Model数据共享,便于前台人员灵活布局页面。 1) 控件页面(.ascx)中ViewData和Model数据在父页面(.aspx)也可调用. 2) 反过来父页面ViewData和Model数据也可在引用的控件页面中调用. 安装说明:http://www.53bk.com/news/detail/v381.html 简易安装说明:http://www.53bk.com/news/detail/v630.html 操作说明:http://www.53bk.com/news/detail/v577.html 模板修改说明:http://www.53bk.com/news/detail/v627.html 利用PDF发布报纸:http://www.53bk.com/news/detail/v747.html 更新日期:2013.10.21 官方网站:http://www.53bk.com

110,538

社区成员

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

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

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