Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
5 / 5 / 2
Регистрация: 13.10.2015
Сообщений: 407

Проверка текстбоксов на пустоту в юзерконтрол

01.03.2017, 10:30. Показов 1770. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго утра!
Подскажите, как проверить textbox'ы на пустоту в usercontrol?

Заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.03.2017, 10:30
Ответы с готовыми решениями:

Проверка динамических текстбоксов на пустоту
Добрый день! Столкнулся с проблемой проверки ДИНАМИЧЕСКИХ textbox в динамических панелях на пустоту понятно, что надо через if и...

Очистка текстбоксов и проверка их же на пустоту Panel в Panel
Добрый день! Есть панель Pan_F в ней текстбокс Tb_3 и панель Pan_FxFF в которой 2 текстбокса Tb_1 и Tb_2 вопрос: очищаю все...

Проверка нескольких textbox на пустоту, а также проверка их значения
Имеется textbox1, textbox2, textbox3, button1. Нужно сделать так, чтобы проверялось условие: Если хотя бы один из textbox пуст или его...

19
8 / 8 / 5
Регистрация: 15.08.2011
Сообщений: 57
01.03.2017, 10:39
Ну если они в UserControl с именами то какие проблемы обратиться по имени (UserControl.TextBox.Text!="")
1
5 / 5 / 2
Регистрация: 13.10.2015
Сообщений: 407
01.03.2017, 10:41  [ТС]
Просто их много и к каждому обращаться....
при этом usercontrol добавляется по нумерикапдаун
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
01.03.2017, 10:47
_Faradey,
Проверяйте также как на форме. Добавьте метод в класс юзерконтрола:
C#
1
2
3
4
5
6
7
public bool CheckTextBoxes()
{
    foreach (TextBox tb in this.Controls.OfType<TextBox>())
        if (tb.Text == "")
            return false;
    return true;
}
1
5 / 5 / 2
Регистрация: 13.10.2015
Сообщений: 407
01.03.2017, 10:59  [ТС]
Не все ветви кода возвращают значение
Я так понимаю надо еще на форме как-то сослаться
на форме кнопка "расчет" в обработчик кнопки прописать типа try catch?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
01.03.2017, 11:05
Цитата Сообщение от _Faradey Посмотреть сообщение
Не все ветви кода возвращают значение
Не знаю, как у вас, у меня все ветви возвращают то что нужно.
Цитата Сообщение от _Faradey Посмотреть сообщение
Я так понимаю надо еще на форме как-то сослаться
Как-то так:
C#
1
2
3
4
5
6
7
8
private void button_Click(object sender, EventArgs e)
{
    if (!userControl42.CheckTextBoxes())
    {
        MessageBox.Show("Заполните текстбоксы!");
        return;
    }
}
1
5 / 5 / 2
Регистрация: 13.10.2015
Сообщений: 407
01.03.2017, 11:30  [ТС]
Может что-то не так делаю
Код юзерконтрола
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
usercontrol
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Shem
{
    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }
 
        public double Calculate()
        {
            double U_nom, Pnom, cos_Phi, Kc, Lcab, rCab, S_cab, Uph,
                r0 = 0, x0 = 0, Pp, Inom, Ip, dUV = 0, Q = 0, deltaU = 0, M, U1;
            double[] xCab, Scab, Unom;
            xCab = new double[]
            {
                0.126, 0.116, 0.107, 0.0997, 0.099, 0.0947, 0.0912, 0.0877,
                0.0854, 0.0819, 0.0807, 0.0802, 0.0793, 0.0784, 0.077
            };
            Scab = new double[]
            {
                1.5, 2.5, 4, 6, 10, 16, 25, 35, 50, 70, 95, 120, 150, 185, 240
            };
            Unom = new double[]
            {
                0.22, 0.38
            };
            
            Pnom = Convert.ToDouble(t_Pnom.Text);
            Kc = Convert.ToDouble(t_Kc.Text);
            Lcab = Convert.ToDouble(t_L.Text) * 0.001;
            cos_Phi = Convert.ToDouble(t_Cos.Text);
            U_nom = Unom[comboBox3.SelectedIndex];
            Uph = U_nom / Math.Sqrt(3);
            U1 = U_nom * 1000;
            
            
            if(radioButton1.Checked == true)
            {
                r0 = 0.028;
            }
            if (radioButton2.Checked == true)
            {
                r0 = 0.0178;
            }
            S_cab = Scab[comboBox2.SelectedIndex];
            x0 = xCab[comboBox2.SelectedIndex];
            rCab = r0 * 1000 / S_cab / 0.958;
            Pp = Pnom * Kc;
            if(comboBox1.SelectedIndex == 0)
            {
                Inom = Pnom / (U_nom * cos_Phi);
                Ip = Pp / (U_nom * cos_Phi);
                dUV = ((U_nom - (2 * (Pp * rCab * Lcab + Q * x0 * Lcab) /
                    U_nom) * Math.Pow(10, -6) * Math.Pow(10, 3))) * Math.Pow(10, 3);
                deltaU = (2 * (100 * (Pp * rCab * Lcab + Q * x0 * Lcab)) /
                    Math.Pow(U_nom, 2)) * Math.Pow(10, -3);
            }
            else
            {
                Inom = Pnom / (Math.Sqrt(3) * U_nom * cos_Phi);
                Ip = Pp / (Math.Sqrt(3) * U_nom * cos_Phi);
                dUV = ((U_nom - ((Pp * rCab * Lcab + Q * x0 * Lcab) /
                    U_nom) * Math.Pow(10, -6) * Math.Pow(10, 3))) * Math.Pow(10, 3);
                deltaU = ((100 * (Pp * rCab * Lcab + Q * x0 * Lcab)) /
                    Math.Pow(U_nom, 2)) * Math.Pow(10, -3);
            }
            
            Q = Math.Round(Math.Sqrt(Math.Pow((Pp / cos_Phi), 2) - Math.Pow(Pp, 2)), 2);
            M = Pp * Lcab * 1000;
 
 
            t_Pp.Text = Pp.ToString();
            t_Inom.Text = Math.Round(Inom, 2).ToString();
            t_Ip.Text = Math.Round(Ip, 2).ToString();
            t_M.Text = M.ToString();
            t_DeltaU.Text = Math.Round(deltaU, 2).ToString();
            t_U2.Text = Math.Round(dUV, 2).ToString();
            t_Q.Text = Q.ToString();
 
            return rCab;
        }
 
        
 
        private void t_Pnom_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '.')
            {
                e.KeyChar = ',';
            }
            if (char.IsDigit(e.KeyChar) && (sender as TextBox).Text == "0")
            {
                (sender as TextBox).Text = e.KeyChar.ToString();
                e.Handled = true;
                (sender as TextBox).Select(1, 0);
            }
            if ((e.KeyChar == ',' && (sender as TextBox).Text.Contains(',')) |
                (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)8
                && e.KeyChar != ','))
            {
                e.Handled = true;
            }
        }
        public bool CheckTextBoxes() // Тут ошибка не все ветви кода возвращают значение.
        {
            foreach (TextBox t_ in this.Controls.OfType<TextBox>())
            {
                if (t_.Text == "")
                    return false;
                return true;
            }
        }
    }
}
Код формы
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Shem
{
    public partial class Form1 : Form
    {
        private int x = 0, y = 0;
        public Form1()
        {
            InitializeComponent();
            ch_B.CheckedChanged += (sender, e) => TopMost = ch_B.Checked;
            numericUpDown1.ReadOnly = true;
            this.numericUpDown1.Minimum = 1;
            this.numericUpDown1.Maximum = 20;
        }
        List<UserControl1> ucList = new List<UserControl1>();
        private void Form1_Load(object sender, EventArgs e)
        {
            UserControl1 uc = new UserControl1();
            ucList.Add(uc);
            panel1.Controls.Add(uc);
            uc.Location = new Point(5, 5);
        }
        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            PanelCountChange((int)numericUpDown1.Value);
        }
        void PanelCountChange(int count)
        {
            if (count > ucList.Count)
            {
                UserControl1 uc = new UserControl1();
                panel1.Controls.Add(uc);
                ucList.Add(uc);
                uc.Location = new Point(5 + 60 * (ucList.Count - 1), 5);
            }
            if (count < ucList.Count)
            {
                panel1.Controls.RemoveAt(ucList.Count - 1);
                ucList.RemoveAt(ucList.Count - 1);
            }
            panel1.Size = new Size(60 * ucList.Count, 460);
            this.Size = new Size(panel1.Size.Width + 100, 600);
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (!UserControl1.CheckTextBoxes()) // Тут пишет требуется ссылка на объект
            {
                MessageBox.Show("Error");
                return;
            }
            double sum = 0;
 
        }
 
        private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if(numericUpDown1.Text.Length > 4 && Char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }
 
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                this.Location = new System.Drawing.Point(this.Location.X + (e.X - x),
                    this.Location.Y + (e.Y - y));
            }
        }
 
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            x = e.X;
            y = e.Y;
        }
    }
}
Кстати, если не трудно подскажите, как мне тут перемножить значения допустим текстбоксов t_Cos и разделить на значение в numericupdown (оно выводит количество юзерконтролов)
0
8 / 8 / 5
Регистрация: 15.08.2011
Сообщений: 57
01.03.2017, 11:36
у меня по такому работает вроде без проблем

C#
1
2
3
4
5
6
7
8
9
10
  
B(Control1.Grid.Children);
 
 public bool B(UIElementCollection f)
    {
      foreach (TextBox tb in f.OfType<TextBox>())
                if (tb.Text != "")
                    return false;
            return true;
       }
Добавлено через 4 минуты
А что значит не все ветви кода? типа какой то textbox не пустой а метод возвращает true?
1
5 / 5 / 2
Регистрация: 13.10.2015
Сообщений: 407
01.03.2017, 11:40  [ТС]
Ошибку видит в CheckTextBoxes и просто пишет не все ветви кода возвращают значение.
Ну это даже не такая проблема, вот как просуммировать значения одного и того же текстбокса в одноименных юзерконтроллах и разделить на значение нумерикапдаун (т.е. количество этих юзерконтроллов) с выводом в текстбокс на форме
)
0
8 / 8 / 5
Регистрация: 15.08.2011
Сообщений: 57
01.03.2017, 11:58
ну так правильно надо так

C#
1
2
3
4
5
6
7
8
 public bool CheckTextBoxes() // Тут ошибка не все ветви кода возвращают значение.
        {
            foreach (TextBox t_ in this.Controls.OfType<TextBox>())
                         if (t_.Text == "")
                    return false;
            return true;
 
        }
или так
C#
1
2
3
4
5
6
7
8
9
10
 public bool CheckTextBoxes() // Тут ошибка не все ветви кода возвращают значение.
        {
            foreach (TextBox t_ in this.Controls.OfType<TextBox>())
            {
                if (t_.Text == "")
                    return false;
             }
                return true;
           
        }
Добавлено через 1 минуту
А в вашем случае если в foreach не будет textbox метод ни чего не возвращает а должен вернуть bool

Добавлено через 4 минуты
Цитата Сообщение от _Faradey Посмотреть сообщение
if (!UserControl1.CheckTextBoxes()) // Тут пишет требуется ссылка на объект
потому что надо общаться к экземпляру

Цитата Сообщение от _Faradey Посмотреть сообщение
UserControl1 uc = new UserControl1();
к uc.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
01.03.2017, 12:21
Цитата Сообщение от _Faradey Посмотреть сообщение
Может что-то не так делаю
Да. Обратите внимание на отсутствие в моем коде фигурных скобок после цикла foreach.
1
5 / 5 / 2
Регистрация: 13.10.2015
Сообщений: 407
01.03.2017, 15:04  [ТС]
Сделал, как Вы говорите ))) теперь при любом раскладе выдает сообщение о пустых текстбоксах )))) думаю разберусь )
А по второму вопросу не подскажете? Делаю так:
C#
1
2
3
4
5
6
double sum = 0;
foreach (UserControl1 t_Cos in Controls.OfType<UserControl1>())
{
    sum += t_Cos.Calculate();
}
tB_4.Text = sum.ToString():
и при вводе в один текстбокс 0,4, а в другой 0,8 на выходе получаю 0

Добавлено через 23 минуты
Пробовал так
C#
1
2
3
4
5
foreach (UserControl1 t_Cos in panel1.Controls.OfType<UserControl1>())
{
    sum += t_Cos.Calculate();
}
tB_4.Text = sum.ToString():
результат вообще странный 19 )
0
8 / 8 / 5
Регистрация: 15.08.2011
Сообщений: 57
01.03.2017, 15:54
а почему не так

C#
1
2
3
4
5
6
7
double sum = 0;
  foreach (TextBox t_ in this.Controls.OfType<TextBox>())
            {
                if (t_.Text != "")
                    sum += Convert.ToDouble(t_.Text);
             }
tB_4.Text = sum.ToString();
Добавлено через 46 секунд
Просто я не могу понять что вы пытаетесь сделать свои кодом =)
0
5 / 5 / 2
Регистрация: 13.10.2015
Сообщений: 407
01.03.2017, 16:04  [ТС]
Потому что так не будет работать ))
у меня юзерконтрол в котором текстбоксы, нумерикапдаун добавляет или убирает юзерконтролы с панели (юзерконтрол один)
допустим выставил 3 юзерконтрола на форме, пытаюсь получить сумму значений одного текстбокса (допустим это t_Cos) но на всех юзерконтролах и разделить полученную сумму на значение в нумерик в данном случае на 3
0
5 / 5 / 2
Регистрация: 13.10.2015
Сообщений: 407
01.03.2017, 16:11  [ТС]
Вот как-то так
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
01.03.2017, 16:24
Лучший ответ Сообщение было отмечено _Faradey как решение

Решение

_Faradey,
Правильное обращение через имя контейнера, на который юзерконтрол добавляется, т.е. так:
C#
1
2
3
4
5
6
double sum = 0;
foreach (UserControl1 t_Cos in panel1.Controls.OfType<UserControl1>())
{
    sum += t_Cos.Calculate();
}
tB_4.Text = sum.ToString();
Смотрите код метода Calculate в классе юзерконтрола.
Метод возвращает значение rCab:
C#
93
return rCab;
Это значение рассчитывается выражением:
C#
60
rCab = r0 * 1000 / S_cab / 0.958;
Так при чем здесь сумма значений, введенных в текстбоксы?
1
5 / 5 / 2
Регистрация: 13.10.2015
Сообщений: 407
03.03.2017, 21:58  [ТС]
Уважаемый Даценд не подскажете, как тут лучше добавить суммирование и других текстбоксов
C#
1
2
3
4
5
6
7
8
double sum = 0, sym = 0;
foreach (UserControl1 t_Cos in panel1.Controls.OfType<UserControl1>())
{
    sum += t_Cos.Calculate();
    sym += t_Pnom.Calculate(); //т.е. суммировать и это
}
tB_4.Text = sum.ToString();
tB_5.Text = sym.ToString(); // и добавить сюда
проблема в том, как возвращать метод Pnom, если уже возвращается метод Cos_phi
0
5 / 5 / 2
Регистрация: 13.10.2015
Сообщений: 407
05.03.2017, 22:48  [ТС]
Пытаюсь сделать так:
C#
1
2
3
4
5
6
7
8
9
10
foreach (UserControl1 t_Cos in panel1.Controls.OfType<UserControl1>())
{
    sum += t_Cos.Calculate();
}
foreach (UserControl1 t_Pnom in panel1.Controls.OfType<UserControl1>())
{
    sym += t_Pnom.Calculate(); //т.е. суммировать и это
}
tB_4.Text = sum.ToString();
tB_5.Text = sym.ToString(); // и добавить сюда
Но тоже не выходит (
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
05.03.2017, 23:20
Лучший ответ Сообщение было отмечено _Faradey как решение

Решение

_Faradey,
Представьте, что есть UserControl1 с 3-мя TextBox: tbA, tbB, tbC.
В класс UserControl1 добавим методы:
C#
1
2
3
4
5
6
7
8
9
public int GetA()
{
    return int.Parse(tbA.Text); //возвращает значение, находящееся в tbA
}
 
public int GetBC()
{
    return int.Parse(tbB.Text) + int.Parse(tbC.Text); //возвращает сумму значений tbB и tbC
}
Теперь, чтобы получить сумму полей tbA из всех экземпляров UserControl1, расположенных на форме в класс формы добавляем метод:
C#
1
2
3
4
5
6
7
int GetSumA()
{ 
    int sum=0;
    foreach (UserControl1 uc in this.Controls.OfType<UserControl1>())
        sum += uc.GetA();
    return sum;
}
А для получения суммы полей tbB и tbC из всех экземпляров UserControl1, расположенных на форме:
C#
1
2
3
4
5
6
7
int GetSumBC()
{
    int sum = 0;
    foreach (UserControl1 uc in this.Controls.OfType<UserControl1>())
        sum += uc.GetBC();
    return sum;
}
Используем методы:
C#
1
2
3
4
5
private void button1_Click(object sender, EventArgs e)
{
    textBox1.Text = GetSumA().ToString();
    textBox2.Text = GetSumBC().ToString();
}
1
5 / 5 / 2
Регистрация: 13.10.2015
Сообщений: 407
05.03.2017, 23:27  [ТС]
Огромное Вам спасибо!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2017, 23:27
Помогаю со студенческими работами здесь

Проверка 40 текстбоксов
Здравствуйте уважаемые.Помогите с кодом.Как проверить 40 текстбоксов что в них не вводились одинаковые числа или 0,и не отрицательные числа...

Проверка на заполненность текстбоксов
Делаю программу вот код using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using...

Проверка нескольких текстбоксов на их заполнение
Есть несколько текстбоксов. После введения значений, нужно чтобы обязательно заполнены были все поля и в половине текстбоксов разрешается...

Проверка наличия определенной цифры в массиве текстбоксов
смотрим на колонку №7.чтобы заполнить эту колонку сначала читаем столбец 3.Если какой-нибудь номер встречается в столбце только один раз,...

Проверка информации из нескольких текстбоксов в отдельном методе
На форме два текстбокса - в них вводим цену и курс бакса. Десятичный разделитель у меня, например, - запятая. Так вот, если юзер...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru