vb.net传递参数损失的简单介绍

vb.net2005:2个form之间传递参数的问题,高手进

把form1设为启动项在form3中调用当然是空啊。因为这时候还没有发生form2的load事件。你可以在form1的load事件里面对form2的变量付值然后把form2对象传给form3,或者fom2里的变量设为静态的这样不用传对象

网页设计是网站建设的前奏,好的网页设计更深度的剖析产品和设计风格定位,结合最新的网页设计流行趋势,与WVI应用标准,设计出具企业表现力,大器而深稳的网站界面设。成都创新互联公司于2013年开始,是成都网站建设公司:提供企业网站设计,高端网站设计,营销型企业网站建设方案,成都响应式网站建设公司,小程序设计,专业建站公司做网站。

VB.NET中向报表传递参数时出错

VB.NET中向报表传递参数时出错

光看这一句的话,没发现问题,问题可能是出现在前面。

显示水晶报表的基本框架是这样的,如下:

'参数字段集合

Dim ParamFields As New ParameterFields

'参数字段

Dim ParamField As ParameterField

'离散值

Dim DiscreteVal As New ParameterDiscreteValue

''创建一个强类型报表实例

crReportDocument = New CrystalReport1

''将Dataset传递给报表

crReportDocument.SetDataSource(dataSet)

''将报表传递给浏览器

CrystalReportViewer1.ReportSource = crReportDocument

这个应该是你需要的,希望能帮到你,另外,如果你是刚刚接触水晶报表的话,关于水晶报表的问题你可以去 阿泰 CSND的BLOG 找找,不知道你有没有听说过,呵呵反正是很强大啦~

鍙傝 冭祫鏂欙细

伭悱吝栉媉升姁唪栿牿珛燀最娘檵

VB.net 两个窗体之间传递参数

新窗体中写

构造函数

,然后调用。

比如你要调用的新窗体是From1.cs这个窗体,

public

Form1(要传入的参数)

{

//把传入的参数传入窗体中

//执行窗体标准内容

}

然后在需要调用的地方调用

Form1

f

=

new

Form1(传出的参数);

'--------Form1--------

Dim

f2

As

Form2

Private

Sub

Command1_Click()

Set

f2

=

New

Form2

f2.Show

vbModal

End

Sub

'--------Form1

End--------

'--------Form2--------

Dim

WithEvents

f3

As

Form3

Private

Sub

Command1_Click()

Set

f3

=

New

Form3

f3.Show

End

Sub

Public

Sub

f3_f2W()

Me.Command1.Caption

=

"f2W"

End

Sub

'--------Form2

End--------

'--------Form3--------

Public

Event

f2W()

Private

Sub

Command1_Click()

RaiseEvent

f2W

End

Sub

'--------Form3

End--------

f.Show();

如此就能实现调用了。

VB.NET 将参数传入 存储过程 的 问题?

//存储过程代码

CREATE PROCEDURE [AddNewInvoiceInfo] (@sUserID int,@sClaimMethod varchar(50),@sInvoiceNum varchar(50),@sInvoiceDate datetime,@sBuyCity varchar(50))AS

Insert Into SMB_InvoiceInfo (MemberID,ClaimMethod,InvoiceNum,InvoiceDate,InvoiceCity) Values (@sUserID,@sClaimMethod,@sInvoiceNum,@sInvoiceDate,@sBuyCity)

return @@IDENTITY

GO

//调用存储过程代码

Dim CN As New SqlConnection()

Dim InvoiceID As String

Try

CN.ConnectionString = DBConStr

CN.Open()

Dim CMD As SqlCommand

CMD = New SqlCommand(AddNewInvoiceInfo, CN)

CMD.CommandType = CommandType.StoredProcedure

CMD.Parameters.Add(New SqlParameter(@sUserID, SqlDbType.Int))

CMD.Parameters(@sUserID).Value = CInt(UserID.Text)

CMD.Parameters.Add(New SqlParameter(@sClaimMethod, SqlDbType.VarChar, 50))

CMD.Parameters(@sClaimMethod).Value = TransName.Text

CMD.Parameters.Add(New SqlParameter(@sInvoiceNum, SqlDbType.VarChar, 50))

CMD.Parameters(@sInvoiceNum).Value = InvoiceNum.Text

CMD.Parameters.Add(New SqlParameter(@sInvoiceDate, SqlDbType.DateTime))

CMD.Parameters(@sInvoiceDate).Value = InvoiceDate.SelectedDate.Date

CMD.Parameters.Add(New SqlParameter(@sBuyCity, SqlDbType.VarChar, 50))

CMD.Parameters(@sBuyCity).Value = BuyCity.Text

CMD.Parameters.Add(New SqlParameter(@sInvoiceID, SqlDbType.Int))

CMD.Parameters(@sInvoiceID).Direction = ParameterDirection.ReturnValue

CMD.ExecuteNonQuery()

InvoiceID = CMD.Parameters(@sInvoiceID).Value.ToString()

CMD.Dispose()

Catch ex As Exception

Response.Write(ex.ToString())

Finally

CN.Close()

End Try

VB.NET窗体间的数据传递

在编写VB.Net windows应用程序的时候我们经常会遇到这种问题,怎么样在两个窗体间传递数据呢?例如,用VB.Net做一个文本编辑器,里面有一个搜索功能(即搜索我打开的文本里面的文字),点搜索则弹出搜索对话框,输入要搜索的内容,然后确定,就可以搜索到我打开的文本里面的文字了,这里就用到了两个窗体间的相互通信。我查看了相关的资料想了想,得出一些想法和方法。

也许有的人会觉得这个很简单呀。假如主框架为Form1,打开的搜索对话框是Form2.直接在Form2类中申明一个Form1实例:dim f1 as new Form1然后就可以通过f1来调用Form1中的域和函数了。其实不是这样的,你申明的新的Form1实例不是原来的那个Form1对象了,这样操作的是新的Form1中的域和函数,和最先打开的Form1是没有关系的。

那应该如何来完成两个窗体的通讯呢?我们要做的是把当前的Form1实例传递给Form2,如果是这样的话,问题就很好解决了。

方法1:首先,我们在Form2中定义:

Private mF_Form As Form1

我们更改Form2的构造函数为有参数的

Public Sub New(ByVal form As Form1)

MyBase.New()

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

InitializeComponent()

Me.mF_Form = form

'在 InitializeComponent() 调用之后添加任何初始化

End Sub

在Form1中,我在 要用到Form2的地方申明如下:

Dim f1 As New Form2(Me)

这里的me指的就是Form1当前的实例,也就是把当前Form1的实例通过Form2的构造函数传递给Form2类(其实在网上看到过比较蠢的方式,就是在构造函数里面传递要传递的信息如:字符串或是数字等,这样做很有局限性,不能传递其他的,所有我们可以直接传递实例,来完成传递更多的信息。)

这样在Form2中使用myForm 就可以对原来的Form1窗口进行操作了。但是你要把要操作的Form1中的域和函数定义成public形式的(这样可能不安全),此时的myForm就是真正的最开始打开的Form1了,你可以用这个实例来进行两个窗体的通讯了。

方法2:其实VB.Net中提供了窗体间进行通讯的现成的属性,呵呵,我们能想到的,微软也想到了,他们创造的语言其实确实可以说是人性化了。

在Form1类中申明Form2时用如下代码:

Dim f2As New Form2 '类Form2中的构造函数不改,还是无参的

f2.owner=me

也可以使用函数的方法,给当前实例添加一个附属窗口 代码:Me.AddOwnedForm(f2)

在Form2类的定义中写如下代码:

dim f1 as Form1=me.owner

这样f1对应的就是原来的Form1的实例了,也就可以用这个进行通讯了。但是还是要把不同类之间访问的域和函数定义成public,哎,安全确实是一个问题!!

vb.net 如何传递类参数

线程结束后利用委托生成事件返回,线程应用包括传入和传出参数。

Public Delegate Sub ThreadCallback(value As ThreadResult)

Public Class Form1

Private WithEvents _th_1 As Thread_1

Protected Overrides Sub OnLoad(e As System.EventArgs)

Dim value As ThreadObject

value.Index = 1

Me._th_1 = New Thread_1(Me)

Me._th_1.Run(value)

MyBase.OnLoad(e)

End Sub

Private Sub Thread_1_End(sender As Object, e As ThreadEventArgs) Handles _th_1.ThreadEnd

Me.TextBox1.Text = e.Result.Text

End Sub

End Class

Public Class Thread_1

Public Event ThreadEnd(sender As Object, e As ThreadEventArgs)

Private _control As Control

Sub New(control As Control)

Me._control = control

End Sub

Public Sub Run(value As Object)

Dim th As New Threading.Thread(AddressOf ThreadProc)

th.Start(value)

End Sub

Private Sub ThreadProc(obj As Object)

Dim value As ThreadObject = CType(obj, ThreadObject)

Dim result As ThreadResult = Nothing

If value.Index = 1 Then result.Text = "测试"

Dim callback As New ThreadCallback(AddressOf ThreadInvoke)

_control.Invoke(callback, result)

End Sub

Private Sub ThreadInvoke(value As ThreadResult)

RaiseEvent ThreadEnd(Me, New ThreadEventArgs(value))

End Sub

End Class

Public Structure ThreadObject

Public Index As Integer

'Public Rect As Rectangle

End Structure

Public Structure ThreadResult

Public Text As String

'Public Rect As Rectangle

End Structure

Public Class ThreadEventArgs

Inherits System.EventArgs

Private _result As ThreadResult

Public ReadOnly Property Result As ThreadResult

Get

Return _result

End Get

End Property

Sub New(value As ThreadResult)

Me._result = value

End Sub

End Class


网站栏目:vb.net传递参数损失的简单介绍
浏览路径:http://myzitong.com/article/dodciss.html