c # Как ссылаться на динамически созданный компонент? - PullRequest
1 голос
/ 05 августа 2010

У меня есть код, который создает несколько компонентов одним нажатием кнопки.Примерно так.

CheckBox chk = new CheckBox();
chk.Top = 50;
chk.Left = 50;
chk.Text = "Check Box Test";
chk.Name = "chkTest"
this.Controls.Add(chk);

Так как мне использовать этот компонент.Например, я попробовал это, но получил ошибку и сказал, что компонент не существует.Я просто хочу получить их значения.

if(chkTest.Checked)
{
//Do this
}

Пожалуйста, помогите.

Спасибо в adv.

Ответы [ 5 ]

3 голосов
/ 05 августа 2010

Либо создайте в своем классе переменную-член с именем chkTest, которую вы сможете использовать позже, либо извлекайте ее на лету из коллекции Controls, когда это необходимо, например:

CheckBox chkTest = (CheckBox)Controls["chkTest"];
if(chkTest.Checked) {
    // ...
}
1 голос
/ 05 августа 2010

Если вы заботитесь о контроле только тогда, когда он отмечен или не отмечен, используйте событие.

chk.Checked += new RoutedEventHandler(CheckBox_Checked);
chk.Unchecked += new RoutedEventHandler(CheckBox_Checked);

private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
    CheckBox chkBox = sender as CheckBox;
    if (chkBox.IsChecked.Value)
    {
        // Do this...
    }
}

Обязательно отмените подписку на обработчики событий, когда закончите с ними.

0 голосов
/ 05 августа 2010
if ((Controls.Items["chkTest"] as CheckBox).Checked)
{
// Do this
}

должно работать, но на это не приятно смотреть. :)

Вы можете объявить его как переменную, а затем использовать его так же, как и вы:

CheckBox chkTest = Controls.Items["chkTest"] as Checkbox;
if (chkTest.Checked)
{
// Do this
}

Посмотрите на этой удобной странице способы манипулирования и доступа к коллекции элементов вашего элемента управления: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection_members.aspx

0 голосов
/ 05 августа 2010

Вы можете объявить флажок как переменную-член вашей страницы. Тогда вам будет проще получить к нему доступ.

Класс MyPage { CheckBox chkTest;

// затем при загрузке страницы // chkTest = new CheckBox (); ...

}

0 голосов
/ 05 августа 2010

Вы ссылаетесь на chkTest, но вы создали chk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...