Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/40: Рейтинг темы: голосов - 40, средняя оценка - 4.68
422 / 352 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
1

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

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

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

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

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

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

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

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

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

33
422 / 352 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 20:05  [ТС] 21
Author24 — интернет-сервис помощи студентам
Кажется я понял вы класс таблицы так что он будет доступен на всех формах?

Добавлено через 1 минуту
УУУУУ какт в шарпе все заморочено. В делфи даже внимание на это бы не заострял...
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
23.09.2014, 20:06 22
Цитата Сообщение от Санек25 Посмотреть сообщение
вопрос в правельной передаче от формы к форме.
Санек25, представьте что мой класс - это вторая форма. В ней формируйте таблицу и передавайте ее в событие. А в первой (основной) форме подпишитесь на это событие.

Добавлено через 1 минуту
Цитата Сообщение от Санек25 Посмотреть сообщение
УУУУУ какт в шарпе все заморочено.
Ничего тут не заморочено. Это просто так кажется, все на самом деле просто. Когда знаешь способы, то это используется автоматически.
1
422 / 352 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 20:08  [ТС] 23
Ладно буду пробовать. Не получится отпишусь уже с кодом
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
23.09.2014, 20:14 24
Цитата Сообщение от Санек25 Посмотреть сообщение
буду пробовать.
Санек25, вы точнее задание опишете, сделаю вам более полный пример.
Форма 1, основная, что на ней расположено? Логика работы?
Форма 2, дополнительная. На ней что расположено? Логика работы ?
0
422 / 352 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 20:22  [ТС] 25
Цитата Сообщение от insite2012 Посмотреть сообщение
Санек25, вы точнее задание опишете, сделаю вам более полный пример.
Форма 1, основная, что на ней расположено? Логика работы?
Форма 2, дополнительная. На ней что расположено? Логика работы ?
Есть файл такой структуры и еще разной ерунды там много
Код
; FLOORS=1
[POLYGON]
Type=0x6c
Label=9
Label[0x409]=9
HouseNumber=9
HouseNumber[0x409]=9
StreetDesc=4-я Первомайская улица
StreetDesc[0x409]=4-ya Pervomayskaya ulitsa
CountryName=Россия
CountryName[0x409]=Russia
RegionName=Курская область
RegionName[0x409]=Kursk Region
CityName=Курск
CityName[0x409]=Kursk
Data0=(51.759693,36.215988),(51.759651,36.216144),(51.759761,36.216224),(51.759803,36.216068)
[END]

; FLOORS=1
[POLYGON]
Type=0x6c
Label=58/7
Label[0x409]=58/7
HouseNumber=58/7
HouseNumber[0x409]=58/7
StreetDesc=Белинского улица
StreetDesc[0x409]=Belinskogo ulitsa
CountryName=Россия
CountryName[0x409]=Russia
RegionName=Курская область
RegionName[0x409]=Kursk Region
CityName=Курск
CityName[0x409]=Kursk
Data0=(51.718307,36.186470),(51.718215,36.186550),(51.718158,36.186374),(51.718250,36.186294)
[END]

; FLOORS=1
[POLYGON]
Type=0x6c
Label=178/24
Label[0x409]=178/24
HouseNumber=178/24
HouseNumber[0x409]=178/24
StreetDesc=Бойцов 9-й Дивизии улица
StreetDesc[0x409]=Boytsov 9-y Divizii ulitsa
CountryName=Россия
CountryName[0x409]=Russia
RegionName=Курская область
RegionName[0x409]=Kursk Region
CityName=Курск
CityName[0x409]=Kursk
Data0=(51.731559,36.149406),(51.731430,36.149482),(51.731399,36.149341),(51.731529,36.149265)
[END]

; FLOORS=1
[POLYGON]
Type=0x6c
Label=21
Label[0x409]=21
HouseNumber=21
HouseNumber[0x409]=21
StreetDesc=3-я Пушкарная улица
StreetDesc[0x409]=3-ya Pushkarnaya ulitsa
CountryName=Россия
CountryName[0x409]=Russia
RegionName=Курская область
RegionName[0x409]=Kursk Region
CityName=Курск
CityName[0x409]=Kursk
Data0=(51.752773,36.172248),(51.752643,36.172363),(51.752601,36.172241),(51.752731,36.172126)
[END]

; FLOORS=1
[POLYGON]
Type=0x6c
StreetDesc=Петропавловский переулок
StreetDesc[0x409]=Petropavlovskiy pereulok
CountryName=Россия
CountryName[0x409]=Russia
RegionName=Курская область
RegionName[0x409]=Kursk Region
CityName=Курск
CityName[0x409]=Kursk
Data0=(51.713880,36.201602),(51.713865,36.201762),(51.713991,36.201793),(51.714006,36.201632)
[END]

; FLOORS=1
[POLYGON]
Type=0x6c
Label=4
Label[0x409]=4
HouseNumber=4
HouseNumber[0x409]=4
StreetDesc=Денисовский переулок
StreetDesc[0x409]=Denisovskiy pereulok
CountryName=Россия
CountryName[0x409]=Russia
RegionName=Курская область
RegionName[0x409]=Kursk Region
CityName=Курск
CityName[0x409]=Kursk
Data0=(51.752613,36.160316),(51.752525,36.160396),(51.752464,36.160217),(51.752552,36.160137)
[END]
Мне надо просеять этот файла на ошибки, По типам эл-тов, по регистру букв , по совпадению даннных, потранслитерации и тд.... когда ошибка найдена тоя ее вношу в гирд на 2 форме и уже в программе нахожу корявый элемент по координатам и правлю его. Писать ничего ни надо , буду сам учиться.
А то что я пишу на VS Express 2013 для Desktop могут быть какие-то левые ошибки, а то сделал так
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
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;
        }
    }
}
 
 
 
 
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 Санек25
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}
и уже ошибка
Ошибка 1 Предложение using должно предшествовать любым другим элементам пространства имен кроме объявлений внешних псевдонимов E:\Жми сюда\Си#\Для работы\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs 58 1 WindowsFormsApplication1
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
23.09.2014, 20:28 26
Санек25, измените пространство имен на ваше.
0
422 / 352 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 21:16  [ТС] 27
insite2012, правильно я понял?. Надо создать приложение , потом зайти в проект и создать новый класс, вставить то что вы первым написали, а уже в коде самой формы инициализировать класс??? А то туплю я (((
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
23.09.2014, 21:18 28
Санек25, примерно так. Создайте класс, добавьте в него все что в моем классе(имя класса сделайте таким же, чтобы не путаться) и используйте.
1
422 / 352 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 21:20  [ТС] 29
Цитата Сообщение от insite2012 Посмотреть сообщение
Санек25, примерно так. Создайте класс, добавьте в него все что в моем классе(имя класса сделайте таким же, чтобы не путаться) и используйте.
а я тупень пихаю этот класс в само тело формы вот она и ругается))))).
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
23.09.2014, 21:25 30
Цитата Сообщение от Санек25 Посмотреть сообщение
пихаю этот класс
Я вам для того и пример сделал...
0
422 / 352 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
23.09.2014, 21:39  [ТС] 31
insite2012, Блин без бутылки не разберешься))) Огромное спасибо. все запустилось теперь буду разбираться что к чему.
0
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
25.09.2014, 21:06 32
Цитата Сообщение от Санек25 Посмотреть сообщение
но конструктор формы матерится и не хочет строить форму
Возвращаясь к этому - для работы дизайнера форм необходимо, чтобы класс формы был первым в файле. Все остальные типы нужно перенести в конец файла, а ещё лучше - выделить в отдельный файл с общим пространством имён.
0
422 / 352 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
26.09.2014, 21:04  [ТС] 33
Всем привет. Пытаюсь разобраться в классах. Вот что получилось
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
 public class Operacii
    {
        //Событие с собственным аргументом
        public event EventHandler<DTEventArgs> getTableEvent;        
 
        public void HI()                                         //создается таблица и добавляются колонки
        {
            DataTable Tb = new DataTable();
            
            Tb.Columns.Add("Координаты");
            Tb.Columns.Add("Тип элемента");
            Tb.Columns.Add("Описание ошибки");
 
                if (getTableEvent != null)
                getTableEvent(this, new DTEventArgs(Tb));
 
        }
        public void new_str()                                         //Добавляются строки
        {
            DataTable dt = new DataTable();
            DataRow row = dt.NewRow();
 
            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;
        }
    }
}
Проблема в добавлении строки в методе public void new_str() . Если я так сделаю как написано то создается новый экземпляр таблицы и он затирает уже созданную выше в методе public void HI() . Так вот проблема. Не пойму как в методе где создается строка обратиться к уже созданной таблице....?? DataTable dt = ????????;
0
422 / 352 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
29.09.2014, 19:48  [ТС] 34
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Цитата Сообщение от Санек25 Посмотреть сообщение
Проблема в добавлении строки в методе public void new_str() . Если я так сделаю как написано то создается новый экземпляр таблицы и он затирает уже созданную выше в методе public void HI() . Так вот проблема. Не пойму как в методе где создается строка обратиться к уже созданной таблице....?? DataTable dt = ????????;
Вопрос решен. Может кому интересно будет...
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
   public class Operacii
    {
        //Событие с собственным аргументом
        public event EventHandler<DTEventArgs> getTableEvent;
        public static DataTable Tb = new DataTable("dataGrid1");
        
 
        public void HI()                                         //создается таблица и добавляются колонки
        {         
            
            Tb.Columns.Add("Координаты");
            Tb.Columns.Add("Тип элемента");
            Tb.Columns.Add("Описание ошибки");
 
                if (getTableEvent != null)
                getTableEvent(this, new DTEventArgs(Tb));
 
        }
 
        public void new_str()                                         //Добавляются строки
        {
           
           
            DataRow row = Tb.NewRow();
 
            Tb.Rows.Add(row);
 
                if (getTableEvent != null)
                getTableEvent(this, new DTEventArgs(Tb));
        
        }
 
 
 
    }
 
    public class DTEventArgs : EventArgs
    {
        public readonly DataTable dt;
        public DTEventArgs(DataTable data)
        {
            dt = data;
        }
    }
}
Вынес объявление таблицы в поля и сделал его статическим. И все ожило...
0
29.09.2014, 19:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2014, 19:48
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru