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

Передача между формами

09.03.2016, 16:37. Показов 8282. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ответы на 7 часто задаваемых вопросов читал, но не понятно, почему не работает так:
C#
1
public System.Windows.Forms.TextBox TextBox1;
на второй форме
C#
1
2
Form1 frm = new Form1();
frm.TextBox1.Text = "123";
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.03.2016, 16:37
Ответы с готовыми решениями:

Передача между формами
Есть 1 и 2 форма, на 1 форме при клике button1 открываеться форма 2 и скрывается button1, а при закрытии 2 формы на 1 форме должна...

Передача между формами
Здравствуйте) Разрабатываю интерфейс приложения. Подскажите, пожалуйста, как лучше реализовать это: есть Форма 1, в ней разные элементы,...

Передача между формами
Смотрел из FAQ, но не вышло. Код в о второй форме: public List<string> grBOX = new List<string>(); ... Код в первой форме: ...

23
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
09.03.2016, 16:53
frank2, так вы создаете новую форму и на ней что-то меняете. Кроме того, так делать в любом случае обычно не следует. Напрямую обращаться к контролам другой формы-нарушение инкапсуляции.
0
0 / 0 / 2
Регистрация: 18.01.2016
Сообщений: 220
09.03.2016, 19:26  [ТС]
Подскажите пожалуйста как тогда правильно передать текст по кнопке со второй формы в текстбокс на первую?
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
09.03.2016, 19:50
frank2, через событие. В FAQ внизу про них написано.
0
2 / 2 / 4
Регистрация: 28.09.2013
Сообщений: 407
09.03.2016, 19:52
Можно объект между формами носить
0
215 / 211 / 146
Регистрация: 20.11.2014
Сообщений: 1,184
09.03.2016, 22:00
в первой форме
C#
1
2
Form2 frm2= new Form2();
frm2.ShowDialog(this);
во второй
C#
1
2
Form1 frm = this.Owner as Form1;
if (frm != null) frm.TextBox1.Text = "123";
Так работает, но не уверен, что так правильно делать
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
09.03.2016, 22:21
bbq, так делать неправильно. Это нарушает инкапсуляцию и жестко связывает 2 формы друг с другом, чего в нормальном коде быть не должно. Кроме того, вызывает разного рода побочные эффекты. Но работать, конечно, будет Правильно - из родительской в дочернюю-через методы и свойства, из дочерней в родительскую-через события.
0
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 32
09.03.2016, 23:14
Я только начал изучать C# (2 недели) и уже разбираюсь как и от чего зависит... НО ВОТ В УПОР НЕ ПОНИМАЮ КАК ПЕРЕДАВАТЬ ИНФУ ИЗ ФОРМЫ В ФОРМУ((((((
Вообще... В упор... И никто даже разжевать мне дураку не может((((
0
215 / 211 / 146
Регистрация: 20.11.2014
Сообщений: 1,184
09.03.2016, 23:20
Архитектура ПО в WinForms (FAQ & HowTo)
Ответы на 7 самых частых вопросов по WinForms
0
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
10.03.2016, 00:32
Вот так можно.
Вложения
Тип файла: rar test.rar (52.7 Кб, 80 просмотров)
1
0 / 5 / 0
Регистрация: 27.07.2015
Сообщений: 7
10.03.2016, 12:05
Я передавал данные из формы в форму через отдельный класс
Ответы на 7 самых частых вопросов по WinForms
Пункт 2.6
В реализации довольно просто
Создаёте переменную в отд.классе в Program.cs
В новой форме присваиваете значение текстбокса этой переменной, в старой форме берёте значение из этой переменной(например, когда форма становится активной)
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
10.03.2016, 12:17
Используйте пример с событием, выложенный Sanya_sa(так же про события в FAQ есть) . Это наиболее правильный способ.

Добавлено через 1 минуту

Не по теме:

Только вот когда речь зайдет про многопоточность, то вот эта запись if (MyEvent != null) становится спорной. На хабре по этому поводу есть небезынтересная статья, в котором разбираются разные варианты.

1
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 32
10.03.2016, 13:14
Цитата Сообщение от aero122 Посмотреть сообщение
Я передавал данные из формы в форму через отдельный класс
Ответы на 7 самых частых вопросов по WinForms
Пункт 2.6
В реализации довольно просто
Создаёте переменную в отд.классе в Program.cs
В новой форме присваиваете значение текстбокса этой переменной, в старой форме берёте значение из этой переменной(например, когда форма становится активной)

Т.е? Я создал этот класс в Program.cs.
Теперь у меня например в первой форме есть label4 со значением 23. И как и что к чему я должен присвоить, чтобы эту цифру и в дальнейшее изменение в label4 передавать на Form2 в label2?
0
0 / 5 / 0
Регистрация: 27.07.2015
Сообщений: 7
10.03.2016, 13:31
Я передавал данные из формы в форму через отдельный класс
Ответы на 7 самых частых вопросов по WinForms
Пункт 2.6
В реализации довольно просто
Создаёте переменную в отд.классе в Program.cs
В новой форме присваиваете значение текстбокса этой переменной, в старой форме берёте значение из этой переменной(например, когда форма становится активной)

Теперь в этом классе нужно создать переменную типа string.
А в событии формы1(Допустим, при активации формы) Activated прописываем
переменная_нейм = label4.text
Во второй форме, также, при активации, к примеру
label2 = переменная_нейм

Добавлено через 2 минуты
p.s. переменная должна быть публичной
Вот пример
C#
1
2
3
4
    static class Data //Класс, с полем, доступным из всех форм
    {
        public static string Value;
    }
А обращаемся к ней так
C#
1
Data.Value = label4.text;
0
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 32
10.03.2016, 14:01
aero122, В public partial class Form1 : Form я объявил Data.Value=label4.Text;
VC ругается говорит что мол label является "Поле", а используется как "тип"

Добавлено через 13 минут
Вот код в первой форме:
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
namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Data.Value=label1.Text;
        }
        int plus = 1; 
        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "0";
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = plus++.ToString();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form2 f2 = new Form2();
            f2.Show();
        }
 
       
    }
}
Вот код во второй форме:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace WindowsFormsApplication5
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
            
        }
 
        private void label1_Click(object sender, EventArgs e)
        {
            
        }
 
        private void Form2_Load(object sender, EventArgs e)
        {
            label1.Text = Data.Value.ToString();
        }
    }
}
Данные из Form1 label1 в Form2 label1 не передаются.... Помогите плз)
0
0 / 5 / 0
Регистрация: 27.07.2015
Сообщений: 7
10.03.2016, 14:03
У Label есть событие TextChanged, я думаю оно хорошо подойдёт в этом случае
Присваивать нужно там
примерно так
C#
1
2
3
4
        private void label4_TextChanged(object sender, EventArgs e)
        {
            Data.value = label4.Text;
        }
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
10.03.2016, 14:05
CaTBaT, вы не объявили статический класс Data, какой результат вы ожидаете увидеть?
И еще раз повторяю-так делать, в подавляющем большинстве случаев, друной тон.
0
0 / 5 / 0
Регистрация: 27.07.2015
Сообщений: 7
10.03.2016, 14:06
Тоже самое прописать в Form1_Load, после присваивания label значения
0
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 32
10.03.2016, 14:08
Цитата Сообщение от EvilFromHell Посмотреть сообщение
CaTBaT, вы не объявили статический класс Data, какой результат вы ожидаете увидеть?
И еще раз повторяю-так делать, в подавляющем большинстве случаев, друной тон
Как это не объявил? А в Program.cs?
Это то, что написано в Program.cs... Это же как раз объявление статического класса Data. Или нет?
C#
1
2
3
4
static class Data
    {
        public static string Value;
    }
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
10.03.2016, 14:11
CaTBaT, но его было не видно в выложенном коде Если он таки объявлен, и вы хотите, чтобы Value менялось, то делайте то, что говорит aero122, хоть это и неправильно Так работать будет. А еще лучше-скачайте архив из поста чуть повыше и посмотрите, как сделано там.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.03.2016, 14:11
Помогаю со студенческими работами здесь

Передача данных между формами
Есть две формы. На первой форме выбираешь студента и тебе показывают в какой он группе. Не получается сделать что б при этом на второй...

Передача переменных между формами
Добрый день! Помогите, пожалуйста. Из первой формы передаю во вторую переменную using System; using System.Collections.Generic;...

Передача данных между формами
C# Windows Forms. Передача данных между формами, как? Есть две формы, первая форма это текстовый редактор, а вторая это ее дочерняя форма...

Передача данных между формами
В общем у меня такая проблема: у меня есть две формы. На второй форме стоит компонент RadioButton, при его нажатии нужно, чтобы значения...

Передача значений между формами
У меня есть программа, по нажатию на динамически созданный пикчер, i принимает значение true и открывается 2 форма , и во второй форме...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru