2012-03-09 2 views
0

나는 동적 컨트롤을 만들고 Keypress와 같은 프로그램 이벤트가 필요한 응용 프로그램 Windows Form이 있지만 런타임에 일단 존재하면 서로를 알지 못하기 때문에 만들 수 없습니다. 이 일을해야동적 컨트롤을 다른 컨트롤로 인식

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

당신이 무엇을 의미합니까 : 나는 또한 당신이 이벤트 처리기에서 나중에 검색하기 위해 사전 객체에 저장할 수 있도록 서로 관련된 여러 텍스트 상자/콤보 쌍을 가지고 있다고 가정거야 서로를 알아보고 있니? 컨트롤은 서로에 대해 알아야합니까, 아니면 컨트롤에 대해 알아야하는 양식입니까? 아니면 그냥 이벤트를 연결하려고합니까? 귀하가 작성한 곳의 코드를 보여주십시오. –

+0

나는 그들이 C1 컨트롤 이벤트가 C2 (두 번째 컨트롤)에서 무언가를 할 것이기 때문에 서로를 알고 있어야한다고 생각한다. – Aime

+0

이벤트 핸들러로부터 컨트롤과 코드를 생성하는 코드를 게시 해주십시오. –

답변

0

문제는 로컬 동적 변수를 생성하는 것으로 나타납니다 :

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

더 당신이 달성하려고하는 무엇을 믿는처럼 보이도록 jacqijvv의 대답은 조금 변경.

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

0

: (내가 '죄송합니다 구글 Tradutor 영어로).

+0

jacqijw, 도와 줘서 고마워,하지만 그랬어. 그리고 나는 잘못된 사건을 썼다. KeyDown은 내가 무엇을하고 싶어하는지 이었습니다 : – Aime

+0

ComboBox c1 = new Combobox(); TextBox t1 = 새 TextBox. 그리고 c1.SelectedIndex에 따라 사용 가능 여부를 확인하십시오. – Aime

+0

기꺼이 당신이 왔어요. Goodluck – jacqijvv

관련 문제