С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/65: Рейтинг темы: голосов - 65, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 21.01.2010
Сообщений: 42
1

Как обратиться к объектам на форме по их имени?

26.07.2011, 14:09. Показов 13435. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! У меня такая ситуация: в txt файле записаны через пробел имена текст боксов и их значения, я их считываю и тут сталкиваюсь с проблемой. Мне нужно заполнить все боксы соответствующими значениями. Как обращаться к объекту, когда в строковой переменной находится его имя? Заранее спасибо за ответ!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.07.2011, 14:09
Ответы с готовыми решениями:

Обратиться к форме проекта по имени
Надо что бы осуществлялось управление из переменной, то есть prm.textbox1.text = ""

Как обратиться к свойствам объектам
нужно сделать у кнопки на форме enabled в false , не могу найти как это сделать внутри программы ,...

Как обратиться из кода к объектам окна?
Прошу не переносить в тему WPF. Вопрос несколько шире и кроме того - уместнее в теме для новичков...

Как обратиться к объектам ASP из серверного объекта?
Есть ASP страница, вызывающая серверный объект. Как из этого объекта (VB) обратиться к объектам,...

25
Почетный модератор
21415 / 9150 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
26.07.2011, 14:33 2
P@VEL, Принцип:
VB.NET
1
2
3
4
    Dim Tb1 As String = "TextBox1"
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.Controls(Tb1).Text = "Vualya"
    End Sub
2
0 / 0 / 0
Регистрация: 21.01.2010
Сообщений: 42
26.07.2011, 14:51  [ТС] 3
Огромное спасибо! Но этот код работает только в пределах одной формы, как насчет остальных?
0
Почетный модератор
21415 / 9150 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
26.07.2011, 15:00 4
VB.NET
1
Me.Controls(Tb1).Text = "Vualya"
Меняем например на:
VB.NET
1
Form245.Controls(Tb1).Text = "Vualya"
0
0 / 0 / 0
Регистрация: 21.01.2010
Сообщений: 42
26.07.2011, 15:03  [ТС] 5
Дело в том, что у меня в проекте 5 форм, для каждого бокса ставить проверку - выйдет очень длинная портянка...
0
Почетный модератор
21415 / 9150 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
26.07.2011, 15:24 6
P@VEL, так тебе нужно помимо имени текстбокса еще название формы писать?
А то я не понял
Цитата Сообщение от P@VEL Посмотреть сообщение
для каждого бокса ставить проверку
.
И вообще, что ты пытаешься сделать?
0
0 / 0 / 0
Регистрация: 21.01.2010
Сообщений: 42
26.07.2011, 15:42  [ТС] 7
Цитата Сообщение от Памирыч Посмотреть сообщение
И вообще, что ты пытаешься сделать?
Что я пытаюсь сделать, нужно делать команде из 4-5 человек))
у меня в файле идут строки:
/Hm - 10
/kv - 2
тут hm и kv - текст боксы на форме, 10 и 2 - соответствующие значения
Далее:
/Form4.Dat - 26.07.2011
тут все также.
с первым случаем разобрался, а со вторым пока вставил select case

Добавлено через 10 минут
И еще вопрос по той же теме, с текстбоксами все ясно, но я дошел до листбоксов, тут vb выдает ошибку...
0
Почетный модератор
21415 / 9150 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
26.07.2011, 16:00 8
P@VEL, я спрашивал не про это.
Ты объясняешь структуру файла и как должно считываться, а мне интересно объяснение логики твоей программы, т.е. что она делает.

Если тебе, например, нужно сохранять содержимое текстбоксов при закрытии и читать в боксы при открытии - то это другое дело.
Вот и спрашиваю - что является конечной целью?
1
Bazzy
26.07.2011, 16:02
  #9

Не по теме:

С таким ТЗ и 10 человек мало будет

1
755 / 554 / 48
Регистрация: 17.06.2010
Сообщений: 1,041
Записей в блоге: 1
26.07.2011, 16:02 10
P@VEL, структуру файл, откуда беруться значения, ты разрабатывал? Если да, то нужно сделать ее максимально удобной для считывания. Например:
[file]
TextBox
Name=tb
Value=значение
ListBox
Name=lb
Value=[строка1, строка2, строка3]
[end file]
В коде считывания читаем по три строки. Из первой идентифицируем тип контрола, вторая строка - идентифицируем имя, третья строка - (для текстбокса строка или массив строк, для листбокса - массив строк)

Это я привел примитивнейший пример. Придумать можно все что угодно.
0
0 / 0 / 0
Регистрация: 21.01.2010
Сообщений: 42
26.07.2011, 16:09  [ТС] 11
помимо этой программы существует другая, именно для нее и создается этот самый файл txt. т.е. мне нужно считать данные, обработать в программе и вернуть уже измененные данные в тот же файл.
0
8 / 8 / 0
Регистрация: 07.06.2020
Сообщений: 90
07.01.2021, 20:56 12
Простите, поднимаю старую тему, но у меня какая-то ерунда получается...
Требовалось по CheckBox включать/отключать подсказки на форме, выполненные как обычные Label.
Для этого они были переименованы в Label_S_1, Label_S_2.... чтобы в цикле убирать именно их.
Но почему-то в цикле не заработало. Даже элементарный вариант не работает:
VB.NET
1
2
3
4
5
6
7
8
9
10
'Не работает
Dim Help_Label As String = "Label_S_"
Me.Controls(Help_Label & 1).Visible = False
 
'Не работает
Dim Help_Label As String = "Label_S_1"
Me.Controls(Help_Label).Visible = False
 
'Прямая команда работает...
Label_S_1.Visible = False
Ошибка - вызвано исключение: System.NullReferenceException: "В экземпляре объекта не задана ссылка на объект."
Что это может быть?
0
4671 / 3625 / 856
Регистрация: 02.02.2013
Сообщений: 3,491
Записей в блоге: 2
07.01.2021, 21:10 13
Alex2005-10, посмотрите, что является контейнером для ваших Label. В данном случае предполагается форма, а на самом деле?
1
8 / 8 / 0
Регистрация: 07.06.2020
Сообщений: 90
07.01.2021, 21:38 14
Label находятся в TabControl на разных TabPages в разных GroupBox.
Но ведь по идее не обязательно это указывать. Все элементы принадлежат Form_General.
При этом прямая команда без указания контейнеров работает:
VB.NET
1
Label_S_1.Visible = False
Или я что-то не понимаю?
Варианты вроде таких
VB.NET
1
2
3
Me.TabControl_General.TabPages(1).Controls("Label_S_1").Visible = False
'Или
Me.TabControl_General.Controls("Label_S_1").Visible = False
Тоже не работают (хотя не уверен в правильности синтаксиса)
0
Эксперт .NET
11113 / 7032 / 1575
Регистрация: 25.05.2015
Сообщений: 21,257
Записей в блоге: 14
07.01.2021, 21:44 15
Alex2005-10, когда к контролу обращаетесь по имени поля, работает. Потому что поля контролов объявлены в классе формы.
А когда ищете по имени, надо перебирать все контролы рекурсивно, начиная с самой формы. Потому что они находятся на самом деле в разных коллекциях.
1
help
4507 / 4136 / 814
Регистрация: 13.04.2015
Сообщений: 9,075
07.01.2021, 21:59 16
Alex2005-10, сделайте свой массив нужных контролов, проще будет обращаться к ним.

Добавлено через 9 минут
Например
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Class Form1
    Dim L() As Label
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        L = {Label1, Label2, Label3, Label4}
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        For i As Integer = 0 To 3
            L(i).Visible = True
        Next
    End Sub
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        For i As Integer = 0 To 3
            L(i).Visible = False
        Next
    End Sub
 
End Class
В таком случае будет неважно, в каком контейнере находится контрол
1
8 / 8 / 0
Регистрация: 07.06.2020
Сообщений: 90
07.01.2021, 22:00 17
Чувствую проще прописать:
VB.NET
1
2
3
4
Label_S_1.Visible = False
Label_S_2.Visible = False
Label_S_3.Visible = False
'...........
Тупо, но похоже никак иначе...
0
2768 / 2827 / 547
Регистрация: 17.02.2019
Сообщений: 4,647
07.01.2021, 22:02 18
Alex2005-10, а если так попробовать
VB.NET
1
2
Dim Help_Label As Control = Label_S_2
        Me.TabPage1.Controls(Help_Label.Name).Visible = False
2
help
4507 / 4136 / 814
Регистрация: 13.04.2015
Сообщений: 9,075
07.01.2021, 22:02 19
Цитата Сообщение от Alex2005-10 Посмотреть сообщение
Тупо, но похоже никак иначе...
Массив то можно в цикле перебирать.
1
8 / 8 / 0
Регистрация: 07.06.2020
Сообщений: 90
07.01.2021, 22:36 20
Прошу прощения, Вы сообщение дополнили, когда я своё написал. Сейчас опробую.

Добавлено через 32 минуты
Спасибо Вам большое! Ваш вариант Рабочий и менее громоздкий чем напрямую. Жалко только нельзя циклом создать массив меток.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    'Показать/скрыть справочные данные
    Private Sub CheckBox_Help_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox_Help.CheckedChanged
        Dim Help_Label() As Label
        Help_Label = {Label_S_1, Label_S_2, Label_S_3, Label_S_4, Label_S_5, Label_S_6, Label_S_7, Label_S_8, Label_S_9, Label_S_10,
            Label_S_11, Label_S_12, Label_S_13, Label_S_14, Label_S_15, Label_S_16, Label_S_17, Label_S_18, Label_S_19, Label_S_20,
            Label_S_21, Label_S_22, Label_S_23, Label_S_24, Label_S_25, Label_S_26, Label_S_27, Label_S_28, Label_S_29, Label_S_30,
            Label_S_31, Label_S_32, Label_S_33, Label_S_34, Label_S_35}
        If CheckBox_Help.Checked = True Then        'Если надо ПОКАЗАТЬ справочные данные...
            For i = 0 To UBound(Help_Label)
                Help_Label(i).Visible = True
            Next i
        Else                                        'СКРЫТЬ справочные данные...
            For i = 0 To UBound(Help_Label)
                Help_Label(i).Visible = False
            Next i
        End If
    End Sub
Кстати не знал, что можно массив меток сделать. Учту.
Предыдущий вариант
VB.NET
1
2
Dim Help_Label As Control = Label_S_2
Me.TabPage1.Controls(Help_Label.Name).Visible = False
к сожалению не работает...
0
07.01.2021, 22:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2021, 22:36
Помогаю со студенческими работами здесь

Не знаю, как обратиться к объектам-родителям, когда создан только дочерний
Добрый день всем, в учебной задаче нужно создать 4 класса, которые последовательно наследуют друг...

Как обратиться к кнопке по имени?
Здравствуйте, есть код: class NewFrame implements ActionListener { boolean x=true; ...

Как обратиться к матрице по имени
скриптом импортировал файлы, получил кучу unit16-матриц и char-массив hran с их именами Осталось...

Как обратиться к полю по имени?
именно по имени, не по классу или id... есть фрагмент формы: <div class="control-group"> ...

Как обратиться к переменной по ее имени?
В runtime необходимо обратиться к переменной, хранящей объект. Имя этой переменной содержится в...

Как обратиться к элементу по имени?
Привет! Пример из ФАКа (Controls as TextBox).Text = "newText"; работает отлично, но когда...


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

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