继承的控件不在表单设计器生成的代码中生成代码

Posted

技术标签:

【中文标题】继承的控件不在表单设计器生成的代码中生成代码【英文标题】:Inherited control not generate code in form designer generated code 【发布时间】:2013-03-30 18:22:08 【问题描述】:

我正在尝试继承 DevExpress PictureEdit(但是,我认为这个问题不是 DevExpress 特有的)。我给它添加了一些属性。

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;
        
    

属性 ImageSize 出现在 PropertyEditor 上。

.

但是,如果我将其更改为某个值(例如 150;150),则它不会在表单设计器生成的代码中生成代码。

请注意,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;

这将导致ImageSize 值恢复为 0;0。如何解决这个问题?

编辑:

我尝试按照某人的建议将[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 添加到Properties 属性(我忘记了他的名字,他删除了他的答案)。这导致Properties属性内的属性出现在设计器生成的代码中,除了那些被覆盖的。

我的设计器生成的代码如下所示:

        // 
        // 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;

注意Properties.Padding 出现了,但Properties.ImageSize 没有出现。

【问题讨论】:

后面的代码是你所期望的,还是你得到的?看起来不错。 @GrantThomas this.fotoEdit1.Properties.ImageSize= new System.Drawing.Size(150, 150); 应该出现在设计器生成的代码中 【参考方案1】:

我只是通过将[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 添加到Properties 属性并将[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] 添加到Properties.ImageSize 属性来解决问题。

【讨论】:

以上是关于继承的控件不在表单设计器生成的代码中生成代码的主要内容,如果未能解决你的问题,请参考以下文章

如何停止 Visual Studio 为设计器中的控件生成属性设置?

使用框架 4.7.2 运行 SDK 项目的 vs2019 中的控件和表单缺少图标和视图设计器选项

vue开源Element UI表单设计及代码生成器

Pentaho 不在 UTF-8 编码中生成 PDF

IBPS开源表单设计器有什么功能?

如何在 Ruby-on-Rails 中生成 PDF 表单