Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Санек25
421 / 351 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
1

Передача данных в другую форму

23.09.2014, 09:58. Просмотров 3108. Ответов 33
Метки нет (Все метки)

Подкопилось сразу несколько вопросов...
1) Мне с главной формы форм1 надо передавать на дочернюю форм2 некие данные типа String и занести их в ListBox. Этих передач за выполнение программы может быть очень много... По этой теме нашел вот это Ответы на 7 самых частых вопросов по WinForms . Но возникли вопросы. В каждом примере после каждой передачи дочерняя форма сразу открывается f.ShowDialog(); а мне ее надо открыть только после выполнения задач на форм1 и неоднократного внесения данных в форм2. Как я понимаю, что форму открывать все равно придется иначе формы физически нет и данные просто некуда вносить. Отсюда вижу 2 способа решения либо собрать все передаваемые строки в массив и уже одним разом все передать , либо создать форм2 и спрятать его с помощью HIDE?

2)Вариант с массивом мне больше нравится, но тогда возникает вопрос как в процессе программы постоянно увеличивать размерность массива, т.к. изначально кол-во не известно...

3)Я перешел на С# из Делфи и там был компонент stringgrid. Если ли в C# ему замена? Нашел только похожую таблицу для работы с базами данных , но там все через SQL запросы и для меня пока темный лес...
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2014, 09:58
Ответы с готовыми решениями:

Передача данных в другую форму
Доброго времени суток. Есть такая задача: в окне № 1 открывается таблица, выбирается запись,...

Передача данных из combobox'a в другую форму
Добрый день! Подскажите, как изменять значение label в Form2 при выборе значения combobox в Form1...

Передача данных с одной в другую форму
Есть 2 формы. Одна основная FormMain и вторая маленькая FormMainMenu при запуске программы должны...

Передача данных из формы в другую форму
Здравствуйте, подскажите, пожалуйста. Мне нужно передавать данные из одной формы в другую. Вот,...

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

33
Baky
78 / 78 / 37
Регистрация: 11.09.2014
Сообщений: 579
23.09.2014, 10:25 2
создайте открытое свойство для дочерней формы, типа массив строк. Далее в основной форме определите объект дочерней формы но не вызывайте. Теперь создайте кнопку по клику которой и будете показывать форму.

Добавлено через 40 секунд
вы про datagridview?
1
nio
5992 / 3399 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
23.09.2014, 10:30 3
Цитата Сообщение от Санек25 Посмотреть сообщение
мне ее надо открыть только после выполнения задач на форм1 и неоднократного внесения данных в форм2. Как я понимаю, что форму открывать все равно придется иначе формы физически нет и данные просто некуда вносить.
Форма готова к передаче данных, как только ты создашь её конструктором, а отображаться она начнёт только после вызова метода ShowDialog()
Цитата Сообщение от Санек25 Посмотреть сообщение
возникает вопрос как в процессе программы постоянно увеличивать размерность массива, т.к. изначально кол-во не известно
При динамически изменяемой размерности лучше использовать коллекции List<T>, а не массивы. Нужно ли это в данном случае, не понятно - задача недостаточно описана
Цитата Сообщение от Санек25 Посмотреть сообщение
там был компонент stringgrid. Если ли в C# ему замена? Нашел только похожую таблицу для работы с базами данных , но там все через SQL запросы и для меня пока темный лес...
Что было там мне не известно, но то, что ты нашёл тут, скорее всего DataGridView. Если так, то ты не разобрался с ним, очень интересный компонент и работает не только с базами
1
Санек25
421 / 351 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 10:43  [ТС] 4
DataGridView да именно этот компонент. Очень напоминает stringgrid. Попробую еще раз в нем разобраться. Суть в том что первая форма анализирует тестовый файл и все ошибки вносит во вторую форму. Табличный вариант мне бы лучше всего подошел. Но видимо я с DataGridView не разобрался полностью и решил все сносить в ListBox.
0
23.09.2014, 10:43
Baky
78 / 78 / 37
Регистрация: 11.09.2014
Сообщений: 579
23.09.2014, 10:52 5
C#
1
2
3
4
5
6
7
8
9
10
11
12
            // 
            // dataGridView1
            // 
            this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
            this.Column1,
            this.Column2,
            this.Column3});
            this.dataGridView1.Location = new System.Drawing.Point(19, 108);
            this.dataGridView1.Name = "dataGridView1";
            this.dataGridView1.Size = new System.Drawing.Size(240, 150);
            this.dataGridView1.TabIndex = 2;
...взято из конструктора формы
1
Санек25
421 / 351 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 11:01  [ТС] 6
C#
1
 this.dataGridView1.Location = new System.Drawing.Point(19, 108);
Не понятна эта строка? Зачем мы рисуем точку в координатах (19, 108);

А остальное можно выставить через окно свойств?..

Это в принципе я понял. А как например добавить текст в 1 столбец 2 строку?
И еще у меня не получалось на крайний левый столбец(fixed) добавить туда числа...
0
Baky
78 / 78 / 37
Регистрация: 11.09.2014
Сообщений: 579
23.09.2014, 11:18 7
Лучший ответ Сообщение было отмечено Санек25 как решение

Решение

Цитата Сообщение от Санек25 Посмотреть сообщение
Не понятна эта строка? Зачем мы рисуем точку в координатах (19, 108);
Это не точка, это координаты верхнего левого угла datagridview

Добавлено через 8 минут
да для добавления столбцов есть свойство Columns. Что за крайний левый столбец?

Добавлено через 3 минуты
для добавления строк:
C#
1
dataGridView1.Rows.Add(/*Указываем количество сторок для добавления*/);
...далее оспользуем индексы ячеек:
C#
1
dataGridView1[0, 0].Value = /*Значение*/;
либо
C#
1
dataGridView1.Rows[0].Cells[0].Value = /*Значение*/;
Добавлено через 1 минуту
так же в свойствах есть несколько вариантов типов полей колонок...
0
Санек25
421 / 351 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 11:22  [ТС] 8
Цитата Сообщение от Baky Посмотреть сообщение
Это не точка, это координаты верхнего левого угла datagridview
уже и сам начал догадываться


Цитата Сообщение от Baky Посмотреть сообщение
Что за крайний левый столбец?
Крайний левый столбец он еще серым цветом. Если не ошибаюсь то в базах данных там ключи обозначают...

Цитата Сообщение от Baky Посмотреть сообщение
для добавления строк:
dataGridView1.Rows.Add(/*Указываем количество сторок для добавления*/);
...далее оспользуем индексы ячеек:
dataGridView1[0, 0].Value = /*Значение*/;
либо
dataGridView1.Rows[0].Cells[0].Value = /*Значение*/;
?
так вот как оно, а я все пробовал вот так dataGridView1.Cells[0][0]= /*Значение*/;
а он на меня матерится. Спасибо. вечером буду штурмовать...
0
Baky
78 / 78 / 37
Регистрация: 11.09.2014
Сообщений: 579
23.09.2014, 11:28 9
по поводу левого столбца, не помню точно но есть возможность писать на них номера строк. В принципе, в него нельзя записать данные обычным методом - он служит для выделения всей строки.

Добавлено через 44 секунды
ок, обращайся.

Добавлено через 3 минуты
вот для установки нумерации строк:
C#
1
2
3
4
5
6
7
8
        private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
        {
            int index = e.RowIndex;
            string indexStr = (index + 1).ToString();
            object header = this.dataGridView1.Rows[index].HeaderCell.Value;
            if(header == null || !header.Equals(indexStr))
                this.dataGridView1.Rows[index].HeaderCell.Value = indexStr; 
        }
1
Санек25
421 / 351 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 19:02  [ТС] 10
в продолжение темы...
Объявляю новый класс как написано здесь Ответы на 7 самых частых вопросов по WinForms способ 2.6
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
namespace WindowsFormsApplication1
{
     static class Data
    {
        public static string Value { get; set; }
    }
 
    public partial class Form1 : Form
    {
        int[][] Nomera_ehlementov = new int[3][];         // создаем массив куда будем заносить номера строк пои, полигона, полилиний
        String[] Vsego_strok;
        int Startovyjj, Razmer_bloka = 0;                //Переменный для подсчета размера блока
      
       
 
        public Form1()
        {
 
            
            InitializeComponent();
            
        }
но конструктор формы матерится и не хочет строить форму. пишет что класс не первый.А если класс формы сделать первым то прога перестает работать, а так все отлично..
0
Миниатюры
Передача данных в другую форму  
insite2012
Модератор
Эксперт .NET
4948 / 3886 / 1112
Регистрация: 12.10.2013
Сообщений: 11,264
Записей в блоге: 2
23.09.2014, 19:15 11
Санек25, я не совсем точно понял, что вам требуется... Передавать откуда-то данные на главную форму? Так используйте события со своим аргументом, самый надежный способ.
0
Санек25
421 / 351 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 19:21  [ТС] 12
Цитата Сообщение от insite2012 Посмотреть сообщение
Санек25, я не совсем точно понял, что вам требуется... Передавать откуда-то данные на главную форму? Так используйте события со своим аргументом, самый надежный способ.
я объявляю класс
C#
1
2
3
4
  static class Data
    {
        public static string Value { get; set; }
    }
выше класса
public partial class Form1 : Form

поэтому программа не хочет строить саму форму...
а вообще я делаю так...
Data.Value = Vsego_strok[Nomera_ehlementov[0][i] + 1]; на 1 форме...
а на 2 форме
dataGridView1[1, 0].Value = Data.Value;


И все работает. Только я не могу получить доступа к форме 1...
0
Санек25
421 / 351 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 19:25  [ТС] 13
Вот форма 1 строится если , но в таком случае не работает класс static class Data
0
Миниатюры
Передача данных в другую форму  
insite2012
Модератор
Эксперт .NET
4948 / 3886 / 1112
Регистрация: 12.10.2013
Сообщений: 11,264
Записей в блоге: 2
23.09.2014, 19:25 14
Санек25, уж если вы используете DataGridView, то не проще ли сформировать где-то (в другом классе, к примеру) полностью таблицу и потом передать ее главной форме как источник данных для грида?
0
Санек25
421 / 351 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 19:29  [ТС] 15
Цитата Сообщение от insite2012 Посмотреть сообщение
Санек25, уж если вы используете DataGridView, то не проще ли сформировать где-то (в другом классе, к примеру) полностью таблицу и потом передать ее главной форме как источник данных для грида?
если бы я представлял как это сделать... А так пока пишу опираясь на чужие разработки... Только неделю как сел за шарп...
0
insite2012
Модератор
Эксперт .NET
4948 / 3886 / 1112
Регистрация: 12.10.2013
Сообщений: 11,264
Записей в блоге: 2
23.09.2014, 19:51 16
Лучший ответ Сообщение было отмечено Санек25 как решение

Решение

Цитата Сообщение от Санек25 Посмотреть сообщение
если бы я представлял как это сделать...
Сейчас накидаю по быстрому пример...

Добавлено через 20 минут
Санек25, вот пример.
Код класса для формирования таблицы.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.Data;
 
namespace Санек25
{
    //Класс для создания и заполнения таблицы
    class TableCreator
    {
        //Событие с собственным аргументом
        public event EventHandler<DTEventArgs> getTableEvent;
 
        //Метод создания таблицы данных
        public void CreateTable()
        {
            //Таблица
            DataTable dt = new DataTable();
            //Столбцы
            DataColumn column1 = new DataColumn("Column1",typeof(int));
            DataColumn column2 = new DataColumn("Column2",typeof(string));
            DataColumn column3 = new DataColumn("Column3",typeof(string));
 
            //Добавляем столбцы в таблицу
            dt.Columns.AddRange(new DataColumn[] { column1, column2, column3 });
 
            //Добавляем строки в таблицу
            for (int i = 0; i < 5; i++)
            {
                DataRow row = dt.NewRow();
                //Тут можно добавить данные в строки через индексатор
                row["Column1"] = 1;
                row["Column2"] = "One";
                row["Column3"] = "Two";
                dt.Rows.Add(row);
            }
            //Генерируем событие с собственным аргументом
            if(getTableEvent!=null)
                getTableEvent(this, new DTEventArgs(dt));
        }
    }
    //Класс для аргумента события
    public class DTEventArgs : EventArgs
    {
        public readonly DataTable dt;
        public DTEventArgs(DataTable data)
        {
            dt = data;
        }
    }
}
Код формы, на форме кнопка и DataGridView, с именами по умолчанию. Никаких обработчиков делать не надо, все есть в коде!
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
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 Санек25
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            //Обработчик нажатия на кнопку
            //Создаем экземпляр нашего класса,
            //подписываемся на наше событие 
            //и вызываем его метод создания таблицы
            button1.Click += (sender, e) =>
                {
                    //Экземпляр класса
                    TableCreator creator = new TableCreator();
                    //Подписываемся на событие
                    creator.getTableEvent += (a, b) =>
                        {
                            //Получаем таблицу из аргумента события
                            DataTable table = b.dt;
                            //Привязываем ее к гриду
                            dataGridView1.DataSource = table;
                        };
                    //Вызываем метод
                    creator.CreateTable();
                };
        }
    }
}
1
Санек25
421 / 351 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 19:53  [ТС] 17
insite2012, Спасибо большое буду сейчас разбираться
0
insite2012
Модератор
Эксперт .NET
4948 / 3886 / 1112
Регистрация: 12.10.2013
Сообщений: 11,264
Записей в блоге: 2
23.09.2014, 19:56 18
Санек25, на здоровье. Комментариев там много, думаю разберетесь.
0
Санек25
421 / 351 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 20:00  [ТС] 19
insite2012, как я понял таблица расположена на 1 форме? А мне надо с 1 формы передать в таблицу на 2 форме данные....Я думаю лучше сделать массив собрать туда все строки, а потом разом передать на 2 форму и там уже разбросать по гирду... вопрос в правельной передаче от формы к форме. Хочется научится сразу нормальному способу , что бы в дальнейшем не заморачиваться какая форма главная...
0
insite2012
Модератор
Эксперт .NET
4948 / 3886 / 1112
Регистрация: 12.10.2013
Сообщений: 11,264
Записей в блоге: 2
23.09.2014, 20:03 20
Цитата Сообщение от Санек25 Посмотреть сообщение
таблица расположена на 1 форме?
На форме вообще-то датагрид расположен. А таблица не расположена, она формируется в отдельном классе и передается на форму как источник данных для датагрида формы.
А правильный способ передачи - это именно он))) И да, форма - это тоже отдельный класс.
0
23.09.2014, 20:03
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2014, 20:03

Передача данных с DataGridView из одной формы, в другую форму с TextBox
Всем Здрасти. Перерыл уже кучу информации. перепробовал кучу методов, но никак не могу сделать...

Передача значении лейблов в другую форму
Имеются 3 лейбла, в котором записаны какие-то значения... Пытаюсь передать значения этих лейблов из...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.