基于C~#的Winform程序参数传递和同步显示的实现
2024-03-03
来源:步旅网
塞』 蔓 塞于C 的Winform程序参数传递和同步显示的实现 基于C#的Winform程序参数传递和同步显示的实现 刘 辉,常婉纶 (西安理工大学高等技术学院,陕西西安 710082) 摘 要:程序设计中经常需要把参数从一个函数传递到另一个函数,或者获取某个函数的返回值。基于Winform的程 序经常需要把参数从一个窗体传入到另一个窗体,或者某一窗体中内容变更时另一窗体相同内容随之改变,利用c 提供的 类、对象属性、委托几种机制,提出通过使用构造函数对对象进行初始化、变更对象属性、借助委托等方法实现多个窗体间的 参数传递和内容的同步更新显示。在对各种方法应用对比的同时,重点发掘了委托机制为实现窗体间内容的传递和同步更 新所带来的优势。 关键词:参数传递;同步显示;Winform程序;C Sharp 中图分类号:TN98;TP311 文献标识码:A 文章编号:1004—373X(2010)14—0064~03 Realization of C#一based Winform Program Parameter Transmission and Synchronous Display I IU HUi。CHANG Wan—lun (Higher Institute of Technolog,Xi’an University of Technology,Xi’an 710082,China) Abstract:The parameter transmission between forms and the synchronous update display realized with methods of the ob— ject initialization,variation of object properties and authorization implemented by constructing functions is put forward by the mechanisms of C 一provided classes,object properties and authorization.By comparison with various methods,the authoriza— tion mechanism is explored emphatically tO realize the parameter transmission between forms and synchronous update. Keywords:parameter transmission;synchronous display;Winform program;C Sharp 目前,微软的.NET平台已经成为主流的开发平 台,几乎与Sun公司的Java语言并驾齐驱,而C 是 .NET平台的主流语言,且日益受到了程序员的喜爱。 在程序设计中,常需要把参数从一个函数传递到另 一个函数中,这就是通常所说的函数调用过程中的参数 图1 TestWindowsApplication项目的 传递,即用实参的值传递给形参的方式来传递信息。 c 程序设计也不例外,同样存在着值传递和引用传递 两种方法l_l。]。同时,在进行Winform程序设计时,当 多个窗体间发生参数传递时,一个窗体中的值发生变 更,其他窗体显示的内容也应该同步更新。 1 Winform程序的值传递 两个窗体Forml和Form2 1.1借助于对象的构造函数接收参数 如下程序段中,在Form2中使用一个private变 量,同时设置一个public的有参构造函数,通过该函数 修改其中的私有变量termname。同时,在Form1中实 例化对象时调用该有参构造函数,实现参数tB.Text的 值传递(call by value)中,函数将参数复制到子程 序的参数中,改变子程序的参数不会影响用于调用的参 数。如图1所示。在C 的TestWindowsApplication 单向传递。 利用对象的构造函数接收参数程序示例: namespace TestWindowsApplication 项目中存在着两个窗体,现在需要在按“确定”按钮后弹 出窗体Form2,并把窗体Form1中TextBox控件tB中 的内容单向传递到窗体Form2中的Label控件lB中, 并显示出来。这种C 中的Winform程序窗体间用于 值传递的实现机制有以下几种方法: 收稿日期:2010—01—24 { public partial class Forml:Form { public FormI() { InitializeComponent(); } private void btClick(object sender,EventArgs e) { Form2 frm—new Form2(tB.Text): 64 《现代电子技术)2olo年第14期总第325期 frm.ShowDialog(); } } } namespace TestWindowsApplication { public partial class Form2:Form { private string termname; public Form2(string xx) { InitializeComponent(); termname—XX: I private void Form2Load(object sender,EventArgs e) { 1B.Text—termname; , l 1.2使用属性机制完成参数传递 如下所示程序段,在Form2中使用一个private变 量,同时对该变量构造一个属性,在属性中对该私有变 量进行读/写,因其属性为public类型,则在Form1中 可以直接通过TermName属性完成对私有变量的 设置。 利用属性机制完成参数传递程序示例: namespace TestWindowsApplication { public partial class Form1:Form { public Forml() { InitializeComponent(); } private void btClick(object sender,EventArgs e) { Form2 frm—new Form2(); frm.TermName—tB.Text; frm.ShowDialog(); ) } } namespace TestWindowsApplication { public partial class Form2:Form { private string termname; public int TermName { get{return termname;) set{termname—value;} ) public Form2() { InitializeComponent(); ) private void Form2一Load(object sender,EventArgs e) { 1B.Text—TermName: 应 1.3 直接设置控件的Modifers属性 把Form2中label控件的Modifers属性设置为 public,则剩下的工作就是在Forml中填写下列代码 即可: Form2 frm—new Form2(); frm.1B.Text—X.ToString(); frm.ShowDialog(); 2 Winform程序的引用传递 引用传递(call by reference)中,函数复制到子程序 中的是参数的地址,用此方法获取指向调用方数据的指 针,此数据与调用方共享,如果方法对引用参数进行更 改,则这些更改即是对调用方的数据进行的。这就是我 们常说的参数的双向传递 。 。在c 中,进行引用传递 时需要在参数前加上关键字ref或out,如下程序段所 示。但这种情况不适合Winform程序的事件编程。 class RefExample { static void Method(ref int i) i一44: } static void Main() { int val一0; Method(ref va1); //val is now 44 } ) 3借助委托实现参数回传后的同步显示 如图2所示,当在C 的TestWindowsApplication 项目的Form1中按下“增加新学期”按钮后弹出窗体 Form3,此时在Form3中可以改变年份和学期名,当按 下“确定”按钮后,要求Forml中的当前学期内容随之 改变(如图3所示)。这时不仅要求把Form3中增加的 新学期当作当前学期回传到Form1中,同时还要求能 够马上刷新Form1窗体,此时需要在Form1中使用 C 提供的委托机制__8]实现参数回传。 图2 TestWindowsApplication项目的 两个窗体Forml和Form3 委托机制的实现方法: (1)在充当子界面的Form3窗体中,首先定义委 托和委托对象: 65 等:基于C 的Winform程序参数传递和同步显示的实现 public delegate void ChangeTerm()l //定义一个委托 public ChangeTerm ehangeterm //定义一个委托对象 Form3 frm=new Form3(); 然后,在适当的事件中执行委托操作即可。如可在 “确定”按钮的单击事件下执行委托。 Frm.changeterm—new Form3.ChangeTerm(ShowTerm)‘ 4结private void bt—语 Click(object sender,EventArgs e) { this.ehangeterm()I 利用c 提供的几种机制组合使用,可完美地实现 在c 的Winform程序中根据需要把一个值从一个窗 口传入另一个窗口,并且在多个窗口中实现内容的同步 更新。 参考文献 } [1]周峰.Visual C .NET 2005中文版基础与实践教程[M].北 京:电子工业出版社,2007. [23 HOFFMAN K,KRUGER L.C .NET技术内幕[M].董 图3 TestWindowsApplication项目中按下窗体Form3 梁,高猛,译.北京:清华大学出版社,2006. [3]ANDERS Hejlsberg。SCOTT Wiltamuth,PETER Golde.C 编程语言详解[M].韩江,王秀慧,译.北京;电子工业出版 社。2007. 中的确定按钮后窗体Form1的变化状况 (2)在充当主界面的Forml窗体中,首先需要定 义一个方法,在该方法中获取到Form3中选定的当前 学期内容,然后在对应的TextBox控件tB中显示。采 E4]叶煜.c 语言中参数传递分析研究口].科技创新导报,2008 (28):14. 用如下所示定义方法ShowTerm: private void ShowTerm() [5]戴志锋,管建和.c 中属性定义Value参数的值传递机制分 析[J].电脑编程技巧与维护,2007(9):22—25. [6]白雪冰.分析C 程序设计语言中参数的传递[J].电脑知识 与技术,2007(15):749-750. //调用委托时所需要执行的语句 [7]刘志华.深入探讨C一语言中参数传递问题[J].哈尔滨师 然后在按下“增加新学期”按钮时,添加如下代码 即可。 作者简介:刘 辉常婉纶(上接第6O页) 范大学:自然科学学报,2007,23(4):63-65. [8]张立.c 2.0完全自学手册[M].北京:机械工业出版 社,2007. 女,1965年出生,湖南常德人,硕士研究生,副教授。 ̄- ̄xk事数据挖掘和软件技术方面的研究工作。 女,1978年出生。陕西西安人,在读研究生,讲师。主要从事计算机软件课程教学及实训指导工作。 社,2009. [4]蓝章礼,李益才.数字图像处理与图像通信[M].北京:清华 4结 语 大学出版社,2009. 数字图像边缘检测的设计大多基于Matlab软件设 计的,这与工程化还有一定的距离。针对这一不足,提 [5]郭文强。数字图像处理[M].西安;西安电子科技大学出版 社,2009. E6]冯新宇,方伟林,杨栋.基于中值滤波与Sobel,Canny算子的 图像边缘检测研究[J].黑龙江水专学报,2009,36(1): 10卜lO3. 出了基于CCS的数字图像边缘检测的设计,使用Sobel 算子实现了图像边缘检测,为图像处理提供一种硬件实 现的方法。 参考文献 [7]陈戈珩,王飞.基于Matlab的Sobel算子的指纹中心点定位 [J].现代电子技术,2009,32(8):79—80. [8]姜阳。周锡青.DSP原理与应用实验[M].西安:西安电子科 技大学出版社,2008. [1]韩晓军.数字图像处理技术与应用[M].北京:电子工业出 版社,2009. [9]彭启琮,管庆.DSP集成开发环境:CCS及DSP/BIOS的原 理与应用[M].北京:电子工业出版社,2004. [1O]赵洪亮。卜凡亮,黄鹤松。等.TMS320C55x DSP应用系统 设计[M].北京:北京航空航天大学出版社,2008. [2]冈萨雷斯.数字图像处理(Matlab版)[M].北京:电子工业 出版社,2009. [3]阮秋琦.数字图像处理基础[M].北京:清华大学出版 作者简介:扬66 宏女,1981年出生,甘肃天水人,讲师,硕士研究生。研究方向为信号处理、仪器仪表等。