热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VB中,如何将combobox下拉的显示行数变多。如下图,由默认8行改成16行或20行,求原代码,谢谢!

VB中,如何将combobox下拉的显示行数变多。如下图,由默认8行改成16行或20行,求原代码,谢谢!
VB中,如何将combobox下拉的显示行数变多。如下图,由默认8行改成16行或20行,求原代码,谢谢!

7 个解决方案

#1


MoveWindow api设置combo的高度。

#2


这个有两个办法。

第一个,就象楼上说的那样,改变列表高度(可能需要计算正确高度才行),
  这个要用HOOK的方法才能实现。下面图片中的“比赛风格”那儿,是改变的下拉列表框宽度。


第二个,启用WinXP Style控件风格。这样它默认的最大高度是30项。

#3


根据新的行数,算出 ComboBox 的 List 区以 pixels 计所需的高度,然后重设之:
Private Type RECT
   Left As Long
   Top As Long
   Right As Long
   Bottom As Long
End Type
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, _
    lpRect As RECT) As Long
Private Declare Function ScreenToClientAny Lib "user32" Alias "ScreenToClient" _
    (ByVal hWnd As Long, lpPoint As Any) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal hWnd As Long, _
    ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _
    ByVal nHeight As Long, ByVal bRepaint As Long) As Long

' Set a new height for the list area of a ComboBox control
'
' NEWHEIGHT is measured in pixels

Sub ComboBoxSetHeight(CB As ComboBox, ByVal newHeight As Long)
    Dim lpRect As RECT
    Dim wi As Long
    
    ' get combobox rectangle, relative to screen
    GetWindowRect CB.hWnd, lpRect
    wi = lpRect.Right - lpRect.Left
    
    ' convert to form's client coordinates
    ScreenToClientAny CB.Parent.hWnd, lpRect
    
    ' enforce the new height
    MoveWindow CB.hWnd, lpRect.Left, lpRect.Top, wi, newHeight, True

End Sub

#4


引用 2 楼 Chen8013 的回复:
这个有两个办法。

第一个,就象楼上说的那样,改变列表高度(可能需要计算正确高度才行),
  这个要用HOOK的方法才能实现。下面图片中的“比赛风格”那儿,是改变的下拉列表框宽度。


第二个,启用WinXP Style控件风格。这样它默认的最大高度是30项。

 请问第二个方法VB 6.0怎么实现啊?有代码直接调用吗?

#5


启用WinXP风格,方法也有两个:
一是写一个manifest文件,方法自己百度;二是把实现WinXP风格的资源加到程序中。

第1个方法不好:不灵活(每次需要按程序文件名更改manifest的文件名及内容)、要拖个“小尾巴”。
我都是用的第2个方法,需要用的直接加到工程中就行了,我做的这个资源文件是可以“通用”的。

另外要注意:
如果启用了XP风格、你的程序想要在WinXP/Win2003中正常运行,就必须在“程序入口”调用初始化函数。
如果你的程序只会在Vista或者更高版本的系统中运行,那么可以不管这个初始化函数。

简单的初始化代码如下图中所示。
如果程序是从“窗口”启动的,必须在Form_Initialize()(只要启动窗体中调用一次就行)加入。
如果是从Sub Main()启动的,那么就要在Main过程中调用。
“Call InitCommonControls”必须在任何窗体(包括用MsgBox显示的消息窗口)加载之前执行,
  否则窗体加载会失败,程序直接被结束(没有任何提示)。
简单的说,让你的程序首先执行初始化函数调用就好了。
把下图”另存为“rar文件,用WinRAR打开,就可以解压出我的XP_Style.res文件了。

#6


忘记了说:
WinXP风格只有在编译成exe之后运行才有效,在IDE中是没有效果的。

如果想在”设计时有效“,可以给VB6.exe写个manifest文件。
我曾经试过,写了manifest文件后,属性窗口中的”颜色选择“受影响,那儿是”一块白板“。

#7


已将3楼代码收藏待用。

推荐阅读
author-avatar
linxiuying261
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有