Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,023
1

Как использовать в дальнейшем в коде объект по имени, при его динамическом создании?

13.01.2017, 15:50. Показов 1914. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В приложении WPF в коде динамически создается объект - RadioButton, ему присваивается имя через свойство Name.
Вопрос - как в дальнейшем к нему можно обратиться в коде?
Просто через имя - нельзя, поскольку это имя "не существует". Способ динамического создания объектов с присваиванием их элементам массива (соответствующего типа) просьба не предлагать - это понятный путь. Интересно понять другое - возможно ли как-то по-другому решить эту проблему - в лоб.
???
Создание объектов реализуется через метод с параметрами типа string, задающими имя кнопки и группу кнопок и параметром типа Panel - задаёт имя сток панели куда размещается объект (RadioButton).

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public MainWindow()
        {
            InitializeComponent();
 
           ElmentInsert("rb_0_2", stp1, "Languages");
           rb_0_2.Content = "другой язык"; //естественно приводит к ошибке - имя rb_0_2 не существует
        }
 
        public void ElmentInsert(string rbName, Panel el, string grName )
        {           
            RadioButton rb = new RadioButton { Name=rbName, IsChecked = false,
                GroupName = grName,
                Content = "Новый язык" };           
            el.Children.Add(rb);           
        }
Добавлено через 9 минут
Забыл написать, что перебор элементов панели и поиск элемента с нужным свойством Name - это тоже понятный путь. Чувствую, что вопрос задал из разряда дурацких.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2017, 15:50
Ответы с готовыми решениями:

Ссылка на объект не указывает на экземпляр объекта при динамическом создании CheckBox
Помогите, пжст, снять ошибку "Ссылка на объект не указывает на экземпляр объекта." В общем в...

Как сместить объект при его создании?
создаю объект, но хочу что б он был слегка смещен от родительского центра var juice =...

Как получить значение параметра и использовать его в дальнейшем
Здравствуйте. Помогите пожалуйста , очень срочно нужно, хотя бы,где инфу про это поискать, конечно...

В экземпляре объекта не задана ссылка на объект при динамическом создании объекта
Выдается ошибка NullReferenceException в private void button2_Click(object sender,...

5
31 / 14 / 5
Регистрация: 19.11.2014
Сообщений: 617
13.01.2017, 17:25 2
C#
1
RadioButton rb;
за пределы конструктора вынесите и всё
потом в конструкторе уже вот так делаете
C#
1
2
3
rb = new RadioButton { Name=rbName, IsChecked = false,
                GroupName = grName,
                Content = "Новый язык" };
Теперь можно сколько угодно к ней обращаться в коде.
1
Эксперт .NET
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
13.01.2017, 17:37 3
Существует паттерн MVVM, придерживаясь которого вообще не нужно создавать никаких элементов управления в C# коде.
Нужно привязать коллекцию данных к ItemsControl. При нажатии на кнопку добавлять новый элемент в эту коллекцию. А каждый элемент отображать в интерфейсе как RadioButton и прописать привязку (в DataTemplate)
Вот пример, где я добавляю новую информацию на экран, но при этом не создаю контролы напрямую
1
Эксперт .NET
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
13.01.2017, 17:39 4
Пример
Вложения
Тип файла: rar MVVM Sample.rar (65.9 Кб, 9 просмотров)
1
539 / 1227 / 37
Регистрация: 08.01.2017
Сообщений: 6,023
13.01.2017, 18:17  [ТС] 5
Всем спасибо,
novikov.ea, это немного со временем, я пока азы изучаю)
я тогда переформулирую вопрос, например, так.
Если объект образуется в неком методе в коде c#, можно ли через параметр метода передать имя этого объекта в этот метод (не свойство Name, а именно имя - ссылку на этот объект), не объявляя этот объект с этим именем вне этого метода (как это предлагает Chizel).
Или так.
Передали в метод или автоматически сгенерили в методе имя создаваемого там объекта. То есть, получили каким-то путем внутри метода строку stroka = "object1" и каков теперь возможный синтаксис объявления в этом методе по этой строке объекта с именем object1?
И как потом его передать для дальнейшего использования в коде Main?
Обходные решение не интересуют) Интересно понять - такое возможно как-то "в лоб" или нет?)
0
Эксперт .NET
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
13.01.2017, 19:15 6
Если ссылка на объект нигде не будет сохранена, то считайте, что вы объект этот потеряли, и через некоторое время он будет уничтожен сборщиком мусора.
Есть вариант порыться в визуальном дереве контролов и отыскать этот элемент (используя этот метод)
C#
1
var radioButton = FindChild(stp1, "rb_0_2") as RadioButton;
Но стоит понимать, что в данном случае использование этого метода никуда не годится. Он будет работать медленнее, так как каждый раз будет проходиться по визуальному дереву.
1
13.01.2017, 19:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2017, 19:15
Помогаю со студенческими работами здесь

Ошибка при создании дескриптора окна при динамическом создании кнопок
public Form1() { InitializeComponent(); } int height = 10;...

Использовать размер объекта при его создании
Здравствуйте! Вопрос не сложный, но я не могу кратко сформултровать суть для поиска в гугле. В...

Как при динамическом создании кнопки переназначить OnClick событие
Нужно при создании кнопки переназначить событие OnClick newbutton.OnClick:=MyOnClick Так, чтобы в...

Можно ли как-либо сэкономить память при динамическом создании объектов?
С QT работаю недавно. Появилась задача в программе динамически создавать QPushButton Создаю...

При динамическом создании Radiobuttons в форме нужен Scrollbar. Как сделать?
Какой контейнер использовать для хранения списка радиобаттонов? Как сделать возможность скроллинга?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru