VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > vb >
  • vb.net 教程 3-2 窗体编程之窗体 4

订阅专栏
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
本节继续谈谈窗体传递参数
 
 
 
假设我要将Form1中的数据传递到Form2,可以采用以下方法:
 
 
 
首先理解一下:Form2其实是个类
不信,可以仔细打开Form2的代码,看看默认代码第一句是不是 “Public Class Form2”。
我们更深入的了解一下,在解决方案资源管理器,按下“显示所有文件”,下图1红色框内的按钮。
 
 
 
展开“Form2.vb”一项,可以看到有个“Form2.Designer.vb”,双击打开此项的代码,可以看到:
第三句代码:Inherits System.Windows.Forms.Form
可见,我们建立的窗体(不仅仅Form2)都从 System.Windows.Forms.Form 继承来的。
 
 
 
回到之前Form2的代码,在
Public Class Form2
End Class
内输入
    Sub New()
按下回车,OK,可以看到vs自动添加了代码进去:
 
    Sub New()
        ' 此调用是设计器所必需的。
        InitializeComponent()
        ' 在 InitializeComponent() 调用之后添加任何初始化。
 
    End Sub
 
我们需要加上一个窗体私有变量,在New过程加上参数:
 
    Dim passedParameter As String
 
    Private Sub New(ByVal passParameter As String)
 
        ' 此调用是设计器所必需的。
        InitializeComponent()
 
        ' 在 InitializeComponent() 调用之后添加任何初始化。
        passedParameter = passParameter
    End Sub
注意:
 
1、我们需要在InitializeComponent()后面增加代码
 
2、不能删除 InitializeComponent(),否则会影响窗口的设计
 
3、在InitializeComponent()上点击鼠标右键,选择“转到定义”,可以看到跳转到了之前所说的“Form2.Designer.vb”代码,并且提示”Windows 窗体设计器所必需的可以使用 Windows 窗体设计器修改它。不要使用代码编辑器修改它。“
 
 
回到Form1的代码:
 
我在《vb.net 教程 3-2 窗体编程之窗体 1》曾经用过如下代码
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Form2.Show()
        Form2.ControlBox = False
    End Sub
 
 
代码成功运行,并且将Form2的图标、最大化、最小化、关闭按钮都隐藏了。
 
 
 
再看看现在的代码:
 
 
 
可以看到,vs提示我们这段代码发生了错误,具体的错误信息:
 
 
 
怎么会这样呢?
 
我的理解:因为之前的Form2没有添加 New 过程,vs在编译后自己加了个New过程进去,但是我们现在给New加入了参数,显然在代码里面我们并没有传递参数给New,所以就会发生错误。所以我在《vb.net 教程 3-2 窗体编程之窗体 1》也说过,不推荐上述的代码,当然这个也涉及效率问题,并非绝对。
 
修改代码如下:
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 
        Dim S As String = "http://blog.csdn.net/uruseibest"
        Dim myform As Form2
        myform = New Form2(S)
        myform.Show()
    End Sub
 
 
要在Form2中显示出传递的参数也很容易,因为在之前我们定义了一个窗体级变量 passedParameter,在New()的时候,我们将这个变量设置为了传递的参数:
 
    Sub New(ByVal passParameter As String)
 
        ' 此调用是设计器所必需的。
        InitializeComponent()
 
        ' 在 InitializeComponent() 调用之后添加任何初始化。
        passedParameter = passParameter
    End Sub
所以,按钮的代码:
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MessageBox.Show("传递的参数是 " & passedParameter)
    End Sub
Form2总的代码如下:
 
Public Class Form2
    Dim passedParameter As String
 
    Sub New(ByVal passParameter As String)
 
        ' 此调用是设计器所必需的。
        InitializeComponent()
 
        ' 在 InitializeComponent() 调用之后添加任何初始化。
        passedParameter = passParameter
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MessageBox.Show("传递的参数是 " & passedParameter)
    End Sub
End Class
 
 
这次成功了,看看运行结果:
 
 
 
需要指出的是,在New()的时候不能使用Private,使用Public Sub New(...) 或者直接就 Sub New(...),如果使用了Private Sub New(...)或者Protected Sub New(...)将导致别的窗体不能访问这个窗体的New()方法
 
 
 
由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。
 
学习更多vb.net知识,请参看vb.net 教程 目录
————————————————
版权声明:本文为CSDN博主「VB.Net」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/uruseibest/article/details/70244857

相关教程