Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > ComboBox - высота строк


Автор: Sergey_New 31.7.2008, 08:34
Код

    Public Declare Function SendMessage Lib "coredll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, 
    _ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Const CB_SETITEMHEIGHT = 339    
    Const CB_GETITEMHEIGHT = 340
    SendMessage(cbTest.Handle, CB_SETITEMHEIGHT, -1, 60)
    SendMessage(cbTest.Handle, CB_SETITEMHEIGHT, 0, 60)

Первое сообщение устанавливает высоту строк (60) раскрытого списка. 
Второе - высоту ComboBox. 
Высота строк при активации ComboBox остается вновь установленной, а высота контрола восстанавливается в стандартную. Как этого избежать? 



Автор: Sergey_New 31.7.2008, 12:01
Добавление: нужно для CF

Автор: KLUBS 1.8.2008, 22:50
а можно же самому перерисовать, и будет тебе высота, какая хочешь

Автор: Sergey_New 2.8.2008, 20:39
Цитата(KLUBS @ 1.8.2008,  23:50)
а можно же самому перерисовать

Это как?

Автор: KLUBS 2.8.2008, 21:18
Можно создать свой UserControl унаследовав ComboBox
и там уже переопределить все что нужно smile

Автор: Sergey_New 2.8.2008, 22:22
Нельзя ли пример, как переопределять высоту?

Автор: Sergey_New 7.8.2008, 15:17
Вот, что получилось. Просьба прокомментировать.

Код

Public Class ComboBoxEx
    Inherits Control
    Public cb As New Windows.Forms.ComboBox
    Private Declare Function SendMessage Lib "coredll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Const CB_SETITEMHEIGHT = 339
    Const CB_GETITEMHEIGHT = 340

    Public Sub New()
        With Me
            .Controls.Add(cb)
        End With
    End Sub

    Private Sub ComboBoxEx_ParentChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.ParentChanged
        cb.Width = Me.Width
        cb.Height = Me.Height
        SendMessage(cb.Handle, CB_SETITEMHEIGHT, 0, Me.Height - 8)  ' высота строк
    End Sub

    Private Sub ComboBoxEx_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        SendMessage(cb.Handle, CB_SETITEMHEIGHT, -1, Me.Height - 8)  ' высота элемента
    End Sub
End Class

Автор: nagg 7.8.2008, 15:35
Я бы сделал суровее но без винапи - добавил бы ImageList с элементами 1*N (n- высота)
(тем же способом увеличиваю строки в ListView)

Автор: Sergey_New 7.8.2008, 18:03
nagg, 
для ListView я тоже делаю с ImageList.
Не могу сообразить, как это применить для ComboBox в CF :(

Автор: nagg 8.8.2008, 09:01
А там разве нету стандартного свойства ImageList ? извините вероятно напутал  smile 

Автор: Sergey_New 8.8.2008, 14:08
А я так надеялся!    smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)