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)

     }

私の問題が何であるかを理解していただければ幸いです...ベースまたは他のものを使用すると、オブジェクトに到達します。これは、ラベルのみが表示され、クラスボックスの一部が表示されないためです。

4

1 に答える 1

1

いくつかのオプションがあります:

  • each のプロパティBox内に each の参照を入れます。TagLabel
  • Clickクラス内でイベント イベントを処理してから、元の送信者 ( ) をそれ自体Boxに置き換えてハンドラーを呼び出します。LabelBox

最初の解決策:

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
}

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 += 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
}
于 2012-11-14T16:24:10.867 に答える