Was soll ich tun, wenn ich nicht möchte, dass einige öffentliche Eigenschaften einer Komponente während des Entwurfs von VS zur InitializeComponent()-Methode hinzugefügt werden? Ich habe versucht, dem Attribut [Browsable(false)] hinzuzufügen, aber es funktioniert auch nicht.
Mein Code ist wie folgt:
/// <Zusammenfassung>
/// Dropdown-Listenfeld „Controller-Kommunikationstyp“.
/// </summary>
öffentliche Klasse CommunicationTypeComboBox: ComboBox
{
/// <Zusammenfassung>
/// Erstellen Sie eine Listbox-Instanz.
/// </summary>
öffentliche CommunicationTypeComboBox()
{
Items.Add("Serial Port");
Items.Add("TCP");
}
/// <Zusammenfassung>
/// Alle Elemente im Listenfeld abrufen.
/// </summary>
[Durchsuchbar (falsch)]
öffentliche neue ObjectCollection-Elemente
{
get { return base.Items }
}
}
Platzieren Sie das Steuerelement im Formular und VS fügt der InitializeComponent()-Methode automatisch Code hinzu. Fettgedruckter Teil.
//
// cmbCommunicationType
//
this.cmbCommunicationType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCommunicationType.FormattingEnabled = true;
this.cmbCommunicationType.Items.AddRange(new object[] {
„serielle Schnittstelle“,
"TCP"});
this.cmbCommunicationType.Location = new System.Drawing.Point(124, 66);
this.cmbCommunicationType.Name = "cmbCommunicationType";
this.cmbCommunicationType.SelectedItem = Xunmei.Door.CommunicationType.SerialPort;
this.cmbCommunicationType.Size = new System.Drawing.Size(121, 20);
this.cmbCommunicationType.TabIndex = 2;
this.cmbCommunicationType.SelectedIndexChanged += new System.EventHandler(this.cmbCommunicationType_SelectedIndexChanged);
Dies wird mit zunehmender Anzahl der Änderungen der Fall sein. Gibt es eine andere Möglichkeit, dies zu umgehen, als dem Konstruktor keine Elemente hinzuzufügen?
this.cmbCommunicationType.Items.AddRange(new object[] {
„serielle Schnittstelle“,
„TCP“,
„serielle Schnittstelle“,
„TCP“,
„serielle Schnittstelle“,
„TCP“,
„serielle Schnittstelle“,
„TCP“,
„serielle Schnittstelle“,
"TCP"});
Nach mehreren Tagen harter Arbeit habe ich endlich die DesignOnlyAttribute-Klasse gefunden.
Gibt an, ob eine Eigenschaft nur zur Entwurfszeit festgelegt werden kann.
Mitglieder, die durch das Festlegen von DesignOnlyAttribute auf „true“ gekennzeichnet sind, können nur zur Entwurfszeit festgelegt werden. Normalerweise sind diese Eigenschaften nur zur Entwurfszeit vorhanden und entsprechen keiner tatsächlichen Eigenschaft des Laufzeitobjekts.
Mitglieder, die keine Attribute (Attribute) haben oder durch Festlegen von DesignOnlyAttribute auf „false“ markiert sind, können zur Laufzeit festgelegt werden. Der Standardwert ist falsch.
Das Hinzufügen von DesignOnlyAttribute zum Items-Attribut von CommunicationTypeComboBox kann dieses Problem perfekt lösen.
/// <Zusammenfassung>
/// Alle Elemente im Listenfeld abrufen.
/// </summary>
[DesignOnly(false)]
öffentliche neue ObjectCollection-Elemente
{
get { return base.Items }
}