2010-05-23 29 views
0

J'écris une application windforms en utilisant .NET (en fait IronPython, mais ce n'est pas pertinent), et j'ai un objet CheckedListBox dans mon interface graphique.Comment ajouter une marge à un CheckedListBox dans .NET?

Cela fonctionne bien, il a environ 20 éléments dans une mise en page multicolonne. Mais je n'arrive pas à comprendre comment donner à la chose une belle marge interne - je veux insérer environ 20 ou 30 pixels d'espaces autour des bords supérieur, inférieur, gauche et droit des cases à cocher.

Pour être clair, je veux que les espaces apparaissent entre la frontière de la CheckedListBox et les cases à cocher à l'intérieur, pas en dehors du composant entier.

J'espère que c'est une réponse facile, et je suis juste manquant parce que je suis nouveau à la programmation dans Windows. Si ce n'est pas possible, je suppose que ce serait bon à savoir aussi, donc je ne perds plus de temps avec ça.

(Si je faisais cela dans Swing (Java) Je chercherai à mettre EISN sur mon composant, ou de construire peut-être une frontière de composé avec un espace vide en elle.)

Répondre

0

Le natif de contrôle de fenêtre ne supporte pas une propriété Padding, vous ne pouvez pas le convaincre autrement. Pas un vrai problème. Définissez simplement BorderStyle sur None et placez-le dans un Panel dont la propriété AutoScroll est True. Vous devrez définir la taille de la zone de liste dans l'événement Load du formulaire, car il peut être redimensionné. Yuck, ça a l'air faux. Tant pis.

+0

Ah, j'espérais qu'il y aurait une propriété ou quelque chose que j'avais manqué. Mais il est bon de savoir qu'il n'y a pas de moyen simple de le faire, au moins. Merci! – Xanatos

0

Pour quiconque souhaite ajouter de l'espace autour des cases à cocher, le plus simple est d'utiliser DataGridView et de lui donner l'aspect de CheckedListBox. Voici mon code concepteur:

 // 
     // dgv1 
     // 
     this.dgv1.AllowUserToAddRows = false; 
     this.dgv1.AllowUserToDeleteRows = false; 
     this.dgv1.AllowUserToResizeColumns = false; 
     this.dgv1.AllowUserToResizeRows = false; 
     this.dgv1.BackgroundColor = System.Drawing.SystemColors.Control; 
     this.dgv1.BorderStyle = System.Windows.Forms.BorderStyle.None; 
     this.dgv1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; 
     this.dgv1.ColumnHeadersVisible = false; 
     this.dgv1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { 
     this.dgvcChecked, 
     this.dgvcValue}); 
     dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; 
     dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control; 
     dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 
     dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.ControlText; 
     dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Control; 
     dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.ControlText; 
     dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False; 
     this.dgv1.DefaultCellStyle = dataGridViewCellStyle3; 
     this.dgv1.Dock = System.Windows.Forms.DockStyle.Fill; 
     this.dgv1.EnableHeadersVisualStyles = false; 
     this.dgv1.Location = new System.Drawing.Point(7, 21); 
     this.dgv1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); 
     this.dgv1.Name = "dgv1"; 
     this.dgv1.ReadOnly = true; 
     this.dgv1.RowHeadersVisible = false; 
     this.dgv1.RowTemplate.Height = 18; 
     this.dgv1.RowTemplate.ReadOnly = true; 
     this.dgv1.ShowCellErrors = false; 
     this.dgv1.ShowCellToolTips = false; 
     this.dgv1.ShowEditingIcon = false; 
     this.dgv1.ShowRowErrors = false; 

Pour obtenir ou définir les éléments cochés:

// gets or sets the checked items in dgv1 (dgvcChecked.Index = 0, dgvcValue.Index = 1) 
    public string[] pSelected { 
     get { return (from DataGridViewRow r in dgv1.Rows 
         where r.Cells[dgvcChecked.Index].Value.Equals(true) 
         select r.Cells[dgvcValue.Index].Value as string).ToArray(); 
     } 
     set { 
      if (value != null && value.Length > 0) 
       foreach (DataGridViewRow r in dgv1.Rows) 
        r.Cells[dgvcChecked.Index].Value = value.Contains(r.Cells[dgvcValue.Index].Value as string); 
     } 
    }