2012-11-30 142 views
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(); 
} 

我選擇pictureboxes來表示的表中,默認BackColor是白色的,並且當鼠標進入BackColor變爲綠色。

當您點擊其中一個PictureBox es我的reservationForm將打開,這是您可以進一步填寫詳細信息以預訂表格的位置。

但我現在卡住的部分是我不知道我的預訂表單上哪個PictureBox我點擊了,所以我需要得到類似於PictureBox數組的索引。

我該如何解決這個問題?

+1

您是否檢查過發件人? –

回答

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); 
+0

但現在我想從picturebox數組中獲得索引,我似乎無法得到這個工作。 – timouwerkerk

+0

@timouwerkerk看我的編輯。 – akatakritos

+0

它的工作,謝謝allot !. – timouwerkerk

0

檢查發件人

private void mouseClick(object sender, EventArgs e) 
{ 
    PicterBox pb = (PicterBox)sender; 
    ... 
} 
0

在你的 「MouseOn」 你已經使用(PictureBox)sender獲得在PictureBox的參考。 然後,您可以遍歷數組,以將特定索引處的圖片框與點擊的圖片框進行比較。當你有一場比賽時,你找到了索引。

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) 
0

也許你可以在每個picturebox設置一個名字,等於在corrispondent索引處。所以在聽衆中你可以使用

PicterBox pb =(PicterBox)sender;

並獲取該索引的名稱。

0

你有很多選擇。我會建議其中的一些:

  • 創建公共類變量或屬性,並將當前選定的Picturebox存儲在click事件上,以便您可以從表單中訪問它;
  • 傳入窗體構造函數的Picturebox(創建接受此信息並將其存儲在內部變量中的構造函數)。