Visual C#实现窗体间数据传递之二 (1)

C#中实现窗体间的数据传递 第一个功能的实现思路是把从窗体看成是主窗体的一个实例,加入到从窗体中的组件,可以看出是从窗体中定义的一个个变量,由于从窗体中加入的组件的组件缺省定义类型是Private(私有的),所以要想访问这些组件,必须改变为Public(共有的);这是因为,上文中修改了从命名空间System.Windows.Forms中的Form类派生而得到的Form2类的构造函数,由于构造函数中的参数和类型都是固定的,而主窗体向从窗体传递数据,就是通过构造函数中的参数来实现的,所以就造成了上面的那个缺点。 阅读详情

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

设计思路   此方法实现二个功能:   

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

其二,从窗体能够向主窗体提出数据请求,并且能够获取主窗体中各组件显示的数据。程序表现为,当单击从窗体中的【从Form1中获取数据】按钮,程序能够把主窗体中的二个TextBox组件显示的内容传递到从窗体,并且通过从窗体中的二个TextBox组件分别显示出来。   第一个功能的实现思路是把从窗体看成是主窗体的一个实例,加入到从窗体中的组件,可以看出是从窗体中定义的一个个变量,由于从窗体中加入的组件的组件缺省定义类型是Private(私有的),所以要想访问这些组件,必须改变为Public(共有的);而第二个功能的实现思路是通过修改Form2的构造函数,构造函数实现功能是通过Form1类的实例(即为主窗体)来创建并初始化Form2类的实例(即为从窗体)。这样对于从窗体来说,主窗体则为其一个实例,从而也就可以向主窗体提出数据请求,当然要把需要访问的各组件定义类型从缺省的Private(私有的)类型修改为Public(共有的)。上述二个功能的实现方法,第二种方法比较复杂,希望各位能够结合后面的具体实现代码来理解。   

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

1.首先创建一个Visual C#的项目文件,项目名称为【VC#中不同窗体数据传递方法02】。   

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

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

· 二个Label组件   

· 一个TrackBar组件,名称为trackBar1。   

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

private void InitializeComponent ( )

{

    this.label1 = new System.Windows.Forms.Label ( ) ;

    this.label2 = new System.Windows.Forms.Label ( ) ;

    this.textBox1 = new System.Windows.Forms.TextBox ( ) ;

    this.textBox2 = new System.Windows.Forms.TextBox ( ) ;

    this.trackBar1 = new System.Windows.Forms.TrackBar ( ) ;

    ( ( System.ComponentModel.ISupportInitialize ) ( this.trackBar1 ) ).BeginInit ( ) ;

    this.SuspendLayout ( ) ;

    this.label1.Location = new System.Drawing.Point ( 27 , 41 ) ;

    this.label1.Name = "label1" ;

    this.label1.TabIndex = 0 ;

    this.label1.Text = "欢迎词:" ;

    this.label2.Location = new System.Drawing.Point ( 27 , 83 ) ;

    this.label2.Name = "label2" ;

    this.label2.TabIndex = 1 ;

    this.label2.Text = "提示信息:" ;

    this.textBox1.Location = new System.Drawing.Point ( 108 , 38 ) ;

    this.textBox1.Name = "textBox1" ;

    this.textBox1.TabIndex = 2 ;

    this.textBox1.Text = "";

    this.textBox2.Location = new System.Drawing.Point ( 109 , 78 ) ;

    this.textBox2.Name = "textBox2" ;

    this.textBox2.TabIndex = 3 ;

    this.textBox2.Text = "";

    this.trackBar1.LargeChange = 1 ;

    this.trackBar1.Location = new System.Drawing.Point ( 12 , 182 ) ;

    this.trackBar1.Maximum = 100 ;

    this.trackBar1.Name = "trackBar1" ;

    this.trackBar1.Size = new System.Drawing.Size ( 272 , 42 ) ;

    this.trackBar1.TabIndex = 1 ;

    this.trackBar1.ValueChanged += new System.EventHandler ( this.trackBar1_ValueChanged ) ;  

    this.AutoScaleBaseSize = new System.Drawing.Size ( 6 , 14 ) ;

    this.ClientSize = new System.Drawing.Size ( 292 , 273 ) ;

    this.Controls.AddRange ( new System.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 += new System.EventHandler ( this.Form1_Load ) ;

   ( ( System.ComponentModel.ISupportInitialize ) ( this.trackBar1 ) ).EndInit ( ) ;

   this.ResumeLayout ( false ) ;

}   

4.由于从窗体向主窗体提出的数据请求是二个TextBox组件的"Text"属性值,所以要修改Form1.cs文件中这二个TextBox组件的定义类型,把缺省定义为"private"类型修改为"public"类型,修改后的这二个TextBox组件在Form1.cs中的定义语句如下:

   public System.Windows.Forms.TextBox textBox1 ;

       public System.Windows.Forms.TextBox textBox2 ;   

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

       private Form2 m_Form ;   

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

       private void trackBar1_ValueChanged ( object sender , System.EventArgs e )

      { m_Form.label3 .Text = trackBar1.Value.ToString ( ) ; }   

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

      private void Form1_Load ( object sender , System.EventArgs e )

      { m_Form = new Form2 ( this ) ; //通过主窗体来创建、初始化从窗体 m_Form.Show ( ) ; //显示从窗体 }

 

 

 本文转自 http://developer.ccidnet.com/art/322/20021224/34599_1.html

Visual C#实现窗体间数据传递(2) 第一个功能的实现思路是把从窗体看成是主窗体的一个实例,加入到从窗体中的组件,可以看出是从窗体中定义的一个个变量,由于从窗体中加入的组件的组件缺省定义类型是Private(私有的),所以要想访问这些组件,必须改变为Public(共有的);这是因为,上文中修改了从命名空间System.Windows.Forms中的Form类派生而得到的Form2类的构造函数,由于构造函数中的参数和类型都是固定的,而主窗体向从窗体传递数据,就是通过构造函数中的参数来实现的,所以就造成了上面的那个缺点。 阅读详情

相关推荐

《Visual C# 程序设计》课程学习(10)——第10章 Windows 窗体应用程序开发

10.1 Windows窗体编程基础 10.1.1 WinForms概述 #region Windows 窗体设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要 /// 使用代码编辑器修改此方法的内容。 /// </s...

qq_34573534的博客 4715

VB.NET外部程序调用总结下

上一节先介绍了电脑快捷键调用外部程序的方法,这节将会以实际代码总结调用外部程序过程。 1、首先运行软件,新建一个窗体应用程序,程序主界面如下图1所示。就一个listbox控件和5个button控件,每个控件内都有一个调用外部程序的方法,首先看button1控件里边的程序。 图1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '创建一个新的进程结构() ..

weixin_45357668的博客 3803

C#实现Windows窗体应用

Windows窗体(Windows Forms)是.NET框架中用于创建图形用户界面(GUI)的成熟技术,它提供了一种简单直观的方式来构建Windows桌面应用程序。本文将详细介绍如何使用Microsoft Visual Studio和C#语言开发Windows窗体应用程序,即使你没有数据库连接的需求,也能创建功能丰富的桌面程序。通过本文,你已经学习了如何使用C#和Windows Forms创建功能丰富的桌面应用程序,涵盖了从基础控件到高级功能的各个方面。

2403_87773780的博客 1742

Visual C#中实现窗体间的数据传递

 Visual C#中实现窗体间的数据传递之一Visual C#中实现窗体间的数据传递之一 一个稍微复杂一点的程序一般都有二个或者更多的窗体。有时在程序设计中,数据不仅要在同一个窗体中传递,还要在窗体间传递,这种传递是主窗体与从窗体之间数据的互相传递。 从本文开始,我们将列举不同窗体间数据传递的四种情况,和用VisualC#实现这四种情况

小马的专栏 6476

C# form1 ,form2 互相传值

C# form1 ,form2 互相传值,form1 textbox 值传到form2 textbox, form2 textbox 值 传给 form1 textbox

C# WinForm之间调用、窗口之间传递参数的例子

C# WinForm之间调用、窗口之间相互传递参数的例子

Visual C#中实现窗体间的数据传递(1)

一个稍微复杂一点的程序一般都有二个或者更多的窗体。有时在程序设计中,数据不仅要在同一个窗体中传递,还要在窗体间传递, 这种传递是主窗体与从窗体之间数据的互相传递。从本文开始,我们将列举不同窗体间数据传递的四种情况,和用Visual C#实现这四种情况的具体方法。下面先介绍用Visual C#实现窗体间传递数据中第一种情况——从主窗体向从窗体传递字符串。在阅读完本文后,你还尝试一下 利用此方法在窗体

0ffs3t 1894

C# 利用委托和事件在窗口间传递参数

自己写的源代码,以登录后显示新窗口为例,演示了利用利用委托和事件在窗口间传递参数和回传参数。如果想学习Windows Form,这个是很有用滴!

C#基于winform窗体和SQL Server数据库实现用户登录验证和值传递功能

首先我们打开Visual Studio2017(随便你什么版本,只要你支持Sql server数据库就行了),然后我们点击文件&gt;新建&gt;项目&gt;Visual C#中找到Windows窗体应用程序然后修改项目名称(你自己要做的显目的名字),点击确定就行了 然后你就会看到如下这个设计窗体: 设计一下窗体的控件变成如下这个效果: 设计完窗体效果,然后我们就可以写事件了 首先我们先写取消...

lyar1225的博客 8258

逆向CarPlay协议时,除了USB主从切换,你还需要注意这3个关键点

本文深入探讨逆向CarPlay协议时的3个关键点,包括MFi协议背景、多通道协同工作机制和协议分析工具的高级过滤技巧。特别解析了USB主从切换后的复杂交互过程,帮助安全研究员和逆向工程师更好地理解CarPlay协议的核心机制与潜在安全研究切入点。

weixin_29164497的博客 382

Kubernetes集群资源优化实战:Volcano调度器如何帮你省下30%GPU算力

本文详细介绍了如何通过Volcano调度器的Binpack策略优化Kubernetes集群中的GPU资源利用率,解决AI模型训练中的资源碎片化问题。通过实战配置和调优指南,帮助用户提升30%的GPU算力利用率,显著降低任务等待时间和硬件成本。

weixin_30832143的博客 507

Visual C#中实现窗体间的数据传递之一

导读:   一个稍微复杂一点的程序一般都有二个或者更多的窗体。有时在程序设计中,数据不仅要在同一个窗体中传递,还要在窗体间传递,这种传递是主窗体与从窗体之间数据的互相传递。从本文开始,我们将列举不同窗体间数据传递的四种情况,和用Visual C#实现这四种情况的具体方法。下面先介绍用Visual C#实现窗体间传递数据中第一种情况——从主窗体向从窗体传递字符串。在阅读完本文后,你还尝试一

angleoldhen的专栏 1208

视频教程-Ps教程之神奇的Photoshop自动化技术-Photoshop

Ps教程之神奇的Photoshop自动化技术 10年以上IT行业工作经验、三...

weixin_28812857的博客 1475

Visual C#实现窗体间数据传递之二 (2)

导读:   7.选择菜单【项目】|【添加Windows窗体】后,弹出【添加新项-VC#中不同窗体数据传递方法01】对话框。在此对话框中的【名称(N):】文本框中输入【Form2】后,单击【打开】按钮,则在VC#中不同窗体数据传递方法01项目中添加了一个新的窗体,名称为【Form2】。   8.把Visual Studio .Net的当前窗口切换到【Form2.cs(设计)】窗口,并从【工具

angleoldhen的专栏 1103

【S32K3 MCAL配置】-3.4-CANFD配置-接收特定的“经典CAN/CANFD标准帧”和“经典CAN/CANFD扩展帧”(基于MCAL+FreeRTOS)

【S32K3 MCAL配置】-3.4-CANFD配置-接收特定的“经典CAN/CANFD标准帧”和“经典CAN/CANFD扩展帧”(基于MCAL+FreeRTOS)

「汽车电子助手」的博客 696

【MATLAB】通过计算曲率和曲率变化率来实现对曲线波浪程度

这段代码将计算给定曲线的曲率,并与给定阈值进行比较以检测拐角。函数是MATLAB中一个常用的函数,可以用于计算曲线在每个点处的曲率。它基于一种被称为“local least squares fitting” 的方法,通过拟合每个点周围的一小段曲线来计算曲率。MATLAB中可以使用多种方法实现拐角检测,其中一种方法是基于曲率半径的算法。该算法通过计算曲线上每个点处的曲率半径,找到拐角和弯曲处。是一个可选参数,用于控制拟合曲线的平滑度,取值范围为0到1,越接近1表示曲线越平滑。表示曲线在每个点处的曲率,

Fanjufei的博客 1919

Visual C#实现不同窗体间数据传递之三

在前面的二篇文章中(Visual C#实现窗体间数据传递1,2),我们已经分别探讨了主窗体向从窗体传递数据的二种实现方法,在接下来内容中,我们将介绍从从窗体向主窗体传递数据的二种常用的处理方法。 在下面这种从从窗体向主窗体传递数据的方法中,将接触到C#中二个比较重要,也是比较难以掌握的二个概念:委托(Delegate)和事件(Event)。C#中的委托类似于C和C++中的函数指针,但我们也

angleoldhen的专栏 2194

句向量(句嵌入)模型sent2vec的训练及应用

本文讨论NLP中的句向量模型(sent2vec),也就是将一个完整的句子映射成一个实数向量的技术。这方面已经发表的成果也是比较多的,本文中所涉及的技术主要源自NAACL 2018的一篇论文,其中提出的sent2vec模型可以理解为词嵌入技术中经典的CBOW方法的扩展,该所谓的扩展中一个重要改进就是引入了n-gram

白马负金羁 1万+
上一篇: Visual C#中实现窗体间的数据传递之一
下一篇: Visual C#实现窗体间数据传递之二 (2)
angleoldhen
博客等级 码龄20年 40粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值