C# 如何在派生对象上强制属性值?
我想创建一个从ListView对象派生的类C# 如何在派生对象上强制属性值?,c#,winforms,listview,windows-forms-designer,C#,Winforms,Listview,Windows Forms Designer,我想创建一个从ListView对象派生的类 class MyListView : ListView { } 我尝试了一些方法来强制默认的视图属性,但是在设计期间,我似乎没有做任何事情对对象的属性有任何影响 我尝试过的一些事情是 public MyListView():base() { base.View = View.Tile; } [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [D
class MyListView : ListView
{
}
我尝试了一些方法来强制默认的视图
属性,但是在设计期间,我似乎没有做任何事情对对象的属性有任何影响
我尝试过的一些事情是
public MyListView():base()
{
base.View = View.Tile;
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[DefaultValue(View.Tile)]
new public View View
{
get {
return base.View;
}
set {
base.View = value;
}
}
protected override void InitLayout()
{
base.InitLayout();
base.View = View.Tile;
}
所以我的问题是,我如何强制一个值始终保持在
视图
属性上,或者如何为它设置默认值并在新类中隐藏该属性 在正常情况下,重写属性并将所需的值放入getter和setter就足够了。但是ListView
的View
属性是一个特例。ListViewDesigner
向设计器添加阴影View
属性
如果您查看ListViewDesigner
类,您将看到,无论您的new
View属性如何,设计器都使用基类的View
属性:((ListView)base.Component)。View=value代码>
如何强制列表视图
在设计时使用特定视图?
您可以使用可浏览(false)
装饰新的视图
属性。这样,它不会在属性网格中显示视图
属性,而是在控件操作列表中显示该属性
要删除该操作列表,可以为控件注册不同的设计器
,例如ControlDesigner
:
[Designer(typeof(ControlDesigner))]
public class MyListView : ListView
{
public MyListView()
{
this.View = System.Windows.Forms.View.Tile;
}
[Browsable(false)]
new public View View
{
get
{
return System.Windows.Forms.View.Tile;
}
set
{
base.View = System.Windows.Forms.View.Tile;
}
}
}
作为另一个选项,您可以获取控件的设计器实例并清除其操作列表,而不是为控件注册新设计器
不要忘记添加对System.Design.dll的引用,并使用System.Windows.Forms.Design添加代码>不错!谢谢您的示例。好的,那么ControlDesigner
来自哪里?添加对System.Design.dll
的引用,而不是使用System.Windows.Forms.Design添加代码>