简单小程序,请赐教!

richboy2003 2005-03-14 10:12:02
list控件中用Scroll选择列表框选项,程序没反映,必须再点击list中的内容程序才执行!请问有什么办法让scroll选择列表框其中内容后,程序能立即执行?请赐教!

Private Sub list1_Scroll()
Call Fill_Click
End Sub


Private Sub Form_Load()

' 初始话列表框选项
list1.AddItem "0 实线"
list1.AddItem "1 透明"
list1.AddItem "2 水平直线"
list1.AddItem "3 垂直直线"
list1.AddItem "4 上斜对角线"
list1.AddItem "5 下斜对角线"
list1.AddItem "6 十字线"
list1.AddItem "7 交叉对角线"
End Sub


Private Sub list1_Click()

If Fill.ListIndex <> "-1" Then
' 设置填充方式
Shape1.FillStyle = Fill.ListIndex
End If

End Sub
...全文
122 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bacaihong 2005-03-14
  • 打赏
  • 举报
回复
获取第一可视条目的message ID为LB_GETTOPINDEX ( &H18E)
bacaihong 2005-03-14
  • 打赏
  • 举报
回复
你说的是按SCROLL后自动选中显示区的第一个条目吗?很简单使用Windows API
SendMessage可获取该条目的Index,然后将该值赋予Listindex属性,自动触发
CLICK事件
samwzhang 2005-03-14
  • 打赏
  • 举报
回复
Private Sub Form_Load()
' 初始话列表框选项
Combo1.AddItem "0 实线"
Combo1.AddItem "1 透明"
Combo1.AddItem "2 水平直线"
Combo1.AddItem "3 垂直直线"
Combo1.AddItem "4 上斜对角线"
Combo1.AddItem "5 下斜对角线"
Combo1.AddItem "6 十字线"
Combo1.AddItem "7 交叉对角线"
Combo1.ListIndex = 0
End Sub


Private Sub Combo1_Click()

If Combo1.ListIndex <> "-1" Then
' 设置填充方式
Shape1.FillStyle = Combo1.ListIndex
End If

End Sub
pweixing 2005-03-14
  • 打赏
  • 举报
回复
那就用 combo 控件吧,不是更加方便?
richboy2003 2005-03-14
  • 打赏
  • 举报
回复
我的意思就是用Scroll更换了list里显示的内容,如何让语句马上执行,即shape马上填充,而不必更换了内容后还要点一下list,使它得到焦点后语句才执行?
pweixing 2005-03-14
  • 打赏
  • 举报
回复
晕啊!你没有选中list里面的内容,那么 list1.ListIndex 的值就是 -1啊! 那么怎么能给shape填充呢!?
richboy2003 2005-03-14
  • 打赏
  • 举报
回复
不好意思哦,我弄错了,应该是这样的
Private Sub list1_Scroll()
Call list1_Click
End Sub


Private Sub Form_Load()

' 初始话列表框选项
list1.AddItem "0 实线"
list1.AddItem "1 透明"
list1.AddItem "2 水平直线"
list1.AddItem "3 垂直直线"
list1.AddItem "4 上斜对角线"
list1.AddItem "5 下斜对角线"
list1.AddItem "6 十字线"
list1.AddItem "7 交叉对角线"
End Sub


Private Sub list1_Click()

If list1.ListIndex <> "-1" Then
' 设置填充方式
Shape1.FillStyle = list1.ListIndex
End If

End Sub
flyingZFX 2005-03-14
  • 打赏
  • 举报
回复
faint
  • 打赏
  • 举报
回复
Scroll属性不是要触发滚动条才发生的事件吗??这时候,你并没有在LIST选定项目呀?VB如何判断你点的是LIST中哪个值呢?
为什么要用Scroll???搞不懂。。。。
pweixing 2005-03-14
  • 打赏
  • 举报
回复
你的这个fill是什么咚咚?
bacaihong 2005-03-14
  • 打赏
  • 举报
回复
Private Sub list1_Scroll()
Dim nIndex as Long
nIndex=GetIndex '我给你的函数
If nIndex<0 then
MessageBox "获取索引失败"
Exit Sub
end if
If nIndex<>List1.ListIndex then '如果获取的第一个条目与当前选定的不同才处理
List1.ListIndex=nIndex
end if
End Sub
bacaihong 2005-03-14
  • 打赏
  • 举报
回复
Private Declare Function SendMessageA Lib "user32" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const LB_GETTOPINDEX = &H18E

Public Function GetIndex() As Long
GetIndex = SendMessageA(List1.hwnd, LB_GETTOPINDEX, 0, 0)
End Function

调用此函数返回Index
happy_sea 2005-03-14
  • 打赏
  • 举报
回复
你把list高度设置为只有1行了是吗?但是你滚动scroll时由于list中选择的项目没变,因此不会触发什么事件。
你把list改为combobox控件相信可以很好的解决你的问题。
richboy2003 2005-03-14
  • 打赏
  • 举报
回复
具体怎么写啊,我刚学vb,api对我来说还有点摸不到北哦。能写具体点吗?请赐教!写完整我把分给你

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧