问题描述
我在编写一个自定义控件,比如继承自PIcturebox。在控件中,主要是我内部使用了picturebox的功能,我希望把其他picturebox自带的公开属性和方法隐藏起来,不让用户看到这些。好方便用户使用。我知道可以privateoverwite同名的方法,但是,我几乎想隐藏所有的picturebox自带的公开属性和方法。如果那么写的话会很麻烦。请高手指教,有好的方法么?
解决方案
解决方案二:
仔细想想情况A:继承picturebox,但只实现很少一部分picturebox的功能剩下的全部要屏蔽掉...情况B:重新写带这些功能的控件,和picturebox没有关系哪一种比较合理?
解决方案三:
1、将picturebox设为private2、定义一些属性,用于公开picturebox的某些属性(通过get访问器)
解决方案四:
赞同2楼。完全没必要去考虑屏蔽。重写一个控件显然更合理
解决方案五:
不要继承picturebox而是在类中实例化一个picturebox然后把picturebox的部分属性暴漏给用户
解决方案六:
你的初衷本来就不是继承,不要蓝用继承这个词儿。
解决方案七:
蓝用->滥用继承是一个设计术语,是有着功能的。继承的目的不是有些人少写几行代码,根本就不是。如果你只想少写几行代码,为什么不组合委派呢?所以先要防止邯郸学步,然后可以学好轻盈的舞蹈。
解决方案八:
classmycalss{privateintnum;publicintNum{get{returnnum;}set{num=value;}}privatestringname;publicstringName{get{returnname;}set{name=value;}}}classtestclass{privatemycalss_myclass;publicintNum{get{return_myclass.Num;}set{_myclass.Num=value;}}}
解决方案九:
感谢楼上的回复。看来是我问题描述的不够清楚。我把问题详细说明一下:我是想写一个WinForm窗体控件,希望暴露给用户的是一些自定义的属性方法,而不显示其他用户用不到的函数。用户需要做的是更改这些属性方法。该控件与其他组件一起完成相应功能。控件内使用了Picturebox的一部分功能,例如前景色,背景色,背景图片,绘制文字,响应鼠标消息等。我又扩展一部分功能,通过各种逻辑关系操作上述内容。因为是窗体上的控件,所以应该继承自Control吧。即使是继承自Control也是一样的问题。用户实例化控件后,控件会带着Control上的各种公开属性和方法,和继承自Picturebox并无太大区别。用户需要在窗体上拖放控件位置和大小,这就涉及到窗体设计器等相关的部分。如果我从头自己写这样的控件,岂不是重复造轮子?我的意思是无论这个控件继承自Control、UserControl还是Picturebox,都会暴露出用户用不到的公开方法属性。另外这是个嵌入式系统,所以我希望尽量高效的方式来实现。楼上诸位的意思是让我什么都不继承,从头写这个控件么?还是有更好方法?请各位不吝赐教。
解决方案十:
你这个控件是给开发人员用的吧,如果你不设置你自定义的属性之类的东东,那么在VS里面这些默认都是在自定义一栏里面的,根本不会和默认Control的部分冲突
解决方案十一:
不用继承方式实现,用聚合方式实现
解决方案十二:
classMyPic{privatePictureBoxpic=newPic;}这样你想让外面看到什么就能看到什么
解决方案十三:
隐藏实现起来肯定是有难度的..你可以考虑在用户修改这些"多余"的属性时提示他们不能修改并取消操作...怎么想都很麻烦...ps:你是想通过反射来显示吗?那在遍历的时候进行筛选就可以了啊..
解决方案十四:
简单来说只要是一个控件(在windows被称之为窗口)那么你说的那些属性必然纯在因为那些是作为一个控件的基本要求windows系统就是这样就算你在代码层面上让他的某个属性“消失”也并不能改变系统为这个控件分配对应的空间就算是你从头写也是一个吊样你真要达到你的目的那你就别使用控件直接在窗体上绘制而这样的做法就是他不再是一个窗口(控件)而是一个类那么vs也不会给他窗体设计器的界面也就是说你也没有办法通过属性窗口去修改属性什么的这并不是一个简单的做法我实在是不明白有那些多余的属性怎么了难道说你窗体上多一个按钮和少一个按钮会让你的程序有很大的效率变化?。。我只能说这仿佛是在逗我说不定你程序某些地方代码所产生的空间都比一个control大如果说windows仅仅是因为一个control有太多无用(不是无用只是你没用到)的属性而导致效率缓慢连一个系统最基本的ui展示都做不好的话那这个系统估计没法用了