我现在要做一个约束MSFlexGrid的修改动作,希望的结果是,如果某一格被打上了红色底色,则限制该格上下左右四个格的MSFlexGrid1_MouseDown事件, 当取消了红色底色后则解除限制。有方法的请直接和我联系:QQ  12814574

解决方案 »

  1.   

    1 把点中的CELL的坐标放在一个MATRIX里(1,1)(2,2)等等
    2 每次选CELL前先判断是否已经选中如是则取消坐标,如不是则添加在MATRIX里
    3 MouseDown事件里先判断所有选中的坐标 依次将MATRIX里的坐标做相应加减以取得四周的坐标,如果符合选择条件不做任何响应也可X坐标和Y坐标存在两个ARRAY里取代MATRIX
      

  2.   

    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
      

  3.   

    程序原本有一个事件:
    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
    那如何修改啊,有其他办法吗?