2010-05-23 5 views
0

Я пишу приложение windforms, используя .NET (на самом деле IronPython, но это не имеет значения), и у меня есть объект CheckedListBox в моем графическом интерфейсе.Как добавить маржу в CheckedListBox в .NET?

Он работает нормально, он имеет около 20 элементов в многоколоночном макете. Но я не могу понять, как сделать вещь хорошей внутренней маркой - я хочу вставить около 20 или 30 пикселей пробелов вокруг верхнего, нижнего, левого и правого краев флажков.

Чтобы быть ясным, я хочу, чтобы пробел отображался между границей CheckedListBox и флажками внутри него, а не вне всего компонента.

Надеюсь, это простой ответ, и я просто пропущу его, потому что я новичок в программировании в окнах. Если это не возможно, я думаю, это было бы хорошо знать, поэтому я больше не трачу время на это.

(Если бы я делал это в свинге (Java) я смотрел бы установить вставки на моем компоненте, или, возможно, создать составную границу с некоторым пустым пространством в нем.)

ответ

0

Уроженец управления окном не поддерживает свойство Padding, вы не можете убедить его иначе. Не настоящая проблема. Просто установите BorderStyle в None и поместите его в панель, свойство AutoScroll которой равно True. Вам нужно будет установить размер окна списка в событии Load формы, потому что он может быть изменен. Yuck, это выглядит неправильно. Ну что ж.

+0

Ах, я надеялся, что бы свойство или что-то, что я пропустил. Но хорошо знать, что нет простого способа сделать это, по крайней мере. Благодаря! – Xanatos

0

Для тех, кто хочет добавить пространство вокруг флажков, самый простой способ - использовать DataGridView и сделать его похожим на CheckedListBox. Вот некоторые из моего дизайнера кода:

 // 
     // 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; 

Чтобы получить или установить проверяемый пункты:

// 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); 
     } 
    } 
Смежные вопросы