昨天被骂惨了! 因为我写了一个C父窗体控制子窗体的方法,我把modifiers属性改成了public。本来只是说一下有这么个属性,没想到引起了这顿喷哈哈,虚心接受,感谢朋友们的支持。 我错了!我重新写! 最终效果,就是点主窗体的按钮,更改子窗体picturebox的图片 新建项目,添加一个主窗体Form1和子窗体Form2,,,我们的任务是,在主窗体点击按钮控制子窗体的picturebox控件1、第一种方法:基本是被高手不齿,不过还是比我昨天用的方法好哈哈 Form2子窗体代码:namespaceFormConnections{publicpartialclassForm2:Form{publicForm2(){InitializeComponent();}建立一个公共函数用来更改pictureBox1的图片publicvoidSetPic(){pictureBox1。ImageLocationc。}privatevoidpictureBox1Click(objectsender,EventArgse){点击图片清空,为了调试用pictureBox1。I}}} Form1调用这个函数就可以了:namespaceFormConnections{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}实例化两个子窗体Form2f2privatevoidForm1Load(objectsender,EventArgse){打开子窗体f2newForm2();f2。Show();}privatevoidbutton2Click(objectsender,EventArgse){执行Form2的公共函数f2。SetPic();}}}2、第二种方法,用委托 子窗体代码不变,父窗体代码:namespaceFormConnections{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}Form2f2newForm2();privatevoidForm1Load(objectsender,EventArgse){打开子窗体f2。Show();}privatevoidbutton2Click(objectsender,EventArgse){用委托去执行子窗体的内容this。Invoke(newAction((){f2。SetPic();}));}}}3、第三种方法,用事件解决此类问题 父窗体代码:namespaceFormConnections{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}定义绑定FORM2更改图片操作的事件publiceventEventHandlerChangeForm2PprivatevoidForm1Load(objectsender,EventArgse){Form2f2newForm2();父窗体加载时,实例化Form2,并绑定事件ChangeForm2Picf2。ChangePicEf2。Show();}privatevoidbutton2Click(objectsender,EventArgse){点击按钮,执行事件ChangeForm2Pic(this,newForm2。PicPathArg(){PicPathC。jpg});}}} 子窗体代码:namespaceFormConnections{publicpartialclassForm2:Form{publicForm2(){InitializeComponent();}内部函数voidGoSetPic(stringpicpath){pictureBox1。ImageL}internalvoidChangePicEvent(objectsender,EventArgse){执行事件时,得到传递来的参数PicPathArgthepicpath(PicPathArg)e;执行内部函数this。GoSetPic(thepicpath。PicPath);}publicclassPicPathArg:EventArgs{传递主窗体的数据信息publicstringPicPath{}}privatevoidpictureBox1Click(objectsender,EventArgse){点击图片清空,为了调试用pictureBox1。I}}}我其实比较喜欢用委托,因为代码少,不过高手似乎都是用事件的。