Private Sub MSFlexGrid1_RowColChange() '在这里改成符合你要求的条件判断就行了. If MSFlexGrid1.Row符合你的条件 and MSFlexGrid1.Col符合你的条件 then Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8 Else 'Do nothing End If End Sub
是固定列吗?如果是固定列那就 Private Sub MSFlexGrid1_RowColChange() Text1.Move MSFlexGrid1.Left, MSFlexGrid1.cellTop , MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8 End Sub
不要设固定列,.FixedCols=0.再用我前面说的方法就行了。回复人: foolishtiger(吴文智) (2001-11-26 16:18:10) 得0分 Private Sub MSFlexGrid1_RowColChange() '在这里改成符合你要求的条件判断就行了. If MSFlexGrid1.Row符合你的条件 and MSFlexGrid1.Col符合你的条件 then Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8 Else 'Do nothing End If End Sub
Option ExplicitPrivate x, yPrivate Sub MSFlexGrid1_Scroll() Text1.Visible = False End SubPrivate Sub MSFlexGrid1_Click() With MSFlexGrid1 Text1.Text = .Col Text1.Text = .Row Text1.Left = .Left + .CellLeft Text1.Top = .Top + .CellTop Text1.Width = .CellWidth Text1.Height = .CellHeight Text1.Text = .TextMatrix(.Row, .Col) Text1.Visible = True Text1.SetFocus x = .Row y = .Col End With End Sub Private Sub text1_LostFocus() Text1.Visible = False MSFlexGrid1.TextMatrix(x, y) = Text1.Text 'Data.UpdateRecord End SubPrivate Sub Form_Click() Text1.Visible = False End Sub
text还是不在第0列,而是>0列.
Private Sub MSFlexGrid1_Click() editrow=MSFlexGrid1.row'记下编辑row editcol=MSFlexGrid1.col'记下编辑col if MSFlexGrid1.col>0 then exit sub MSFlexGrid1.col=0 Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8 text1.visible=true ''''''''''其实下面一句看你要编辑什么内容了 text1.text=MSFlexGrid1.textmatrix(editrow,editcol) text1.setfocus text1.selstart=0 text1.sellenth=len(text1.text) end sub Private Sub text1_LostFocus() 'call datacheck'数据检查 Text1.Visible = False MSFlexGrid1.TextMatrix(editrow, editcol) = Text1.Text 'Data.UpdateRecord End Sub
试一试:(我有点不记得拉) Private Sub MSFlexGrid1_click() if MSFlexGrid1.mousecol=0 then Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top +MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8 end if End Sub
给你个小例子做提示:新建一个form,只放上一个text,一个msflexgrid控件,加上这些代码,运行,(有待改进,鼠标点击获得焦点,然后敲回车键,可以编辑对应的网格单元)Private Sub Form_Load() MSFlexGrid1.Rows = 3 MSFlexGrid1.Cols = 4 For i = 0 To 2 For j = 0 To 3 MSFlexGrid1.TextMatrix(i, j) = CStr(i + j) Next Next Text1.Visible = FalseMSFlexGrid1.FixedRows = 0 MSFlexGrid1.FixedCols = 0 End Sub Private Sub MSFlexGrid1_DblClick() If MSFlexGrid1.Row > 0 And MSFlexGrid1.Col = 0 Then MSFlexGrid1_KeyPress 13End SubPrivate Sub MSFlexGrid1_KeyPress(KeyAscii As Integer) Dim char As String If KeyAscii = 13 Then Text1.Text = MSFlexGrid1.Text Text1.SelStart = Len(Text1.Text) Else char = Chr(KeyAscii) Text1.Text = char Text1.SelStart = 1
End If showtextbox KeyAscii = 0End Sub Sub showtextbox() With MSFlexGrid1 Text1.Visible = False Text1.Height = .RowHeight(.Row) - (Screen.TwipsPerPixelY) * 2 Text1.Width = .ColWidth(.Col) Text1.Left = .CellLeft + .Left Text1.Top = .CellTop + .Top Text1.Visible = True Text1.SetFocus End WithEnd Sub Private Sub msflexgrid1_leavecell() MSFlexGrid1.Text = Text1 If MSFlexGrid1.Col = 0 And MSFlexGrid1.Row <> 0 And MSFlexGrid1.Row = MSFlexGrid1.Rows - 1 And MSFlexGrid1.Text <> "" Then MSFlexGrid1rows = MSFlexGrid1.Rows + 1 End If End Sub Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Text1.Visible = False End SubPrivate Sub MSFlexGrid1_RowColChange() Text1.Text = MSFlexGrid1.Text End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 ThenMSFlexGrid1.Text = Text1.Text Text1.Visible = False MSFlexGrid1.SetFocus If MSFlexGrid1.Col < (MSFlexGrid1.Cols - 1) Then MSFlexGrid1.Col = MSFlexGrid1.Col + 1 ElseIf MSFlexGrid1.Row < MSFlexGrid1.Rows - 1 Then MSFlexGrid1.Row = MSFlexGrid1.Row + 1 MSFlexGrid1.Col = 0 End If KeyAscii = 0 End If
1是msflxgrid1.celltop,msflxgrid1.height中拼写错了.
2是.width和.height不对,应该用.CellWidth, .CellHeight text1.move msflexgrid1.left+msflexgrid1.cellleft,msflexgrid1.top+msflxgrid1.celltop,msflexgrid1.width-8,msflxgrid1.height-8
Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8
还是不能定位到理想的位置。
我想在msflexgrid1的0列上放一个text控件。当我点击msflexgrid的1行0列时
text就定位在msflexgrid的1行0列。当我点击msflexgrid的2行0列时,text就定位至
msflexgrid的2行0列,并获得text的焦点。
Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8
End Sub
不可能不行的啊.还有什么问题??
即点击1行0列。text就移动至1行0列。
当点击2和0列。text就移动至2行0列。
........
.......
吴哥再接招。 谢谢。。
Private Sub MSFlexGrid1_RowColChange()
Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top , MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8
End Sub
即点击1行0列。text就移动至1行0列。
当点击2行和0列。text就移动至2行0列。
Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8
End Sub
不可能不行的啊.还有什么问题??
这句话已经完成了,你想表达什么意思??
当我点击msflexgrid1控件的“1行0列”时,“1行0列”获得焦点。当点击“1行1列”时,不能获得焦点。即(text1.visible=false),当点击msflexgrid的1行2列时,在msflexgrid1的”1行2列“又获得焦点,即(text1又移至msflexgrid的1行2列处),当在msflexgrid的”1行2列“处输入文字回车后即(在text1中响应回车后, msflexgrid又增加一行。text又移至下面这一行的0列,并获得焦点。这样重复下去......
'在这里改成符合你要求的条件判断就行了.
If MSFlexGrid1.Row符合你的条件 and MSFlexGrid1.Col符合你的条件 then
Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8
Else
'Do nothing
End If
End Sub
Private Sub MSFlexGrid1_RowColChange()
Text1.Move MSFlexGrid1.Left, MSFlexGrid1.cellTop , MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8
End Sub
Private Sub MSFlexGrid1_RowColChange()
'在这里改成符合你要求的条件判断就行了.
If MSFlexGrid1.Row符合你的条件 and MSFlexGrid1.Col符合你的条件 then
Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8
Else
'Do nothing
End If
End Sub
Text1.Visible = False
End SubPrivate Sub MSFlexGrid1_Click()
With MSFlexGrid1
Text1.Text = .Col
Text1.Text = .Row
Text1.Left = .Left + .CellLeft
Text1.Top = .Top + .CellTop
Text1.Width = .CellWidth
Text1.Height = .CellHeight
Text1.Text = .TextMatrix(.Row, .Col)
Text1.Visible = True
Text1.SetFocus
x = .Row
y = .Col
End With
End Sub
Private Sub text1_LostFocus()
Text1.Visible = False
MSFlexGrid1.TextMatrix(x, y) = Text1.Text
'Data.UpdateRecord
End SubPrivate Sub Form_Click()
Text1.Visible = False
End Sub
editrow=MSFlexGrid1.row'记下编辑row
editcol=MSFlexGrid1.col'记下编辑col
if MSFlexGrid1.col>0 then exit sub
MSFlexGrid1.col=0
Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8
text1.visible=true
''''''''''其实下面一句看你要编辑什么内容了
text1.text=MSFlexGrid1.textmatrix(editrow,editcol)
text1.setfocus
text1.selstart=0
text1.sellenth=len(text1.text)
end sub
Private Sub text1_LostFocus()
'call datacheck'数据检查
Text1.Visible = False
MSFlexGrid1.TextMatrix(editrow, editcol) = Text1.Text
'Data.UpdateRecord
End Sub
Private Sub MSFlexGrid1_click()
if MSFlexGrid1.mousecol=0 then
Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top +MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8
end if
End Sub
这样的:
1、在窗体上放一个text控件(你没有错)。
2、当窗体中msflexgrid得到焦点时,是并不需要把text称到多当前单元格中。而仅是让当前单元格中的背景发生变化,好象时得到了焦点。(关键一)
3、在进行2的同时,让text控件得到焦点,让它代替单元格接收输入字符。(关键二)
4、在text控件的change事件中,改变msfliexgrid单元格中内容。(关键三)
5、其它操作自己想吧。
祝你成功。
text1.move msflexgrid1.left+msflexgrid1.colpos(msflexgrid1.col),msflexgrid1.top+msflexgrid1.rows(msflexgrid1.row)
text1.setfocus
应该是:
text1.move msflexgrid1.left+msflexgrid1.colpos(msflexgrid1.col),msflexgrid1.top+msflexgrid1.rowpos(msflexgrid1.row)
text1.setfocus
MSFlexGrid1.Rows = 3
MSFlexGrid1.Cols = 4
For i = 0 To 2
For j = 0 To 3
MSFlexGrid1.TextMatrix(i, j) = CStr(i + j)
Next
Next
Text1.Visible = FalseMSFlexGrid1.FixedRows = 0
MSFlexGrid1.FixedCols = 0
End Sub
Private Sub MSFlexGrid1_DblClick()
If MSFlexGrid1.Row > 0 And MSFlexGrid1.Col = 0 Then MSFlexGrid1_KeyPress 13End SubPrivate Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)
Dim char As String
If KeyAscii = 13 Then
Text1.Text = MSFlexGrid1.Text
Text1.SelStart = Len(Text1.Text)
Else
char = Chr(KeyAscii)
Text1.Text = char
Text1.SelStart = 1
End If
showtextbox
KeyAscii = 0End Sub
Sub showtextbox()
With MSFlexGrid1
Text1.Visible = False
Text1.Height = .RowHeight(.Row) - (Screen.TwipsPerPixelY) * 2
Text1.Width = .ColWidth(.Col)
Text1.Left = .CellLeft + .Left
Text1.Top = .CellTop + .Top
Text1.Visible = True
Text1.SetFocus
End WithEnd Sub
Private Sub msflexgrid1_leavecell()
MSFlexGrid1.Text = Text1
If MSFlexGrid1.Col = 0 And MSFlexGrid1.Row <> 0 And MSFlexGrid1.Row = MSFlexGrid1.Rows - 1 And MSFlexGrid1.Text <> "" Then
MSFlexGrid1rows = MSFlexGrid1.Rows + 1
End If
End Sub
Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Text1.Visible = False
End SubPrivate Sub MSFlexGrid1_RowColChange()
Text1.Text = MSFlexGrid1.Text
End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 ThenMSFlexGrid1.Text = Text1.Text
Text1.Visible = False
MSFlexGrid1.SetFocus
If MSFlexGrid1.Col < (MSFlexGrid1.Cols - 1) Then
MSFlexGrid1.Col = MSFlexGrid1.Col + 1
ElseIf MSFlexGrid1.Row < MSFlexGrid1.Rows - 1 Then
MSFlexGrid1.Row = MSFlexGrid1.Row + 1
MSFlexGrid1.Col = 0
End If
KeyAscii = 0
End If
End Sub(网格无固定列,文本框控件text1)如有其他问题,请回信[email protected]
祝你成功哦!!!!