日期:2014-05-17  浏览次数:20761 次

WinForm窗体传值问题<类似QQ修改头像的功能>
简单说明下:主窗体<MainForm>有个头像,我点击头像弹出个人信息窗体<PeopleInfo><显示出主窗体的头像>,在个人信息窗体中,我点击修改头弹出头像窗体<SelectHandForm>这个是MainForm窗体,这个主窗体中头像的点击事件为
因为我把个人信息窗体中的PicInfo图像控件设置为public了。所以能.出来!
这个是个人信息窗体<PeopleInfo>,他的点击事件为;  这个是头像选择窗体  
我现在出现的问题就是MainForm的头像能成功的传到PeopleInfo中去,但是我想在SelectHandForm中修改头像后也能成功传到PeopleInfo去。修改PeopleInfo中的PicInfo图像控件.因为他是public的。就是这里的问题。在SelectHandForm中获取的PicInfo图像控件一直为空~
WinForm QQ 控件

------解决方案--------------------
http://bbs.csdn.net/topics/360140208
------解决方案--------------------
在我设计程序时,通常需要先搞清楚依赖关系。如果A依赖于B,那么你设计程序时就尽量不要考虑B依赖于A,否则很快就会因为耦合的叠加而变成一团糨子。

你前边描述的窗体调用关系,MainForm依赖于PeopleInfo,而后者又依赖于SelectHeadForm,那么最后这个窗体就是一个独立的、为各种宿主程序提供服务的工具窗体,它不应该想当然地去假设什么“Picinfo”图片框的存在。它应该自己定义一个属性,例如
public Image SelectedImage{get;set;}
然后这个窗体定义一个业务事件,例如
public event EventHandler ImageChanged;

而你的button1_click中的代码,作为这个SelectHeadForm的宿主,它才需要去监听这个事件,例如写
var shf= new SelectHeadForm();
shf.ImageChanged += (s,arg) => 
    {
        this.PicInfo.Image= shf.SelectedImage;
    };
shf.Show();


总之,设计程序要首先搞清楚“职责”。是PeopleInfo该去获取图片的业务,就不要让SelectHeadForm去推送。