C# 在WinForms中设置自定义CollectionEditor窗体的位置

C# 在WinForms中设置自定义CollectionEditor窗体的位置,c#,winforms,position,windows-forms-designer,collectioneditor,C#,Winforms,Position,Windows Forms Designer,Collectioneditor,我为WinForms控件编写了一个自定义集合编辑器。其核心代码如下所示: 内部类MyCollectionEditor:CollectionEditor { 公共MyCollectionEditor(类型):基(类型){} 受保护的覆盖系统.ComponentModel.Design.CollectionEditor.CollectionForm CreateCollectionForm() { System.ComponentModel.Design.CollectionEditor.Colle

我为WinForms控件编写了一个自定义集合编辑器。其核心代码如下所示:

内部类MyCollectionEditor:CollectionEditor
{
公共MyCollectionEditor(类型):基(类型){}
受保护的覆盖系统.ComponentModel.Design.CollectionEditor.CollectionForm CreateCollectionForm()
{
System.ComponentModel.Design.CollectionEditor.CollectionForm myForm=base.CreateCollectionForm();
#区域调整特性栅格
PropertyGrid myPropGrid=GetPropertyGrid(myForm);
if(myPropGrid!=null)
{
myPropGrid.CommandsVisibleIfavaailable=true;
myPropGrid.HelpVisible=true;
myPropGrid.PropertySort=PropertySort.CategorizeDalphabetial;
}
#端区
返回我的表格;
}
}
我需要为集合编辑器窗体设置自定义大小和位置,但我找不到一种方法。似乎集合编辑器窗体总是由VS定位到其默认位置。有什么方法可以满足我的需要吗?

它涉及到,以及您为表单设置的:

public class MyCollectionEditor : CollectionEditor
{
    public MyCollectionEditor() : base(typeof(Collection<Point>)) { }
    protected override CollectionForm CreateCollectionForm()
    {
        var form = base.CreateCollectionForm();
        // Other Settings
        // ...
        form.StartPosition = FormStartPosition.Manual;
        form.Size = new Size(900, 600);
        form.DesktopLocation = new Point(10, 10);
        return form;
    }
}
公共类MyCollectionEditor:CollectionEditor
{
public MyCollectionEditor():base(typeof(Collection)){}
受保护的覆盖CollectionForm CreateCollectionForm()
{
var form=base.CreateCollectionForm();
//其他设置
// ...
form.StartPosition=FormStartPosition.Manual;
形式尺寸=新尺寸(900600);
form.DesktopLocation=新点(10,10);
申报表;
}
}
然后用这种方式装饰你的房子:

[Editor(typeof(MyCollectionEditor), typeof(UITypeEditor))]
public Collection<Point> MyPoints { get; set; }
[编辑器(typeof(MyCollectionEditor),typeof(UITypeEditor))]
公共集合MyPoints{get;set;}

Off-topic,但是由于您正在自定义集合编辑器,您可能会发现这篇文章也很有帮助:我尝试使用一个属性DesktopBounds来恢复表单位置,但for大小总是随着对DesktopBounds属性的每次赋值而增加。你知道为什么会发生这种情况吗?@TecMan你也可以毫无问题地使用
SetDesktopBounds
,但是你应该首先将
StartPosition
设置为
FormStartPosition.Manual
。当然,我首先将
StartPosition
设置为
Manual
。看起来,VS设计器做了一些特殊的事情,每次我在CreateCollectionForm中更改表单的大小/位置后,表单都会稍微扩展一点。但是,我通过在myForm的Load事件中放置恢复位置的代码解决了我的问题。