窗体1代码:
Public Sub settxt(temp As String)
  Text1.Text = temp
End SubPrivate Sub Command1_Click()
  Form2.m_formname = Me.Name
  Form2.Show
  Call Form2.toset("cccccccc")
End Sub窗体2代码:
Public m_formname As String
Dim iform As Form
Public m_method As String
Public Sub toset(sql As String)
  sql = "cccccccccc"
  For Each iform In Forms
    If iform.Name = m_formname Then
   Call iform.settxt(sql)
    End If
  Next
End Sub
大家应该看得出来,我是将窗体1在调用窗体2中的全局过程(带参数),窗体2处理之后,再调用窗体1中的全局过程(传回处理的结果),再处理之后显示结果.现在你们看到的这些运行都通过了.不过我现在想让form1.settxt这个方法也变成活的,代码修改为下:
窗体1代码:
Public Sub settxt(temp As String)
  Text1.Text = temp
End SubPrivate Sub Command1_Click()
  Form2.m_formname = Me.Name
  from2.m_method="settxt"
  Form2.Show
  Call Form2.toset("cccccccc")
End Sub
窗体2代码:
Public m_formname As String
Dim iform As Form
Public m_method As String
Public Sub toset(sql As String)
  sql = "cccccccccc"
  For Each iform In Forms
    If iform.Name = m_formname Then
   Call iform.m_method(sql)
    End If
  Next
End Sub大家看到差别了吗?现在就连form1中的方法也写活了,也就是说我将方法的名称传过去,然后form2就知道应该调用form1中的哪个方法了!VFP中应该很容易实现,因为有&(宏替换),去掉"",而VB中我想是没有的?怎么办呢?

解决方案 »

  1.   

    窗体1代码:
    Public Sub settxt(temp As String)
      Text1.Text = temp
    End SubPrivate Sub Command1_Click()
      Form2.m_formname = Me.Name
      from2.m_method="settxt"        '这里传递过去form1中接收返回参数的方法
      Form2.Show
      Call Form2.toset("cccccccc")
    End Sub
    窗体2代码:
    Public m_formname As String
    Dim iform As Form
    Public m_method As String
    Public Sub toset(sql As String)
      sql = "cccccccccc"
      For Each iform In Forms
        If iform.Name = m_formname Then
       Call iform.m_method(sql)  '传递给指定的窗体中的方法,这就完全是活口了.不管调用窗体是哪个,也不管是窗体1的方法是什么,只要在调用时指定好了,就什么也不用管了!
        End If
      Next
    End Sub
      大家看看吧!!如果有更好的办法也可以告诉我.
      

  2.   

    我没完全看懂搂主得意思,楼主是不是想在Call iform.m_method(sql)中指定窗体?如果是准也得话只要多加个参数就行了比如Call iform.m_method(sql,form1)然后下面得读取参数进行执行就可以了,不知道是不是这个意思?
      

  3.   

    我再修改一下窗体一的代码你就能看懂了!
    Public Sub settxt(temp As String)
      Text1.Text = temp
    End Sub
    public sub TTT(temp as string)
      text1.text=left(temp,3)
    end sub
    Private Sub Command1_Click()
      Form2.m_formname = Me.Name
      Form2.Show
      Call Form2.toset("cccccccc")
    End SubPrivate Sub Command2_Click()
      Form2.m_formname = Me.Name
      Form2.Show
      Call Form2.toset1("1111111")
    End Sub窗体2代码:
    Public m_formname As String
    Dim iform As Form
    Public Sub toset(sql As String)
      sql = "cccccccccc"
      For Each iform In Forms
        If iform.Name = m_formname Then
       Call iform.settxt(sql)
        End If
      Next
    End SubPublic Sub toset1(sql As String)
      sql = "cccccccccc"
      For Each iform In Forms
        If iform.Name = m_formname Then
       Call iform.TTT(sql)
        End If
      Next
    End Sub
    这样看得出来了吗?form2中两个方法代码相同,只差调用form1中方法的部分.我的目的是在调用form2时将要在toset中调用form1中方法也给出来,这样用一个toset就可以了.
      

  4.   

    我现在想到的方法挺忙烦的.实现思路如下:
    另加一个参数M,在调用form2.toset时给出M的值这样:
    窗体1代码:
    Public Sub settxt(temp As String,M as integer)
      select case M
        case 0
         text1.text=temp
        case 1
         text1.text=left(temp,3)
      end select
    End SubPrivate Sub Command1_Click() 
    Form2.m_formname = Me.Name
      from2.MM=0
      Form2.Show
      Call Form2.toset("cccccccc")
    End Sub
    窗体2代码:
    Public m_formname As String
    Dim iform As Form
    Public MM As integer
    Public Sub toset(sql As String)
      sql = "cccccccccc"
      For Each iform In Forms
        If iform.Name = m_formname Then
       Call iform.settxt(sql,mm)
        End If
      Next
    End Sub总感觉这样的方法很笨,因为我必需要在form1中定义一个指定的方法接收form2的返回值.
      

  5.   

    我做了一下,说时候我还是不太明白,不过看你的下面的代码给你的代码执行效果是一样的.
    FORM1Public Sub settxt(temp As String)
      Text1.Text = temp
    End Sub
    Public Sub TTT(temp As String)
      Text1.Text = Left(temp, 3)
    End Sub
    Private Sub Command1_Click()
      Form2.m_formname = Me.Name
      Form2.Show
      Call Form2.toset("cccccccc", True)
    End SubPrivate Sub Command2_Click()
      Form2.m_formname = Me.Name
      Form2.Show
      Call Form2.toset("1111111", False)
    End SubFORM2
    Public m_formname As String
    Dim iform As Form
    Public Sub toset(sql As String, index As Boolean)
      sql = "cccccccccc"
      For Each iform In Forms
        If iform.Name = m_formname Then
           If index Then
             Call iform.settxt(sql)
           Else
             Call iform.TTT(sql)
           End If
        End If
      Next
    End Sub不知道是不是这样?
      

  6.   

    晕哦.你怎么还不明白啊?
    你现在给我写了个分支啊?
    如果有100个窗体调用form2,而他们接收from2返回值的过程名又各不相同,如何做?
    如果不知道from1的接收过程,那又怎么样?
    算了吧.别弄了.我用那个M解决吧.估计VB不能实现我的要求了.