简体   繁体   English

继承的控件无法在Form Designer生成的代码中生成代码

[英]Inherited control not generate code in form designer generated code

I am trying to inherit DevExpress PictureEdit (but, I think this problem is not DevExpress specific). 我正在尝试继承DevExpress PictureEdit(但是,我认为此问题并非特定于DevExpress)。 I add some properties to it. 我添加一些属性。

public class RepositoryItemFotoEdit:RepositoryItemPictureEdit
{
    private Size _imageSize;
    public Size ImageSize
    { 
        get
        {
            return _imageSize;
        } 
        set 
        { 
            _imageSize = value;
            OnPropertiesChanged();
        }
    }

    [DefaultValue(InterpolationMode.HighQualityBicubic)]
    public new InterpolationMode PictureInterpolationMode
    {
        get { return base.PictureInterpolationMode; }
        set { base.PictureInterpolationMode = value; }
    }

    [DefaultValue(PictureSizeMode.Zoom)]
    public new PictureSizeMode SizeMode
    {
        get { return base.SizeMode; }
        set { base.SizeMode = value; }
    }        

    public RepositoryItemFotoEdit()
    {
        PictureInterpolationMode = InterpolationMode.HighQualityBicubic;
        SizeMode = PictureSizeMode.Zoom;            
    }
}



public sealed class FotoEdit : PictureEdit
{
    private FotoMenu _menu;

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            if (_menu != null)
                _menu.Dispose();
        }
        base.Dispose(disposing);
    }

    public override Image Image
    {
        get
        {
             return base.Image;
        }
        set
        {
            if(Properties.ImageSize.Width == 0 || Properties.ImageSize.Height == 0 || value == null)
                base.Image = value;
            else
            {
                var heightProp = (double) Properties.ImageSize.Height/value.Height;
                var widthProp = (double) Properties.ImageSize.Width/value.Width;
                var prop = heightProp < widthProp ? heightProp : widthProp;

                base.Image = ImageHelper.ResizeImage(value, (int)(prop*value.Width), (int)(prop*value.Height));
            }
        }
    }

    public new RepositoryItemFotoEdit Properties
    {
        get { return base.Properties as RepositoryItemFotoEdit; }
    }

    protected override PictureMenu Menu
    {
        get { return _menu ?? (_menu = new FotoMenu(this)); }
    }

    protected override EditorClassInfo EditorClassInfo
    {
        get
        {
            var beci = base.EditorClassInfo;
            var eci = new EditorClassInfo("FotoEdit", typeof (FotoEdit), typeof (RepositoryItemFotoEdit),
                                          beci.ViewInfoType, beci.Painter, beci.DesignTimeVisible);
            return eci;
        }
    }
}

Property ImageSize appear on PropertyEditor. 属性ImageSize出现在PropertyEditor上。

在此处输入图片说明 .

But, if I change it to some value (eg 150; 150), it is not generate code in form designer generated code. 但是,如果我将其更改为某个值(例如150; 150),则它不是在表单设计器生成的代码中生成的代码。

Note that ImageSize is inside Properties property. 请注意, ImageSizeProperties属性内。

// 
// fotoEdit1
// 
this.fotoEdit1.Cursor = System.Windows.Forms.Cursors.Default;
this.fotoEdit1.Location = new System.Drawing.Point(583, 370);
this.fotoEdit1.Name = "fotoEdit1";
this.fotoEdit1.Size = new System.Drawing.Size(150, 150);
this.fotoEdit1.TabIndex = 18;

That will result in ImageSize value revert back to 0;0. 这将导致ImageSize值恢复为0; 0。 How to solve this problem? 如何解决这个问题呢?

EDIT : 编辑:

I tried to add [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] to Properties property as sugested by someone (I forgot his name and he deleted his answer). 我试图将[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]添加到Properties属性中,因为有人对其提出了建议(我忘记了他的名字,他删除了答案)。 It result to properties inside Properties property appear in designer generated code except those who overriden. 结果导致Properties属性出现在设计器生成的代码中,但那些被覆盖的Properties除外。

在此处输入图片说明

My designer generated code look like this: 我的设计师生成的代码如下所示:

        // 
        // fotoEdit1
        // 
        this.fotoEdit1.Cursor = System.Windows.Forms.Cursors.Default;
        this.fotoEdit1.Location = new System.Drawing.Point(583, 370);
        this.fotoEdit1.Name = "fotoEdit1";
        this.fotoEdit1.Properties.Padding = new System.Windows.Forms.Padding(5, 2, 0, 0);
        this.fotoEdit1.Size = new System.Drawing.Size(150, 150);
        this.fotoEdit1.TabIndex = 18;

Note that Properties.Padding appear, but Properties.ImageSize not. 需要注意的是Properties.Padding出现,但Properties.ImageSize没有。

我只是解决了问题补充[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]Properties财产和[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]Properties.ImageSize财产。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 C#Form Designer-生成的代码问题 - c# Form Designer - generated code problem 每个表单更改都必须更正Form Designer生成的代码名称空间 - Form Designer Generated Code namespaces have to be corrected every form change 继承控件不会显示在设计器中 - Inherited control will not display in designer 为什么 C# 设计器生成的代码(如 Form1.designer.cs)会对 Subversion 造成严重破坏? - Why does C# designer-generated code (like Form1.designer.cs) play havoc with Subversion? c# 为自定义控件扩展用户控件而更改设计器生成代码的顺序 - c# Change Order of Designer Generated Code for Custom Control extending User Control 如何添加自己的代码以及表单设计器生成的代码? - How can I add my own code along with the code generated by the form designer? 是否可以在设计器生成的代码中设置自定义组件/控件的自定义属性的序列化顺序? - Is it posible to set the order of the serialization of a custom property of a custom component/control in the designer-generated code? 重构Windows窗体设计器代码 - Refactoring Windows Form designer code WinForms生成的代码自动隐藏继承的成员 - Inherited members automatically hidden by winforms generated code 方法“ InitializeComponent”中的代码由设计人员生成 - The code within the method 'InitializeComponent' is generated by the designer
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM