求教ComboBox在可编辑状态下的,从右往左的选中

ccccffff 2011-04-26 06:13:05
ComboBox为DropDown,是可编辑的。
长度为10,但是现在TEXT比较长,有30左右,默认的选中效果是,从左往右,光标直接移动到TEXT的最右边了。
现在需要的是把TEXT选中,并且光标是在最左边。
...全文
203 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhblxm 2011-04-30
  • 打赏
  • 举报
回复

Dim IsSelectedAll As Boolean

Private Sub ComboBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.Click
Dim p0 As Point = Cursor.Position
Dim p As Point = ComboBox1.PointToScreen(New Point(ComboBox1.Width - 23, 5))
Dim p1 As Point = ComboBox1.PointToScreen(New Point(0, 5))

If p0.X > p1.X And p0.X < p.X Then
If Not IsSelectedAll Then
ComboBox1.SelectionStart = ComboBox1.Text.Length
ComboBox1.SelectionLength = 0
SendKeys.Send("+{LEFT " & ComboBox1.Text.Length & "}")
IsSelectedAll = True
Else
IsSelectedAll = False
End If

End If
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
SendKeys.Send("{RIGHT}")
SendKeys.Send("+{LEFT " & ComboBox1.Text.Length & "}")
IsSelectedAll = True
End Sub

你自应该想一想的。。。
ccccffff 2011-04-29
  • 打赏
  • 举报
回复
谢谢哦
还差最后一个效果,在被选中的情况下,再点击的话,要去掉选中。没有被选中的话,点击就选中。
lhblxm 2011-04-28
  • 打赏
  • 举报
回复
  Private Sub ComboBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.Click

Dim p0 As Point = Cursor.Position
Dim p As Point = ComboBox1.PointToScreen(New Point(ComboBox1.Width - 23, 5))
Dim p1 As Point = ComboBox1.PointToScreen(New Point(0, 5))

If p0.X > p1.X And p0.X < p.X Then
ComboBox1.SelectionStart = ComboBox1.Text.Length 要加上这一句
ComboBox1.SelectionLength = 0
SetCursorPos(p.X, p.Y)
mouse_event(MOUSEEVENTF_LEFTDOWN, p.X, p.Y, 0, 0)
mouse_event(MOUSEEVENTF_MOVE, -2000, 0, 0, 0)
mouse_event(MOUSEEVENTF_LEFTUP, p1.X, p.Y, 0, 0)
SetCursorPos(p0.X, p0.Y)
End If
End Sub
兔子-顾问 2011-04-28
  • 打赏
  • 举报
回复
自己写一个combobox吧。textbox+button+listview
ccccffff 2011-04-28
  • 打赏
  • 举报
回复
还是有问题啊,选中的情况下,再点击,你会发现选中的长度都变短了。
lhblxm 2011-04-28
  • 打赏
  • 举报
回复

Private Sub ComboBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.Click

Dim p0 As Point = Cursor.Position
Dim p As Point = ComboBox1.PointToScreen(New Point(ComboBox1.Width - 23, 5))
Dim p1 As Point = ComboBox1.PointToScreen(New Point(0, 5))

If p0.X > p1.X And p0.X < p.X Then
SetCursorPos(p.X, p.Y)
mouse_event(MOUSEEVENTF_LEFTDOWN, p.X, p.Y, 0, 0)
mouse_event(MOUSEEVENTF_MOVE, -2000, 0, 0, 0)
mouse_event(MOUSEEVENTF_LEFTUP, p1.X, p.Y, 0, 0)
SetCursorPos(p0.X, p0.Y)
End If
End Sub
lhblxm 2011-04-28
  • 打赏
  • 举报
回复
 Private Sub ComboBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.Click
Dim p0 As Point = Cursor.Position
Dim p As Point = ComboBox1.PointToScreen(New Point(ComboBox1.Width - 23, 5))
Dim p1 As Point = ComboBox1.PointToScreen(New Point(0, 5))

If p0.X > p1.X And p0.X < p.X Then
ComboBox1.SelectionStart = ComboBox1.Text.Length
ComboBox1.SelectionLength = 0
SendKeys.Send("+{LEFT " & ComboBox1.Text.Length & "}")
End If
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
SendKeys.Send("{RIGHT}")
SendKeys.Send("+{LEFT " & ComboBox1.Text.Length & "}")
End Sub

ccccffff 2011-04-28
  • 打赏
  • 举报
回复
lhblxm你写的方法还是问题多多啊,要是下拉框里面的值还要更长,比如有50个字符的话,就不正确了。
ccccffff 2011-04-28
  • 打赏
  • 举报
回复
我也想自己写一个combobox,但是不会写。。。请问下,应该如何写呢?
ccccffff 2011-04-27
  • 打赏
  • 举报
回复
可能要重写某个方法,但是我不知道要重写那个方法
笨熊熊 2011-04-27
  • 打赏
  • 举报
回复
這個問題沒有遇到過。。
因爲沒有這麽想。。
ccccffff 2011-04-27
  • 打赏
  • 举报
回复
晕了,CSDN上的高手呢?跑哪里去了
ccccffff 2011-04-27
  • 打赏
  • 举报
回复
CSDN上的高手呢???
ccccffff 2011-04-27
  • 打赏
  • 举报
回复
描述错了,我的意思是在 ComboBox1_Click 事件里面也加上你这段话后,就出现上面的问题了。因为还需要在点击这个ComboBox的时候,实现被选中,并且光标在最左边的情况。
ccccffff 2011-04-27
  • 打赏
  • 举报
回复
楼上的,谢谢你的代码。你这个代码,下拉的时候问题是解决了。但是又出现了一个新的问题,在原先ComboBox的TEXT里面有值的情况下,无法下拉并且在下拉选项里选择了。
ccccffff 2011-04-27
  • 打赏
  • 举报
回复
是这样的意思,需要在选中文字的情况下,光标在最左边
大笨蛋 2011-04-27
  • 打赏
  • 举报
回复
你的意思是文字选中后光标要在左边?
选中文字的情况下,你还能看到光标?
ccccffff 2011-04-27
  • 打赏
  • 举报
回复
哎,最讨厌的就是像楼上那样的,自己都不明白,就随便教人了。
lhblxm 2011-04-27
  • 打赏
  • 举报
回复

Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Integer, ByVal dx As Long, ByVal dy As Integer, _
ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)
Public Const MOUSEEVENTF_LEFTDOWN = &H2 '模拟鼠标左键按下
Public Const MOUSEEVENTF_LEFTUP = &H4 '模拟鼠标左键释放
Public Const MOUSEEVENTF_MIDDLEDOWN = &H20 '模拟鼠标中间键按下
Public Const MOUSEEVENTF_MIDDLEUP = &H40 '模拟鼠标中间键释放
Public Const MOUSEEVENTF_RIGHTDOWN = &H8 '模拟鼠标右键按下
Public Const MOUSEEVENTF_RIGHTUP = &H10 '模拟鼠标右键释放
Public Const MOUSEEVENTF_MOVE = &H1 '模拟鼠标指针移动

Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Integer

Private Sub ComboBox1_DropDownClosed(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.DropDownClosed

Dim p0 As Point = Cursor.Position
Dim p As Point = ComboBox1.PointToScreen(New Point(ComboBox1.Width - 23, 5))
Dim p1 As Point = ComboBox1.PointToScreen(New Point(0, 5))
SetCursorPos(p.X, p.Y)
mouse_event(MOUSEEVENTF_LEFTDOWN, p.X, p.Y, 0, 0)
mouse_event(MOUSEEVENTF_MOVE, -2000, 0, 0, 0)
mouse_event(MOUSEEVENTF_LEFTUP, p1.X, p.Y, 0, 0)
SetCursorPos(p0.X, p0.Y)
End Sub





一时大意,被楼主讽刺了一下
ccccffff 2011-04-27
  • 打赏
  • 举报
回复
就没人来回答了?????????????????????????????????????????????
加载更多回复(3)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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