在VB程序中,通过代码改变Combo控件只读属性Style值

原创 2001年08月30日 14:18:00

 

在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

VB-改变文件只读属性

SetAttr   语句                         为一个文件设置属性信息。         语法         SetAttr   pathname,   attribute...
  • seawavecau
  • seawavecau
  • 2006年11月13日 09:27
  • 1989

理论上探讨:可以设置只读模式的ComboBox SetReadOnly()不可实用

vc6.0工程文件,演示可以设置只读模式的ComboBox,可以设置只读属性,SetReadOnly()。 http://download.csdn.net/detail/wwwwws/584169...
  • wwwwws
  • wwwwws
  • 2013年07月30日 21:41
  • 2649

理论上探讨:可以设置只读模式的ComboBox SetReadOnly()不可实用

vc6.0工程文件,演示可以设置只读模式的ComboBox,可以设置只读属性,SetReadOnly()。 http://download.csdn.net/detail/wwwwws/584169...
  • wwwwws
  • wwwwws
  • 2013年07月30日 21:41
  • 2649

3.为自定义控件添加属性

3.为自定义控件添加属性 原文请看我博客:http://clzf.co/blog.php?id=3 前面"废话"了两篇 现在开始慢慢的踏入自定义控件开发的主题 首先来说说属性 对于一个控件来说属...
  • crystal_lz
  • crystal_lz
  • 2014年03月28日 20:04
  • 11407

VB6 更改ComboBox的Style属性(对应C# Dropdown属性)

Private Const GWL_STYLE = (-16) Private Const GW_CHILD = 5   Private Declare Function GetWi...
  • mimei_hl
  • mimei_hl
  • 2014年04月10日 19:36
  • 776

jsp页面输入框设置为只读

现象:开发中想jsp的input设置为只读,用户无法输入参数解决方案:1:readonly属性 jsp的input有readonly=“”的属性,如果设置为 input type=...
  • hcwbr123
  • hcwbr123
  • 2017年03月14日 16:59
  • 2968

Webdriver利用JS给只读属性的文本框赋值

给只读文本框赋值,这里列举了
  • zhangchaoy
  • zhangchaoy
  • 2014年04月15日 15:19
  • 2356

C# 可以利用反射给只读属性赋值吗?

结论:可以 验证demo如下: using System; using System.Collections.Generic; using System.ComponentModel; using S...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2015年05月06日 19:07
  • 2206

Thymeleaf教程 (六) 设置属性值

设置属性值原始表单 我们可以通过th:attr来设置input或者for...
  • mygzs
  • mygzs
  • 2016年09月13日 11:05
  • 4119

VB控件属性及其一些常数

1.01、窗体(FORM)的常用属性 属性说明 (Name) 窗体的名称 ActiveControl 返回焦点所在的控件,该属性设计阶段不可用,运行时只读。 Appearance 外观...
  • yiyiyicz
  • yiyiyicz
  • 2015年03月13日 08:51
  • 1444
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在VB程序中,通过代码改变Combo控件只读属性Style值
举报原因:
原因补充:

(最多只允许输入30个字)