0

現在、Visual Studio 2010 でグリッド ベースのダンジョン システムを作成しようとしています。64 個の他の小さなユーザー コントロール オブジェクトを含むメイン ユーザー コントロールがあり、これを GridSquares と呼び、8x8 グリッドに編成しました。グリッド スクエアの背後にあるアイデアは、「ダンジョン」内の潜在的な移動スペースとして機能することです。現時点での問題は、比較のために座標 (名前) を取得できるように、画面に配置されているユーザー コントロール (GridSquares) 自体でクリック イベントを呼び出せるようにする必要があることです。ただし、(クリックして)呼び出すと、イベントは機能しません。

ユーザーコントロール(GridSquareオブジェクト)内にイベントを配置するとイベントが機能することを認識していますが、ユーザーコントロール自体がクリックされたときにも機能するためにクリックが必要です。

配置された 64 個のオブジェクトがすべて同じ型であることを考えると、イベントを通じてユーザー コントロールの名前を返す必要があるため、GridSquare クラス内で作業することはできません。

これが理にかなっていることを願っていますが、さらに説明する必要があるかどうか尋ねてください.

どうもありがとう、リアム

編集: これがどの程度役立つか、どのコードを表示するかはわかりませんが、GridSpace コントロールは既に「ダンジョン」ユーザー コントロールに追加されています。次に、64 個すべてを辞書に追加します。

gridSpaces.Add(gs11.Name, gs11);

gs11 は GridSquare の名前です。

ここから、ダンジョン画面の個々のユーザー コントロールのイベント ハンドラーを作成しようとしましたが、呼び出しに失敗しました。

4

2 に答える 2

0

私はあなたの言うことを理解すると思います。このコードをユーザー コントロールに追加します。

public new event EventHandler Click {
    Add {
        base.Click += value;
        foreach(Control i in Controls) {
            i.Click+=value;
        }
    }
    remove {
        base.Click -= value;
        foreach(Control i in Controls) {
            i.Click -= value;
        }
    }
    }

これにより、ユーザーコントロール内のすべてにクリックイベントが追加されます。エラーが発生しなかったことを願っています。これが役立つことを願っています

于 2012-04-17T14:42:59.470 に答える
0

それぞれに同じハンドラーをGridSquare使用し、senderパラメーターを使用して、どちらがクリックされたかを判断できます。

protected void Page_Load(object sender, EventArgs e)
{
   for (int i = 0; i < 64; i++)
   {
      GridSquare square = new GridSquare();
      square.Click += new EventHandler(gridSquare_Click);
      grid.Add(gridSquare);
   }
}

void gridSquare_Click(object sender, EventArgs e)
{
   GridSquare square = (GridSquare)sender;
   // do something cool with the clicked square here
}
于 2012-04-17T13:53:16.623 に答える