写扭了,那是copy过来时弄乱的。
还漏了以下的定义:
         public class BookEventArgs:System.EventArgs
{
public BookInformation book_info ;
          }

         public delegate void CallBack(object sender ,BookEventArgs e) ;    其实这些都不是主要的,我想问的是:在父窗体中定义了事件,当从这个父窗体派生子窗体时,编译器不认识继承的事件,即给人的感觉是事件是不能继承的。why???
错误信息如下:
D:\03.project\02.CSharp\new\Access_Book_information_revised\Form2.cs(187): 事件“Access_Book_information.Form1.PutOutInformation”只能出现在 += 或 -= 的左边(从类型“Access_Book_information.Form1”中使用时除外)

解决方案 »

  1.   

    event关键字不象看上去那么简单,它其实要生成一堆代码(事件监听者的add 和 remove方法)。我想语法限定了事件只能在当前类中触发,在类之外访问事件,实际上只能调用时间的add和Remove方法来增加或者减少时间的监听者。
    因为 event != delegate.1. 如果将申明时间的关键字event替换成delegate,可以这样写:
      触发事件:
        PutOutInformation(this,myEventArgs);
      附加事件,因为没有事件的管理器,不能+=
       obj.PutOutInformation = new Callback(func);
    2. 用标准的事件书写规范
       在基类中定义一个出发事件的触发方法:
         protected virtual void OnPutoutInformation(EventArgs/*你事件的实际参数类型 */ e)
         {
           if (PutoutInformation != null)
              PutoutInformation(this, e);
         }
       在派生类中调用这个触发方法来触发事件:
        .....
          OnPutoutInformation(EventArgs.Empty);
        .....