A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 拼音 中级黑马   /  2013-5-22 13:55  /  2042 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

做了个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()  //位置可以自己指定
}

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

2 个回复

倒序浏览
理论上无法实现 ,因为 当你打开一个新窗体 那么 ,你的当前的窗体的 失去焦点,就是说是 无法控制(没法再捕捉鼠标),除非你手动点击 父窗体 一下,让 父窗体重新获取 焦点,这样才可以。(如果不是此段就是我 胡言乱语)
实现方式: 在 父窗体里 定义 事件 例如: public static  event Action ClosedPicFrom;    然后 再你的 鼠标移出事件订阅的方法 中写入 if(ClosePicFrom!=null ClosedPicFrom();)
同时,在你的PictureForm 中 订阅 你写的 这个 父窗体中的事件。。。From1. ClosedPicFrom+=()=>this.Close();

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
以上 是 比较 偷懒的 方式,因为 定义了static event 的话,就不用 在 Show PictureForm 的时候 将自身传递过去。。。(算了 不多说了)

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马