2010-03-05 60 views
3

我正在建立一個WinForm與不少動態元素,我想我在嵌套控件中的父/子關係有一些麻煩。 我能找到的所有現有問題似乎都獨立於WebForms,這並不完全有用。嵌套的動態控件,使用自定義事件處理程序

我也遇到過一些定製控件的麻煩,但這可能是一個相關的問題。

我正在嘗試顯示一些PictureBoxes,每個PictureBox都有一些關聯的NUD。我最初是通過手工製作大量控件來做到這一點的,但現在我希望自動化該過程並在別處重新使用代碼。

實際的代碼比這更復雜一點,但這裏的重要位僞和實際代碼

panel_book.Controls.Clear(); 

for (loop controls) 
{ 

    //INITIALIZE CHILD CONTROLS 
    PictureBox tempBox = new PictureBox(); 
    NumericUpDown t1 = new NumericUpDown(); 
    NumericUpDown t2 = new NumericUpDown(); 
    NumericUpDown t3 = new NumericUpDown(); 
    NumericUpDown t4 = new NumericUpDown(); 

    tempBox.Image = getImage(); 
    tempBox.Size = tempBox.Image.Size; 
    tempBox.Tag = getValue(); 



     //THIS IS WHAT IS GIVING ME TROUBLE 
     //======================================================= 
    tempBox.MouseEnter += new EventHandler(Binder_MouseEnter); 
    tempBox.Click += new EventHandler(smallCardNew_Click); 



     //THINGS I'VE TRIED 
    tempBox.BringToFront(); 
    tempBox.Focus(); 


    t1.Size = new Size(); 
    t2.Size = t1.Size; t3.Size = t1.Size; t4.Size = t1.Size; 
    t1.Location = new Point(); 
    t2.Location = new Point(); t3.Location = new Point(); t4.Location = new Point(); 
    t1.Value = 0; 
    t2.Value = 0; t3.Value = 0; t4.Value = 0; 
     t1.Enabled = true; t2.Enabled = true; 
    t3.Visible = false; t4.Visible = false; 


    //CREATE THE NEW PARENT CONTROL (PANEL) 
    Panel tempPanel = new Panel(); 
    tempPanel.Margin = new Padding(0, 0, 0, 0); 
    tempPanel.Controls.Add(tempBox); 
    tempPanel.Controls.Add(t1); 
    tempPanel.Controls.Add(t2); 
    tempPanel.Controls.Add(t3); 
    tempPanel.Controls.Add(t4); 

    tempPanel.Size = new Size(); 
    tempPanel.Location = new Point(); 

    panel_book.Controls.Add(tempPanel); 


}//end loop 


/// 

void smallCardNew_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show("Click Event Triggered"); 
} 
void Binder_MouseEnter(object sender, EventArgs e) 
{ 
    MessageBox.Show("Mouse Enter Event Triggered"); 
} 

的混合希望這是明確的,以防萬一它重要的是,這裏的一些背景。

我有一個非常大的FlowLayoutPanel包含一些子面板。 其中一個孩子面板是我現在正在工作的區域。 (以上稱爲panel_book) 面板是我動態添加子板與PictureBox &的朋友來的。

惱人的是,那些MouseEnter和Click事件沒有被觸發。完全一樣。 我在運行之前添加了事件處理程序,此時控件不是動態的,從來沒有遇到過這麼多麻煩。我很確定我甚至用嵌套控件做了這個。

最後,我考慮將最後一個子面板放入自己的自定義控件中,但也有類似的問題。大概找到解決這個問題的方法也可以解決這個問題,但是如果你知道這個問題不會解決的話,請你指點一下正確的方向嗎?

謝謝, :)

回答

2

我看不出有什麼明顯的錯誤從「我試過的東西」是無效的列表的代碼放在一邊,直到控制實際上有一個把手(即加入到父母和所有祖先也有父母,上升到表格級別);但是,您需要通過有條不紊的方法,從最小的可重複案例開始,而不是一大堆代碼。

下面的代碼工作(測試,只落個按鈕和一個Windows窗體上流動面板):

private void button1_Click(object sender, EventArgs e) 
{ 
    PictureBox pb = new PictureBox(); 
    pb.Location = new Point(0, 0); 
    pb.Size = new Size(300, 300); 
    pb.Image = SomeImage; 
    pb.Click += new EventHandler(PictureBoxClick); 

    Panel panel = new Panel(); 
    panel.Location = new Point(10, 40); 
    panel.Size = new Size(300, 300); 
    panel.Controls.Add(pb); 

    flowLayoutPanel1.Controls.Add(panel); 
} 

private void PictureBoxClick(object sender, EventArgs e) 
{ 
    MessageBox.Show("Picture box clicked"); 
} 

如果我執行這個代碼,並點擊PictureBox,我得到的消息盒子出現。從這裏開始,讓這看起來更像你的真實代碼,最終你會遇到問題。

無論問題是什麼,它不只是在你發佈的代碼中,它還在與其他代碼/設計器元素的交互中。

0

所以...

有趣的事情。顯然這些家長控制之一被禁用。看中了。

我在一組不同的控件上重新創建了大約一半的功能,並使其工作。到那時我意識到問題與其中一個控件相關,而不是邏輯。

我不知道什麼時候,如何,或爲什麼控制被禁用,但肯定會去我的'愚蠢的事情來檢查'列表的頂部。 > _ <

相關問題