VB中代码改变Combo控件只读属性Style值

在VB程序中,如果你用如下语句动态创建一个Combo控件
  Dim WithEvents cmbDropList As ComboBox

  ...
  Set cmbDropList = Controls.Add("VB.ComboBox", "cmbDropList")

  后,Combo控件的Style值是1 (VbComboDropDown 下拉式组合框,包括一个下拉式列表和一个文本框。可以从列表选择或在文本框中输入
),若想把Style的值更改2 (VbComboDrop-DownList 2 下拉式列表。这种样式仅允许从下拉式列表中选择 )

  通过语句Combo1.Style=2是不行的,因为Style是只读属性。为了突破这个限制,我动用的Spy++这个武器,对两种不同Style值的combo控件进行侦察,发现了两处不同

  1、combo控件的style的值为1-VbComboDropDown时,combo控件窗口的Styles=&H54010242,而combo控件的style的值为2-VbComboDrop-DownList时,combo控件窗口的Styles=&H54010243

  2、combo控件的style的值为1-VbComboDropDown时,combo控件里有一个Edit文本框窗口,而combo控件的style的值为2-VbComboDrop-DownList时,则没有Edit文本框窗口

  我首先试着用API函数改变combo控件窗口的Styles值,
  Call SetWindowLong(Combo1.hwnd,
GWL_STYLE,&H54010243)
  看Combo控件有没有什么改变,结果大失所望,

  我再次试着用API函数杀死Combo控件里的那个Edit窗口,耶~~~,成功了
  下面是我的实现代码:
  Private
Const GWL_STYLE = (-16)
  Private Const GW_CHILD = 5
  Private Declare
Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long

  Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA"
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
  Private Declare
Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long,
ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  Private Declare
Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As
Long
  Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As
Long) As Long
  Private Declare Function CreateWindowEx Lib "user32" Alias
"CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal
lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long,
ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal
hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
  Const
SW_HIDE = 0
  Const SW_SHOW = 5
  Dim WithEvents cmbDropList As ComboBox

  Private Sub cmbDropList_Click()
  MsgBox cmbDropList.Text
  End
Sub
  Private Sub Command1_Click()
  Dim ChildHwnd As Long
  Set
cmbDropList = Controls.Add("VB.ComboBox", "cmbDropList")

  cmbDropList.Visible = True
  cmbDropList.AddItem "One"

  cmbDropList.AddItem "Two"
  ChildHwnd = GetWindow(cmbDropList.hwnd,
GW_CHILD) '取edit句柄
  Call DestroyWindow(ChildHwnd) 'Kill edit窗口

  '改变cmbDropList的Style,这一语句可有可无~~~~,
  Call
SetWindowLong(cmbDropList.hwnd, GWL_STYLE, GetWindowLong(cmbDropList.hwnd,
GWL_STYLE) + 1)
  End Sub

转载于:https://www.cnblogs.com/Spacecup/p/3564845.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VB控件属性大全【珍藏版】 1.01、窗体(FORM)的常用属性 2 1.02、标签控件(Lable)的常用属性 7 1.03、文本框控件(TextBox)的常用属性 9 1.04、框架控件(Frame)的常用属性 13 1.05、命令按钮控件(CommandButton)的常用属性 15 1.06、复选框控件(CheckBox)的常用属性 17 1.07、单选钮控件(OptionButton)的常用属性 19 1.08、组合框控件(ComboBox)常用属性 22 1.09、列表框控件(ListBox)的常用属性 25 1.10、水平滚动条控件(HScrollBar)和垂直滚动条控件(VScrollBar)的常用属性 28 1.11、定时器控件的常用属性 30 1.12、文件系统控件的常用属性 30 1.13、形状控件(Shape)常用属性 33 1.14、直线控件(Ling)的常用属性 35 1.15、图像控件(Image)的常用属性 36 1.16、图片框控件(PictureBox)的常用属性 38 1.17、数据控件(Data)的常用属性 43 1.18、OLE容器控件(OLE)的常用属性 46 1.19、菜单控件的常用属性 48 2.02、电影(ActiveMovie)控件的常用属性 49 2.01、Adodc控件的常用属性 52 2.03、动画(Animation)控件的常用属性 55 2.04、公用对话框控件(CommonDialog)控件的常用属性 56 2.05、数据组合框(DataCombo)控件的常用属性 60 2.06、数据型电子表格控件(DataGrid)的常用属性 62 2.07、数据列表(DataList) 控件的常用属性 65 2.08、DTPicker控件的常用属性 67 2.09、平面滚动条控件(FlatScrollBar)的常用属性 70 2.10、图像组合框(ImageCombo)控件的常用属性 71 2.11、图像列表控件(ImageList)的常用属性 74 2.12、Inet控件的常用属性 74 2.13、列表视图控件(ListView)的常用属性 75 2.14、MAPIMessages控件的常用属性 79 2.15、MAPISession控件的常用属性 80 2.16、MaskEdBox控件的常用属性 80 2.17、多媒体(MMControl)控件的常用属性 83 2.18、月视图(MonthView)控件的常用属性 86 2.19、图表控件(MSChard)的常用属性 89 2.20、MSComm的常用属性 93 2.21、电子表格控件(MSFlexGrid)的常用属性 94 2.22、层次型电子表格控件(MSHFlexGrid)的常用属性 99 2.23、MSRDC控件的常用属性 104 2.24、PictureClip控件的常用属性 106 2.25、进度栏(ProgressBar)控件的常用属性 107

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值