C窗体间数据传值_第1页
C窗体间数据传值_第2页
C窗体间数据传值_第3页
C窗体间数据传值_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c#窗体间数据传值窗体间数据传递第一种情况的解决方法存在一个主要的缺点,就是窗体间传递的参数数目是固定的,并且类型也是固定的。这是因为,上文中修改了从命名空间System.Windows.Forms中的Form类派生而得到的Form2类的构造函数,由于构造函数中的参数和类型都是固定的,而主窗体向从窗体传递数据,就是通过构造函数中的参数来实现的,所以就造成了上面的那个缺点。其实在这种方法中还存在一个缺点,就是每一次窗体间的数据传递,就必须构建一个窗体,并且这种数据传递是一次性的。这些缺点对于窗体间传递少量数据,一般不会有太大影响,但如果要传递大量数据,并且要通过主窗体来实时向从窗体传递数据,使用

2、这种方法就勉为其难了。下面介绍另外一种从主窗体向从窗体传递数据的实现方法,这种方法能够完全解决上面的二个缺点,程序在主窗体中就像操作窗体中加入的组件一样,灵活的操作从窗体。设计思路此方法实现二个功能:其一,主窗体能够实时地向从窗体传送数据,表现为当更改主窗体中的跟踪条(TrackBar)的数值,从窗体中定义的一个Label组件就显示出跟踪条的当前数值;其二,从窗体能够向主窗体提出数据请求,并且能够获取主窗体中各组件显示的数据。程序表现为,当单击从窗体中的【从Forml中获取数据】按钮,程序能够把主窗体中的二个TextBox组件显示的内容传递到从窗体,并且通过从窗体中的二个TextBox组件分别

3、显示出来。第一个功能的实现思路是把从窗体看成是主窗体的一个实例,加入到从窗体中的组件,可以看出是从窗体中定义的一个个变量,由于从窗体中加入的组件的组件缺省定义类型是Private(私有的),所以要想访问这些组件,必须改变为Public(共有的);而第二个功能的实现思路是通过修改Form2的构造函数,构造函数实现功能是通过Form1类的实例(即为主窗体)来创建并初始化Form2类的实例(即为从窗体)。这样对于从窗体来说,主窗体则为其一个实例,从而也就可以向主窗体提出数据请求,当然要把需要访问的各组件定义类型从缺省的Private(私有的)类型修改为Public(共有的)。上述二个功能的实现方法,

4、第二种方法比较复杂,希望各位能够结合后面的具体实现代码来理解。第二种窗体间的数据传递情况实现步骤1首先创建一个VisualC#的项目文件,项目名称为【VC#中不同窗体数据传递方法02】。把VisualStudio.Net的当前窗口切换到【Form1.cs(设计)】窗口,并从【工具箱】中的【Windows窗体】选项卡中拖入下列组件到【Form1.cs(设计)】窗体中,并执行相应操作:二个TextBox组件,用以输入向Form2窗体传送的数据二个Label组件一个TrackBar组件,名称为trackBarl。把VisualStudio.Net的当前窗口切换到【Form1.cs】窗口,即:Form

5、1.cs的代码编辑窗口。并用下列代码替换替代系统产生的InitializeComponent过程。privatevoidInitializeComponent()this.label1=newSystem.Windows.Forms.Label();this.label2=newSystem.Windows.Forms.Label();this.textBox1=newSystem.Windows.Forms.TextBox();this.textBox2=newSystem.Windows.Forms.TextBox();this.trackBar1=newSystem.Windows.Fo

6、rms.TrackBar();(System.ComponentModel.ISupportInitialize)(this.trackBar1).BeginInit();this.SuspendLayout();this.label1.Location=newSystem.Drawing.Point(27,41);this.label1.Name=label1;this.label1.TabIndex=0;this.label1.Text=欢迎词:;this.label2.Location=newSystem.Drawing.Point(27,83);this.label2.Name=lab

7、el2;this.label2.TabIndex=1;this.label2.Text=提示信息:;this.textBox1.Location=newSystem.Drawing.Point(108,38);this.textBox1.Name=textBox1;this.textBox1.TabIndex=2;this.textBox1.Text=;this.textBox2.Location=newSystem.Drawing.Point(109,78);this.textBox2.Name=textBox2;this.textBox2.TabIndex=3;this.textBox2.

8、Text=;this.trackBar1.LargeChange=1;this.trackBar1.Location=newSystem.Drawing.Point(12,182);this.trackBar1.Maximum=100;this.trackBar1.Name=trackBar1;this.trackBar1.Size=newSystem.Drawing.Size(272,42);this.trackBar1.TabIndex=1;this.trackBar1.ValueChanged+=newSystem.EventHandler(this.trackBar1_ValueCha

9、nged);this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);this.ClientSize=newSystem.Drawing.Size(292,273);this.Controls.AddRange(newSystem.Windows.Forms.Controlthis.trackBar1,this.textBox2,this.textBox1,this.label2,this.label1);this.MaximizeBox=false;this.MinimizeBox=false;this.Name=Form1;this.Text=

10、Form1;this.Load+=newSystem.EventHandler(this.Form1_Load);(System.ComponentModel.ISupportInitialize)(this.trackBar1).EndInit();this.ResumeLayout(false);由于从窗体向主窗体提出的数据请求是二个TextBox组件的Text属性值,所以要修改Form1.cs文件中这二个TextBox组件的定义类型,把缺省定义为private类型修改为public类型,修改后的这二个TextBox组件在Form1.cs中的定义语句如下:publicSystem.Wind

11、ows.Forms.TextBoxtextBox1;publicSystem.Windows.Forms.TextBoxtextBox2;在上述代码后面再添加下面代码,下面代码是创建一个Form2类的实例m_Form,即从窗体:privateForm2m_Form;在Form1.cs中的Main函数后,添加下列代码,下列代码的功能是实现当修改主窗体中的跟踪条数值后,从窗体中的label3组件的显示数值能够随之而变化,这样就实现主窗体实时传递数据到从窗体了:privatevoidtrackBar1_ValueChanged(objectsender,System.EventArgse)m_For

12、m.label3.Text=trackBar1.Value.ToString();在添加完上面代码,并在其后部,再添加下列代码,下列代码的功能是使用Form2类的构造函数,并通过Forml类的实例来创建并初始化Form2类的实例。在项目文件中加入Form2类,并修改Form2类的构造函数工作将在本节的第7到11步骤中完成。privatevoidForm1_Load(objectsender,System.EventArgse)m_Form=newForm2(this);/通过主窗体来创建、初始化从窗体m_Form.Show();/显示从窗体选择菜单【项目】|【添加Windows窗体】后,弹出【

13、添加新项一VC#中不同窗体数据传递方法01】对话框。在此对话框中的【名称(N):】文本框中输入【Form2】后,单击【打开】按钮,则在VC#中不同窗体数据传递方法01项目中添加了一个新的窗体,名称为【Form2】。把VisualStudio.Net的当前窗口切换到【Form2.cs(设计)】窗口,并从【工具箱】中的【Windows窗体】选项卡中拖入下列组件到【Form2.cs(设计)】窗体中,并执行相应操作:二个TextBox组件,用以显示向主窗体请求获得的数据。二个Label组件。一个Button组件,名称为button1。把VisualStudio.Net的当前窗口切换到【Form2.cs

14、】窗口,即:Form2.cs的代码编辑窗口。并用下列代码替换替代系统产生的InitializeComponent过程。this.textBox1=newSystem.Windows.Forms.TextBox();this.textBox2=newSystem.Windows.Forms.TextBox();this.label2=newSystem.Windows.Forms.Label();this.label1=newSystem.Windows.Forms.Label();this.button1=newSystem.Windows.Forms.Button();this.label3

15、=newSystem.Windows.Forms.Label();this.SuspendLayout();this.textBox1.Location=newSystem.Drawing.Point(95,42);this.textBox1.Name=textBox1;this.textBox1.Size=newSystem.Drawing.Size(125,21);this.textBox1.TabIndex=2;this.textBox1.Text=;this.textBox2.Location=newSystem.Drawing.Point(94,80);this.textBox2.N

16、ame=textBox2;this.textBox2.Size=newSystem.Drawing.Size(127,21);this.textBox2.TabIndex=3;this.textBox2.Text=;this.label2.Location=newSystem.Drawing.Point(27,83);this.label2.Name=label2;this.label2.TabIndex=5;this.label2.Text=提示信息:;this.label1.Location=newSystem.Drawing.Point(38,45);this.label1.Name=l

17、abel1;this.label1.TabIndex=4;this.label1.Text=欢迎词:;this.button1.Location=newSystem.Drawing.Point(80,136);this.button1.Name=button1;this.button1.Size=newSystem.Drawing.Size(135,53);this.button1.TabIndex=6;this.button1.Text=从Form1中获取数据;this.button1.Click+=newSystem.EventHandler(this.button1_Click);thi

18、s.label3.Location=newSystem.Drawing.Point(102,210);this.label3.Name=label3;this.label3.TabIndex=7;this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);this.ClientSize=newSystem.Drawing.Size(292,273);this.Controls.AddRange(newSystem.Windows.Forms.Controlthis.label3,this.button1,this.textBox2,this.text

19、Box1,this.label2,this.label1);this.MaximizeBox=false;this.MinimizeBox=false;this.Name=Form2;this.Text=Form2;this.ResumeLayout(false);10.由于主窗体是把其中的跟踪条的数值通过从窗体中的label组件来显示的,所以必须把Form2.cs文件中创建Iabel3组件时定义的private类型修改为public类型,修改后的创建label3组件的代码为:publicSystem.Windows.Forms.Labellabel3;由于Form2类的实例是通过Forml类的实例来初始化,所以在创建IabeI3组件后面添加下列代码,下列代码是创建一个Form1类的实例,其作用是初始化Form2类的实例(即从窗体):private

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论