C#怎样在一个实例更改另一个实例内容

问题描述

假如两个实例都创建好了,一个是Form1类产生的,一个Form2类产生的,然后通过Form2产生的实例能够动态修改Form1的实例的内容么,比如把Form1实例上的textbox1.text改成""

解决方案

解决方案二:
你是希望Form2关闭时返回值,来改变Form1控件的值么
解决方案三:
controls.find("textbox1",false)[0].text=""
解决方案四:
查询“C#事件通知
解决方案五:
方法一:一个对象要直接修改另一个对象,那么在对象中必须要引用另一个对象的实例才行的。比如在对象里new另一个对象或是方法的参数调用实参为另一个对象的实例。这样就可以直接操作另一个对象了。方法二:定义一个操作接口。一个对象通过接口引用操作另一个对象。另一个对象的类要实现这个接口。************************前两个是控制,后面的更像是传数据,因为刚看了论坛上面的贴子总结了下************************方法三:一个对象定义一个事件,在事件中传出数据。另一个对象注册这个事件,在事件处理中接收这个数据。方法四:找一个全局的对象来传数据。可以是对象,也可以文件,也可以是数据库。作为数据的中转站。方法五:我的想法是把简单的问题复杂化,就是MVC的方式,把两个Form当成视图。另建一个控制器对象,一个模型对象。比如这里Form1里面提交一个字符串。这个视图的数据传到控制器类的一个方法,控制器里这个方法把字符串传到模型对象里(经过模型对象处理这个字符串最后得到最终需要的结果)。控制器再从模型对象里将处理后的数据发送Form2中,Form2渲染这个数据输出。方法五看起来复杂了,但是后期应该有优势的:视图可以专注数据接收和呈现。模型专注数据加工。控制器控制程序流程。更加有条理功能更新升级更好。因为刚学习MVC。所以多说了一些提外话。高手勿笑话。
解决方案六:
忽然想到第六种:windows的消息机制,一个对象sendmessage。一个对象接收处理消息(窗体本身就有消息处理机制)。这个是很强大的,不但可以本程序内使用,还可以向所有windows窗体发消息以控制其它窗体。
解决方案七:
按楼主的要求控制,推荐使用接口方式:接口方式的优点是可以控制所有实现了这种接口的类。这样代码的通用性更高。比如定义一个接口实现打开的功能,电视和冰箱都实现了这个接口,那么操作接口就可以打开电视或打开冰箱了。如果不是控制只是传数据:推荐事件方式,两个类之间的耦合度底,可以在两个类的外部将一个类的事件,和一个类的方法关联起来就好,很清爽。(如果一个类是专门处理另一个类的,可以在这个类的内部注册另一个类的事件处理处理方法)
解决方案八:
给Form2里定义一个事件,也就用到了委托publicpartialclassForm2:Form{publicForm2(){InitializeComponent();}publicdelegatevoiddeleageClick(stringstr);publiceventdeleageClick_click;privatevoidbutton1_Click(objectsender,EventArgse){if(_click!=null){_click("hello");}}}下面是From1里面的,点击Form1的button弹出Form2,再点击Form2的button将"hello"传给了Form1的textBoxprivatevoidbutton1_Click(objectsender,EventArgse){Form2f2=newForm2();f2._click+=str=>{textBox1.Text=str;};f2.Show();}

解决方案九:
引用4楼Happy_BC的回复:

方法一:一个对象要直接修改另一个对象,那么在对象中必须要引用另一个对象的实例才行的。比如在对象里new另一个对象或是方法的参数调用实参为另一个对象的实例。这样就可以直接操作另一个对象了。方法二:定义一个操作接口。一个对象通过接口引用操作另一个对象。另一个对象的类要实现这个接口。************************前两个是控制,后面的更像是传数据,因为刚看了论坛上面的贴子总结了下************************方法三:一个对象定义一个事件,在事件中传出数据。另一个对象注册这个事件,在事件处理中接收这个数据。方法四:找一个全局的对象来传数据。可以是对象,也可以文件,也可以是数据库。作为数据的中转站。方法五:我的想法是把简单的问题复杂化,就是MVC的方式,把两个Form当成视图。另建一个控制器对象,一个模型对象。比如这里Form1里面提交一个字符串。这个视图的数据传到控制器类的一个方法,控制器里这个方法把字符串传到模型对象里(经过模型对象处理这个字符串最后得到最终需要的结果)。控制器再从模型对象里将处理后的数据发送Form2中,Form2渲染这个数据输出。方法五看起来复杂了,但是后期应该有优势的:视图可以专注数据接收和呈现。模型专注数据加工。控制器控制程序流程。更加有条理功能更新升级更好。因为刚学习MVC。所以多说了一些提外话。高手勿笑话。

请问第一种方法具体该怎么实行呢
解决方案十:
引用7楼u013402605的回复:

给Form2里定义一个事件,也就用到了委托publicpartialclassForm2:Form{publicForm2(){InitializeComponent();}publicdelegatevoiddeleageClick(stringstr);publiceventdeleageClick_click;privatevoidbutton1_Click(objectsender,EventArgse){if(_click!=null){_click("hello");}}}下面是From1里面的,点击Form1的button弹出Form2,再点击Form2的button将"hello"传给了Form1的textBoxprivatevoidbutton1_Click(objectsender,EventArgse){Form2f2=newForm2();f2._click+=str=>{textBox1.Text=str;};f2.Show();}

谢谢,学习了
解决方案十一:
如果只是传数据不推荐第一种,可以用上面u013402605给出的事件方法。如果是要控制另一个窗体可以用第2种接口更好,不过你要第一种,还是给您一个代码吧://窗体一代码记得加个文本框,并设置为publicpublicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){Form2f2=newForm2(this);//new一个窗体2出来,把窗体1的引用传给窗体2f2.Show();//窗体1把窗体2显示出来}}//窗体2代码,记得加个按钮publicpartialclassForm2:Form{Form1f1;//定义一个引用用来指向窗体1publicForm2(Form1f1)//参数为窗体引用{InitializeComponent();this.f1=f1;}privatevoidbutton1_Click(objectsender,EventArgse){f1.textBox1.Text="我是窗体2传过来的文字";}}

时间: 2025-01-30 06:19:10

C#怎样在一个实例更改另一个实例内容的相关文章

sqlserver-SQLServer 一个实例为什么可以放多个数据库

问题描述 SQLServer 一个实例为什么可以放多个数据库 我有一个问题始终不明白,为什么一个数据库实例可以创建多个数据库? 为什么一台主机可以安装多个实例名? 一个实例有多个数据库到底有什么好处? 解决方案 实例是1个或多个数据库的集合,每个数据库又是一堆表的集合 一实例多数据库的好处就是节省系统开销,某些数据可共享,减少连接的开支 在集群的情况下,采用单实例. 解决方案二: 所谓的"实例",就是一个SQL Server数据库引擎.SQL Server 2000支持在同一台计算机上

这里我们可以看到:Person是个多层次对象,包含多层嵌入属性对象(multi-layer embeded objects)。如果需要更改Person类型实例中的任何字段时,我们可以直接用行令方式(imperative style):

  scala中的case class是一种特殊的对象:由编译器(compiler)自动生成字段的getter和setter.如下面的例子: 1 case class City(name:String, province: String) 2 case class Address(street: String, zip: String, city: City) 3 case class Person(name: String, age: Int, phone: String, address:

路由器应用实例 如何配置一个以太网接口

本文从一个具体的实例详细的讲述了如何去配置一个以太网接口,并且给出了详细的操作步骤和操作命令,下面的文章相信会使你受益匪浅.在配置以太网接口时,我们需要为以太网接口配置IP地址及子网掩码来进行IP数据包的处理.默认情况下,以太网接口是管理性关闭的, 所以在配置完成IP地址后,我们还需要激活接口.配置实例:在这个实例中,我们需要为以太网接口配置192.168.0.1的IP地址并且激活接口.1.在特权模式下进入全局配置模式.router# configure terminal2.进入第一个以太网接口

《精通LabVIEW虚拟仪器程序设计与案例实现》一2.10 综合实例:创建一个“Hello World”程序

2.10 综合实例:创建一个"Hello World"程序 精通LabVIEW虚拟仪器程序设计与案例实现看到这里,大家肯定是跃跃欲试了吧,下面我们就一起来创建一个"Hello World"程序. 例2-1 创建一个"Hello World"程序-信号发生器 在本例中我们一起来创建一个信号发生器,该信号发生器可以选择信号类型.更改信号幅度.频率.相位等.创建程序步骤如下. (1)新建一个VI,切换到前面板,从"控件→银色→图形"

PHP的单例模式的一个实例

这篇文章对于PHP单例模式的解释并不一定完善!只是举一个实例而已,目的是让我自己通过一个实例可以加深对单例模式的理解!在此,仅供参考! 单例:可以简单的理解是通过一个类,只能实例化单个对象,不能实例化多个对象! class e { public $uname; static $obj = NULL; //定义一个静态属性 private function __construct() { //在构造方法前使用private属性,目的是不能在类的外部实例化对象, //即不能$a=new e(); }

关于构造单实例类的一个问题

最近一个朋友问我创建单实例的一个问题,他写了一个C++单实例类CSingleton,其构造函数也是private类型.这个类有一个静态函数:GetInstance,它返回单实例类对象的引用,只要用这个函数声明实例便可以限制对象的复制:// 这一句编译器通不过 CSingleton temp = CSingleton::GetInstance(); 但是编译器始终在上面这行代码处受阻.这到底是为什么呢? 其实,这个问题只要弄清楚编译器处理单实例类的一些细节,问题便会迎刃而解.当编译器碰到上面的这条

如何让VC和Delphi程序只运行一个实例

有些时候,我们需要我们的程序只运行一个实例,笔者自己作程序也有这样的情况,于是自已探究一番.忙活一阵后,总算小有收获,不敢独享,在天极发表出来,供大家参考. 既然是从根本上解决问题,对于Windows程序而言,就从WinMain函数入口,这是因为在VC中使用SDK的方式编写程序最透明,并且WinMain是作为VC编译器生成EXE文件的默认入口函数. WinMain的函数原型: int WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, L

如何使应用程序只运行一个实例

要使应用程序只运行一个实例,一个简单的方法是在应用程序类中使用互斥量,这可以用VC下的GUIDGEN.EXE程序产生.GUIDGEN.EXE位于VC安装目录CommonTools目录下 实例 1: 新建一基于对话框的工程ex1,采用默认设置 2: 用GUIDGEN.EXE产生一个全局标志,#define one "产生的全局标志" 本例中产生的语句如下:#define one "0xbe8e2ce1, 0xdab6, 0x11d6, 0xad, 0xd0, 0x0, 0xe0

只运行一个实例且试图运行第二个实例时自动激活第一个实例

本文配套源码 很多程序象winamp,TTplayer,RealPlayer等都有自动激活前一个实例的功能,其实这玩意也很简单的 ,在VB中可以用App.hInstance 来判断是否运行了程序的一个实例,用API函数FindWindow来找到前一个 实例的句柄,从而为激活她做好了准备.但是App.hInstance 有很大的局限性,一个不需要其他资源支 持的EXE文件,如果你复制到其他目录,这个复制品就可以畅通无阻的运行而不管他的前辈是否已运行, 如果这个程序需要独占某个硬件或其他资源,这样就