Que dois-je faire si je ne souhaite pas que certaines propriétés publiques d'un composant soient ajoutées à la méthode InitializeComponent() par VS lors de la conception ? J'ai essayé d'ajouter [Browsable(false)] à l'attribut mais cela ne fonctionne pas non plus.
Mon code est le suivant :
/// <résumé>
/// Zone de liste déroulante Type de communication du contrôleur.
/// </summary>
classe publique CommunicationTypeComboBox : ComboBox
{
/// <résumé>
/// Construire une instance de zone de liste.
/// </summary>
public CommunicationTypeComboBox()
{
Items.Add("Port série");
Items.Add("TCP");
}
/// <résumé>
/// Récupère tous les éléments de la zone de liste.
/// </summary>
[navigable (faux)]
nouveaux éléments publics de ObjectCollection
{
obtenir { return base.Items }
}
}
Placez le contrôle sur le formulaire et VS ajoutera automatiquement du code à la méthode InitializeComponent(). Partie audacieuse.
//
// cmbCommunicationType
//
this.cmbCommunicationType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList ;
this.cmbCommunicationType.FormattingEnabled = true ;
this.cmbCommunicationType.Items.AddRange(nouvel objet[] {
"port série",
"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);
Cela deviendra ainsi à mesure que le nombre de modifications augmentera. Existe-t-il un moyen de contourner ce problème autre que de ne pas ajouter d'éléments dans le constructeur ?
this.cmbCommunicationType.Items.AddRange(nouvel objet[] {
"port série",
"TCP",
"port série",
"TCP",
"port série",
"TCP",
"port série",
"TCP",
"port série",
"TCP"});
Après plusieurs jours de travail acharné, j'ai enfin trouvé la classe DesignOnlyAttribute.
Spécifie si une propriété peut être définie uniquement au moment du design.
Les membres marqués en définissant DesignOnlyAttribute sur true ne peuvent être définis qu’au moment du design. En règle générale, ces propriétés n'existent qu'au moment du design et ne correspondent pas à une propriété réelle sur l'objet d'exécution.
Les membres qui n'ont aucun attribut (attribut) ou qui sont marqués en définissant DesignOnlyAttribute sur false peuvent être définis au moment de l'exécution. La valeur par défaut est faux.
L'ajout de DesignOnlyAttribute à l'attribut Items de CommunicationTypeComboBox peut parfaitement résoudre ce problème.
/// <résumé>
/// Récupère tous les éléments de la zone de liste.
/// </summary>
[Conception uniquement (faux)]
nouveaux éléments publics de ObjectCollection
{
obtenir { return base.Items }
}