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
程序原本有一个事件: 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 IntegerStopRow = 4If 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
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
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
2 每次选CELL前先判断是否已经选中如是则取消坐标,如不是则添加在MATRIX里
3 MouseDown事件里先判断所有选中的坐标 依次将MATRIX里的坐标做相应加减以取得四周的坐标,如果符合选择条件不做任何响应也可X坐标和Y坐标存在两个ARRAY里取代MATRIX
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
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 IntegerStopRow = 4If 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 IfEnd Sub
那如何修改啊,有其他办法吗?