http://go8.163.com/dbcontrols/有个事例

解决方案 »

  1.   

    可能有些地区无法下载.就是那个【DATAGRID模拟主细表】源代码。是163有问题.
      

  2.   

        Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8原来的语句有两个错误:
    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
      

  3.   

     
        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的焦点。
      

  4.   

    Private Sub MSFlexGrid1_RowColChange()
        Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8
    End Sub
    不可能不行的啊.还有什么问题??
      

  5.   

    我想他只在0列上有效,当在其它的列上点击是无效。
    即点击1行0列。text就移动至1行0列。
    当点击2和0列。text就移动至2行0列。
    ........
    .......
    吴哥再接招。 谢谢。。
      

  6.   

    是固定行吗?如果是固定行那就
    Private Sub MSFlexGrid1_RowColChange()
        Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top , MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8
    End Sub
      

  7.   

    不是固定行。
    即点击1行0列。text就移动至1行0列。
    当点击2行和0列。text就移动至2行0列。
      

  8.   

    Private Sub MSFlexGrid1_RowColChange()
        Text1.Move MSFlexGrid1.Left + MSFlexGrid1.CellLeft, MSFlexGrid1.Top + MSFlexGrid1.CellTop, MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8
    End Sub
    不可能不行的啊.还有什么问题?? 
    这句话已经完成了,你想表达什么意思??
      

  9.   

    我强调的是一个“0”列。你上面写的这一个没有定位至0列。
    当我点击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列,并获得焦点。这样重复下去......
      

  10.   

    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
      

  11.   

    是固定列吗?如果是固定列那就
    Private Sub MSFlexGrid1_RowColChange()
        Text1.Move MSFlexGrid1.Left, MSFlexGrid1.cellTop , MSFlexGrid1.CellWidth - 8, MSFlexGrid1.CellHeight - 8
    End Sub 
      

  12.   

    不要设固定列,.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 
      

  13.   

    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
      

  14.   

    text还是不在第0列,而是>0列.
      

  15.   

    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
      

  16.   

    老兄的情况我也曾遇到过,上面的代码没问题的。是VB本身的Bug只要你在重新建立一个窗体试试可能就好了。
      

  17.   

    试一试:(我有点不记得拉)
    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
      

  18.   

    根据我所知道的,好象不是这样实现这种功能的,你可以查询一下以前的帖子。原理大概是
    这样的:
    1、在窗体上放一个text控件(你没有错)。
    2、当窗体中msflexgrid得到焦点时,是并不需要把text称到多当前单元格中。而仅是让当前单元格中的背景发生变化,好象时得到了焦点。(关键一)
    3、在进行2的同时,让text控件得到焦点,让它代替单元格接收输入字符。(关键二)
    4、在text控件的change事件中,改变msfliexgrid单元格中内容。(关键三)
    5、其它操作自己想吧。
    祝你成功。
      

  19.   

    这个试吧
    text1.move msflexgrid1.left+msflexgrid1.colpos(msflexgrid1.col),msflexgrid1.top+msflexgrid1.rows(msflexgrid1.row)
    text1.setfocus
      

  20.   

    错了
    应该是:
    text1.move msflexgrid1.left+msflexgrid1.colpos(msflexgrid1.col),msflexgrid1.top+msflexgrid1.rowpos(msflexgrid1.row)
    text1.setfocus 
      

  21.   

    给你个小例子做提示:新建一个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
      
    End Sub(网格无固定列,文本框控件text1)如有其他问题,请回信[email protected]
    祝你成功哦!!!!