Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 03.12.2018
Сообщений: 196

Установить значение TextBox

09.11.2020, 14:29. Показов 2019. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В моей программе находится множество текстовых полей. И если в поле стоит знак '-' то это число -1, а если поле пустое то это число 1. Как можно оптимизировать код так, что бы постоянно не писать это для каждого TextBox'a:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            if (textBoxA.Text == "")
                a = 1;
            else if (textBoxA.Text == "-")
                a = -1;
            else
                a = Convert.ToDouble(textBoxA.Text);
 
            if (textBoxB.Text == "")
                b = 1;
            else if (textBoxA.Text == "-")
                b = -1;
            else
                b = Convert.ToDouble(textBoxB.Text);
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.11.2020, 14:29
Ответы с готовыми решениями:

Установить значение null в случае пустого textbox
Уважаемые форумчане! Подскажите решение проблемы. Все хорошо если есть значения в контролах, но если к примеру пустой...

Динамически создать TextBox. Значение, введенное в TextBox, присвоить переменной
В WindowsForm создал кнопку(buttom1) и поле ввода(textbox1). 1.Как присвоить например переменной х то что я введу в поле? моя попытка: ...

Изменять значение в одном TextBox-e изменяя значение в другом TextBox-e
Дорого времени стуок. Написал небольшую прогу, но на последнем этапе возникли небольшие загвоздки. Вот сама прога: Option Explicit ...

9
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
09.11.2020, 18:15
Saulq, создайте массив TextBox и пройдитесь циклом.
0
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
09.11.2020, 18:25
Лучший ответ Сообщение было отмечено Saulq как решение

Решение

Согласна с QuakerRUS, но можно без массива
C#
1
2
3
4
5
            foreach (TextBox c in Controls.OfType<TextBox>())
            {
                if (c.Text == "-") c.Text = "-1";
                if (c.Text == "") c.Text = "1";
            }
1
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,213
09.11.2020, 20:27
А инициализация переменных ?

Добавлено через 26 минут
Предложу свой вариант с инициализацией переменных. Тут нужно учитывать названия TextBox'ов и переменных
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
using System;
using System.Reflection;
using System.Windows.Forms;
 
namespace WinForm
{
    public partial class Form1 : Form
    {
        double a, b, c;
 
        public Form1()
        {
            InitializeComponent();
 
            textBoxA.TextChanged += TextBox_TextChanged;
            textBoxB.TextChanged += TextBox_TextChanged;
            textBoxC.TextChanged += TextBox_TextChanged;
        }
 
        private void TextBox_TextChanged(object sender, System.EventArgs e)
        {
            TextBox tb = sender as TextBox;
            FieldInfo fi = Type.GetType(GetType().FullName).GetField(tb.Name.ToLower().Replace("textbox", ""), BindingFlags.NonPublic | BindingFlags.Instance);
            fi.SetValue(this, tb.Text == "" ? 1 : tb.Text == "-" ? -1 : double.Parse(tb.Text));
            MessageBox.Show($"{fi.Name} = {fi.GetValue(this)}");
        }
    }
}
0
 Аватар для Kyra90
232 / 153 / 85
Регистрация: 06.10.2020
Сообщений: 468
09.11.2020, 20:41
Enifan, Хорошо, а если так обходить ненужные текстбоксы?

Цитата Сообщение от Saulq Посмотреть сообщение
В моей программе находится множество текстовых полей
может их там сотня

C#
1
2
3
4
5
6
7
          foreach (TextBox c in Controls.OfType<TextBox>())
            {
                if(c.Name = "textBox2")continue;
 
                if (c.Text == "-") c.Text = "-1";
                if (c.Text == "") c.Text = "1";
            }
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
09.11.2020, 21:05
Цитата Сообщение от Kyra90 Посмотреть сообщение
C#
1
if(c.Name = "textBox2")continue;
Зачем задавать исключения, когда можно создать коллекцию/массив необходимых для обработки TextBox? Так вы повышаете риск ошибки при добавлении в форму нового TextBox, который не будет иметь отношения к логике групповой обработки.

Enifan, не перебор ли использовать рефлексию? Рекомендуют использовать ее как можно меньше, да и медленно она работает.
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,213
10.11.2020, 05:32
Цитата Сообщение от Kyra90 Посмотреть сообщение
а если так обходить ненужные текстбоксы?
в любом перечисленном варианте ставить на текстбоксе "метку", от нее отталкиваться
Цитата Сообщение от QuakerRUS Посмотреть сообщение
не перебор ли использовать рефлексию?
как будем инициализировать переменные double a, double b ?
Вообще перебор, но тогда можно обойтись связкой данных (ТекстБокс и double), пойдет ли такой вариант ТС ?
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
10.11.2020, 11:38
Цитата Сообщение от Enifan Посмотреть сообщение
как будем инициализировать переменные double a, double b ?
В массив их загнать как и текстбоксы.

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
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Collections.Generic;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        double[] a = new double[3];
        TextBox[] t;
        SortedDictionary<string, int> d = new SortedDictionary<string, int>();
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            t = new TextBox[] { textBox1, textBox2, textBox3 };
 
            for (int i = 0; i < 3; i++)
            {
                t[i].TextChanged += textBox_TextChanged;
                d.Add(t[i].Name, i);
            }
        }
 
        private void textBox_TextChanged(object sender, EventArgs e)
        {
            TextBox s = sender as TextBox;
            int n = 0;
 
            if (s.Text == "")
                n = 1;
            else if (s.Text == "-")
                n = -1;
 
            a[d[s.Name]] = n;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show($"{a[0]} {a[1]} {a[2]}");
        }
    }
}
1
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,213
10.11.2020, 12:20
Цитата Сообщение от QuakerRUS Посмотреть сообщение
В массив их загнать как и текстбоксы.
Я думал над этим. Соглашусь, такой вариант лучше, но устроит ли это ТС.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
10.11.2020, 13:02
Цитата Сообщение от Enifan Посмотреть сообщение
но устроит ли это ТС.
Можно сделать массив указателей или прописать ссылки. Но я не вижу объективных причин не использовать просто массив. Вариант со ссылками:

C#
1
2
3
4
double[] m = new double[3];
ref double a = ref m[0];
ref double b = ref m[1];
ref double c = ref m[2];
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.11.2020, 13:02
Помогаю со студенческими работами здесь

можно ли в textBox установить маску?
можно ли в textBox установить маску? Я знаю, что есть MaskEdBox, но у меня почему-то говорит, что нет лицензии на использование этого...

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

Как установить фокус на textBox?
При загрузке формы, textBox6 выделяет автоматически все свое содержимое и готов к вводу (сфокусирован), а же хочу, чтобы этот фокус был...

Установить жирный шрифт в TextBox
Вот занадобилось с фонтом поиграться... Нашел на форуме вот это: Font(&quot;Microsoft Sans Serif&quot;, 12F, FontStyle.Bold) Мне надо...

Как значение id заменить на textbox, чтобы туда можно было вписать значение
private void отчетToolStripMenuItem_Click(object sender, EventArgs e) { Вид_топлива customer = bd.Вид_топлива ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru