带有集合的自定义控件:集合编辑器出现但立即再次消失

Posted

技术标签:

【中文标题】带有集合的自定义控件:集合编辑器出现但立即再次消失【英文标题】:custom control with Collection: the Collection Editor appears but immediate dissappears again 【发布时间】:2021-04-10 23:35:09 【问题描述】:

我正在尝试创建一个自定义控件(应显示在工具箱中),该控件必须具有另一个类的集合。 我使用this question 作为我的指导方针。 但是我遇到了以下问题。

当我将控件放到窗体上,然后单击 dsTables 属性上的 3dotted 按钮,我可以看到 Collection Editor Form 出现了,但很快又消失了。

所以我一定是忘记了什么。

这是我的代码完整代码

public partial class gttDataSet : DataSet

    private dsTables _dsTables = new dsTables();

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [Editor("System.ComponentModel.Design.CollectionEditor, System.Design", typeof(UITypeEditor))]
    public dsTables gttTables
    
        get  return _dsTables; 
        set  _dsTables = value; 
    


public class dsTables : BaseCollection

    // See `EDIT 2:` at the bottom of the question
    public object[] Items()
    
        object[] test = List.ToArray();
        return test;
    

    // See `EDIT 1:` at the bottom of the question
    public dsTable Item(int index)
    
        return (dsTable)List[index];
    

    public dsTable Add()
    
        dsTable Result = new dsTable();
        this.List.Add(Result);
        return Result;
    

    public void Remove(dsTable table)
    
        List.Remove(table);
    

    public int IndexOf(dsTable table)
    
        return List.IndexOf(table);
    

    public bool Contains(dsTable table)
    
        return List.Contains(table);
    


public class dsTable

    [Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
    string SelectText  get; set; 

    [Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
    string SelectTextForUpdate  get; set; 

    [Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
    string DesignWhereText  get; set; 

    [Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
    string UserWhereText  get; set; 

    bool IsStoredProcedure  get; set; 

    bool RetrieveColumns  get;  

为什么Collection Editor Form出现后立即消失?

编辑 1: 将属性 Item 添加到 Collection 类 dsTables 中,因为在 this 站点上,他们说集合编辑器需要它

编辑 2: 添加了public object[] Items(),因为一些网站告诉我集合编辑器需要它来确定要处理的对象的类型。 不幸的是它不能解决我的问题

编辑 3: 尝试使用 Items 作为属性而不是方法。但这也没有解决问题。

    public object[] Items
    
        get
        
            object[] test = List.ToArray();
            return test;
        

        set 
        
            _dsTables.Clear();
            foreach (object item in value)
            
                _dsTables.Add((dsTable)item);
            
        
    

【问题讨论】:

【参考方案1】:

终于找到问题了,原来是我用错了继承自的类型

所以

public class dsTables : BaseCollection

必须

public class dsTables : CollectionBase

现在Collection Editor Windows 出现并保持不变。

【讨论】:

以上是关于带有集合的自定义控件:集合编辑器出现但立即再次消失的主要内容,如果未能解决你的问题,请参考以下文章

如何使用集合编辑器窗口在 GroupBox 中创建文本框?

在集合视图中使用自定义流布局时添加标题

UICollectionView 中的自定义布局

如何让其他控件在自定义控件中看到 DataTables 的集合?

定义要绑定的自定义属性

IWpfTextView 中的编辑器窗格不可编辑