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

新手请教C#事件的问题。谢谢!
想在form1中显示滚动条,然后等待form2出来后,将form1隐藏掉,想用的是form2的Shown事件,但是总是报“未将对象引用设置到对象的实例”的错误。代码如下: 
------------------------ 
private void submit_Click(object sender, EventArgs e)  
  

Thread t = new Thread(new ThreadStart(ShowLoading)); 
  t.Start(); \\t是启动滚动条的线程 
  Form1 form1 = new Form1(); 
  form1.Shown+=new EventHandler(form1_Shown); 
  form1.label12.Text = LoginName.Text; 
  form1.ShowDialog(); 
  form1.Activate(); 

private void form1_Shown(object sender,EventArgs e) 
  { 
  t.Abort(); 
  this.Hide(); 
  } 
------------------------------------------------ 
当form1出现的时候就告诉我“未将对象引用设置到对象的实例”,根本没进form1_Shown的事件处理程序。 


------解决方案--------------------
show事件在submit_Click之前运行,show中就调用t.Abort,那能不出错么,t还没有创建
------解决方案--------------------
你那个T也应该写在外面,写在里面怎么能用,还要注意先后顺序
------解决方案--------------------
我把你的t移到submit_Click外时,就没出任何问题,你就没在后续回答中说明你这个"未将对象引用设置到对象的实例"问题,我测试时,Form2没任何代码,就一个空窗口.

Shown窗口第一次显示时就会引发一次,这就是这个事件的作用,至于为什么有这么个事件,因为这个事件的在流程处理上的好处多了去了,一事半会举不完.
------解决方案--------------------
探讨
show事件在submit_Click之前运行,show中就调用t.Abort,那能不出错么,t还没有创建

------解决方案--------------------
你想干什么?我引导来引导去,你返回头去问三楼,当8楼(也就是我)是什么?
------解决方案--------------------
你这种东西我10年前就搞过,我用一个实现System.IDisposable的类去处理

using(一个实现System.IDisposable的类=它的new方法)
{
new 另一个,完事,这段代码也就走上终结了.

它的Dispose去处理收拾现场. 
}

什么滚动条,我可以在你滚动时放一段AV.