首页 下载 问题与解答 李海文选 镜像站点 问专家 联络我们
 

  首页
  评论
  注册信息
  下载
  版本历史

  相关产品

  Color ComboBox
  Font List & Combo
  NTPort Library
  Zeal ProgressBar

 


 CheckListBox控件常见问题

 

下面是用户经常会问到的一些技术问题:

 

  1. 如何知道列表框中每个检查框的状态?

    问:你能告诉我如何知道列表框中每个检查框的状态吗?

    答:你可以检查Value 属性数组。Value 属性设置或返回列表中每个检查框的状态。Value 属性是一个整数数组,每个元素就对应着一个列表项。值False (默认)表示为选中,而值 True 表示选中。语法如下:

    [form.]Chklist.Value(Index) [= setting%]

    回到前面

  2. 如何让检查框不显示?

    问:有什么办法让检查框不显示吗?

    答:你可以设置 NoCheckmark 属性为False,这样控件将不显示每个条目前面的检查框。

    回到前面

  3. 如何使检查框的状态在双击时改变?

    问:是否有办法使得当在条目上双击改变检查框的状态,而不是单击改变状态?

    答: 有。从版本2.5 Build 5以后,可以设置ToggleMode属性。该属性有一些选择使得你的程序可以象一些流行的软件一样工作。

    回到前面

  4. CheckListBox控件中是否每项都有一个单独的TAG属性?

    问:CheckListBox控件中是否每项都有一个单独的TAG属性,还是只有控件本身才有? 正确的语法是什么?

    答:Tag 属性只有控件本身才有。这里有一个ItemData (长整数类型)属性数组,它可以用于控件中的每个单独的项。例如,你可以使用它保存另一个字符串数组的索引值,如:

      CheckListBox1.ItemData( 0 ) = 2
      CheckListBox1.ItemData( 1 ) = 3
      ......
      MsgBox arrString(CheckListBox1.ItemData _
      (CheckListBox1.ListIndex))

    这里的arrString是一个字符串数组。

    回到前面

  5. 如何给列表框加上横的滚动条?

    问:是否有办法给CheckListBox控件添加一个横的滚动条?

    答:在版本2.5 Build 7以上,你可以添加一个滚动条。使用下面的代码就可以了:
    Private Declare Function SendMessage Lib "user32" _
      Alias "SendMessageA" (ByVal hwnd As Long, _
      ByVal wMsg As Long, ByVal wParam As Long, _
      lParam As Any) As Long
    Private Const LB_SETHORIZONTALEXTENT = &H194
    Private Sub Form_Load()
       ChkList1.AddItem "Line 1"
       ChkList1.AddItem "a big Line 2 some text some text"
       ChkList1.AddItem "Line 3"
       addHorScrlBarListBox ChkList1
    End Sub

    Public Sub addHorScrlBarListBox(ByVal refControlListBox As Object)
       Dim nRet As Long
       Dim nNewWidth As Integer
       nNewWidth = 400 ' new width in pixels

       nRet = SendMessage(refControlListBox.hwnd, _
        LB_SETHORIZONTALEXTENT, nNewWidth, ByVal 0&)
    End Sub

    回到前面

  6. 当用户在列表框上击右键时如何弹出菜单?

    问:我想在用户在每个条目上右击时显示一个弹出式菜单。我所遇到的一个问题是右击时条目不会被选中,而且因为它没有被选中,我不知道弹出式是在哪个条目上。当鼠标右击,我可以知道点击的x和y坐标,是否有办法知道点击在那个条目上?

    答: 右击不会自动选择条目。但是可以向列表框发送LB_ITEMFROMPOINT消息以获得列表框中最接近于制定点的条目的索引值。

    下面是一个例子:

    Global Const LB_ITEMFROMPOINT = &H1A9

    Declare Function SendMessage Lib "user32" Alias "SendMessageA" _

    (ByVal hWnd As Long, _

    ByVal wMsg As Long, _

    ByVal wParam As Long, _

    lParam As Any) As Long

    Dim lRet As Long

    Dim lXPos As Long, lYPos As Long

    ' Convert the cursor position into pixels , because that is what is needed

    lXPos = CLng(x / Screen.TwipsPerPixelX)

    lYPos = CLng(y / Screen.TwipsPerPixelY)

    ' If the right mouse button is clicked...

    If Button = 2 Then

    ' Get the listitem closest to the cursor

    ' NOTE: Since the X and Y values have to be in the form of high and low

    ' order words, send the values as ((lYPos * 65536) + lXPos)

    lRet = SendMessage(ChkFileList.hWnd, LB_ITEMFROMPOINT, 0, _

    ByVal ((lYPos * 65536) + lXPos))

    ' If the returned value is a valid index, then set that item as the selected

    ' item

    If lRet < ChkFileList.ListCount Then

    ChkFileList.ListIndex = lRet

    ' now Popup the menu over the selected item with Selection bar

    ' Highlighting it

    PopupMenu MnuChkListInfo

    Else:

    ' If not possible to highlight the item then beep and exit

    Beep

    End If

    End If

    回到前面


如果您有任何建议和意见, 请发个电子邮件给我们:.

版权所有 热情软件屋 1997-2007