十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
方法一: 通过WINSOCK传 方法二: 程序一生成一文件,然后程序二读取 方法三: 利用数据库存取这个是调用自制DLL示例,至于用ActiveX EXE,你可以参考一下,关键是留接口给另一程序 VB制作标准DLL文件并调用该文件的示例 1、建立一个ActiveX DLL工程,这时工程中将包括一个类模块Class1。 2、在ActiveX DLL工程中添加一个Form。 3、在类模块添加如下函数: Public Function ShowMyForm(s As String) Form1.Caption = s Form1.Show vbModal End Function 4、将工程编译为DLL。 调用时: 1、建立一个标准EXE,在菜单“工程|引用”中选择前面编译的DLL。 2、使用如下代码调用: Private Sub Form_Click() Dim cls As New Class1 cls.ShowMyForm("Hello") End Sub
在井陉等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、网站设计 网站设计制作按需搭建网站,公司网站建设,企业网站建设,成都品牌网站建设,营销型网站建设,外贸营销网站建设,井陉网站建设费用合理。
线程结束后利用委托生成事件返回,线程应用包括传入和传出参数。
Public Delegate Sub ThreadCallback(value As ThreadResult)
Public Class Form1
Private WithEvents _th_1 As Thread_1
Protected Overrides Sub OnLoad(e As System.EventArgs)
Dim value As ThreadObject
value.Index = 1
Me._th_1 = New Thread_1(Me)
Me._th_1.Run(value)
MyBase.OnLoad(e)
End Sub
Private Sub Thread_1_End(sender As Object, e As ThreadEventArgs) Handles _th_1.ThreadEnd
Me.TextBox1.Text = e.Result.Text
End Sub
End Class
Public Class Thread_1
Public Event ThreadEnd(sender As Object, e As ThreadEventArgs)
Private _control As Control
Sub New(control As Control)
Me._control = control
End Sub
Public Sub Run(value As Object)
Dim th As New Threading.Thread(AddressOf ThreadProc)
th.Start(value)
End Sub
Private Sub ThreadProc(obj As Object)
Dim value As ThreadObject = CType(obj, ThreadObject)
Dim result As ThreadResult = Nothing
If value.Index = 1 Then result.Text = "测试"
Dim callback As New ThreadCallback(AddressOf ThreadInvoke)
_control.Invoke(callback, result)
End Sub
Private Sub ThreadInvoke(value As ThreadResult)
RaiseEvent ThreadEnd(Me, New ThreadEventArgs(value))
End Sub
End Class
Public Structure ThreadObject
Public Index As Integer
'Public Rect As Rectangle
End Structure
Public Structure ThreadResult
Public Text As String
'Public Rect As Rectangle
End Structure
Public Class ThreadEventArgs
Inherits System.EventArgs
Private _result As ThreadResult
Public ReadOnly Property Result As ThreadResult
Get
Return _result
End Get
End Property
Sub New(value As ThreadResult)
Me._result = value
End Sub
End Class
可以使用,因为两个子程序的数据都是互通的,而且可以相互的补充,你用了另外一个子程序的数据也不影响你原本的子程序,这都是相互的
新窗体中写
构造函数
,然后调用。
比如你要调用的新窗体是From1.cs这个窗体,
public
Form1(要传入的参数)
{
//把传入的参数传入窗体中
//执行窗体标准内容
}
然后在需要调用的地方调用
Form1
f
=
new
Form1(传出的参数);
'--------Form1--------
Dim
f2
As
Form2
Private
Sub
Command1_Click()
Set
f2
=
New
Form2
f2.Show
vbModal
End
Sub
'--------Form1
End--------
'--------Form2--------
Dim
WithEvents
f3
As
Form3
Private
Sub
Command1_Click()
Set
f3
=
New
Form3
f3.Show
End
Sub
Public
Sub
f3_f2W()
Me.Command1.Caption
=
"f2W"
End
Sub
'--------Form2
End--------
'--------Form3--------
Public
Event
f2W()
Private
Sub
Command1_Click()
RaiseEvent
f2W
End
Sub
'--------Form3
End--------
f.Show();
如此就能实现调用了。
1.对象变量与对象本身是不同的,对象变量代表了对象真实数据在内存中的地址.
打个比方,“对象变量”就象你家的地址,“对象本身”就象你家。
你不能说你家的地址(xx路xx号xx房)就是你家,但是可以通过这个地址而找到你家。
2.传值的参数本身是被复制一份的,但这并不意味着它所代表的对象也被复制一份.
有如下一个函数:
Public
Function
Do_delete(ByVal
ps_usr_id
As
String)
As
Boolean
你在调用时可能这样调用:
dim
strID
as
string
strID
=
"kknd001"
if
Do_delete(strID)
then.....
当程序执行到Do_delete函数体里面时ps_usr_id变量其实是按照StrID的值而复制的一个变量。
在编写VB.Net windows应用程序的时候我们经常会遇到这种问题,怎么样在两个窗体间传递数据呢?例如,用VB.Net做一个文本编辑器,里面有一个搜索功能(即搜索我打开的文本里面的文字),点搜索则弹出搜索对话框,输入要搜索的内容,然后确定,就可以搜索到我打开的文本里面的文字了,这里就用到了两个窗体间的相互通信。我查看了相关的资料想了想,得出一些想法和方法。
也许有的人会觉得这个很简单呀。假如主框架为Form1,打开的搜索对话框是Form2.直接在Form2类中申明一个Form1实例:dim f1 as new Form1然后就可以通过f1来调用Form1中的域和函数了。其实不是这样的,你申明的新的Form1实例不是原来的那个Form1对象了,这样操作的是新的Form1中的域和函数,和最先打开的Form1是没有关系的。
那应该如何来完成两个窗体的通讯呢?我们要做的是把当前的Form1实例传递给Form2,如果是这样的话,问题就很好解决了。
方法1:首先,我们在Form2中定义:
Private mF_Form As Form1
我们更改Form2的构造函数为有参数的
Public Sub New(ByVal form As Form1)
MyBase.New()
'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()
Me.mF_Form = form
'在 InitializeComponent() 调用之后添加任何初始化
End Sub
在Form1中,我在 要用到Form2的地方申明如下:
Dim f1 As New Form2(Me)
这里的me指的就是Form1当前的实例,也就是把当前Form1的实例通过Form2的构造函数传递给Form2类(其实在网上看到过比较蠢的方式,就是在构造函数里面传递要传递的信息如:字符串或是数字等,这样做很有局限性,不能传递其他的,所有我们可以直接传递实例,来完成传递更多的信息。)
这样在Form2中使用myForm 就可以对原来的Form1窗口进行操作了。但是你要把要操作的Form1中的域和函数定义成public形式的(这样可能不安全),此时的myForm就是真正的最开始打开的Form1了,你可以用这个实例来进行两个窗体的通讯了。
方法2:其实VB.Net中提供了窗体间进行通讯的现成的属性,呵呵,我们能想到的,微软也想到了,他们创造的语言其实确实可以说是人性化了。
在Form1类中申明Form2时用如下代码:
Dim f2As New Form2 '类Form2中的构造函数不改,还是无参的
f2.owner=me
也可以使用函数的方法,给当前实例添加一个附属窗口 代码:Me.AddOwnedForm(f2)
在Form2类的定义中写如下代码:
dim f1 as Form1=me.owner
这样f1对应的就是原来的Form1的实例了,也就可以用这个进行通讯了。但是还是要把不同类之间访问的域和函数定义成public,哎,安全确实是一个问题!!