再 vb.net 不同的窗体中 如何进行数值的传递?
再 vb.net 中 如何进行数值的传递?
比如 : 一个用户再登陆窗口 输入了 a
如何在进入主窗口里,调用 a ?
需要用什么方法能记住 a ??
问题点数:30、回复次数:10Top
1 楼programart_life(理论派)回复于 2006-03-12 11:26:57 得分 15
我是用两个办法的
1、添加一个Modular,在那里定义需要的Public(Global)形变量。(数据比较多,且很多窗口要用到时)
2、利用窗口的Tag属性传递,代码如下形式
dim frm as 你的窗口
if isnothing(frm) orelse frm.isdisposed then
frm=new 你的窗口
end if
if frm.showdialog()=dialogrTop
2 楼programart_life(理论派)回复于 2006-03-12 11:30:47 得分 0
汗,按错键了,代码还没写完就发了。
dim frm as 你的窗口
if isnothing(frm) orelse frm.isdisposed then
frm=new 你的窗口
end if
if frm.showdialog()=dialogrusult.ok then
在这里取得frm.tag属性值,并处理他
frm.dispose()'//在这里销毁窗口
end if
你的窗口在单击OK按钮的处理程序里要整合各需要的值,再放入窗口的Tag
例如个值之间用一个不常用的字符分隔开来。
也许你可以把一个数组传如Tag,那样更方便,但是我没有这么做过,所以具体Tag能否放数组我就不清楚了。Top
3 楼lhx1977(清水无鱼)回复于 2006-03-12 11:32:35 得分 9
是那个地方定义成public static 的变量,都可以在不同的窗体之间使用。
一般情况是写一个公用的类比较好。
Top
4 楼programart_life(理论派)回复于 2006-03-12 11:40:06 得分 0
如果数据项很多,你可以在上面程序取得Tag的地方直接取窗口里各控件的值。
例如
你的登陆窗口有一个用户名TextBox,名称为txtUserName,一个密码TextBox,名称为txtPassword,一个隐身登陆的CheckBox,名称chkHide。你需要取得txtUserName和chkHide
就可以这么写
a=frm.txtUserName.Text
b=CheckBox.value
但是这样会不会造成问题我就不清楚了,要高手指教。Top
5 楼qingshangren(startman)回复于 2006-03-12 12:20:28 得分 0
我就是netice_cn (网冰) 如果能解决问题 我可以继续加分!
是这样的,这个问题的具体情况我再说一下吧!就是我这里有一个登录窗体(Frmlogin)一个窗体(FrmMain)我想设一个权限还判断两种用户的登录。当管理员登录时可以打开主窗体中所有的子窗体,当一般员工登录时,有一部分子窗体是不能看到的!我用了一个方法:
在FrmMain中:Sub ShowMune(Byval ShowOrHide As Boolean)
MenuItem1.Visible= ShowOrHide
MenuItem2.Visble=ShowOrHide
.........
End Sub
然后在 窗体加载时调用:
Private Sub FrmMain_load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
If 用户=管理员 then
ShowMuen(True)
else
ShowMune(False)
End If
End Sub
在这个判断中主要是这个条件语句怎么写!
在Frmlogin 中有两个TextBox 两Button 分别是: TbUser, Tbpwd ,BtOK,Btclose
当我点击TbOK 时在进入主窗体时怎么要把写入TbUser的TbUser.text的值取出并判断此是不是管理员,这里连接了Admin(id user pwd vip )表中的user字段,并通过它来判断vip的值是还是否!把这个判断传到主窗体中做作为判断条件!
在线急等****************Top
6 楼programart_life(理论派)回复于 2006-03-12 13:04:24 得分 0
你自己的思路不是很清楚了么?再套用上面我们提供的方法不就OK了?
判断部分程序如下(用adodb示例):
dim s as string'//查询语句
dim rst as new adodb.recordset
s="select * from [admin] where [user]='" & encryp(tbUser.text) & "' and pwd='" & encryp(tbpwd.text) & "'"
rst.open s,数据库链接
if rst.eof=rst.bof then
用户名或密码错误
else
如前面几帖所说,假如你定义了全局变量txtUser
txtUser=tbUser.text
if txtuser="管理员" then
showmenu(true)
else
showmenu(false)
end if
end if
上面的程序encryp是假定的你数据库中用户名和密码是用encryp加密的。加密程序如下
function encryp(byval s as string) as string
加密程序体,并且return加密后的字串
end function
登陆窗口关闭后,其他窗口可以通过全局变量txtUser取得当前登陆用户的名称。Top
7 楼yasmong()回复于 2006-03-12 15:53:18 得分 0
支持楼上Top
8 楼mchp(火狐)回复于 2006-03-12 15:54:49 得分 6
两个窗口
Form1 要将TextBox1的值传给Form2
Private Sub Button1_Click() Handles Button1.Click
Dim f As Form2 = New Form2(TextBox1.Text)
f.Show()
End Sub
Form2 重载构造函数 ,接受值,同理可传多个
Public Sub New(ByVal str As String)
MyBase.New()
InitializeComponent()
dim s as string = str
End Sub
Top
9 楼de98441201(雪貂)回复于 2006-03-12 17:13:39 得分 0
可以用代表或事件 也可一实现不过比较麻烦Top
10 楼qingshangren(startman)回复于 2006-03-13 09:34:23 得分 0
多谢各位的帮助啊!我是这么想的,我就是想定义了个变量,dim x as boolean
让X在用户在Textbox1中输入用户名是,接收到该用户的vip的值,并把这个值传到FrmMain中作为判断条件。不是知道代码怎么写,多谢了啊!等呢!Top




