Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) Dim hh As Integer Dim Xh As Integer Dim Cpm As String Dim cSpdj1 As Double hh = 12
If DataGrid1.Enabled = True Then If DataGrid1.Columns(0).Text = "品牌" And DataGrid1.Columns(0).Text = "工艺" And DataGrid1.Columns(0).Text = "规格" And DataGrid1.Columns(0).Text = "TOTAL:" Then DataGrid1.Columns(9).Locked = True Else DataGrid1.Columns(9).Locked = False End If Select Case DataGrid1.Col Case 0 Check1.Visible = False Text5.Visible = False Combo2.Visible = True Combo4.Visible = False Combo5.Visible = False Combo2.Width = DataGrid1.Columns(DataGrid1.Col).Width + 50 Combo2.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left Combo2.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195 Combo2.SetFocus If DataGrid1.Columns(0).Text <> "" Then Combo2.Text = DataGrid1.Columns(0).Text End If Case 1 Check1.Visible = False Combo2.Visible = False Combo4.Visible = False Combo5.Visible = False Text5.Visible = False Select Case DataGrid1.Columns(0).Text Case "品名" Check1.Visible = False Text5.Visible = True Combo2.Visible = False Combo4.Visible = False
Text5.Width = DataGrid1.Columns(DataGrid1.Col).Width + 50 Text5.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left Text5.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195 Text5.SetFocus If DataGrid1.Columns(0).Text <> "" Then Text5.Text = DataGrid1.Columns(1).Text End If End Select Case 2 Check1.Visible = False Combo2.Visible = False Combo4.Visible = False Combo5.Visible = False Text5.Visible = False Select Case DataGrid1.Columns(0).Text Case "规格" If DataGrid1.Columns(2).Text <> "" Then Text5.Text = DataGrid1.Columns(2).Text Else If Text5.Text <> "" Then DataGrid1.Columns(2).Text = Text5.Text End If End If End Select If IsNull(Rs_Jc_Shhy_Sp.Fields("ID")) Or Rs_Jc_Shhy_Sp.Fields("ID") = Rs_Jc_Shhy_Sp.RecordCount Then DataGrid1.Enabled = False Rs_Jc_Shhy_Sp.AddNew Rs_Jc_Shhy_Sp.Fields("ID") = Rs_Jc_Shhy_Sp.RecordCount Rs_Jc_Shhy_Sp.Fields("HTH") = Text1(0).Text Rs_Jc_Shhy_Sp.MovePrevious DataGrid1.Enabled = True End If Case 6 Select Case DataGrid1.Columns(0).Text Case "品名" Combo5.Visible = True Combo5.Width = DataGrid1.Columns(DataGrid1.Col).Width + 30 Combo5.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left Combo5.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195 Combo5.SetFocus Case Else Combo5.Visible = False End Select Case 8 Check1.Visible = False Text5.Visible = False Combo2.Visible = False Combo5.Visible = False Select Case DataGrid1.Columns(0).Text Case "价格条款" Combo4.Visible = True Combo4.Width = DataGrid1.Columns(DataGrid1.Col).Width + 30 Combo4.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left Combo4.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195 Combo4.SetFocus If DataGrid1.Columns(8).Text <> "" Then Combo4.Text = DataGrid1.Columns(8).Text End If Case Else Combo4.Visible = False End Select Case 9 Check1.Visible = False Text5.Visible = False Combo2.Visible = False Combo5.Visible = False Select Case DataGrid1.Columns(0).Text Case "品牌", "工艺", "规格", "TOTAL: " Check1.Visible = False Case Else Check1.Visible = True Check1.Width = DataGrid1.Columns(DataGrid1.Col).Width + 30 Check1.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left Check1.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195 Check1.SetFocus If DataGrid1.Columns(9).Text <> "" Then Check1.Value = 1 Else Check1.Value = 0 End If End Select If IsNull(Rs_Jc_Shhy_Sp.Fields("ID")) Or Rs_Jc_Shhy_Sp.Fields("ID") = Rs_Jc_Shhy_Sp.RecordCount Then DataGrid1.Enabled = False Rs_Jc_Shhy_Sp.AddNew Rs_Jc_Shhy_Sp.Fields("ID") = Rs_Jc_Shhy_Sp.RecordCount Rs_Jc_Shhy_Sp.Fields("HTH") = Text1(0).Text Rs_Jc_Shhy_Sp.MovePrevious DataGrid1.Enabled = True End If Case Else Check1.Visible = False Text5.Visible = False Combo2.Visible = False Combo4.Visible = False Combo5.Visible = False End Select
在 MSFlexGrid 中使用 Combo ================================================================== '窗体部分 ’To a form, add a command button (Command1) and a MSFlexGrid control (MSFlexGrid1). Add the following codeOption Explicit Public Sub FillComboData(currCol As Integer) Static lastColumn As Integer 'Based on the column passed, fill the combo 'with the data for that column If currCol <> lastColumn Then 'erase current combo Call SendMessage(Combo1.hwnd, CB_RESETCONTENT, 0&, ByVal 0&) Select Case currCol Case 1: 'Load the ComboBox's list With Combo1 .AddItem "Some text" .AddItem "Some more text" .AddItem "Still more text" .AddItem "Yet even more text" .AddItem "Way more text than that" End With Case 2: 'Load the ComboBox's list With Combo1 .AddItem "125.00" .AddItem "133.00" .AddItem "229.00" .AddItem "345.00" .AddItem "385.00" End With Case 3: 'Load the ComboBox's list With Combo1 .AddItem "box" .AddItem "carton" .AddItem "case" .AddItem "each" .AddItem "package" End With Case Else End Select End If lastColumn = currCol End Sub Private Sub Command1_Click() Unload Me End Sub Private Sub Form_Unload(Cancel As Integer) If defWinProc <> 0 Then Unhook 'Stop checking messages End If End Sub Private Sub MSFlexGrid1_MouseMove(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Static CurrentWidth As Single 'Check to see if the Cell's width has changed With MSFlexGrid1 If .CellWidth <> CurrentWidth Then Combo1.Width = .CellWidth CurrentWidth = .CellWidth End If End With End Sub Private Sub Form_Load() With MSFlexGrid1 hWndFlex = .hwnd Hook 'Start checking messages .AllowUserResizing = flexResizeColumns .Cols = 4 .Rows = 6 .RowHeightMin = Combo1.Height End With With Combo1 .Visible = False .ZOrder 0 .Width = MSFlexGrid1.CellWidth End With End Sub Private Sub Combo1_Click() 'Place the selected item into the 'Cell and hide the ComboBox MSFlexGrid1.Text = Combo1.Text Combo1.Visible = False End Sub =================================== ’模块部分 Public Const GWL_WNDPROC As Long = (-4) Public Const WM_SIZE As Long = &H5 Public Const WM_PAINT As Long = &HF Public Const CB_DELETESTRING As Long = &H144 Public Const CB_RESETCONTENT As Long = &H14B Public Const WM_LBUTTONDOWN As Long = &H201 Public Const WM_LBUTTONUP As Long = &H202 Public defWinProc As Long Public hWndFlex As Long Declare Function CallWindowProc Lib "user32" _ Alias "CallWindowProcA" _ (ByVal lpPrevWndFunc As Long, _ ByVal hwnd As Long, ByVal Msg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" _ (ByVal hwnd As Long, ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Public Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long Public Sub Hook() If defWinProc = 0 Then defWinProc = SetWindowLong(hWndFlex, _ GWL_WNDPROC, _ AddressOf WindowProc) End If End Sub Public Sub Unhook() If defWinProc = 0 Then Call SetWindowLong(hWndFlex, _ GWL_WNDPROC, _ defWinProc) defWinProc = 0 End If End Sub Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long WindowProc = CallWindowProc(defWinProc, hwnd, uMsg, wParam, lParam) Select Case uMsg Case WM_SIZE, WM_PAINT With Form1 .Combo1.Width = .MSFlexGrid1.CellWidth .Combo1.Left = .MSFlexGrid1.CellLeft + .MSFlexGrid1.Left .Combo1.Top = .MSFlexGrid1.CellTop + .MSFlexGrid1.Top End With Case WM_LBUTTONDOWN With Form1 .Combo1.Width = .MSFlexGrid1.CellWidth .Combo1.Left = .MSFlexGrid1.CellLeft + .MSFlexGrid1.Left .Combo1.Top = .MSFlexGrid1.CellTop + .MSFlexGrid1.Top End With With Form1.MSFlexGrid1 If .Col > 0 Then Form1.Combo1.Visible = False Form1.Combo1.Text = "" Form1.FillComboData .Col Form1.Combo1.Text = .Text Form1.Combo1.Visible = True End If End With Case Else End Select End Function
Dim hh As Integer
Dim Xh As Integer
Dim Cpm As String
Dim cSpdj1 As Double
hh = 12
If DataGrid1.Enabled = True Then
If DataGrid1.Columns(0).Text = "品牌" And DataGrid1.Columns(0).Text = "工艺" And DataGrid1.Columns(0).Text = "规格" And DataGrid1.Columns(0).Text = "TOTAL:" Then
DataGrid1.Columns(9).Locked = True
Else
DataGrid1.Columns(9).Locked = False
End If
Select Case DataGrid1.Col
Case 0
Check1.Visible = False
Text5.Visible = False
Combo2.Visible = True
Combo4.Visible = False
Combo5.Visible = False
Combo2.Width = DataGrid1.Columns(DataGrid1.Col).Width + 50
Combo2.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left
Combo2.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195
Combo2.SetFocus
If DataGrid1.Columns(0).Text <> "" Then
Combo2.Text = DataGrid1.Columns(0).Text
End If
Case 1
Check1.Visible = False
Combo2.Visible = False
Combo4.Visible = False
Combo5.Visible = False
Text5.Visible = False
Select Case DataGrid1.Columns(0).Text
Case "品名"
Check1.Visible = False
Text5.Visible = True
Combo2.Visible = False
Combo4.Visible = False
Text5.Width = DataGrid1.Columns(DataGrid1.Col).Width + 50
Text5.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left
Text5.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195
Text5.SetFocus
If DataGrid1.Columns(0).Text <> "" Then
Text5.Text = DataGrid1.Columns(1).Text
End If
End Select
Case 2
Check1.Visible = False
Combo2.Visible = False
Combo4.Visible = False
Combo5.Visible = False
Text5.Visible = False
Select Case DataGrid1.Columns(0).Text
Case "规格"
If DataGrid1.Columns(2).Text <> "" Then
Text5.Text = DataGrid1.Columns(2).Text
Else
If Text5.Text <> "" Then
DataGrid1.Columns(2).Text = Text5.Text
End If
End If
End Select
If IsNull(Rs_Jc_Shhy_Sp.Fields("ID")) Or Rs_Jc_Shhy_Sp.Fields("ID") = Rs_Jc_Shhy_Sp.RecordCount Then
DataGrid1.Enabled = False
Rs_Jc_Shhy_Sp.AddNew
Rs_Jc_Shhy_Sp.Fields("ID") = Rs_Jc_Shhy_Sp.RecordCount
Rs_Jc_Shhy_Sp.Fields("HTH") = Text1(0).Text
Rs_Jc_Shhy_Sp.MovePrevious
DataGrid1.Enabled = True
End If
Case 6
Select Case DataGrid1.Columns(0).Text
Case "品名"
Combo5.Visible = True
Combo5.Width = DataGrid1.Columns(DataGrid1.Col).Width + 30
Combo5.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left
Combo5.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195
Combo5.SetFocus
Case Else
Combo5.Visible = False
End Select
Case 8
Check1.Visible = False
Text5.Visible = False
Combo2.Visible = False
Combo5.Visible = False
Select Case DataGrid1.Columns(0).Text
Case "价格条款"
Combo4.Visible = True
Combo4.Width = DataGrid1.Columns(DataGrid1.Col).Width + 30
Combo4.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left
Combo4.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195
Combo4.SetFocus
If DataGrid1.Columns(8).Text <> "" Then
Combo4.Text = DataGrid1.Columns(8).Text
End If
Case Else
Combo4.Visible = False
End Select
Case 9
Check1.Visible = False
Text5.Visible = False
Combo2.Visible = False
Combo5.Visible = False
Select Case DataGrid1.Columns(0).Text
Case "品牌", "工艺", "规格", "TOTAL: "
Check1.Visible = False
Case Else
Check1.Visible = True
Check1.Width = DataGrid1.Columns(DataGrid1.Col).Width + 30
Check1.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left
Check1.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195
Check1.SetFocus
If DataGrid1.Columns(9).Text <> "" Then
Check1.Value = 1
Else
Check1.Value = 0
End If
End Select
If IsNull(Rs_Jc_Shhy_Sp.Fields("ID")) Or Rs_Jc_Shhy_Sp.Fields("ID") = Rs_Jc_Shhy_Sp.RecordCount Then
DataGrid1.Enabled = False
Rs_Jc_Shhy_Sp.AddNew
Rs_Jc_Shhy_Sp.Fields("ID") = Rs_Jc_Shhy_Sp.RecordCount
Rs_Jc_Shhy_Sp.Fields("HTH") = Text1(0).Text
Rs_Jc_Shhy_Sp.MovePrevious
DataGrid1.Enabled = True
End If
Case Else
Check1.Visible = False
Text5.Visible = False
Combo2.Visible = False
Combo4.Visible = False
Combo5.Visible = False
End Select
谁能告诉我啊,我可以再加分的。
==================================================================
'窗体部分
’To a form, add a command button (Command1) and a MSFlexGrid control (MSFlexGrid1). Add the following codeOption Explicit
Public Sub FillComboData(currCol As Integer)
Static lastColumn As Integer
'Based on the column passed, fill the combo
'with the data for that column
If currCol <> lastColumn Then
'erase current combo
Call SendMessage(Combo1.hwnd, CB_RESETCONTENT, 0&, ByVal 0&)
Select Case currCol
Case 1:
'Load the ComboBox's list
With Combo1
.AddItem "Some text"
.AddItem "Some more text"
.AddItem "Still more text"
.AddItem "Yet even more text"
.AddItem "Way more text than that"
End With
Case 2:
'Load the ComboBox's list
With Combo1
.AddItem "125.00"
.AddItem "133.00"
.AddItem "229.00"
.AddItem "345.00"
.AddItem "385.00"
End With
Case 3:
'Load the ComboBox's list
With Combo1
.AddItem "box"
.AddItem "carton"
.AddItem "case"
.AddItem "each"
.AddItem "package"
End With
Case Else
End Select
End If
lastColumn = currCol
End Sub
Private Sub Command1_Click()
Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
If defWinProc <> 0 Then
Unhook 'Stop checking messages
End If
End Sub
Private Sub MSFlexGrid1_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Static CurrentWidth As Single
'Check to see if the Cell's width has changed
With MSFlexGrid1
If .CellWidth <> CurrentWidth Then
Combo1.Width = .CellWidth
CurrentWidth = .CellWidth
End If
End With
End Sub
Private Sub Form_Load()
With MSFlexGrid1
hWndFlex = .hwnd
Hook 'Start checking messages
.AllowUserResizing = flexResizeColumns
.Cols = 4
.Rows = 6
.RowHeightMin = Combo1.Height
End With
With Combo1
.Visible = False
.ZOrder 0
.Width = MSFlexGrid1.CellWidth
End With
End Sub
Private Sub Combo1_Click()
'Place the selected item into the
'Cell and hide the ComboBox
MSFlexGrid1.Text = Combo1.Text
Combo1.Visible = False
End Sub
===================================
’模块部分
Public Const GWL_WNDPROC As Long = (-4)
Public Const WM_SIZE As Long = &H5
Public Const WM_PAINT As Long = &HF
Public Const CB_DELETESTRING As Long = &H144
Public Const CB_RESETCONTENT As Long = &H14B
Public Const WM_LBUTTONDOWN As Long = &H201
Public Const WM_LBUTTONUP As Long = &H202
Public defWinProc As Long
Public hWndFlex As Long
Declare Function CallWindowProc Lib "user32" _
Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, _
ByVal hwnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Public Sub Hook()
If defWinProc = 0 Then
defWinProc = SetWindowLong(hWndFlex, _
GWL_WNDPROC, _
AddressOf WindowProc)
End If
End Sub
Public Sub Unhook()
If defWinProc = 0 Then
Call SetWindowLong(hWndFlex, _
GWL_WNDPROC, _
defWinProc)
defWinProc = 0
End If
End Sub
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
WindowProc = CallWindowProc(defWinProc, hwnd, uMsg, wParam, lParam)
Select Case uMsg
Case WM_SIZE, WM_PAINT
With Form1
.Combo1.Width = .MSFlexGrid1.CellWidth
.Combo1.Left = .MSFlexGrid1.CellLeft + .MSFlexGrid1.Left
.Combo1.Top = .MSFlexGrid1.CellTop + .MSFlexGrid1.Top
End With
Case WM_LBUTTONDOWN
With Form1
.Combo1.Width = .MSFlexGrid1.CellWidth
.Combo1.Left = .MSFlexGrid1.CellLeft + .MSFlexGrid1.Left
.Combo1.Top = .MSFlexGrid1.CellTop + .MSFlexGrid1.Top
End With
With Form1.MSFlexGrid1
If .Col > 0 Then
Form1.Combo1.Visible = False
Form1.Combo1.Text = ""
Form1.FillComboData .Col
Form1.Combo1.Text = .Text
Form1.Combo1.Visible = True
End If
End With
Case Else
End Select
End Function
我试过了,感觉有点慢啊。
DataGrid控件的Column对象的Button属性设置有何意思?
给combox邦定一个数据控件,在list属性中选择好数据字段(或者自己输入数值),定位combox的相对位置。