标题:Button图片加载的错误.
只看楼主
jain2150
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-9-24
 问题点数:0 回复次数:2 
Button图片加载的错误.

环境:XPsp2 + VS2005

说明:共两个窗体,每个窗体上有一个Button,点击Form1上的Button,则显示窗体Form2,同时Form1隐藏,点击Form2上的Button,则关闭Form2,同时Form1重现.Form2上的Button在鼠标进入和离开时会切换背景图片,背景图由一个imagelist保存.

代码:
//窗体Form1

public partial class Form1 : Form
{
private Form2 frm2;
public Form1()
{
InitializeComponent();
}

private void frm_Closed(object sender, FormClosedEventArgs e)
{
this.Show();
}

private void button1_Click(object sender, EventArgs e)
{
frm2 = new Form2 ();
frm2.FormClosed += new System.Windows.Forms.FormClosedEventHandler(frm_Closed);
frm2.Show();
this.Hide();
}
}

//窗体Form2
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
//MessageBox.Show("Before Button1_Click");
this.Close();
// MessageBox.Show("After Button1_Click");
}

private void button1_MouseEnter(object sender, EventArgs e)
{
this.button1.BackgroundImage = imageList1.Images[0];
}

private void button1_MouseLeave(object sender, EventArgs e)
{
//MessageBox.Show("Before Button1_MouseLeave");
//当点击Button1关闭窗体时,问题出在下面这句
//错误指向imagelist1,提示的信息是:InvalidArgument=“1”的值对于“index”无效。
//参数名: index.
//如果加上MessageBox语句,则不会出现错误.
this.button1.BackgroundImage = imageList1.Images[1]; //问题出在这里
//MessageBox.Show("After Button1_MouseLeave");
}
}

另外问下:Button1_Click事件是否一定将先触发Button1_MouseLeave事件.

搜索更多相关主题的帖子: Button 加载 鼠标 窗体 public 
2007-10-17 09:20
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
得分:0 
button1.Visible = false; this.Close();的時候都會觸發Button1_MouseLeave;
問題可能是this.Close();執行的時候已經把控件imageList1 clear了;
在clear button1的時候觸發了Button1_MouseLeave;
執行this.button1.BackgroundImage = imageList1.Images[1];從而引發的錯誤。

すばらしいコードを書き出すのは楽しい事です
2007-10-17 09:55
jain2150
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-9-24
得分:0 

我的想法与crazymk一样.不过还是没搞懂窗体销毁时,究竟是怎么处理资源回收的.在点击button1销毁窗体时,触发了mouse_Leave事件,此事件发生过程中,imagelist1对象还存在,但是images已经被销毁,即imagelist1是个没有内容的空对象了.不知道这么理解是否正确?

上列问题用以下方法已解决:
private void button1_MouseLeave(object sender, EventArgs e)
{
//检查imagelist是否为空对象
int count = imageList1.Images.Count;
//非空则调用图片
if (count !=0)
{
this.button1.BackgroundImage = this.imageList1.Images[1];
}
}
}


我们都是微软的派生类!
2007-10-17 11:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-178291-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.312074 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved