1

我爲WinForms控件編寫了一個自定義集合編輯器。其核心代碼如下所示:在WinForms中爲自定義CollectionEditor表單設置位置

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定位到其默認位置。有辦法做我需要的嗎?

回答

0

這方面與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; } 
+1

題外話,但因爲你是自定義集合編輯器,你也可能會發現這篇文章有幫助:[如何啓用'CollectionEditor'對話框中屬性的默認值](http://stackoverflow.com/questions/35517211/how-to-enable-default-values-for-屬性在收藏編輯器對話框) –

+0

我嘗試使用一個屬性DesktopBounds恢復表單位置,但對於DesktopBounds屬性的每個賦值都會增加for大小。你知道爲什麼發生這種情況嗎? – TecMan

+0

@TecMan你也可以使用'SetDesktopBounds'沒有任何問題,但是你應該首先將'StartPosition'設置爲'FormStartPosition.Manual'。 –

相關問題