【问题标题】:Set position for custom CollectionEditor form in WinForms在 WinForms 中设置自定义 CollectionEditor 表单的位置
【发布时间】:2016-08-07 14:10:25
【问题描述】:

我为 WinForms 控件编写了一个自定义集合编辑器。它的核心代码是这样的:

internal class MyCollectionEditor : CollectionEditor
{
    public MyCollectionEditor(Type type) : base(type) { }

    protected override System.ComponentModel.Design.CollectionEditor.CollectionForm CreateCollectionForm()
    {
        System.ComponentModel.Design.CollectionEditor.CollectionForm myForm = base.CreateCollectionForm();

        #region Adjust the property grid

        PropertyGrid myPropGrid = GetPropertyGrid(myForm);
        if (myPropGrid != null)
        {
            myPropGrid.CommandsVisibleIfAvailable = true;
            myPropGrid.HelpVisible = true;
            myPropGrid.PropertySort = PropertySort.CategorizedAlphabetical;
        }

        #endregion

        return myForm;
    }
}

我需要为集合编辑器表单设置自定义大小和位置,但我找不到这样做的方法。似乎集合编辑器表单始终由 VS 定位到其默认位置。有什么方法可以满足我的需要吗?

【问题讨论】:

    标签: c# winforms position windows-forms-designer collectioneditor


    【解决方案1】:

    它尊重您为表单设置的StartPositionDesktopLocationSize

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

    然后以这种方式装饰您的财产:

    [Editor(typeof(MyCollectionEditor), typeof(UITypeEditor))]
    public Collection<Point> MyPoints { get; set; }
    

    【讨论】:

    • 题外话,但由于您正在自定义集合编辑器,您也可能会发现这篇文章很有帮助:How to enable Default Values for properties in a 'CollectionEditor' dialog
    • 我尝试使用一个属性 DesktopBounds 来恢复表单位置,但是每次分配给 DesktopBounds 属性时,for 大小总是会增加。你知道为什么会这样吗?
    • @TecMan 你也可以使用SetDesktopBounds 没有任何问题,但你应该先将StartPosition 设置为FormStartPosition.Manual
    • 当然,我首先将StartPosition 设置为Manual。看起来,VS 设计师做了一些特别的事情,每次我在 CreateCollectionForm 中更改它的大小/位置后,表单都会扩展一点。但是,我通过在 myForm 的 Load 事件中放置恢复位置的代码解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 2016-02-11
    • 2014-03-22
    • 2011-08-23
    • 2018-01-24
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多