2012-03-09 75 views
0

我有一個應用程序Windows窗體,其中我創建了動態控件,並且我需要像按鍵一樣的程序事件,但是我無法做到這一點,因爲一旦它們只存在於運行時就不會彼此認識。 (我」對不起:英語由谷歌Tradutor)使控件動態識別另一個

+0

你是什麼意思相互認識?這些控件是否需要相互瞭解,還是僅僅是需要知道的控件?或者你只是試圖勾起事件?請在你創建它們的地方顯示你的代碼。 – 2012-03-09 19:28:11

+0

我認爲他們真的需要了解彼此的原因C1控件事件會在C2中做些什麼(第二個控件) – Aime 2012-03-09 19:48:58

+0

請發佈代碼以創建來自事件處理程序的控件和代碼。 – 2012-03-09 21:07:27

回答

0

這個問題似乎是,你是在本地創建的動態變量:

ComboBox c1 = new Combobox(); 
TextBox t1 = new TextBox(); 

更改jacqijvv的回答有點看起來更像什麼,我相信你正在努力實現。我還要假設您有彼此相關的多個文本框/組合框對,所以你可以將它們存儲在一個Dictionary對象在事件處理程序取回這些數據:

public partial class Form1 : Form 
{ 
    public Dictionary<TextBox, ComboBox> _relatedComboBoxes; 
    public Dictionary<ComboBox, TextBox> _relatedTextBoxes; 

    public Form1() 
    { 
     InitializeComponent(); 

     _relatedComboBoxes = new Dictionary<TextBox, ComboBox>(); 
     _relatedTextBoxes = new Dictionary<ComboBox, TextBox>(); 

     TextBox textBox = new TextBox(); 
     textBox.Text = "Button1"; 
     textBox.KeyDown += textBox_KeyDown; 

     ComboBox comboBox = new ComboBox(); 
     // todo: initialize combobox.... 
     comboBox.SelectedIndexChanged += comboBox_SelectedIndexChanged; 


     // add our pair of controls to the Dictionaries so that we can later 
     // retrieve them together in the event handlers 
     _relatedComboBoxes.Add(textBox, comboBox); 
     _relatedTextBoxes.Add(comboBox, textBox); 

     // add to window 
     this.Controls.Add(comboBox); 
     this.Controls.Add(textBox); 

    } 

    void comboBox_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     ComboBox comboBox = sender as ComboBox; 
     TextBox textBox = _relatedTextBoxes[comboBox]; 
     // todo: do work 
    } 

    void textBox_KeyDown(object sender, KeyEventArgs e) 
    { 
     TextBox textBox = sender as TextBox; 
     // find the related combobox 
     ComboBox comboBox = _relatedComboBoxes[textBox]; 

     // todo: do your work 

    } 
} 
+0

感謝大家, 也許我無法解釋正確,但BradRem的迴應正是我想要的。非常感謝 – Aime 2012-03-12 14:58:26

0

你可以試試下面的代碼:

public partial class Form1 : Form 
{ 
    // Create an instance of the button 
    TextBox test = new TextBox(); 

    public Form1() 
    { 
     InitializeComponent(); 
     // Set button values 
     test.Text = "Button"; 

     // Add the event handler 
     test.KeyPress += new KeyPressEventHandler(this.KeyPressEvent); 

     // Add the textbox to the form 
     this.Controls.Add(test); 
    } 


    // Keypress event 
    private void KeyPressEvent(object sender, KeyPressEventArgs e) 
    { 
     MessageBox.Show(test.Text); 
    } 
} 

這應該工作。

+0

jacqijw,謝謝你的幫助,但我做到了。我寫了錯誤的事件。是KeyDown 我想要做的事似乎是: – Aime 2012-03-09 19:51:58

+0

ComboBox c1 = new Combobox(); TextBox t1 =新的TextBox。並根據c1.SelectedIndex我嘗試啓用或不是t1 – Aime 2012-03-09 19:52:38

+0

很高興你來對了。 Goodluck – jacqijvv 2012-03-09 20:00:11