MSFlexGrid1_MouseDown事件的修改,写过MSFlexGrid的请进,在线WAITING FOR U

hugoon 2005-10-12 07:57:20
我现在要做一个约束MSFlexGrid的修改动作,希望的结果是,如果某一格被打上了红色底色,则限制该格上下左右四个格的MSFlexGrid1_MouseDown事件, 当取消了红色底色后则解除限制。

有方法的请直接和我联系:QQ 12814574
...全文
228 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hugoon 2005-10-14
  • 打赏
  • 举报
回复
顶一下啊
hugoon 2005-10-14
  • 打赏
  • 举报
回复
每人回答吗 ?
hugoon 2005-10-13
  • 打赏
  • 举报
回复
程序原本有一个事件:
Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)

Dim i, j, k As Integer
Dim LastStopRow, StopRow As Integer
Dim SaveCol As Integer

StopRow = 4

If MSFlexGrid1.Row = 4 And MSFlexGrid1.Col <> 0 Then
If MSFlexGrid1.CellBackColor = vbRed Then
'//////////////////////////// 红变黄 //////////////////////////
Text2.Text = ""
MSFlexGrid1.CellBackColor = &H80FFFF
NumNeed = NumNeed - 1
StatusBar1.Panels(3).Text = "现有" + Str(NumNeed) + " 个要求被选中"


If NumNeed = 0 Then
Command1.Enabled = False

清除所有加工要求.Enabled = False
StatusBar1.Panels(2).Text = "点击某加工要求下面对应的黄色单元格即选中该要求,选中后单元格用红色表示"
End If

MSFlexGrid1.FocusRect = flexFocusNone
For i = 5 To 26
MSFlexGrid1.Row = i
If MSFlexGrid1.Text = "●" Then
LastStopRow = i
End If
Next i
MSFlexGrid1.FocusRect = flexFocusLight

For i = 5 To LastStopRow

MSFlexGrid1.Row = i
If MSFlexGrid1.Text = "●" Then

For j = StopRow + 1 To i


If j - 1 <> StopRow Then
MSFlexGrid1.Row = j - 1
MSFlexGrid1.CellBackColor = vbWhite
End If

MSFlexGrid1.Row = j
MSFlexGrid1.CellBackColor = &HFFC0C0
SaveCol = MSFlexGrid1.Col
'/////////////// 行向搜索 //////////////

If MSFlexGrid1.Text = "●" Then

For k = MSFlexGrid1.Col To 1 Step -1
If k <> 27 Then
MSFlexGrid1.Col = k + 1
MSFlexGrid1.CellBackColor = vbWhite
End If

MSFlexGrid1.Col = k

If RedTimes(MSFlexGrid1.Row) > 1 Then
RedTimes(MSFlexGrid1.Row) = RedTimes(MSFlexGrid1.Row) - 1
Else
MSFlexGrid1.CellBackColor = &HFFC0C0
RedTimes(MSFlexGrid1.Row) = RedTimes(MSFlexGrid1.Row) - 1
End If
Next k
End If
MSFlexGrid1.Col = SaveCol
Next j

StopRow = i
End If
Next i

Else

'//////////////////////////// 变红 //////////////////////////
Text2.Text = ""
MSFlexGrid1.CellBackColor = vbRed
NumNeed = NumNeed + 1
StatusBar1.Panels(3).Text = "现有" + Str(NumNeed) + " 个要求被选中"
StatusBar1.Panels(2).Text = "本步的作用在于搜索出能实现给定加工要求的一组工艺算子,即左边变红的τi"
Command1.Enabled = True

清除所有加工要求.Enabled = True

'////////////////////////// 搜索工艺算子 ///////////////////////

'/////////////// 列向搜索 /////////////
MSFlexGrid1.FocusRect = flexFocusNone

For i = 5 To 26
MSFlexGrid1.Row = i
If MSFlexGrid1.Text = "●" Then
LastStopRow = i
End If
Next i
MSFlexGrid1.FocusRect = flexFocusLight

For i = 5 To LastStopRow

MSFlexGrid1.Row = i
If MSFlexGrid1.Text = "●" Then

For j = StopRow + 1 To i


If j - 1 <> StopRow Then
MSFlexGrid1.Row = j - 1
MSFlexGrid1.CellBackColor = vbWhite
End If

MSFlexGrid1.Row = j
MSFlexGrid1.CellBackColor = vbRed
SaveCol = MSFlexGrid1.Col
'/////////////// 行向搜索 //////////////

If MSFlexGrid1.Text = "●" Then

For k = MSFlexGrid1.Col To 1 Step -1
If k <> 27 Then
MSFlexGrid1.Col = k + 1
MSFlexGrid1.CellBackColor = vbWhite
End If
MSFlexGrid1.Col = k
MSFlexGrid1.CellBackColor = vbRed

RedTimes(MSFlexGrid1.Row) = RedTimes(MSFlexGrid1.Row) + 1
Next k
End If
MSFlexGrid1.Col = SaveCol
Next j

StopRow = i
End If
Next i














End If
End If

End Sub
那如何修改啊,有其他办法吗?
northwolves 2005-10-12
  • 打赏
  • 举报
回复
Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim myrow As Integer, mycol As Integer, allow As Boolean
allow = True
With MSFlexGrid1
myrow = .MouseRow
mycol = .MouseCol
On Error Resume Next
.Row = myrow - 1
.Col = mycol
If .CellBackColor = vbRed Then allow = False: Exit Sub

.Row = myrow + 1
.Col = mycol
If .CellBackColor = vbRed Then allow = False: Exit Sub

.Row = myrow
.Col = mycol - 1
If .CellBackColor = vbRed Then allow = False: Exit Sub

.Row = myrow
.Col = mycol + 1
If .CellBackColor = vbRed Then allow = False: Exit Sub

.Row = myrow
.Col = mycol
End With
If allow = True Then MsgBox "这个格可以有反应"

End Sub
qgqchile 2005-10-12
  • 打赏
  • 举报
回复
1 把点中的CELL的坐标放在一个MATRIX里(1,1)(2,2)等等
2 每次选CELL前先判断是否已经选中如是则取消坐标,如不是则添加在MATRIX里
3 MouseDown事件里先判断所有选中的坐标 依次将MATRIX里的坐标做相应加减以取得四周的坐标,如果符合选择条件不做任何响应

也可X坐标和Y坐标存在两个ARRAY里取代MATRIX

1,451

社区成员

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

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