Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在派生对象上强制属性值?_C#_Winforms_Listview_Windows Forms Designer - Fatal编程技术网

C# 如何在派生对象上强制属性值?

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

我想创建一个从ListView对象派生的类

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添加