当前位置: 首页 > 编程语言 > C#

使用c#与他人交流或访问父级分享

时间:2023-04-10 14:24:57 C#

使用c#与他人交流或访问父级我似乎被一个简单的问题困扰了很多。是的,我是c#的新手,但我正在尝试在不跳过问题的情况下学习我能学到的东西。在这种情况下,我只是觉得我问的问题不对。没有代码示例在这里有帮助,因为我在谈论基础知识(实现)。我还没有真正编写任何代码,只是使用可视化构建器来创建我的表单和菜单。我遇到的问题是当我选择一个菜单项(称之为:设置路径)时,我希望我的主窗体上的列表视图从我在form2上单击“确定”时选择的路径加载。所以我制作了一个简单的查找文件夹对话框,我将新路径存储在form2的文本框中。当我在该form2上单击确定时,我希望填充我的列表视图form1。我知道如何做所有这些,但我终生无法从form2访问form1,反之亦然。我尝试了一个回调函数,但我得到了无法引用非静态变量...错误,因为我的form1是静态的,所以我无法创建任何非静态方法。我查看了EventArgs,但对于这样一个常见的请求来说似乎有点过分了。那么通常的做法是什么?罗伯特的回答是正确的,只是访问另一个表单的成员。但是,通常您应该将应用程序的状态(称为“模型”)与用户界面的状态(称为“视图”)分开存储。当您的应用程序超出一两个交互时,这变得非常重要。有几种关于如何将两者结合在一起的哲学或模式(例如谷歌“模型-视图-控制器”(MVC)和“模型-视图-视图模型”(MVVM)),如果你真的想正确地做到这一点我建议学习这些。我更喜欢MVVM方法,尽管它是为WPF应用程序设计的,但您可以使用Windows窗体轻松实现。在.NET中,用于实现视图模型和视图之间连接的基本代码是一个名为INotifyPropertyChanged的??接口。您创建一个实现此接口的类,并在属性更改时发送通知,例如,对于您的路径属性,您将创建此类:classViewModel:INotifyPropertyChanged{privatestringpath;publicstringPath{get{返回路径;}set{if(value!=path){path=value;NotifyPropertyChanged();}}}//只要属性发生变化,就会触发此事件。公共事件PropertyChangedEventHandlerPropertyChanged;//这将导致事件真正被触发。它使用[CallerMemberName]属性自动确定触发它的属性的名称-只是.NET4.5的一点甜头。:)privatevoidNotifyPropertyChanged([CallerMemberName]StringpropertyName=""){if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs(propertyName));这看起来工作量很大,但现在在您的form1中,您可以创建一个新的“ViewModel”实例,订阅该事件,并将该实例传递给form2。每当用户选择不同的路径时,form2都会更新viewmodel实例上的Path属性。所以Form1需要靠近顶部的代码:privateViewModelviewmodel=newViewModel();这是在Form1构造函数中:viewmodel.PropertyChanged+=newEventHandler(OnPathChanged);创建/显示form2时:varform2=newForm2(viewmodel);//注意,viewmodel实例被传递给form2构造函数form2.Show();然后,form2构造函数存储自己对“viewmodel”实例的引用,并在用户更改路径时设置Path属性。私有ViewModel视图模型;publicForm2(ViewModelviewmodel){这个。视图模型=视图模型;...//设置控件等的其他内容在这里}privatevoidPathChanged(objectsender,EventArgse)//这在您的代码中可能有不同的命名;它是路径更改时调用的事件处理程序{//这将自动通知Form1中的事件处理程序!它超级优雅且灵活。this.viewmodel.Path=txtPath.Text;//假设您有一个名为txtPath的文本框}最后是Form1中的事件处理程序:privatevoidOnPathChanged(objectsender,EventArgse){varnewPath=viewmodel.Path;//从视图模型中获取更新后的路径//TODO:当路径改变时无论你想做什么。这是一个非常好的介绍MVVMusingWindowsForms的链接,它使用两种形式,就像你在你的例子中所做的那样。Windows窗体应用程序的MVVM(模型-视图-视图模型)模式,使用C#如果您需要访问其他窗体上的内容,只需在第一个窗体中保留对它的引用,如下所示:form2=newForm2();form2.Show();form2.WhateverYouWantToAccess也就是说,如果您只想从用户那里获取文件路径,则需要使用OpenFileDialog类。以上就是C#学习教程:使用C#与他人交流或访问家长分享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——privatevoidbutton1_Click(objectsender,System.EventArgse){StreammyStream=null;OpenFileDialogopenFileDialog1=newOpenFileDialog();openFileDialog1.InitialDirectory="c:\";openFileDialog1.Filter="txt文件(*.txt)|*.txt|所有文件(*.*)|*.*";openFileDialog1.FilterIndex=2;openFileDialog1.RestoreDirectory=true;if(openFileDialog1.ShowDialog()==DialogResult.OK){try{if((myStream=openFileDialog1.OpenFile())!=null){using(myStream){//在此处插入代码以读取流。}}}catch(Exceptionex){MessageBox.Show("错误:无法从磁盘读取文件。原始错误:"+ex.Message);}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: