2017-03-01 1 views
3

ich eine benutzerdefinierte Steuerung und Komponente als wie der Code unten erstellt haben,Control Eigenschaft nicht korrekt aktualisiert, wenn eine Veränderung in Designer

public class CustomComponent : Component 
{ 
    private string style; 
    public CustomControl Control { get; set; } 
    public string Style 
    { 
     get 
     { 
      return style; 
     } 
     set 
     { 
      style = value; 
      Control.Style = value; 
     } 
    } 
} 

public class CustomControl : Control 
{ 
    string style; 
    public string Style 
    { 
     get 
     { 
      return style; 
     } 
     set 
     { 
      style = value; 
     } 
    } 
} 

Danach habe ich die Kontrolle in die Form und die Komponente in das Formular hinzugefügt haben. Versuchen Sie dann, den Component.Control-Wert zuzuweisen. wenn ich nach dem Wert zuweisen versuchen, die Stil-Eigenschaft der Komponente zu ändern, wird die Stil-Eigenschaft in der Steuerung nicht so wie das Bild unten in Designer-Ebene geändert,

Style not updated in control

Wenn ich auf der Style-Eigenschaft geklickt von die Kontrolle seiner als wie das Bild unten aktualisiert erhalten,

enter image description here

Antwort

2

Sie müssen ein paar Dinge im Code zu korrigieren. Die Style Eigenschaft Ihrer CustomComponent sollte dies geändert werden:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
[RefreshProperties(System.ComponentModel.RefreshProperties.All)] 
public string Style 
{ 
    get 
    { 
     if (Control != null) 
      return Control.Style; 
     else 
      return null; 
    } 
    set 
    { 
     if (Control != null) 
      Control.Style = value; 
    } 
} 

sollten Sie überprüfen, ob die Control nicht nicht der Fall, erhalten oder den Style Wert des Steuer eingestellt. Sie müssen keine Membervariable definieren, um den Eigenschaftswert zu speichern, während er zu einem anderen Steuerelement gehört.

Auch, da Sie die Eigenschaft für Ihre Komponente nicht serialisieren müssen (da es für Ihre Kontrolle serialisiert wurde), dekorieren Sie es mit DesignerSerializationVisibility Attribut mit Hidden Wert.

Auch wenn Sie die PropertyGrid aktualisieren Änderungen zu zeigen, in anderer Eigenschaft (wie Control.Style Eigenschaft), wenn Sie Style Eigentum Ihrer Komponente bearbeiten, dekorieren sie mit RefreshProperties Attribute RefreshProperties.All Wert.

+0

Hallo Reza, wie ich Ihren Vorschlag habe ich die Codes in meiner Probe geändert. Aber immer noch tritt das Problem auf. Im Steuerelement wird die Style-Eigenschaft aktualisiert, aber das Problem ist, dass die "Style" -Eigenschaft des Steuerelements (die in der Komponente vorhanden ist) nicht aktualisiert wird. Wenn ich auf die Stileigenschaft des Controls (innerhalb der Komponente) klicke, wird es aktualisiert. Also ich denke, das Problem besteht darin, die Designer-Artikel zu aktualisieren. Können Sie mir bitte eine andere Lösung vorschlagen? – Jagadeesan

+1

Ich habe jetzt diesen Teil Ihrer Frage, ich habe die Antwort bearbeitet und 'RefreshProperties' hinzugefügt. –

+0

Ich bezweifle, dass dieser Ansatz auch funktionieren wird. Standardmäßig löst eine Änderung der Eigenschaft die Aktualisierung dieser bestimmten Eigenschaft aus. –

Verwandte Themen