2012-12-23 116 views
3

目前我正在使用vb6應用程序。我想在MSFlexgrid中顯示數據但MSFlexgrid控件中沒有編輯工具。MSFlexGrid編輯VB6

有沒有辦法編輯MSFlexgrid?

+0

舊的VB5殘留MSFlexGrid和改進的VB6 MSHFlexgrid都是「顯示」控件,不提供任何用戶數據輸入或編輯功能。您必須編寫代碼,以便在「編輯」時將單元格TextBox「浮動」到單元格上,否則將移至舊的DBGrid或更新的DataGrid控件。 – Bob77

回答

4

有一種使用隱藏文本框的方法。在單元上的雙擊文本框將是可見的,編輯可能這裏是代碼段檢查

Private Sub Form_Load() 

    'Setting Col And row 

    MSFlexGrid1.Cols = 3 
    MSFlexGrid1.Rows = 10 
    'First row 
    MSFlexGrid1.TextMatrix(0, 0) = "ID" 
    MSFlexGrid1.TextMatrix(0, 1) = "Date" 
    MSFlexGrid1.TextMatrix(0, 2) = "Voucher Type" 
    'some data 
    MSFlexGrid1.TextMatrix(1, 0) = "E0000001" 
    MSFlexGrid1.TextMatrix(2, 0) = "E0000001" 
    MSFlexGrid1.TextMatrix(1, 1) = "01/04/10" 
    MSFlexGrid1.TextMatrix(2, 1) = "01/04/10"  
    MSFlexGrid1.TextMatrix(1, 2) = "Jrnl" 
    MSFlexGrid1.TextMatrix(2, 2) = "Jrnl" 
End Sub 

Private Sub MSFlexGrid1_DblClick() 

    'If MSFlexGrid1.Col = 3 Or MSFlexGrid1.Col = 6 Or MSFlexGrid1.Col = 7 Then 
     GridEdit Asc(" ") 
    'End If 
End Sub 

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer) 

     GridEdit KeyAscii 

End Sub 

Sub GridEdit(KeyAscii As Integer) 

    'use correct font 
    Text1.FontName = MSFlexGrid1.FontName 
    Text1.FontSize = MSFlexGrid1.FontSize 

    Select Case KeyAscii 

    Case 0 To Asc(" ") 
     Text1 = MSFlexGrid1 
     Text1.text = Trim(Text1.text) 
     Text1.SelStart = 1000 

    Case Else 
     Text1 = MSFlexGrid1 
     Text1.text = Trim(Text1.text) 
     Text1.SelStart = 1000 

End Select 

    'position the edit box 


    Text1.Left = MSFlexGrid1.CellLeft + MSFlexGrid1.Left 

    Text1.Top = MSFlexGrid1.CellTop + MSFlexGrid1.Top 

    Text1.Width = MSFlexGrid1.CellWidth 

    Text1.Height = MSFlexGrid1.CellHeight 

    Text1.Visible = True 

    Text1.SetFocus 

End Sub 

Private Sub MSFlexGrid1_LeaveCell() 

    If Text1.Visible Then 

    If MSFlexGrid1.Col = 6 Or MSFlexGrid1.Col = 7 Then 
     If Text1.text = "" Then 
      Text1.text = " " 
     End If 
    End If 
    MSFlexGrid1 = Text1 
    Text1.Visible = False 

    End If 

End Sub 

Private Sub MSFlexGrid1_GotFocus() 

    If Text1.Visible Then 

    If MSFlexGrid1.Col = 6 Or MSFlexGrid1.Col = 7 Then 

     If Text1.text = "" Then 
      Text1.text = " " 
     End If 

    End If 

    MSFlexGrid1 = Text1.text 
    Text1.Visible = False 

    End If 

End Sub 

Private Sub Text1_KeyPress(KeyAscii As Integer) 

    'noise suppression 

    If MSFlexGrid1.Col <> 6 And MSFlexGrid1.Col <> 7 Then 

    KeyAscii = 0 

    End If 

    If KeyAscii = vbKeyReturn Then 

    KeyAscii = 0 

    End If 

End Sub 
+1

這是否照顧表格上的tabbing? – wqw

+0

我已經停止了除MSFlexgrid之外的所有TabStop,並且我已經編寫了一個代碼我想要的Tab鍵上。 –

+0

我在'Text1_KeyPress'的第二個If塊中添加了'Call MSFlexGrid1_LeaveCell',這樣編輯模式就按下了返回鍵。在'Text1_LostFocus'中也一樣。 –

1

你也可以嘗試下面的代碼。這不需要文本框。

'Put this code in MSFlexGrid Keypress Event 

'=================================================== 
Private Sub MSFlexGrid_KeyPress(KeyAscii As Integer) 
With MSFlexGrid 
    Select Case KeyAscii 

     Case 8: 'IF KEY IS BACKSPACE THEN 
      If .Text <> "" Then .Text = _ 
      Left$(.Text, (Len(.Text) - 1)) 
     Case 13: 'IF KEY IS ENTER THEN 
      Select Case .Col 
       Case Is < (.Cols - 1): 
        SendKeys "{right}" 
       Case (.Cols - 1): 
        If (.Row + 1) = .Rows Then 
         .Rows = .Rows + 1 
        End If 
        SendKeys "{home}" + "{down}" 
      End Select 
     Case Else 
      .Text = .Text + Chr$(KeyAscii) 
      'write your own keyascii Validations under 
        'commented lines 
      Select Case .Col 
       Case 0, 1, 2: 
        'if (your condition(s)) then 
         'accept only charectors 
        'Else 
        ' keyascii=0 
        'End If 
       Case Else: 
      End Select 
    End Select 
End With 


End Sub 
+0

抱歉以不正確的方式放置代碼。請注意下次 – DevelopmentIsMyPassion

+0

如果有人想用箭頭鍵導航光標而不是工作。 –

+0

如果你能以某種方式顯示哪個單元格有焦點,會不錯。 –