求MSHFlexGrid1+Textbox实现编辑(200分)

yz696969 2011-04-19 03:57:53
1.实现鼠标向上,向下,向左,向右,移动编辑
2.向上,向下,向左,向右的时候。自动选中内容。
...全文
170 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
不用 2011-04-20
  • 打赏
  • 举报
回复
泰山V5,代码我拿来用了,哈哈。

我用的是MSHFlexGrid,不是MSFlexGrid,不过都差不多的,改个名字就可以用。

经测试,如果在窗体上先建MSHFlexGrid再建Text的话是正常的,如果先建Text再建MSHFlexGrid的话,就看不见Text中的光标闪烁了,不方便判断到底哪个单元格处于编辑状态.

另外,如果MSHFlexGrid当前活动单元格和Text的left和top值完全相同的话,Text会遮住当前活动单元格右侧和下方的边框线,我是额外减去20(如Flex.Left + Flex.CellLeft - 20)这样好看点,另外在Form_Load里设置Text1.BorderStyle = 0,这样看上去更好点,嘿嘿.
yz696969 2011-04-19
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20110419/16/54396524-9d73-466a-816e-02eef95486bf.html 来这贴。
dbcontrols 2011-04-19
  • 打赏
  • 举报
回复
帖子最上面一层你头像上面有个"管理菜单"->"给帖子加分"
dbcontrols 2011-04-19
  • 打赏
  • 举报
回复
200分?
[Quote=引用 8 楼 yz696969 的回复:]
谢谢,大功告成。
[/Quote]
yz696969 2011-04-19
  • 打赏
  • 举报
回复
谢谢,大功告成。
dbcontrols 2011-04-19
  • 打赏
  • 举报
回复
放到up事件里就可以了
Private Sub Form_Activate()
Text1.SetFocus
End Sub

Private Sub Form_Load()
MSFlexGrid1.Cols = 10
MSFlexGrid1.Rows = 10
MSFlexGrid1.TabStop = False
Text1.TabStop = False
Text1.Text = MSFlexGrid1.Text
Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth, MSFlexGrid1.CellHeight
End Sub

Private Sub MSFlexGrid1_Click()
Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth, MSFlexGrid1.CellHeight
Text1.Text = MSFlexGrid1.Text
Text1.SelStart = 0
Text1.SelLength = Len(MSFlexGrid1.Text)
Text1.SetFocus
End Sub


Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 9 Or KeyAscii = 13 Then
MSFlexGrid1.Text = Text1.Text
KeyAscii = 0
If MSFlexGrid1.Row = MSFlexGrid1.Rows - 1 And MSFlexGrid1.Col = MSFlexGrid1.Cols - 1 Then
MSFlexGrid1.Col = 1
MSFlexGrid1.Row = 1
Call MSFlexGrid1_Click
Exit Sub
End If
If MSFlexGrid1.Col <> MSFlexGrid1.Cols - 1 Then
MSFlexGrid1.Col = MSFlexGrid1.Col + 1
Call MSFlexGrid1_Click
Else
MSFlexGrid1.Col = 1
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
Call MSFlexGrid1_Click
End If
End If
End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
MSFlexGrid1.Text = Text1.Text
If KeyCode = 38 Then
If MSFlexGrid1.Row = 1 Then Exit Sub
MSFlexGrid1.Row = MSFlexGrid1.Row - 1
Call MSFlexGrid1_Click
Exit Sub
End If
If KeyCode = 40 Then
If MSFlexGrid1.Row = MSFlexGrid1.Rows - 1 Then Exit Sub
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
Call MSFlexGrid1_Click
Exit Sub
End If
End Sub
dbcontrols 2011-04-19
  • 打赏
  • 举报
回复
已经很不错了
[Quote=引用 5 楼 yz696969 的回复:]
引用 3 楼 dbcontrols 的回复:
以上代码在回车或Tab的时候可以移动


很苦脑,就是向下,的时候不能自动选中内容。
[/Quote]
yz696969 2011-04-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dbcontrols 的回复:]
以上代码在回车或Tab的时候可以移动
[/Quote]

很苦脑,就是向下,的时候不能自动选中内容。
dbcontrols 2011-04-19
  • 打赏
  • 举报
回复
上下也可以通过箭头移动位置
[Quote=引用 3 楼 dbcontrols 的回复:]
以上代码在回车或Tab的时候可以移动
[/Quote]
dbcontrols 2011-04-19
  • 打赏
  • 举报
回复
以上代码在回车或Tab的时候可以移动
dbcontrols 2011-04-19
  • 打赏
  • 举报
回复
向左,向右是用来在TextBox 内的
Private Sub Form_Activate()
Text1.SetFocus
End Sub

Private Sub Form_Load()
MSFlexGrid1.Cols = 10
MSFlexGrid1.Rows = 10
MSFlexGrid1.TabStop = False
Text1.TabStop = False
Text1.Text = MSFlexGrid1.Text
Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth, MSFlexGrid1.CellHeight
End Sub

Private Sub MSFlexGrid1_Click()
Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth, MSFlexGrid1.CellHeight
Text1.Text = MSFlexGrid1.Text
Text1.SelStart = 0
Text1.SelLength = Len(MSFlexGrid1.Text)
Text1.SetFocus
End Sub


Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
MSFlexGrid1.Text = Text1.Text
If KeyCode = 38 Then
If MSFlexGrid1.Row = 1 Then Exit Sub
MSFlexGrid1.Row = MSFlexGrid1.Row - 1
Call MSFlexGrid1_Click
End If
If KeyCode = 40 Then
If MSFlexGrid1.Row = MSFlexGrid1.Rows - 1 Then Exit Sub
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
Call MSFlexGrid1_Click
End If
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 9 Or KeyAscii = 13 Then
MSFlexGrid1.Text = Text1.Text
KeyAscii = 0
If MSFlexGrid1.Row = MSFlexGrid1.Rows - 1 And MSFlexGrid1.Col = MSFlexGrid1.Cols - 1 Then
MSFlexGrid1.Col = 1
MSFlexGrid1.Row = 1
Call MSFlexGrid1_Click
Exit Sub
End If
If MSFlexGrid1.Col <> MSFlexGrid1.Cols - 1 Then
MSFlexGrid1.Col = MSFlexGrid1.Col + 1
Call MSFlexGrid1_Click
Else
MSFlexGrid1.Col = 1
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
Call MSFlexGrid1_Click
End If
End If
End Sub
咸清 2011-04-19
  • 打赏
  • 举报
回复
怎么?想做Excel?
按住shift移动光标就可以了~

7,763

社区成员

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

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