Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Mọi người xem giùm những điều mà mình hiểu về event sau có đúng hay không

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    16

    Mặc định Mọi người xem giùm những điều mà mình hiểu về event sau có đúng hay không

    Cái này là do mình tự viết dựa trên cách hiểu của mình đối với các tài liệu trên mạng. Nhưng mình không dám chắc là có đúng hay không.

    C++ Code:
    1. Một trong những ứng dụng thường thấy nhất của delegate là Event. Mỗi Event thực chất là một delegate.
    2.  
    3. Bạn tạo một project mới kiểu Windows Form, vẽ lên Form một button tên là button1. Sau đó, bạn double click vào button, Visual Studio sẽ sinh cho bạn các đoạn mã sau :
    4.  
    5. Trong tập tin Form1.cs :
    6. PHP Code:
    7.     ...
    8.     private void button1_Click(object sender, EventArgs e)
    9.     {
    10.      
    11.      
    12.     }
    13.     ...  
    14. Trong tập tin Form1.Designer.cs :
    15. PHP Code:
    16.     ...
    17.     #region Windows Form Designer generated code
    18.     ...
    19.     this.button1.Click += new System.EventHandler(this.button1_Click);
    20.     ...
    21.     #endregion
    22.     ...  
    23. Như bạn thấy, khi bạn cài đặt sự kiện Click cho button, một thể hiện của delegate System.EventHandler được tạo ra và gắn với phương thức button1_Click. Sau đó delegate này được gắn vào sự kiện của lớp Button.
    24.  
    25. Để cài đặt một sự kiện cho một lớp như trên. Bạn phải tạo một delegate và một event tương ứng. Cách khai báo như sau :
    26. [access modifier] event [delegate name] <name>;
    27. • access modifier : là thuộc tính truy cập (private, public, protected, internal)
    28. • delegate name : tên delegate cần sử dụng
    29. • name : tên của sự kiện
    30. VD :
    31.     public delegate void OnCreatingHandler();
    32.     public event OnCreatingHandler OnCreating;
    33.  
    34. Chú ý : để tránh trùng tên và dễ phân biệt, ta nên thêm chữ "On" vào tên của event và delegate, đồng thời thêm "Handler" vào sau tên của delegate để cho biết đây là delegate dùng cho sự kiện.
    35. Cơ  chế hoạt động của Event :
    36. Để hiểu về Event ta sẽ có món sau : Hàm phát sinh Event,Event ,Hàm xử lý Event .Trước tiên ta đã có sẵn 1 Event ,Event sẽ được phát sinh trong bất kỳ hàm nào có gọi Event .
    37. class MyClass
    38.     {
    39.         public delegate void OnCreatingHandler(int Args);   //khai báo delegate
    40.         public event OnCreatingHandler OnCreating;          //khai báo sự kiện
    41.  
    42.         public MyClass()
    43.         {
    44.         }
    45.  
    46.         public void DoWork()
    47.         {
    48.             int Number = 8;        //tham số cần truyền
    49.             OnCreating(Number);     //phát sinh sự kiện
    50.         }
    51.     }
    52. Rồi sau đó ta có thể nói cho complier biết hàm nào là hàm xử lý Event .
    53. static void Main(string[] args)
    54.         {
    55.             MyClass M = new MyClass();
    56.             //gắn hàm xử lý vào sự kiện
    57.             M.OnCreating += new MyClass.OnCreatingHandler(M_Hello);
    58.             M.OnCreating += new MyClass.OnCreatingHandler(M_OnCreating);
    59.             //sự kiện sẽ phát sinh khi gọi phương thức này
    60.             M.DoWork();
    61.             Console.ReadLine();
    62.         }
    63.         //hàm xử lý sự kiện
    64.         static void M_OnCreating(int Args)
    65.         {
    66.             Console.WriteLine("Tham so nhan duoc : {0}", Args);
    67.         }
    68.         static void M_Hello(int num)
    69.         {
    70.             Console.WriteLine("{0}", num);
    71.         }
    72.  
    73. Với cách làm trên nếu mỗi lần bạn muốn gán hàm xử lý Event thì phải cài đặt và khai báo hàm đó ,nếu muốn không cần tạo như trên có thể sử dụng cách Anonymous method :
    74. test.OnCong += delegate()
    75.                 {
    76.                     Console.WriteLine("abc xyz");
    77.                 };
    78.  
    79. Theo quy định thì người ta thiết kế event theo nguyên tắc sau :
    80.  bất kỳ event nào cũng có kiểu trả về là void, nhận đầu vào là 2 tham số, tham số thứ 1 là object “raising event” có kiểu là Object, tham số thứ 2 là EventArgs.
    81.  
    82. EventArgs :thật ra nó là những giá trị thay đổi khi xảy ra event giống như trong ví dụ trên thì biến int truyền vào là 1 EventArgs, có điều thay vì phải viết ra một chuỗi các giá
    83. trị thay đổi khi xảy ra event như trên ta gom lại thành 1 EventArgs. Tùy mỗi Event mà có EventArgs khác nhau nhưng tất cả các EventArgs đều được kế thừa từ lớp cơ bản là
    84. EventArgs. Ví dụ khi sự kiện nhấn chuột xảy ra thì tình trạng chuột trái là đã được nhấn lúc này trong MouseEventArg.Button.Left sẽ có giá trị thay đổi là tình trạng của chuột
    85. trái đã được nhấn

    Nguồn : C# Việt + Learning C#
    Đã được chỉnh sửa lần cuối bởi vipzero : 23-01-2013 lúc 01:38 PM. Lý do: Ghi nguồn

  2. #2
    Ngày gia nhập
    07 2010
    Bài viết
    99

    Visual C# Code:
    1. public void DoWork()
    2. {
    3.             int Number = 8;
    4.             if (OnCreating!=null)
    5.                  OnCreating(Number);
    6. }

    chú ý : nếu event ko có bất kỳ subscribers nào (= null), khi gọi sẽ bị lỗi.

    p/s : nếu mình ko nhầm, bài viết này bạn tham khảo bên web CSharp Việt
    Đã được chỉnh sửa lần cuối bởi nhquynam : 22-01-2013 lúc 08:56 PM.
    Never try, never know

  3. #3
    Ngày gia nhập
    09 2011
    Bài viết
    16

    Trích dẫn Nguyên bản được gửi bởi nhquynam Xem bài viết
    Visual C# Code:
    1. public void DoWork()
    2. {
    3.             int Number = 8;
    4.             if (OnCreating!=null)
    5.                  OnCreating(Number);
    6. }

    chú ý : nếu event ko có bất kỳ subscribers nào (= null), khi gọi sẽ bị lỗi.

    p/s : nếu mình ko nhầm, bài viết này bạn tham khảo bên web CSharp Việt
    Mình cũng không nhớ rõ nữa, nhưng nếu đúng vậy để mình sửa lại nguồn. Bạn xem giùm mình luôn phần EventArgs, chỗ đó mình chỉ nghĩ như vậy nhưng không biết có đúng không.

Các đề tài tương tự

  1. công ty event - công ty sự kiện - cho thuê thiết bị event
    Gửi bởi VMHGroup trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 24-10-2011, 09:05 PM
  2. công ty event, công ty sự kiện, cho thuê thiết bị event Phú Tinh
    Gửi bởi VMHGroup trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 22-10-2011, 10:22 PM
  3. công ty event - công ty sự kiện - cho thuê thiết bị event
    Gửi bởi VMHGroup trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 21-10-2011, 08:24 AM
  4. Event nào ưu tiên hơn event Leave
    Gửi bởi nobitawin trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 03-09-2009, 09:56 AM
  5. Làm đúng cách tạo event nhưng lại bị một lỗi cơ bản
    Gửi bởi thanhtungtnt trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 16-01-2009, 11:19 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn