C # с использованием элемента управления, созданного при загрузке формы в другом событии элемента управления - PullRequest
1 голос
/ 07 мая 2011

Моя проблема заключается в следующем: у меня есть 2 элемента управления, созданные при загрузке формы, кнопка и поле со списком, у меня также есть событие для кнопки, но событие должно быть в состоянии увидеть только что созданный список. Когда я пытаюсь вызвать комбо по его имени, он говорит, что в этом контексте его не существует private void Form1_Load (отправитель объекта, EventArgs e) { Кнопка przycisk = новая кнопка (); przycisk.Name = "przycisk"; przycisk.Dock = DockStyle.Bottom; przycisk.Text = "Wybierz";

        ComboBox kombo = new ComboBox(); 
        kombo.Name = "kombo";
        kombo.Dock = DockStyle.Bottom;
        kombo.Items.Add("Przycisk");   
        kombo.Items.Add("Etykeita");
        kombo.Items.Add("Pole tekstowe");

        Controls.Add(kombo);  
        Controls.Add(przycisk);

        przycisk.Click += new EventHandler(przycisk_Click); 

    }

    private void przycisk_Click(object sender, EventArgs e)
    {

        kombo.Items.Add("Panel");  //just an example 
    }
}

Есть ли способ заставить его работать?

Ответы [ 2 ]

2 голосов
/ 07 мая 2011

Только переменные, которые используются в разметке с runat = "server", будут переменными класса на вашей странице. Они фактически определены в файле конструктора.

Что вы хотите сделать, так это добавить в класс что-то вроде следующего, где у вас есть переменная класса, а затем назначить kombo в вашей функции загрузки страниц. Затем он будет существовать в вашем обработчике событий щелчка.

 // kombo is now scoped for use throughout this class
 ComboBox kombo = null;

 private void Form1_Load(object sender, EventArgs e)
    {
        Button przycisk = new Button(); 
        przycisk.Name = "przycisk";
        przycisk.Dock = DockStyle.Bottom;
        przycisk.Text = "Wybierz";

        // Assign to our kombo instance
        kombo = new ComboBox(); 
        kombo.Name = "kombo";
        kombo.Dock = DockStyle.Bottom;
        kombo.Items.Add("Przycisk");   
        kombo.Items.Add("Etykeita");
        kombo.Items.Add("Pole tekstowe");

        Controls.Add(kombo);  
        Controls.Add(przycisk);

        przycisk.Click += new EventHandler(przycisk_Click); 

    }

    private void przycisk_Click(object sender, EventArgs e)
    {
        // Using the kombo we created in form load, which is still referenced
        // in the class
        kombo.Items.Add("Panel");  //just an example 
    }
1 голос
/ 07 мая 2011

Вам придется использовать метод FindControl () , чтобы сначала найти объект.

private void przycisk_Click(object sender, EventArgs e)
{
   ComboBox kombo = (ComboBox)FindControl("kombo");
   kombo.Items.Add("Panel");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...