Odwołanie się do właściwości dynamicznie utworzonej kontrolki

0

Witam, mam formę i na niej przycisk. Reakcją na zdarzenie kliknięcia jest utworzenie nowego przycisku i umieszczeniu go na formie:

private void button1_Click(object sender, EventArgs e)
        {
            Button nowaBtn = new Button();
            nowaBtn.Size = new System.Drawing.Size(80, 30);
            nowaBtn.Location = new System.Drawing.Point(30,80);
            nowaBtn.Text = "Nowa";
            this.Controls.Add(nowaBtn);
            nowaBtn.Click += new System.EventHandler(this.nowaBtn_Click);
        }

Tworzę dla nowego przycisku obsługe zdarzenia Click, co powduje dodanie TextBoxa oraz dwóch Button-ów do Formy (konkretnie do groupBoxa "obszarRoboczy" na Formie"):

private void nowaBtn_Click(Object sender, System.EventArgs e)
        {     
            TextBox nazwaAnkiety = new TextBox();
            nazwaAnkiety.Location = new System.Drawing.Point(130,57);
            nazwaAnkiety.Size = new System.Drawing.Size(400,13);
            obszarRoboczy.Controls.Add(nazwaAnkiety);

            Button ok = new Button();
            ok.Location = new System.Drawing.Point(210,90);
            ok.Text = "Ok";
            obszarRoboczy.Controls.Add(ok);
            ok.Click += new System.EventHandler(this.ok_Click); 

            Button anuluj = new Button();
            anuluj.Location = new System.Drawing.Point(330, 90);
            anuluj.Text = "Anuluj";
            obszarRoboczy.Controls.Add(anuluj);
            anuluj.Click += new System.EventHandler(this.anuluj_Click);
        }

Dodaje obsługę zdarzeń Click dla tych przycisków, jednak chciałbym aby pobrać w tym miejscu wartość pola Text obiektu nazwaAnkiety utworzonego dynamicznie wyżej (zakomentowany fragment poniżej), tu pojawia się problem ponieważ nie mam do niej dostępu:

private void ok_Click(Object sender, System.EventArgs e)
        {    
            //string nazwaNowej = nazwaAnkiety.Text;                         
            obszarRoboczy.Controls.Clear();
        }
private void anuluj_Click(Object sender, System.EventArgs e)
        {
            obszarRoboczy.Controls.Clear();
        }

Jak mogę uzyskać dostęp do tego pola aby odczytać jego wartość po kliknięciu dynamicznie wygenerowanego przycisku Ok.

0

Niech nowaAnkieta będzie polem formy, wtedy będziesz miał do niej dostęp w każdej metodzie.

0

Niestety to nic nie daje

0

Jak to nic?

0

Jak dobrze rozumiem kolegę :

TextBox nazwaAnkiety = new TextBox();
            nazwaAnkiety.Location = new System.Drawing.Point(130,57);
            nazwaAnkiety.Size = new System.Drawing.Size(400,13);
            obszarRoboczy.Controls.Add(nazwaAnkiety);

Ostatnią linijkę zastępujemy : this.Controls.Add(nazwaAnkiety); ??
Co nie powoduje abym miał dostęp z metody obsługi zdarzenia ok_Click.
Chyba że chodzi o coś innego to proszę o szczegóły:)

1

Nie, chodzi mi o to, żeby TextBox nazwaAnkiety był polem w klasie, a nie lokalną zmienną.
Coś w tym rodzaju:

public partial class JakiśForm : Form
{
    TextBox nazwaAnkiety;  // deklaracja pola klasy

    ...

        private void nowaBtn_Click(Object sender, System.EventArgs e)
        {     
            this.nazwaAnkiety = new TextBox();
            nazwaAnkiety.Location = new System.Drawing.Point(130,57);
            nazwaAnkiety.Size = new System.Drawing.Size(400,13);
            obszarRoboczy.Controls.Add(this.nazwaAnkiety);

            ...
        }

        private void ok_Click(Object sender, System.EventArgs e)
        {    
            string nazwaNowej = this.nazwaAnkiety.Text;  // tu już masz dostęp                    
            obszarRoboczy.Controls.Clear();
        }

}
0

Teraz wszystko gra, dziękuje bardzo :)

0 użytkowników online, w tym zalogowanych: 0, gości: 0