VB.NET的两个简单问题???

时间:2022-05-24 22:09:14
问题一:在VB.NET中有两个FORM,在其中一个FORM中一个TEXTBOX1,现在我想在另一个FORM中调用TEXTBOX1.text里面的参数,不知道程序是怎么样实现的??
问题二:在VB.NET中是如何解决绝对路径的问题???就是说我想调用某一个文件,在程序中如果用相对路径来表示??

9 个解决方案

#1


1添加一个公共模块
在公共模块里实例化两个窗体 然后就可以像在vb6里 一样了
2 application.startuppath??

#2


1、在FORM2里定义一个类,继承一下FORM1里的TEXTBOX1
2、把路径取了就行了,试试

#3


1.假设FORM1有TEXTBOX1
 在form1中添加如下代码:
    Public Property Text() As String
        Get
            Text = Me.TEXTBOX1.Text
        End Get
        Set(ByVal Value As String)
            ’如果设置TEXTBOX1.Text则在这里写 Me.TEXTBOX1.Text = Value
        End Set
    End Property
  在form2里打开form1并调用form1里TEXTBOX1.Text的参数:
  dim f as new form1
  f.ShowDialog(Me)
  msgbox f.text


2.Application.StartupPath

#4


to  Surpass:
先谢谢你的帮忙,但问题还没有解决:
1。我是通过FORM1中BUTTON1来显示FORM2的,在FORM2初始化时我加入
    dim f as new form1
    f.ShowDialog(Me)
    程序会再次弹出FORM1,这我是不想出现的。
    还有就是TEXTBOX1.text的值是不断变化的,你的方法只是能取到FORM1初始化时的值,而当TEXTBOX1.text的值发生改变时就不能传递过去了。
2.我是想用相对路径来取得报表文件,我写法如下:
 CrystalReportViewer1.ReportSource = Application.StartupPath & "\reports\Report1.rpt"
当我运行时,系统弹出警告说,加载路径错误。
还望大哥帮帮我!!!

#5


顶楼回复有点可行,sshjoin在这里多提一个问题:
如果form1有两按钮,一个是“确定”,一个是“取消”,
如果想只按“确定”时才把form1中的数据传递给form2的控件,
如treeview。而按“取消”时不传数据。
这该如何做到?

#6


1、只要把Textbox1的Modifiers改成Public,然后声明一个Form继承Form1。可以这样写:   
    Public frmPublic as system.windows.forms.form
'以下是修改Form1中的代码
    Public Sub New()
        MyBase.New()

        '该调用是 Windows 窗体设计器所必需的。
        InitializeComponent()

        '在 InitializeComponent() 调用之后添加任何初始化
        frmPublic = Me'在此时设置的才是Form1本身的实例
    End Sub
最后这样调用就可以了:frmPublic.Text1.text="OK"

或者直接在模块中声明一个Public frmPublic as new Form1
之后始终调用这个frmPublic就可以保证不会出现生成多个Form1的实例

2、System.windows.forms.application.startuppath

#7


顶楼回复有点可行,sshjoin在这里多提一个问题:
如果form1有两按钮,一个是“确定”,一个是“取消”,
如果想只按“确定”时才把form1中的数据传递给form2的控件,
如treeview。而按“取消”时不传数据。
这该如何做到?
---------------------------------------------------------

很简单。看到vb.net下事件都有一个sender参量么?就照这个原理做。我想你明白我的意思。

#8


to CCL(VB卡尔):
先谢谢你的帮忙。
第二个问题解决啦,但第一个问题还不能解决啊,用你的第一个方法,在FORM2根本就不能调用frmPublic.TextBox1.text,编译通不过;用你的第二个方法,在FORM2中是可以调用frmPublic.Text1.text,但它的值是FORM1初始化时候的值,它并没有根据我的要求动态去改变,再次麻烦大哥帮忙!

#9


不用谢。
对不起我忽略了你要调用窗口下的控件集。
第一个方法的适用情况是Form1是启动窗体时,Form1这个Class本身也必须是Public的,且frmPublic的声明要放在模块中。这个方法需要引入对象的控件集合,不推荐你使用。

第二种方法同样要求Form1这个Class是Public的,同时Form1不应该是启动窗体(可以使用Sub Main来启动工程,我一向是这么做的),这样会比较简单。我的实验中没有出现你所说的问题,请你仔细调试一下。

#1


1添加一个公共模块
在公共模块里实例化两个窗体 然后就可以像在vb6里 一样了
2 application.startuppath??

#2


1、在FORM2里定义一个类,继承一下FORM1里的TEXTBOX1
2、把路径取了就行了,试试

#3


1.假设FORM1有TEXTBOX1
 在form1中添加如下代码:
    Public Property Text() As String
        Get
            Text = Me.TEXTBOX1.Text
        End Get
        Set(ByVal Value As String)
            ’如果设置TEXTBOX1.Text则在这里写 Me.TEXTBOX1.Text = Value
        End Set
    End Property
  在form2里打开form1并调用form1里TEXTBOX1.Text的参数:
  dim f as new form1
  f.ShowDialog(Me)
  msgbox f.text


2.Application.StartupPath

#4


to  Surpass:
先谢谢你的帮忙,但问题还没有解决:
1。我是通过FORM1中BUTTON1来显示FORM2的,在FORM2初始化时我加入
    dim f as new form1
    f.ShowDialog(Me)
    程序会再次弹出FORM1,这我是不想出现的。
    还有就是TEXTBOX1.text的值是不断变化的,你的方法只是能取到FORM1初始化时的值,而当TEXTBOX1.text的值发生改变时就不能传递过去了。
2.我是想用相对路径来取得报表文件,我写法如下:
 CrystalReportViewer1.ReportSource = Application.StartupPath & "\reports\Report1.rpt"
当我运行时,系统弹出警告说,加载路径错误。
还望大哥帮帮我!!!

#5


顶楼回复有点可行,sshjoin在这里多提一个问题:
如果form1有两按钮,一个是“确定”,一个是“取消”,
如果想只按“确定”时才把form1中的数据传递给form2的控件,
如treeview。而按“取消”时不传数据。
这该如何做到?

#6


1、只要把Textbox1的Modifiers改成Public,然后声明一个Form继承Form1。可以这样写:   
    Public frmPublic as system.windows.forms.form
'以下是修改Form1中的代码
    Public Sub New()
        MyBase.New()

        '该调用是 Windows 窗体设计器所必需的。
        InitializeComponent()

        '在 InitializeComponent() 调用之后添加任何初始化
        frmPublic = Me'在此时设置的才是Form1本身的实例
    End Sub
最后这样调用就可以了:frmPublic.Text1.text="OK"

或者直接在模块中声明一个Public frmPublic as new Form1
之后始终调用这个frmPublic就可以保证不会出现生成多个Form1的实例

2、System.windows.forms.application.startuppath

#7


顶楼回复有点可行,sshjoin在这里多提一个问题:
如果form1有两按钮,一个是“确定”,一个是“取消”,
如果想只按“确定”时才把form1中的数据传递给form2的控件,
如treeview。而按“取消”时不传数据。
这该如何做到?
---------------------------------------------------------

很简单。看到vb.net下事件都有一个sender参量么?就照这个原理做。我想你明白我的意思。

#8


to CCL(VB卡尔):
先谢谢你的帮忙。
第二个问题解决啦,但第一个问题还不能解决啊,用你的第一个方法,在FORM2根本就不能调用frmPublic.TextBox1.text,编译通不过;用你的第二个方法,在FORM2中是可以调用frmPublic.Text1.text,但它的值是FORM1初始化时候的值,它并没有根据我的要求动态去改变,再次麻烦大哥帮忙!

#9


不用谢。
对不起我忽略了你要调用窗口下的控件集。
第一个方法的适用情况是Form1是启动窗体时,Form1这个Class本身也必须是Public的,且frmPublic的声明要放在模块中。这个方法需要引入对象的控件集合,不推荐你使用。

第二种方法同样要求Form1这个Class是Public的,同时Form1不应该是启动窗体(可以使用Sub Main来启动工程,我一向是这么做的),这样会比较简单。我的实验中没有出现你所说的问题,请你仔细调试一下。