Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701

Способ преобразовать строку в имя элемента textBox1

13.06.2024, 21:13. Показов 1121. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброе время суток.
Имеется несколько форм textBox1, textBox2, textBox3 хотелось бы обращаться к ним через перебор последнего знака в виде числа в их имени что то типо так
C#
1
2
3
4
5
6
7
private void Form1_Load(object sender, EventArgs e)
        {
            int number = 1;
            String text = "textBox" + number;
            TextBox tb = (TextBox)text;
            tb.Text = "HALLO";
        }
конечно же такое преобразования типов не допустима, подскажите пожалуйста есть ли какие способы это сделать?

Добавлено через 8 минут
Всё решено
C#
1
2
3
4
5
6
7
private void Form1_Load(object sender, EventArgs e)
        {
            int number = 2;
            String text = "textBox" + number;
            (Controls[text] as TextBox).Text = "newText";
 
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.06.2024, 21:13
Ответы с готовыми решениями:

Есть ли способ в числовую переменную преобразовать строку с математическим выражением т
Приветствую. Хочу задать вопрос. Есть ли способ в числовую переменную преобразовать строку с математическим выражением так, чтобы она...

Неизвестное имя 'textBox1'
Выдаёт ошибку, хотя я всё указал Unit Unit7; interface uses System, System.Drawing, System.Windows.Forms, Unit3; type ...

Строка S содержит фамилию, имя, отчество. Необходимо преобразовать ее в строку, содержащую фамилию и инициалы
Строка S содержит фамилию, имя, отчество. Необходимо преобразовать ее в строку, содержащую фамилию и инициалы. _______ Как это задание...

17
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
13.06.2024, 21:22
Цитата Сообщение от VladimirU Посмотреть сообщение
Всё решено
Интересное решение. А в чем смысл локальной переменной number и событии Load, которое отработает только один раз при запуске программы ?
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
13.06.2024, 21:31  [ТС]
Kazbek17, не в чём, это наглядный пример.
У меня на главной форме есть десять форм textBox, в каждую в водится числовое значение после заполнения каждой формы нажимается кнопка и все значения по очереди конвертируются в целочисленные типы, разбиваются на байты и отправляются эти байты на устройство, как то стрёмно выстраивать целую ветку с условиями. Да и ещё
C#
1
number ++;
тоже улетает в пакете, а на устройстве которое примет number будет являться индексом для массива данных с textBox-сов.
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
15.06.2024, 23:18  [ТС]
Kazbek17, и решение не моё.
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
17.06.2024, 19:39  [ТС]
Всем добра и денег.
Этот код хорошо работает из основной формы, а вот из
C#
1
tabPage1 = new System.Windows.Forms.TabPage();
работать не хочет требует ссылку на объект, где такую взять ума не покладу, помогите пожалуйста люди добрые.


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Form fr = new Form();
        TabPage tb = new TabPage();
        TabControl ta = new TabControl();
        TextBox tt = new TextBox();
        public void Form1_Load(object sender, EventArgs e)
        {
     
            int number1 = 1;
            int number2 = 2;
            String text1 = "textBox" + number1;
            String text2 = "textBox" + number2;
            (this.Controls[text1] as TextBox).Text = "HALLO";
            int test = Convert.ToInt32((this.Controls[text1] as TextBox).Text);
            (this.Controls[text2] as TextBox).Text = String.Format("{0}", test);
        }
    }
}
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
17.06.2024, 19:51  [ТС]
C#
1
(this.Controls[text1] as TextBox).Text = "1234";
0
Эксперт .NET
 Аватар для Rius
13164 / 7724 / 1679
Регистрация: 25.05.2015
Сообщений: 23,527
Записей в блоге: 14
17.06.2024, 19:54
Соберите нужные textbox'ы в массив и работайте с массивом.
Имена контролам надо понятные давать.
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
17.06.2024, 20:08  [ТС]
dcRius, спасибо разобрался подглядел сюда
C#
1
2
this.tabPage1.Controls.Add(this.textBox2);
this.tabPage1.Controls.Add(this.textBox1);
исправил
C#
1
2
3
            (this.tabPage1.Controls[text1] as TextBox).Text = "1234";
            int test = Convert.ToInt32((this.tabPage1.Controls[text1] as TextBox).Text);
            (this.tabPage1.Controls[text2] as TextBox).Text = String.Format("{0}", test);
Добавлено через 1 минуту
Цитата Сообщение от Rius Посмотреть сообщение
Соберите нужные textbox'ы в массив и работайте с массивом.
Ладно попробую, чего то я не догадался

Добавлено через 9 минут
Rius, теперь не знаю какой подход лучше выбрать
0
Эксперт .NET
 Аватар для Rius
13164 / 7724 / 1679
Регистрация: 25.05.2015
Сообщений: 23,527
Записей в блоге: 14
17.06.2024, 20:16
Назвать контролы правильно и собрать их в массив.
Но это без учёта причин такого решения.
Возможно, можно ещё лучше.
0
2287 / 1603 / 400
Регистрация: 26.06.2017
Сообщений: 4,748
Записей в блоге: 1
17.06.2024, 22:55
Цитата Сообщение от Rius Посмотреть сообщение
Возможно, можно ещё лучше.
Наверное лучше будет, с точки зрения ООП, это создать модель данных либо с фиксированным набором свойств, по одному на каждый текстбокс, либо с одним свойством списка/массива этих байт. Свойства привязать к текстбоксам. Для каждого текстбокса установить метод валидации данных или валидацию запихнуть в модель, тут как кому нравится. В модели создать метод Send для отправки данных в устройство. Для возможности рефакторинга и/или модернизации кода в дальнейшем всё это обмазать интерфейсами.
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
18.06.2024, 19:26  [ТС]
Подскажите пожалуйста ещё по одному вопросу. Создал собственный метод и разместил его код в отдельном классе-листинге, при компиляции жалуется на
C#
1
Controls[tc]
Ошибка 1 Элемент "Controls" не существует в текущем контексте.
Возможно ли на него найти ссылку?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace ClientCOM
{
    class ClassReadWriteForm
    {
                public byte ReadWriteForms(string tab_control, byte contr, string tab_page, byte pag, string text_box, byte box, out Int32 result_out, Int32 result_in, byte key_r_w)
        {
            result_out = 0;
            string tc = tab_control + contr;
            string tp = tab_page + pag;
 
            string tb = text_box + box;
                if (key_r_w == 0)
                {
                    (((Controls[tc] as TabControl).Controls[tp] as TabPage).Controls[tb] as TextBox).Text = Convert.ToString(result_in); //запись в форму
                }
                else if (key_r_w == 1)
                {
                    result_out = Convert.ToInt32((((Controls[tc] as TabControl).Controls[tp] as TabPage).Controls[tb] as TextBox).Text);  //чтение из формы
                }
            return 0;
        }
    }
}
Если данный метод определить в главной форме Form1 то таких проблем нету и всё работает.
0
2287 / 1603 / 400
Регистрация: 26.06.2017
Сообщений: 4,748
Записей в блоге: 1
18.06.2024, 21:25
Судя по названию класса вы хотели создать форму, но класс Form при этом не унаследовали.
Цитата Сообщение от VladimirU Посмотреть сообщение
при компиляции жалуется на
Правильно жалуется ведь в вашем классе такого члена нет.
VladimirU, можно поинтересоваться что вы хотите достичь написанием класса ClassReadWriteForm? Это у вас учебное задание или что-то для себя пишите?
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
18.06.2024, 21:48  [ТС]
Uswer, это для себя что бы мозги не застаивались и поменьше в телефоне сидеть.

Добавлено через 7 минут
Цитата Сообщение от Uswer Посмотреть сообщение
но класс Form при этом не унаследовали.
Если унаследовать таким образом
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
namespace ClientCOM
{
    class ClassReadWriteForm
    {
        Form fr = new Form();
        public byte ReadWriteForms(string tab_control, byte contr, string tab_page, byte pag, string text_box, byte box, out Int32 result_out, Int32 result_in, byte key_r_w)
        {
            result_out = 0;
            string tc = tab_control + contr;
            string tp = tab_page + pag;
 
            string tb = text_box + box;
                if (key_r_w == 0)
                {
                    (((fr.Controls[tc] as TabControl).Controls[tp] as TabPage).Controls[tb] as TextBox).Text = Convert.ToString(result_in); //запись в форму
                }
                else if (key_r_w == 1)
                {
                    result_out = Convert.ToInt32((((fr.Controls[tc] as TabControl).Controls[tp] as TabPage).Controls[tb] as TextBox).Text);  //чтение из формы
                }
            return 0;
        }
    }
}
то выдаёт исключение "Ссылка на объект не указывает на экземпляр объекта."
Если Controls[tb] унаследован от (Controls[tp] as TabPage) через приведение типов то на это не жалуется.
0
Эксперт .NET
 Аватар для Rius
13164 / 7724 / 1679
Регистрация: 25.05.2015
Сообщений: 23,527
Записей в блоге: 14
18.06.2024, 21:57
C#
1
Form fr = new Form();
Вы это добавили потому, что нужна была ссылка на форму fr далее по коду?

Добавлено через 1 минуту
Или это типа "унаследовали"?
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
18.06.2024, 22:08  [ТС]
Rius, это ссылка на форму и пробовал унаследовать
C#
1
public partial class ClassReadWriteForm : Form
0
Эксперт .NET
 Аватар для Rius
13164 / 7724 / 1679
Регистрация: 25.05.2015
Сообщений: 23,527
Записей в блоге: 14
18.06.2024, 22:16
Наследование делается так:
C#
1
class InheritedForm : BaseForm
Добавлено через 1 минуту
Вместо того, чтобы вслепую тыкаться, лучше возьмитесь за чтение литературы.
Литература по C# для начинающих и не только
0
2287 / 1603 / 400
Регистрация: 26.06.2017
Сообщений: 4,748
Записей в блоге: 1
18.06.2024, 23:24
Цитата Сообщение от VladimirU Посмотреть сообщение
это для себя что бы мозги не застаивались и поменьше в телефоне сидеть
Вот это похвально.
Соглашусь с Rius, что если есть тяга к программированию, то лучше почитать книжки. Но тем не менее дам "вредный совет" - добавьте форму в проект при помощи дизайнера, тогда наследование и прочее будут созданы студией автоматически. Позже при желании можно будет реверс-инженерить (проще говоря изучить) созданный студией код и понять все свои ошибки.
VladimirU, понимаю, что для вас сильно рано говорить об архитектуре приложения, однако лучше сразу задумываться о ней. Без архитектурных шаблонов вы пойдёте очень тернистым путём наращивая функционал своей программы. Поверьте на слово, я сам этот путь прошёл. В частности вот такой код
C#
1
(((fr.Controls[tc] as TabControl).Controls[tp] as TabPage).Controls[tb] as TextBox).Text = Convert.ToString(result_in); //запись в форму
говорит о том, что вы просто не знаете (пока) как можно иначе передать значение в UI (User Interface). Забегая вперёд скажу, что имея модель данных выбирать или искать целевой контрол вообще не нужно.
Позже покажу на простом примере о чём я говорю, хотя можете и сами поковырять интернет.
0
2287 / 1603 / 400
Регистрация: 26.06.2017
Сообщений: 4,748
Записей в блоге: 1
19.06.2024, 11:06
VladimirU, посмотрите этот проектик. В нём показал как можно уйти от работы с элементами управления введя в проект модель данных.
Вложения
Тип файла: zip Thread3171552.zip (13.0 Кб, 9 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.06.2024, 11:06
Помогаю со студенческими работами здесь

Строка S содержит фамилию, имя, отчество. Необходимо преобразовать ее в строку, содержащую фамилию и инициалы
Строка S содержит фамилию, имя, отчество. Необходимо преобразовать ее в строку, содержащую фамилию и инициалы.

Для каждого элемента, кроме корня, изменить его имя, добавив к нему слева исходное имя его родительского элемента
3.Дан XML-документ. Для каждого элемента, кроме корня, изменить его имя, добавив к нему слева исходное имя его родительского элемента,...

Ввести в окне имя, отчество и фамилию (именно в таком порядке) и преобразовать, чтобы получилось имя и фамилия
Нужно написать программу чтобы она умела: Ввести в окне имя, отчество и фамилию (именно в таком порядке) и преобразовать, чтобы...

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

Пользователь вводит строку, содержащую полное имя файла. Вывести имя файла, расширение и имя первого каталога
Пользователь вводит строку, содержащую полное имя файла (Имя диска, список каталогов, имя файла и расширения) Выделить из введенной строки...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Автозаполнение реквизита "Организация" (тип Справочник. Организации): / / Проверяем, заполнена ли. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru