本帖最后由 rockage 于 2016-11-3 20:13 编辑
1. 如何在各个窗体之间传递值或调用函数?方法1:
方法1针对那种在“项目”里的“启动对象”是一个窗体的程序,VB.NET会自动实例化当前项目的所有Form类,
比如现在有类Form1,Form2如果启动对象是Form1,
那么按下运行按钮后,系统会自动实例化一个Form2类,实例名字与类名相同,即类Form2的实例也叫Form2(这个是我猜的!)
那么,在Form1的代码里,直接可以用Form2.Show来启动Form2实例并自动建立消息循环,正常使用。
方法2:
但如果启动对象不是一个窗体,而是Sub Main,
系统则不会自动创建Form的实例,需要手动声明,
在全局模块里需要:
Public frm2 As New Form2
然后在Sub Main里运行Form1:
Application.Run(New Form1)
这样在Form1里才能控制Form2 的内容。
修改成显式全局声明之后,感觉有点像回到VB6,即整个程序存续期间,所有的窗体都能随意更改任意窗体的值,但注意不能再使用Dispose关闭窗体,只能用Hide暂时隐藏,否则再次Show窗体的时候会报错。
方法3:
使用Owner属性:
Form1:
Dim frm2 As New Form2
frm2.Owner = Me
frm2.TextBox1.Text = "oookkk"
frm2.ShowDialog()
Form2:
Dim frm1 As Form1
frm1 = Me.Owner
frm1.TextBox1.Text = "kkkooo"
2. DatabaseGridView 添加 CheckBox 复选框
有时候即使加上了复选框,但是仍然会发生复选框出来了但是打不上勾的情况,那么多半是DataGridView设置了ReadOnly = True
1. 如何在各个窗体之间传递值或调用函数?方法1:
Dim frm2 As Form2 '将frm2定义为一个Form2类
frm2 = Form2 '让frm2实例化,等同于系统默认开启的那个Form2实例
frm2.TextBox1.Text = "XXX" '控制Form2的TextBox注意:方法1针对那种在“项目”里的“启动对象”是一个窗体的程序,VB.NET会自动实例化当前项目的所有Form类,
比如现在有类Form1,Form2如果启动对象是Form1,
那么按下运行按钮后,系统会自动实例化一个Form2类,实例名字与类名相同,即类Form2的实例也叫Form2(这个是我猜的!)
那么,在Form1的代码里,直接可以用Form2.Show来启动Form2实例并自动建立消息循环,正常使用。
方法2:
但如果启动对象不是一个窗体,而是Sub Main,
系统则不会自动创建Form的实例,需要手动声明,
在全局模块里需要:
Public frm2 As New Form2
然后在Sub Main里运行Form1:
Application.Run(New Form1)
这样在Form1里才能控制Form2 的内容。
修改成显式全局声明之后,感觉有点像回到VB6,即整个程序存续期间,所有的窗体都能随意更改任意窗体的值,但注意不能再使用Dispose关闭窗体,只能用Hide暂时隐藏,否则再次Show窗体的时候会报错。
方法3:
使用Owner属性:
Form1:
Dim frm2 As New Form2
frm2.Owner = Me
frm2.TextBox1.Text = "oookkk"
frm2.ShowDialog()
Form2:
Dim frm1 As Form1
frm1 = Me.Owner
frm1.TextBox1.Text = "kkkooo"
2. DatabaseGridView 添加 CheckBox 复选框
Dim selected As New DataGridViewCheckBoxColumn
dg1.Columns.Add(selected)有时候即使加上了复选框,但是仍然会发生复选框出来了但是打不上勾的情况,那么多半是DataGridView设置了ReadOnly = True