Как изменить вертикальное пространство элемента CheckedListBox - PullRequest
6 голосов
/ 22 января 2012

Мне нужно изменить вертикальное пространство для CheckedListBox элементов, чтобы они соответствовали текстовым полям на другой стороне:

CheckedListBox и "TextBox" бок о бок http://i40.tinypic.com/358vt52.png Каксделать это?

После некоторых исследований я обнаружил, что CheckedListBox наследует ListBox, поэтому он должен иметь свое публичное свойство ItemHeight, но по какой-то причине он не

Я попробовал это:

ListBox l = CheckedList as ListBox;
        l.ItemHeight = 30;

но это не сработало

Ответы [ 2 ]

17 голосов
/ 22 января 2012

Реализация свойства ItemHeight CheckedListBox по умолчанию:

public override int ItemHeight { 
        get {
            // this should take FontHeight + buffer into Consideration.
            return Font.Height + 2;
        } 
        set {
        } 
    } 

Вы можете полностью переопределить это свойство в новом классе.

public sealed class  MyListBox:CheckedListBox
    {
        public MyListBox()
        {
            ItemHeight = 30;
        }
        public override int ItemHeight { get; set; }
    }

это должно позволить вам установить ваш собственный ItemHeight.

enter image description here

1 голос
/ 27 февраля 2015

Работает в VS2013, чистый код FrameWork4.5 VB

Поместите объявление и константу в начало класса

Использование помещает остаток кода в Form_Load, как в примере кода.

Private Declare Function SendMessageByNum Lib "user32" Alias "SendMessageA" _
  (ByVal hwnd As IntPtr, ByVal wMsg As UInt32, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr

Private Const lB_SETITEMHEIGHT As Integer = &H1A0

Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim ItemHeight As Integer = Me.Font.Height + 4
    SendMessageByNum(CheckedListBoxControl.Handle, lB_SETITEMHEIGHT, CType(0, IntPtr), CType(ItemHeight, IntPtr))

End Sub
...