昨天被骂惨了!
因为我写了一个C#父窗体控制子窗体的方法,我把modifiers属性改成了public 。本来只是说一下有这么个属性,没想到引起了这顿喷哈哈,虚心接受,感谢朋友们的支持 。
【C#窗体间传值方法汇总】我错了!我重新写!
最终效果,就是点主窗体的按钮,更改子窗体picturebox的图片
![C#窗体间传值方法汇总](http://img.jiangsulong.com/230309/16424B024-0.png)
文章插图
新建项目,添加一个主窗体Form1和子窗体Form2,,,我们的任务是,在主窗体点击按钮控制子窗体的picturebox控件
1、第一种方法:基本是被高手不齿,不过还是比我昨天用的方法好哈哈Form2子窗体代码:
namespace FormConnections{public partial class Form2 : Form{public Form2(){InitializeComponent();}//建立一个公共函数用来更改pictureBox1的图片public void SetPic(){pictureBox1.ImageLocation = "c#.jpg";}private void pictureBox1_Click(object sender, EventArgs e){//点击图片清空,为了调试用pictureBox1.Image = null;}}}
Form1调用这个函数就可以了:namespace FormConnections{public partial class Form1 : Form{public Form1(){InitializeComponent();}//实例化两个子窗体Form2 f2 = null;private void Form1_Load(object sender, EventArgs e){//打开子窗体f2 = new Form2();f2.Show();}private void button2_Click(object sender, EventArgs e){//执行Form2的公共函数f2.SetPic();}}}
2、第二种方法,用委托子窗体代码不变,父窗体代码:namespace FormConnections{public partial class Form1 : Form{public Form1(){InitializeComponent();}Form2 f2 = new Form2();private void Form1_Load(object sender, EventArgs e){//打开子窗体f2.Show();}private void button2_Click(object sender, EventArgs e){//用委托去执行子窗体的内容this.Invoke(new Action(() =>{f2.SetPic();}));}}}
3、第三种方法,用事件解决此类问题父窗体代码:namespace FormConnections{public partial class Form1 : Form{public Form1(){InitializeComponent();}//定义绑定FORM2更改图片操作的事件public event EventHandler ChangeForm2Pic;private void Form1_Load(object sender, EventArgs e){Form2 f2 = new Form2();//父窗体加载时,实例化Form2,并绑定事件ChangeForm2Pic += f2.ChangePicEvent;f2.Show();}private void button2_Click(object sender, EventArgs e){//点击按钮,执行事件ChangeForm2Pic(this, new Form2.PicPathArg() { PicPath = "C#.jpg" });}}}
子窗体代码:namespace FormConnections{public partial class Form2 : Form{public Form2(){InitializeComponent();}//内部函数void GoSetPic(string picpath){pictureBox1.ImageLocation = picpath;}internal void ChangePicEvent(object sender, EventArgs e){//执行事件时,得到传递来的参数PicPathArg thepicpath = (PicPathArg)e;//执行内部函数this.GoSetPic(thepicpath.PicPath);}public class PicPathArg : EventArgs{//传递主窗体的数据信息public string PicPath { get; set; }}private void pictureBox1_Click(object sender, EventArgs e){//点击图片清空,为了调试用pictureBox1.Image = null;}}}
我其实比较喜欢用委托,因为代码少,不过高手似乎都是用事件的 。推荐阅读
- 牡丹一元|普通年份牡丹一元收藏价值大吗,应该如何有针对性的收藏呢?
- 雕刻|单品单件还是完美无缺?和田玉切料与独籽哪种更有收藏价值?
- 商誉减值是什么意思? 商誉是什么意思
- 高净值什么意思 高净值家庭是什么意思
- 话费充值卡购买平台 联通话费充值
- 女士的品格|《女士的品格》中4位女演员,颜值演技均在线,你最喜欢谁?
- |90后美女成为“副市长”,学历和颜值没得说,简历却频频被人调侃
- 交易|最美女市长性贿赂超40人!颜值似女星,全面碾压段局长
- 中国男明星颜值排行榜?中国已出柜的名人有哪些?
- 松下lx5教程 松下lx5