窗体间传值:C#窗体间数据传值

  窗体间数据传递第种情况解决思路方法存在个主要缺点就是窗体间传递参数数目是固定并且类型也是固定这是上文中修改了从命名空间.Windows.Forms中Form类派生而得到Form2类构造由于构造参数和类型都是固定而主窗体向从窗体传递数据就是通过构造参数来实现所以就造成了上面那个缺点其实在这种思路方法中还存在个缺点就是每次窗体间数据传递就必须构建个窗体并且这种数据传递是次性这些缺点对于窗体间传递少量数据般不会有太大影响但如果要传递大量数据并且要通过主窗体来实时向从窗体传递数据使用这种思路方法就勉为其难了   下面介绍另外种从主窗体向从窗体传递数据实现思路方法这种思路方法能够完全解决上面 2个缺点在主窗体中就像操作窗体中加入组件灵活操作从窗体

  设计思路

  此思路方法实现 2个功能:

  其主窗体能够实时地向从窗体传送数据表现为当更改主窗体中跟踪条(TrackBar)数值从窗体中定义个Label组件就显示出跟踪条当前数值;

  其 2从窗体能够向主窗体提出数据请求并且能够获取主窗体中各组件显示数据表现为当单击从窗体中【从Form1中获取数据】按钮能够把主窗体中 2个TextBox组件显示内容传递到从窗体并且通过从窗体中 2个TextBox组件分别显示出来

  第个功能实现思路是把从窗体看成是主窗体个例子加入到从窗体中组件可以看出是从窗体中定义个个变量由于从窗体中加入组件组件缺省定义类型是Private(私有)所以要想访问这些组件必须改变为Public(共有);而第 2个功能实现思路是通过修改Form2构造构造实现功能是通过Form1类例子(即为主窗体)来创建并化Form2类例子(即为从窗体)这样对于从窗体来说主窗体则为其个例子从而也就可以向主窗体提出数据请求当然要把需要访问各组件定义类型从缺省Private(私有)类型修改为Public(共有)上述 2个功能实现思路方法第 2种思路方法比较复杂希望各位能够结合后面具体实现代码来理解

  第 2种窗体间数据传递情况实现步骤

  1.首先创建个Visual C#项目文件项目名称为【VC#中区别窗体数据传递思路方法02】

  2.把Visual Studio .Net当前窗口切换到【Form1.cs(设计)】窗口并从【工具箱】中【Windows窗体】选项卡中拖入下列组件到【Form1.cs(设计)】窗体中并执行相应操作:

  · 2个TextBox组件用以输入向Form2窗体传送数据

  · 2个Label组件

  · 个TrackBar组件名称为trackBar1

  3.把Visual Studio .Net当前窗口切换到【Form1.cs】窗口即:Form1.cs代码编辑窗口并用下列代码替换替代系统产生InitializeComponent过程

  privatevoidInitializeComponent
  {
  this.label1=.Windows.Forms.Label;
  this.label2=.Windows.Forms.Label;
  this.textBox1=.Windows.Forms.TextBox;
  this.textBox2=.Windows.Forms.TextBox;
  this.trackBar1=.Windows.Forms.TrackBar;
  ((.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit;
  this.SuspendLayout;
  this.label1.Location=.Drawing.Po(27,41);
  this.label1.Name="label1";
  this.label1.TabIndex=0;
  this.label1.Text="欢迎词:";
  this.label2.Location=.Drawing.Po(27,83);
  this.label2.Name="label2";
  this.label2.TabIndex=1;
  this.label2.Text="提示信息:";
  this.textBox1.Location=.Drawing.Po(108,38);
  this.textBox1.Name="textBox1";
  this.textBox1.TabIndex=2;
  this.textBox1.Text="";
  this.textBox2.Location=.Drawing.Po(109,78);
  this.textBox2.Name="textBox2";
  this.textBox2.TabIndex=3;
  this.textBox2.Text="";
  this.trackBar1.LargeChange=1;
  this.trackBar1.Location=.Drawing.Po(12,182);
  this.trackBar1.Maximum=100;
  this.trackBar1.Name="trackBar1";
  this.trackBar1.Size=.Drawing.Size(272,42);
  this.trackBar1.TabIndex=1;
  this.trackBar1.ValueChanged.EventHandler(this.trackBar1_ValueChanged);
  this.AutoScaleBaseSize=.Drawing.Size(6,14);
  this.ClientSize=.Drawing.Size(292,273);
  this.Controls.AddRange(.Windows.Forms.Control{this.trackBar1,this.textBox2,this.textBox1,this.label2,this.label1});
  this.MaximizeBox=false;
  this.MinimizeBox=false;
  this.Name="Form1";this.Text="Form1";
  this.Load.EventHandler(this.Form1_Load);
  ((.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit;
  this.ResumeLayout(false);
  }
  4.由于从窗体向主窗体提出数据请求是 2个TextBox组件"Text"属性值所以要修改Form1.cs文件中这 2个TextBox组件定义类型把缺省定义为"private"类型修改为"public"类型修改后这 2个TextBox组件在Form1.cs中定义语句如下:

  public .Windows.Forms.TextBox textBox1 ; public .Windows.Forms.TextBox textBox2 ;

  在上述代码后面再添加下面代码下面代码是创建个Form2类例子m_Form即从窗体:

  private Form2 m_Form ;

  5.在Form1.cs中Main添加下列代码下列代码功能是实现当修改主窗体中跟踪条数值后从窗体中label3组件显示数值能够随的而变化这样就实现主窗体实时传递数据到从窗体了:

privatevoidtrackBar1_ValueChanged(objectsender,.EventArgse) 
{ 
m_Form.label3.Text=trackBar1.Value.; 
}


  6.在添加完上面代码并在其后部再添加下列代码下列代码功能是使用Form2类构造并通过Form1类例子来创建并化Form2类例子在项目文件中加入Form2类并修改Form2类构造工作将在本节第7到11步骤中完成

privatevoidForm1_Load(objectsender,.EventArgse) 
{
m_Form=Form2(this); 
//通过主窗体来创建、化从窗体m_Form.Show;
//显示从窗体 
}
  7.选择菜单【项目】|【添加Windows窗体】后弹出【添加新项-VC#中区别窗体数据传递思路方法01】对话框在此对话框中【名称(N):】文本框中输入【Form2】后单击【打开】按钮则在VC#中区别窗体数据传递思路方法01项目中添加了个新窗体,名称为【Form2】

  8.把Visual Studio .Net当前窗口切换到【Form2.cs(设计)】窗口并从【工具箱】中【Windows窗体】选项卡中拖入下列组件到【Form2.cs(设计)】窗体中并执行相应操作:

  · 2个TextBox组件用以显示向主窗体请求获得数据

  · 2个Label组件

  · 个Button组件名称为button1

  9.把Visual Studio .Net当前窗口切换到【Form2.cs】窗口即:Form2.cs代码编辑窗口并用下列代码替换替代系统产生InitializeComponent过程

{ 
this.textBox1=.Windows.Forms.TextBox; 
this.textBox2=.Windows.Forms.TextBox; 
this.label2=.Windows.Forms.Label; 
this.label1=.Windows.Forms.Label; 
this.button1=.Windows.Forms.Button;
this.label3=.Windows.Forms.Label; 
this.SuspendLayout; 
this.textBox1.Location=.Drawing.Po(95,42); 
this.textBox1.Name="textBox1"; 
this.textBox1.Size=.Drawing.Size(125,21); 
this.textBox1.TabIndex=2; 
this.textBox1.Text="";
this.textBox2.Location=.Drawing.Po(94,80); 
this.textBox2.Name="textBox2"; 
this.textBox2.Size=.Drawing.Size(127,21); 
this.textBox2.TabIndex=3; 
this.textBox2.Text=""; 
this.label2.Location=.Drawing.Po(27,83); 
this.label2.Name="label2"; 
this.label2.TabIndex=5;this.label2.Text="提示信息:"; 
this.label1.Location=.Drawing.Po(38,45); 
this.label1.Name="label1";
this.label1.TabIndex=4; 
this.label1.Text="欢迎词:";
this.button1.Location=.Drawing.Po(80,136); 
this.button1.Name="button1"; 
this.button1.Size=.Drawing.Size(135,53); 
this.button1.TabIndex=6; 
this.button1.Text="从Form1中获取数据"; 
this.button1.Click.EventHandler(this.button1_Click); 
this.label3.Location=.Drawing.Po(102,210);
this.label3.Name="label3"; 
this.label3.TabIndex=7; 
this.AutoScaleBaseSize=.Drawing.Size(6,14); 
this.ClientSize=.Drawing.Size(292,273);
this.Controls.AddRange(.Windows.Forms.Control 
{ 
this.label3,this.button1,this.textBox2,this.textBox1,this.label2,this.label1 
}); 
this.MaximizeBox=false; 
this.MinimizeBox=false; 
this.Name="Form2"; 
this.Text="Form2";this.ResumeLayout(false); 
}


  10.由于主窗体是把其中跟踪条数值通过从窗体中label组件来显示所以必须把Form2.cs文件中创建label3组件时定义"private"类型修改为"public"类型修改后创建label3组件代码为:

  public .Windows.Forms.Label label3 ;

  由于Form2类例子是通过Form1类例子来所以在创建label3组件后面添加下列代码下列代码是创建个Form1类例子其作用是化Form2类例子(即从窗体):

  private Form1 mF_Form ;

  11.修改Form2类构造具体操作如下用下列代码替换Form2.cs中缺省构造:

publicForm2(Form1myForm) 
{ 
//Windows窗体设计器支持所必需
//InitializeComponent;
this.mF_Form=myForm; 
//TODO:在InitializeComponent后添加任何构造代码// 
}


  12.在Form2.cs中Main添加下列代码下列代码功能是实现向主窗体提出数据请求并获取主窗体数据当然这些数据类型必须修改为"public"类型

privatevoidbutton1_Click(objectsender,.EventArgse) 
{ 
textBox1.Text=this.mF_Form.textBox1.Text;
textBox2.Text=this.mF_Form.textBox2.Text;
}


  13.至此在上述步骤都成功完成并全部保存后Visual C#实现窗体间传递数据第 2种情况处理思路方法就全部完成了此时单击快捷键【F5】就可以运行当调整Form1窗体跟踪条数值我们会发现Form2窗体中label3组件显示数值也随的变化;当在Form1窗体 2个TextBox组件中输入数据后单击Form2窗体中【从Form2中获取数据】按钮能够成功从Form1中获取数据并通过Form2中对应TextBox组件显示出来

Tags:  窗体的数据源 窗体传值 窗体间传值

延伸阅读

最新评论

发表评论