黑马程序员技术交流社区

标题: c# 窗体关闭窗体的问题 [打印本页]

作者: 拼音    时间: 2013-5-22 13:55
标题: c# 窗体关闭窗体的问题
做了个winform程序,在一个窗体上很多小图片,当鼠标移动到小图上时,打开一个新的窗体,并在新窗体的picturebox上显示大图,我想让鼠标离开小图的时候关闭显示大图的窗体,应该怎么实现呢

定义一个窗体PictureForm,风格无边框,上边一个picturebox1铺满窗体,总在最前(TopMost = true )
PictureForm重载接口Show()



C# code

public PictureForm.Show(Image img, Point ptLocation)
{
    this.picturebox1.BackGroundImage = img;
    this.Location = ptLocation;
    this.Size = img.Size;
    this.Show();
}



小图片所在窗体定义成员变量并实例化 PictureForm pictureForm = new PictureForm();
小图片控件MouseEnter事件



C# code

if(pictureForm.Visibe == false)
{
    pictureForm.Show(e.Sender.BackGroundImage,Location)  //位置可以自己指定
    this.Focus();        //取回焦点
}



小图片控件MouseLeave事件



C# code

if(pictureForm.Visibe == true)
{
    pictureForm.Hide()  //位置可以自己指定
}


作者: huaruibang    时间: 2013-5-22 18:04
理论上无法实现 ,因为 当你打开一个新窗体 那么 ,你的当前的窗体的 失去焦点,就是说是 无法控制(没法再捕捉鼠标),除非你手动点击 父窗体 一下,让 父窗体重新获取 焦点,这样才可以。(如果不是此段就是我 胡言乱语)
实现方式: 在 父窗体里 定义 事件 例如: public static  event Action ClosedPicFrom;    然后 再你的 鼠标移出事件订阅的方法 中写入 if(ClosePicFrom!=null ClosedPicFrom();)
同时,在你的PictureForm 中 订阅 你写的 这个 父窗体中的事件。。。From1. ClosedPicFrom+=()=>this.Close();
作者: huaruibang    时间: 2013-5-22 18:07
以上 是 比较 偷懒的 方式,因为 定义了static event 的话,就不用 在 Show PictureForm 的时候 将自身传递过去。。。(算了 不多说了)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2