vb中如何跨窗口调用变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb中如何跨窗口调用变量相关的知识,希望对你有一定的参考价值。

vb中如何跨窗口调用变量

主要有三种办法:
1、模块里的公共变量
添加一个模块Module,在模块里声明变量。
Public FormValueA As Long
你可以在任何窗体里直接用FormValueA调用它。
但这个办法最不可靠,只适合在一些非常简单的小程序里使用。
因为这种变量任何窗体、模块都可以改变它的值。如果你在其他的窗体、模块意外地改变了它的值,或者是在不恰当的时机改变它的值,很容易造成程序错误。

2、公共变量
假如有个窗体叫Form1,在窗体里声明一个公共变量FormValueB。
Public FormValueB As Long
那么你在其他窗体里可以用Form1.FormValueB调用它。
这个办法也不可靠,在一些正规程序设计里应该被避免使用。
因为任何一个外部的过程都有可能改变这个值,也容易出现混乱。
但它至少比第一种好一些。

3、给窗体添加属性
假如有个窗体叫Form2,在窗体里声明一个属性FormValueC。
在窗体里声明一个私有变量FormValueD。
Private FormValueD As Long

Public Property Get FormValueC() As Long
'输出属性值
FormValueC = FormValueD
End Property

Public Property Let FormValueC(ByVal vNewValue As Long)
'输入属性值
FormValueD = vNewValue
End Property
你在其他窗体里可以用Form2.FormValueC调用它。
在Form2窗体里,这个属性的值实际保存在FormValueD变量里。
这个办法最复杂,但这是比较正规的做法。
你可以在输入、输出过程中对变量进行一些检测、判断,这样可以避免外界的调用对这个窗体造成干扰。
属性的值有时候未必在窗体里是一个变量。
比如:你写一个登记个人信息的窗体。假如输入了身份证号码,那么生日属性可以从身份证号码里提取。这样,生日属性就不必有个专门的变量存储,类似这样。
Public Property Get Birthday() As Long
'输出属性值
……从身份证号码提取生日……
Birthday = 被提取出来的生日
End Property
表面上看,你调用了Form3.Birthday好像从变量赋值一样获得生日。但实际上这个属性的值是属性的过程算出来的。
参考技术A 你好,建议你插入一个模块(Module),然后在模块中声明你的全局变量
例如在Module1中做如下声明
Public version As String

'而赋值过程可以在你的窗体代码中进行,例如
Private Sub Form_Load()
version = "3.1 beta"
End Sub
==================分隔线=======================
如果你一定要在窗体2中调用窗体1的变量,则需要在窗体1将其声明为全局变量:
Public test As String
但是这样做并不会对这个变量赋值
引用方式是:
MsgBox Form1.test
可以看到弹出内容为空本回答被提问者采纳
参考技术B 写在公有过程或者函数里,也就是public

VB跨线程调用WPF控件

如图,在VB中建立一个线程,然后在这个线程中调用一个UI线程并改变这个线程。但是这样会报错,说非UI线程不可以调用UI线程。有没有人能给出解答方案!

使用委托和Invoke,下面是个VB的例子
Delegate Sub SetTextCallback(ByVal pstrText As String)

Private Sub SbShowMessage(ByVal strMessage As String)
If Me.lbMessage.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SbShowMessage)
Me.Invoke(d, New Object() strMessage)
Else
lbMessage.Items.Add(Now.ToString("yyyy/MM/dd HH:mm:ss") & " " & strMessage & " ")
DoEvents()
lbMessage.SelectedIndex = lbMessage.Items.Count - 1
Dim intCounter As Integer
intCounter = lbMessage.Items.Count
If intCounter > 1000 Then
For i As Integer = 1 To intCounter - 1000
lbMessage.Items.RemoveAt(0)
Next
End If
End If
参考技术A VB不是那么稳定的了,

以上是关于vb中如何跨窗口调用变量的主要内容,如果未能解决你的问题,请参考以下文章

vb dll和工程如果想要共用相同的变量应该如何声明

c++中如何跨cpp文件调用结构体变量

如何在线程中调用其他类的成员函数和变量

VB跨线程调用WPF控件

vb的函数调用

MFC怎么调用其它窗口