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

Передать значение textbox одной формы в textbox другой формы

18.02.2021, 18:03. Показов 5544. Ответов 18

Студворк — интернет-сервис помощи студентам
Всем привет!
Столкнулся с проблемой, когда нужно передать численное значение из textbox одной формы в textbox другой формы, затем по нему будет выполнен select из бд и заполнена dataGridView.
Выполнить select еще ладно, проблема в том, что не удается обратиться к текстбоксу, которая на другой форме. В интернете путного ничего найти не смог, там везде примеры с созданием новой формы, а мне надо с существующей формы передать в существующую.
Код:
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
namespace Project_Csharp
{
    public partial class VsePokazania : Form
    {
        public VsePokazania()
            
        {
            InitializeComponent();
            LoadData();
        }  
      //// В данном случае выполняется select общий, т.е. select * from, а мне нужно выполнить по значению из textbox, которая на другой форме
        public void LoadData()
        {
            string connectionString = @"Data Source=localhost;Initial Catalog=Detrop;Integrated Security=True";
            SqlConnection myConnection = new SqlConnection(connectionString);
            myConnection.Open();
            string query = "select*from products";
            SqlCommand command = new SqlCommand(query, myConnection);
            SqlDataReader reader = command.ExecuteReader();
            List<string[]> data = new List<string[]>();
            while (reader.Read())
            {
                data.Add(new string[2]);
                data[data.Count - 1][0] = reader[0].ToString();
                data[data.Count - 1][1] = reader[1].ToString();
            }
            reader.Close();
            myConnection.Close();
            foreach (string[] s in data)
                dataGridView1.Rows.Add(s);
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            
        }
    }
}
Добавлено через 27 секунд
Буду очень признателен!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2021, 18:03
Ответы с готовыми решениями:

Передать ID с textBox одной формы на textBox другой
Добрый день! Не могу понять, подскажите пожалуйста, у меня есть форма. На форме есть textBox &quot;UserID&quot;. К этому полю textBox есть...

Каким образом можно передать из формы (из textbox) значение в другой класс? События?
Доброе время суток, каким образом можно передать из формы (из textbox) значение в другой класс, при этом не нарушая MVC &quot;правил&quot;

Перенести данные из textBox одной формы в listBox другой формы
Помогите пожалуйста) Нужно из textBox одной формы перенести данные в listBox другой формы.

18
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
18.02.2021, 20:32
можно сделать так:
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
        public VsePokazania(string valueFromOtherForm)
            
        {
            InitializeComponent();
            LoadData(valueFromOtherForm);
        }  
      //// В данном случае выполняется select общий, т.е. select * from, а мне нужно выполнить по значению из textbox, которая на другой форме
        public void LoadData(string valueFromOtherForm)
        {
            string connectionString = @"Data Source=localhost;Initial Catalog=Detrop;Integrated Security=True";
            SqlConnection myConnection = new SqlConnection(connectionString);
            myConnection.Open();
            string query = "select*from products";
            SqlCommand command = new SqlCommand(query, myConnection);
            SqlDataReader reader = command.ExecuteReader();
            List<string[]> data = new List<string[]>();
            while (reader.Read())
            {
                data.Add(new string[2]);
                data[data.Count - 1][0] = reader[0].ToString();
                data[data.Count - 1][1] = reader[1].ToString();
            }
            reader.Close();
            myConnection.Close();
            foreach (string[] s in data)
                dataGridView1.Rows.Add(s);
        }
Тогда при создании новой формы или при использовании существующей, у вас будет возможность передать в нее значение
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16132 / 11256 / 2888
Регистрация: 21.04.2018
Сообщений: 33,091
Записей в блоге: 2
18.02.2021, 20:54
Цитата Сообщение от detrop Посмотреть сообщение
когда нужно передать численное значение из textbox одной формы в textbox другой формы
Конкретное решение зависит от того как открываются эти Формы, так как передачу значения или задание связи между ними надо осуществлять в момент в момент их создания.

Важен момент создания VsePokazania в другой Форме или наоборот.
Так же важен момент доступна ли для редактирования другая Форма во время работы Формы VsePokazania.
То есть достаточно ли одного раза передачи значения при создании Формы.
Или нужна динамическая связь, чтобы получить значение во время вызова метода LoadData().
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
18.02.2021, 22:23  [ТС]
Элд Хасп, Форма открывается следующим образом: главная форма, на ней textbox в который вводится лицевой счет и выполняется sql команда select и заполняются текстбоксы показаний счетчиков.
Есть кнопка "Все показания" - по нажатию которой открывается вторая форма, на которой dataGridView.
Тут и заключается проблема. В идеале нужно взять значение текстбокса с первой формы, выполнить select по этому значению и результат заполнить в dataGridView.
Главная форма доступна при открытой VsePokazania.
Одного раза передачи достаточно. До момента изменения значения текстбокса с первой формы (т.е. пока пользователь не введет другой счет и выполнит селект по нему).
Отсюда и ответ на третий вопрос (кмк), динамическая связь не нужна, данные нужны только для чтения, изменять будет запрещено.
Первая и вторая формы:
Миниатюры
Передать значение textbox одной формы в textbox другой формы   Передать значение textbox одной формы в textbox другой формы  
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
18.02.2021, 22:34  [ТС]
Частично решил таким образом, на главной форме для кнопки написал:
C#
1
2
3
4
5
6
7
  public void button4_Click(object sender, EventArgs e)
        {
            //Вывод лицевого счета в textbox на форме vsePokazania
            VsePokazania f2 = new VsePokazania();
            f2.MyTextSet = ncTextBox.Text;
            f2.ShowDialog();
        }
Таким образом значение textbox выводится в textbox второй формы, но теперь другая ситуация, неясно в каком типе передается значение, т.к. выполнить sql команду с этим значением можно только в общем виде, т.е. select*from, а нужно select*from products where nc={значениеИзТекстбокса}, но в таком случае вылетает ошибка System.Data.SqlClient.SqlException: "Неправильный синтаксис около конструкции "="."
Код:
C#
1
2
3
4
5
6
7
8
 public void LoadData()
        {
            var ncc = textBox1.Text;
            var con = new SqlConnection();
            con.ConnectionString = @"Data Source=localhost;Initial Catalog=Detrop;Integrated Security=True";
            con.Open();
            var cmd = new SqlCommand($"SELECT * from products where nc={ncc}",con);
            SqlDataReader reader = cmd.ExecuteReader(); //<-Ошибка ругается на этой строке
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16132 / 11256 / 2888
Регистрация: 21.04.2018
Сообщений: 33,091
Записей в блоге: 2
18.02.2021, 22:51
Цитата Сообщение от detrop Посмотреть сообщение
Частично решил таким образом, на главной форме для кнопки написал:
У вас свойство VsePokazania.MyTextSet связано с textBox1.Text в этой же Форме?

Добавлено через 2 минуты
Цитата Сообщение от detrop Посмотреть сообщение
вылетает ошибка System.Data.SqlClient.SqlException
Поставьте точку останова на строке con.Open(); и проверьте значение свойства con.ConnectionString.
Покажите его.
Попробуйте найти рабочую строку и её тоже покажите.
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
18.02.2021, 22:53  [ТС]
Элд Хасп, да, верно. Т.е. textBox1 находится на форме VsePokazania
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
18.02.2021, 22:57  [ТС]
Элд Хасп, con.ConnectionString прописано верно, коннект устанавливается.
Проверить можно так: если запрос прописать так var cmd = new SqlCommand($"SELECT * from products",con);
то все работает, но выводятся все значения.
А нужно так:
var cmd = new SqlCommand($"SELECT * from products where nc={ncc}",con);
Миниатюры
Передать значение textbox одной формы в textbox другой формы  
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16132 / 11256 / 2888
Регистрация: 21.04.2018
Сообщений: 33,091
Записей в блоге: 2
18.02.2021, 23:05
Цитата Сообщение от detrop Посмотреть сообщение
con.ConnectionString прописано верно, коннект устанавливается.
Я ошибся.
Надо проверить значение cmd.CommandText - там точно то что вы ожидаете?
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
18.02.2021, 23:07  [ТС]
Элд Хасп, Да, я хочу выполнить команду по значению из текстбокса, т.е.
var cmd = new SqlCommand($"SELECT * from products where nc={ncc}",con);
Но в таком случае падает.
Если же выполнить
var cmd = new SqlCommand($"SELECT * from products",con); - то работает, но выдаются все результаты, по всем счетам. А мне надо только по тому, что указан в текстбоксе.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16132 / 11256 / 2888
Регистрация: 21.04.2018
Сообщений: 33,091
Записей в блоге: 2
18.02.2021, 23:11
Цитата Сообщение от detrop Посмотреть сообщение
Если же выполнить
Я понял!
Я вам говорю ПРОВЕРИТЬ, что там в действительности.
Вы думаете, что там нужное вам выражение, а там может оказаться другое выражение: лишняя точка, кавычка и т.п.
Посмотрите на строке SqlDataReader reader =... какое значение находится в cmd.CommandText.
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
18.02.2021, 23:16  [ТС]
Я видимо что-то не понимаю.
В SqlDataReader reader находится запрос, который я задал для cmd.CommandText
C#
1
2
var cmd = new SqlCommand($"SELECT * from products where nc={ncc}",con);
            SqlDataReader reader=cmd.ExecuteReader();
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
18.02.2021, 23:18  [ТС]
Получается в cmd значение null?
Миниатюры
Передать значение textbox одной формы в textbox другой формы  
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
18.02.2021, 23:31  [ТС]
Просто странно, что этот фрагмент кода написал по подобию другого:
C#
1
2
3
4
5
6
7
            // Проверка введенных показаний старых стоков
            var ncChekDrains = ncTextBox.Text;
            var chekDrains = new SqlConnection();
            chekDrains.ConnectionString = @"Data Source=localhost;Initial Catalog=Detrop;Integrated Security=True";
            chekDrains.Open();
            var drainsOld = new SqlCommand($"SELECT drains_old from products where nc={ncChekDrains} and insert_day = (select MAX (insert_day) from products) order by insert_day", chekDrains);
            SqlDataReader ad = drainsOld.ExecuteReader();
Тут все работает, здесь берется значение
Code
1
var ncChekDrains = ncTextBox.Text;
из текстбока, который находится на той же форме, откуда выполняется sql команда.

Но не работает, если значение передавать в текстбокс другой формы.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16132 / 11256 / 2888
Регистрация: 21.04.2018
Сообщений: 33,091
Записей в блоге: 2
18.02.2021, 23:58
Цитата Сообщение от detrop Посмотреть сообщение
Получается в cmd значение null?
Сначала получите string значение, проверьте его а потом передайте команде:
C#
7
8
9
10
            string str = $"SELECT * from products where nc={ncc}";
            var cmd = new SqlCommand(str, con);
            string str1 = cmd.CommandText;
            SqlDataReader reader = cmd.ExecuteReader(); // Здесь точка останова
На точке останова проверьте значение переменных str и str1.
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
19.02.2021, 08:57  [ТС]
Элд Хасп,
Миниатюры
Передать значение textbox одной формы в textbox другой формы  
0
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
19.02.2021, 10:39  [ТС]
Кажется понял проблему (но это не точно), но не понял причину.
В запросе берется значение из TextBox1, но в SQL команду передается значение с запятой.

Добавлено через 1 час 8 минут
Может есть решение и вовсе не использовать 2 текстбокса? Возможно ли из Form2 обратиться к значению текстбокса на Form1?
Например, чтобы запрос выглядел как-то: var str = $"SELECT * from products where nc={TextBox из Form1}";
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16132 / 11256 / 2888
Регистрация: 21.04.2018
Сообщений: 33,091
Записей в блоге: 2
19.02.2021, 11:43
Лучший ответ Сообщение было отмечено detrop как решение

Решение

Цитата Сообщение от detrop Посмотреть сообщение
Может есть решение и вовсе не использовать 2 текстбокса? Возможно ли из Form2 обратиться к значению текстбокса на Form1?
Например, чтобы запрос выглядел как-то: var str = $"SELECT * from products where nc={TextBox из Form1}";
Обратите внимание на ответ от Toros1992:
Цитата Сообщение от Toros1992 Посмотреть сообщение
можно сделать так:
C#
1
2
3
4
5
        public VsePokazania(string valueFromOtherForm)
        {
            InitializeComponent();
            LoadData(valueFromOtherForm);
        }
Если вы измените конструктор (а вам же нужно единовременная передача значения), то можете это сделать при создании экземпляра Формы:
C#
1
2
3
4
5
        public void button4_Click(object sender, EventArgs e)
        {
            //Вывод лицевого счета в textbox на форме vsePokazania
            VsePokazania f2 = new VsePokazania(ncTextBox.Text);
        }
C#
1
2
3
4
5
6
7
8
9
10
        public void LoadData(string ncc)
        {
           // var ncc = textBox1.Text;
            var con = new SqlConnection();
            con.ConnectionString = @"Data Source=localhost;Initial Catalog=Detrop;Integrated Security=True";
            con.Open();
            string str = $"SELECT * from products where nc={ncc}";
            var cmd = new SqlCommand(str, con);
            string str1 = cmd.CommandText;
            SqlDataReader reader = cmd.ExecuteReader(); // Здесь точка останова
1
1 / 1 / 0
Регистрация: 14.02.2021
Сообщений: 97
19.02.2021, 11:53  [ТС]
Элд Хасп, Toros1992, оооо заработало наконец!
Я ведь пробовал по совету Toros1992, но не поправил public void LoadData(string ncc)
Спасибо большое! Останется думать над самой таблицей уже.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.02.2021, 11:53
Помогаю со студенческими работами здесь

Передача данных с DataGridView одной формы в TextBox другой формы
Ребята, мне необходимо передать значения с выбранной строки Datagridview в textboxы второй формы, но есть одно но! Нужно чтобы доступ был...

При нажатии на кнопку одной формы, что-либо записывается в TextBox другой формы
Я хочу чтобы нажав на кнопку своей второй формы, какой то текст записался в поле первой формы помогите пожалуйста: private void...

Из TextBox одной формы в ListView другой формы
В первой основной форме есть ListView с четырьмя столбцами и кнопка добавить. Когда нажимаешь добавить открывается вторая форма с четырьмя...

Передать данные из TextBox второй формы в TextBox первой формы
Смысл такой. Из первой (главной) формы открывается третья форма, куда вводятся значения часов, минут и секунд в отдельные TextBox'ы. Эти...

Доступ из одной формы к textBox в другой.
У меня есть одна форма: public MircoCaptureForm() { InitializeComponent(); Form2 f2 = new Form2(); f2.Show(); ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
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