2010-08-24 7 views
5

Tôi tạo ra một tài sảnLàm thế nào để tạo ra một sự kiện về sở hữu thay đổi và sự kiện thay đổi trong C#

public int PK_ButtonNo 
{ 
    get { return PK_ButtonNo; } 
    set { PK_ButtonNo = value; } 
} 

Bây giờ tôi muốn thêm sự kiện vào khách sạn này cho giá trị thay đổi và thay đổi.

Tôi đã viết hai sự kiện. Ở đây tôi muốn cả hai sự kiện chứa giá trị thay đổi cũng như giá trị thay đổi.

i.e

Khi người dùng triển khai sự kiện. Ông phải có e.OldValue, e.NewValue

public event EventHandler ButtonNumberChanging; 
public event EventHandler ButtonNumberChanged; 

public int PK_ButtonNo 
{ 
    get { return PK_ButtonNo; } 
    private set 
    { 
     if (PK_ButtonNo == value) 
      return; 

     if (ButtonNumberChanging != null) 
      this.ButtonNumberChanging(this,null); 

     PK_ButtonNo = value; 

     if (ButtonNumberChanged != null) 
      this.ButtonNumberChanged(this,null); 
    } 
} 

Làm thế nào tôi sẽ nhận được giá trị thay đổi và giá trị đã thay đổi khi tôi thực hiện sự kiện này.

+0

Bạn đang gọi "PK_ButtonNo" bên trong chính nó! điều này sẽ gây ra một ngoại lệ StackOverflow. Thêm thành viên riêng tư và cho phép bất động sản truy cập vào nó – Nissim

+0

Ok Nissim: Tôi đã không nhận thấy. Cảm ơn –

Trả lời

6

Thêm lớp sau vào dự án của bạn:

public class ValueChangingEventArgs : EventArgs 
{ 
    public int OldValue{get;private set;} 
    public int NewValue{get;private set;} 

    public bool Cancel{get;set;} 

    public ValueChangingEventArgs(int OldValue, int NewValue) 
    { 
     this.OldValue = OldValue; 
     this.NewValue = NewValue; 
     this.Cancel = false; 
    } 
} 

Bây giờ, trong lớp học của bạn thêm phần khai báo sự kiện thay đổi:

public EventHandler<ValueChangingEventArgs> ButtonNumberChanging; 

Thêm thành viên sau (để ngăn chặn stackoverflow ngoại lệ):

private int m_pkButtonNo; 

và thuộc tính:

public int PK_ButtonNo 
{ 
    get{ return this.m_pkButtonNo; } 
    private set 
    { 
     if (ButtonNumberChanging != null) 

     ValueChangingEventArgs vcea = new ValueChangingEventArgs(PK_ButtonNo, value); 
     this.ButtonNumberChanging(this, vcea); 

     if (!vcea.Cancel) 
     { 
      this.m_pkButtonNo = value; 

      if (ButtonNumberChanged != null) 
      this.ButtonNumberChanged(this,EventArgs.Empty); 
     } 
    } 
} 

Các "Hủy bỏ" bất động sản sẽ cho phép người dùng hủy bỏ các hoạt động thay đổi, đây là một tiêu chuẩn trong một x-ing sự kiện, chẳng hạn như "FormClosing", "Members", vv ...

+0

Bạn đã đánh bại tôi! Tôi gần như đã gõ xong! –

+1

Đăng nó! và để giải pháp tốt hơn giành chiến thắng! (: – Nissim

+0

@Nathan: Vâng, bạn có thể làm điều đó. Thx với Nissim và tất cả những người đã nỗ lực cung cấp giải pháp –