窗体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中我想是没有的?怎么办呢?
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中我想是没有的?怎么办呢?
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
大家看看吧!!如果有更好的办法也可以告诉我.
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就可以了.
另加一个参数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的返回值.
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不知道是不是这样?
你现在给我写了个分支啊?
如果有100个窗体调用form2,而他们接收from2返回值的过程名又各不相同,如何做?
如果不知道from1的接收过程,那又怎么样?
算了吧.别弄了.我用那个M解决吧.估计VB不能实现我的要求了.