Form加载完成后,在text框中填入一个数字,如何才能让MsFlexGrid的行、列随着Text框中的数字的改变而实时改变呢?
另外,为何我用FindWindow找不到“另存为”对话框的句柄呢?各位高人还有什么高招吗?

解决方案 »

  1.   

    Form加载完成后,在text框中填入一个数字,如何才能让MsFlexGrid的行、列随着Text框中的数字的改变而实时改变呢?
    ______________________________________________
    根据Text数字改变MsFlexGrid.Row和MsFlexGrid.Col另外,为何我用FindWindow找不到“另存为”对话框的句柄呢?各位高人还有什么高招吗?
    _______________________________________________
    有代码吗?光这么说找不到问题。
      

  2.   

    h1 = FindWindow("AppFRAME", vbNullString)
        Debug.Print h1
        'SetWindowPos h1, HWND_BOTTOM, -100, -100, 0, 0, SWP_HIDEWINDOW  '隐藏PlotaW窗口
        SendKeys "%FS", True                                            '打开另存为对话框
        h2 = FindWindow("#32770", "另存为")                             '获取另存为对话框句柄
        'SetWindowPos h2, HWND_BOTTOM, -100, -100, 0, 0, SWP_HIDEWINDOW
        Debug.Print h2
        SendKeys CurSpectraPath, True                                   '输入文件名
        Debug.Print CurSpectraPath
        SendKeys "{TAB}{TAB}", True                                     '将焦点定位到保存按钮上
        SendKeys "{ENTER}", True                                        '回车
        SendKeys "%FX", True                                            '退出PlotaW
    h1每次都能顺利找到,但是h2每次的返回值都是0,当将h2 = FindWindow("#32770", "另存为")修改为h2 = FindWindow("#32770", vbNullString)后返回值始终是329704 ,不知是什么原因?
    :(
      

  3.   

    根据Text数字改变MsFlexGrid.Row和MsFlexGrid.Col则是在form上新建一个文本框text1,一个MsFlexGrid1。
    使用代码MsFlexGrid1.Rows = Val(text1.text)
            MsFlexGrid1.Redraw = True
    运行后,MsFlexGrid1的行、列均为预设值,如(5,5)。
    但是在文本框中填入一个数字,如8,MsFlexGrid1的行数并没有随之改变为8。经测试,如果加入一个Command1,将上述代码填入Command1段中,运行后点击Command1按钮则可以重绘MsFlexGrid1,使其行数变为8。请问该如何解决呢?谢谢!
      

  4.   

    Command1可以的话,说明你没有写在文本框相应的事件中,比如:
    Private Sub Form_Load()
        fg.Rows = 10
    End SubPrivate Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
        If KeyCode = 13 Then
            fg.Rows = Val(Text1.Text)
        End If
    End Sub这样在文本框中输入完毕按下回车就可以得到你要的结果
      

  5.   

    非常感谢!另外还有一个问题希望阁下能够赐教:
    我使用下面的代码实现MSFlexGrid1的数据录入:
    Private Sub MSFlexGrid1_EnterCell()
        ' 设置文本框的大小与位置,使之重叠在当前单元格上
        txtMSFG1.Left = MSFlexGrid1.Left + MSFlexGrid1.CellLeft
        txtMSFG1.Top = MSFlexGrid1.Top + MSFlexGrid1.CellTop
        txtMSFG1.Width = MSFlexGrid1.CellWidth
        txtMSFG1.Height = MSFlexGrid1.CellHeight
        txtMSFG1.Text = MSFlexGrid1.Text ' 将当前单元格的数据赋予文本框
        txtMSFG1.Visible = True
        'txtMSFG1.SetFocus
    End SubPrivate Sub MSFlexGrid1_LeaveCell()
        MSFlexGrid1.Text = txtMSFG1
    End Sub
    但是出现了问题:
        当鼠标左键单击第一行(标题行,row=0)的某一个单元格(如cell(0,1))时,该单元格所在列的所有Cell中的数据都被替换成了该列的第二个单元格(cell(1,1))中的数据。
    如果使用
        If MSFlexGrid2.Row > 0 Then
        ' 设置文本框的大小与位置,使之重叠在当前单元格上
        txtMSFG1.Left = MSFlexGrid1.Left + MSFlexGrid1.CellLeft
        txtMSFG1.Top = MSFlexGrid1.Top + MSFlexGrid1.CellTop
        txtMSFG1.Width = MSFlexGrid1.CellWidth
        txtMSFG1.Height = MSFlexGrid1.CellHeight
        txtMSFG1.Text = MSFlexGrid1.Text ' 将当前单元格的数据赋予文本框
        txtMSFG1.Visible = True
        'txtMSFG1.SetFocus
        End If
    再点击cell(0,1)则会将该列数据都清零。这个问题该如何解决呢?谢谢!