2012-11-14 11 views
2

와 같은 클래스에서 다른 변수에 액세스 나는 다음과 같은 문제가 있습니다클릭 이벤트

내가 마우스 클릭을 통해 내 클래스 내부 변수에 액세스 할을.

내 클래스 : 이제

public class Box 
{ 

    public Label LabelDown = new Label(); 
    public byte SavedID; 

    public Box(EventHandler InsideEvent) 
    { 

     LabelDown.Text = null; 
     LabelDown.Size = new Size(96, 32); 
     LabelDown.Visible = true; 
     LabelDown.Click += new EventHandler(InsideEvent); 

     SavedID = 0; 

    } 
} 

, 내가 사용하는 양식이 클래스의 Array을 만들어 :

Box[] myBox = new Box[5]; 

내 양식을 초기화 코드에서, 나는이를 추가했습니다 :

for (byte j = 0; j <= myBox.Length(); j++) 
    { 
     mybox = new Box(Box_goInside_Click) 
     Controls.Add(Box[j].LabelDown); 
    } 

이제 Click 이벤트 처리기는 다음과 같습니다

void Box_goInside_Click(object sender, EventArgs e) 
    { 

     //here i want to access the saved ID of MyBox that uses this Label 
     Dosomething(whatever comes here. SavedID) 

    } 

내 문제가 무엇인지 이해하고 싶습니다. 내 라벨 만 볼 수는 있지만 내 클래스 상자의 일부가 아니기 때문에 기본 또는 다른 것을 사용하면 오브젝트에 도착합니다.

답변

1

당신은 몇 가지 옵션이 있습니다

  • LabelTag 건물 내부의 각 Box의 참조를 넣어.
  • Box 클래스의 이벤트 Click 이벤트를 처리 한 다음 원래 보낸 사람 (Label)을 Box 자체로 바꾸는 처리기를 호출하십시오.

최초의 솔루션 :

public Box(EventHandler InsideEvent) 
{ 
    LabelDown.Text = null; 
    LabelDown.Size = new Size(96, 32); 
    LabelDown.Visible = true; 
    LabelDown.Click += new EventHandler(InsideEvent); 
    LabelDown.Tag = this; 

    SavedID = 0; 
} 

void Box_goInside_Click(object sender, EventArgs e) 
{ 
    Box box = (Box)((Control)sender).Tag; 

    // Do your stuff 
} 

두 번째 솔루션 :

public class Box 
{ 
    public Label LabelDown = new Label(); 
    public byte SavedID; 

    public Box(EventHandler InsideEvent) 
    { 

     LabelDown.Text = null; 
     LabelDown.Size = new Size(96, 32); 
     LabelDown.Visible = true; 
     LabelDown.Click += OnLabelClick; 

     SavedID = 0; 

     _insideEvent = InsideEvent; 
    } 

    private EventHandler _insideEvent; 

    private OnLabelClick(object sender, EventArgs e) 
    { 
     if (_insideEvent != null) 
      _insideEvent(this, e); 
    } 
} 

void Box_goInside_Click(object sender, EventArgs e) 
{ 
    Box box = (Box)sender; 

    // Do your stuff 
} 
+0

와우, 덕분에 잔뜩! 첫 번째 솔루션은 나를 위해 완벽하게 작동합니다. – user1824237

+0

@ user1824237 불행히도 ** 수락 할 수 없습니다 ** 내 대답! :) LOL –