谢谢你们在下实现了,小弟实现了,麻烦各位大侠指点指点,看看小弟的理解对吗,另外还有几个问题?
窗体Form1.cs:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace Test
{
  public partial class Form1 : Form
  {
  public int x;
  public Form1()
  {
  InitializeComponent();
  }  private void Form1_Load(object sender, EventArgs e)
  {
  x = x + 1;
  label1.Text = x.ToString();
    
  }
          void fm2_myevent()   
  该方法调用 Form1_Load方法。问题1:直接在委托里添加“Form1_Load”不行吗?为什么又弄了个“fm2_myevent”。试了试,真不行,提示不匹配。必须要Form1_Load(null,null)吧,为啥呢?  
  {
  Form1_Load(null, null);
  }  private void button2_Click(object sender, EventArgs e)
  {
  Form2 fm2 = new Form2();
  Form2.myevent += new Form2.mydelegate(fm2_myevent);问题2:这句什么意思?“+=”是什么意思?是不是把“fm2_myevent”方法通过委托“Form2.mydelegate”作为参数,交给“Form2.myevent ”方法去执行?[color=#FF0000]问题3:“Form2.myevent += new Form2.mydelegate(fm2_myevent);”“必须要在“myevent事件触发之前吭”。[/color]
  fm2.Show();
  }  }
}窗体Form2.cs:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace Test
{
  public partial class Form2 : Form
  {
  public Form2()
  {
  InitializeComponent();
  }  public delegate void mydelegate(); 声明委托
  public static event mydelegate myevent; 问题4:这个事件应该叫什么事件呢?委托的实例?   
      private void button1_Click(object sender, EventArgs e)
  {
  if (myevent != null)
  {
  myevent(); 调用这个方法时调用“Form1_Load”
  }
  }
    
  }
}问题四:委托有什么有点,一般在什么时候用?
在下的理解:调用同一个窗口的另一个方法不用委托,可以直接调用。不同窗口之间的方法调用使用委托。
问题五:“ Form2.myevent += new Form2.mydelegate(fm2_myevent);”这一句必须要放在类的方法里面,而不能直接放在类里,否则找不到“Form2.myevent ”却可以找到“Form2.mydelegate”这是为什么?
有一个疑问直接在“Form2”中实例化“Form1”为“fm1”,然后调用fm1.Form1_load事件重载行吗,必须使用委托吗?试了试是不行,看不见”fm1.Form1_load“事件。

解决方案 »

  1.   

    基本上委托是为了分解,比如分层、分先后、分不同人或者不同阶段去开发,而每一个人、每一个阶段只要认真做好眼前的事就好。比如我们在有5、6个界面上都支持用户把业务对象直接拖入界面上的垃圾桶来删除,之后我们就想要在程序导航主界面上的一个垃圾桶应该可以用来删除所有业务对象,我们需要一次写好这个垃圾桶代码,而以后有新的各种业务对象时都能处理而不需要动导航界面上的任何一行代码(何况它封装为DLL了)。理解实际开发中需求,才能理解最基本的技术如何真正用好。
      

  2.   

    我可以再给你一个建议,看看INotifyPropertyChanged之类的,并且理解这类东西的设计应用。
      

  3.   

      Form2.myevent += new Form2.mydelegate(delegate()
    {
      Form1_Load(null, null);
    });简写