0

学校のプロジェクトでテーブル予約システムを作らなければならないので、以下を作りました(ごく一部)。

PictureBox[] pb = new PictureBox[70] { pictureBox1, pictureBox2, pictureBox3,etc..  };
foreach (PictureBox p in pb)
{
    p.BorderStyle = BorderStyle.Fixed3D;
    p.BackColor = Color.White;
    p.MouseEnter += new EventHandler(mouseOn);
    p.MouseClick += new MouseEventHandler(mouseClick);
}

private void mouseOn(object sender, EventArgs e)
{
    ((PictureBox)sender).BackColor = Color.Green;
}

private void mouseClick(object sender, EventArgs e)
{
    reservationForm rf = new reservationForm();
    rf.ShowDialog();
}

テーブルを表すピクチャボックスを選択しました。デフォルトBackColorは白で、マウスが入るBackColorと緑に変わります。

PictureBoxこれらのes の1 つをクリックしてreservationForm開くと、ここで詳細を入力してテーブルを予約できます。

しかし、今行き詰まっているのは、クリックした予約フォームがわからないため、配列PictureBoxのインデックスのようなものを取得する必要があることです。PictureBox

これを修正するにはどうすればよいですか?

4

5 に答える 5

0

差出人を確認

private void mouseClick(object sender, EventArgs e)
{
    PicterBox pb = (PicterBox)sender;
    ...
}
于 2012-11-30T14:20:08.447 に答える
0

あなたはそれを行う方法を知っています!:)

mouseOnイベントハンドラーですでに正しく実行しています。senderパラメータの同じキャストを行うだけです。

private void mouseClick(object sender, EventArgs e)
{
    PictureBox clickedBox = (PictureBox)sender;

    reservationForm rf = new reservationForm();
    rf.ShowDialog();
}

インデックスが必要な場合は、配列がメソッド ローカルではなくクラス レベルの変数であるとArray.IndexOf仮定して、 を使用できます。pb

int index = Array.IndexOf(pb, clickedBox);
于 2012-11-30T14:20:48.897 に答える
0

「MouseOn」では、すでにピクチャボックスへの参照を(PictureBox)sender取得するために使用しています。次に、配列をウォークスルーして、特定のインデックスのピクチャボックスとクリックされたものを比較できます。一致すると、インデックスが見つかりました。

var clicked = (PictureBox)sender;
int index = 0;
while (index < pb.Length && pb[index] != clicked) index = index+1;
// now index is either 70 (if not found) or the position you want (0..69)
于 2012-11-30T14:22:04.263 に答える
0

たぶん、対応するインデックスに等しい各ピクチャボックスで名前をサイクルに設定できます。したがって、リスナーで使用できます

PicterBox pb = (PicterBox)送信者;

インデックスである名前を取得します。

于 2012-11-30T14:26:13.967 に答える
0

多くのオプションがあります。それらのいくつかを提案します:

  • public クラスの変数またはプロパティを作成し、クリック イベントで現在選択されている Picturebox を保存して、フォームからアクセスできるようにします。
  • フォームのコンストラクターの Picturebox を渡します (この情報を受け取り、内部変数に格納するコンストラクターを作成します)。
于 2012-11-30T14:26:32.063 に答える