2017-03-15 6 views
0

ユーザーコントロールに関するヘルプが必要です。 私はカスタムコントロールデザイナーを持つユーザーコントロールを持っています:C#カスタムControlDesignerを使用したユーザーコントロール各コピー

デザイナーでは、ユーザーコントロールで特定のプロパティを変更した場合、私はSelectionRulesを変更します。 このユーザーコントロールを複数コピーしてプロパティを変更すると、デザイナーはすべてのコピーのSelectionRulesを変更します。

コピーごとにこれを設定するにはどうすればよいですか?ここで

コードです:

[Designer(typeof(BorderedTextBox_Designer))] 
public partial class BorderedTextBox : UserControl 
{ 
    [Browsable(true), EditorBrowsable(EditorBrowsableState.Always)] 
    [Description("Controls whether the text of the edit control can span more than one line.")] 
    [Category("Behavior")] 
    [DefaultValue(false)] 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] 
    public bool Multiline 
    { 
     set 
     { 
      //Set to TRUE: 
      if (value) 
      { 
       BorderedTextBox_Designer.SelectionRule = BorderedTextBox_Designer.SelectionRulesEnum.All; 
      } 
      //Set to FALSE: 
      else 
      { 
       BorderedTextBox_Designer.SelectionRule = BorderedTextBox_Designer.SelectionRulesEnum.RightLeft; 
      } 
     } 
    } 
} 

internal class BorderedTextBox_Designer : ControlDesigner 
{ 
    internal static SelectionRulesEnum SelectionRule; 

    public override SelectionRules SelectionRules 
    { 
     get 
     { 
      switch (SelectionRule) 
      { 
       case SelectionRulesEnum.All: 
        return SelectionRules.Visible | SelectionRules.Moveable | SelectionRules.AllSizeable; 
       case SelectionRulesEnum.UpDown: 
        return SelectionRules.Visible | SelectionRules.Moveable | SelectionRules.TopSizeable | SelectionRules.BottomSizeable; 
       case SelectionRulesEnum.RightLeft: 
        return SelectionRules.Visible | SelectionRules.Moveable | SelectionRules.LeftSizeable | SelectionRules.RightSizeable; 
       case SelectionRulesEnum.None: 
        return SelectionRules.Visible | SelectionRules.Moveable; 
       default: 
        return SelectionRules.Visible | SelectionRules.Moveable; 
      } 
     } 
    } 

    internal enum SelectionRulesEnum 
    { 
     All, 
     UpDown, 
     RightLeft, 
     None 
    } 
} 
+1

あなたはむしろhttps://msdn.microsoft.com/en-us/library([MSDN]参照(イベントを使用して、静的メンバを経由して、デザイナーのプロパティを設定するべきではありません/ms973820.aspx))、イベントでは、プロパティが変更されたコントロールのインスタンスを取得し、そこでデザイナのプロパティを調整できます。 – Sinatr

+0

ありがとうございます!これは助けになった! 答えとして投稿してください。解決策としてマークすることができます。 –

+0

私は良い答え(コメントとしてのヒント)を投稿することはできません。しかし、[あなたは](http://stackoverflow.com/help/self-answer)。 – Sinatr

答えて

1

私はそれを考え出しました。ヒントについてはSinatrありがとう:)

答えは、コントロールをコントロールからのコントロールのインスタンスにプロパティを設定することです。

静的クラス=>ではなく、この場合、プロパティの変更は私の問題と同じようにグローバルになります。ここで

コードサンプル:

//The UserControl you created 
[Designer(typeof(UserControlDesigner))] 
[DefaultEvent("TextChanged")] 
public partial class UserControl : UserControl 
{ 
    //The property where we will store the UserControlDesigner instance when it is created 
    internal UserControlDesigner Designer; 

    //Initialize the UserControl 
    public UserControl() 
    { 
     //Check for design time 
     if (DesignMode) 
      //Set the individual value to this UserControlDesigner instance's property 
      Designer.DesignerProperty = 1; 
    } 
} 

//The custom ControlDesigner should used to design your UserControl 
internal class UserControlDesigner : ControlDesigner 
{ 
    //The UserControl which is designed with this instance 
    internal UserControl DesignedControl; 

    //The Property you want to change each copy of your UserControl individually 
    internal int DesignerProperty; 

    //The method which is called when the UserControlDesigner instance is created 
    public override void Initialize(IComponent component) 
    { 
     base.Initialize(component); 

     //Cast the IComponent which is designed with this designer instance to your UserControl class 
     DesignedControl = component as UserControl; 

     //Check for successful cast 
     if (DesignedControl != null) 
      //Store this UserControlDesigner instance in the property "Designer" which we've created to access the instance in design time 
      DesignedControl.Designer = this; 
    } 
} 
関連する問題