Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 15
1

Combobox , Textbox, информация из txt с разделителем - построчно

23.08.2017, 06:16. Показов 1817. Ответов 29
Метки нет (Все метки)

Задание в универе, к 28 августа надо эту работу сдать, я заочница и профессия на которую я учусь - она вообще не связана с программированием. Но это сделать задали. В общем вопрос такой:
В текстовом файле лежащем на диске C:/ (1.txt) есть информация такого рода -
1я строка (111;222;333;444;555;666),
2я строка (aaa;sss;ddd;fff;ggg) и так далее. В комбобоксе должен быть выбор только из (111,aaa) И при выборе - в остальных 5 textbox'ах должна появиться информация
(если выбрали 111, то в textbox1 - 222, textbox2 - 333 и так далее).
Если в 1 из textbox'ов ввести другое (Например если было 333, ввести nnn) - то в блокноте 333 тоже должно измениться на nnn и строка должна стать 111;222;nnn;444;555;666.

Звала друга с кафедры информатики, он часик провозился и сказал что лучше задать вопрос на вашем форуме, что тут точно помогут. Зато я разобралась с конструктором форм и умею вписывать коды куда нужно.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2017, 06:16
Ответы с готовыми решениями:

Чтение из файла .txt построчно в разные textbox
Добрый день! У меня такая проблема: посмотрев множество сайтов я не нашел ответ на интересующий...

Написать программу- вводная информация в файле in.txt, выходная информация в out.txt
Написать программу- вводная информация в файле in.txt, выходная информация в out.txt. Срочнооо..

Необходимо чтобы в TextBox-ах отображалась информация в зависимости от выбора сделаного в ComboBox -е
Добрый день, проблема такая, необходимо чтобы в textBox -ах отображалась информация в зависимости...

Чтение из текстового файла построчно и с разделителем
Допусти есть текстовый документ в котором такая запись: ролкот:ajfhvg asdfh:gfgfffh и так далее...

29
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 848
23.08.2017, 07:25 2
Накатал на "коленках", извращение но все же
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 partial class Form1 : Form
    {
        String[] text1;
        String[] text2;
        public Form1()
        {
            InitializeComponent();
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string[] stArray = File.ReadAllLines(@"C:\1.txt");
 
            text1 = stArray[0].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            text2 = stArray[1].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
 
            comboBox1.Items.Add(text1[0]);
            comboBox1.Items.Add(text2[0]);
        }
 
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int i = 5;
            switch (comboBox1.SelectedItem)
            {
                case "111":
 
                    foreach (TextBox tb in Controls.Cast<Control>().Where(x => x is TextBox).Select(x => x as TextBox))
                    {
                       
                            tb.Text = text1[i];
                            i--;
                    }; break;
                case "aaa":
 
                    foreach (TextBox tb in Controls.Cast<Control>().Where(x => x is TextBox).Select(x => x as TextBox))
                    {
                        tb.Text = text2[i];
                        i--;
                    }; break;
 
            }
        }
    }
1
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 15
23.08.2017, 08:48  [ТС] 3
Большое спасибо, домой приду, проверю.

Добавлено через 31 минуту
Тут на ноутбуке сделала.
По кнопке button1 первые 2 слова до ; (111,ааа) - добавляются в combobox. Но при выборе в combobox - допустим 111, в textbox1 не добавляется 222, а в textbox2 не добавляется 333 и так далее. И кнопка сохранения еще нужна.
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 848
23.08.2017, 09:33 4
Arina95, Добавьте событие на ComboBox.
C#
1
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
А сколько у вас всего строк? Или они динамически меняются ?
1
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 15
23.08.2017, 12:56  [ТС] 5
kingzfate, Строки зависят от того что написанно в блокноте. Если строк 10, в комбобоксе тоже 10 должно быть. А так - вот что получилось
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
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        String[] text1;
        String[] text2;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string[] stArray = File.ReadAllLines(@"C:\1.txt");
 
            text1 = stArray[0].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            text2 = stArray[1].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
 
            comboBox1.Items.Add(text1[0]);
            comboBox1.Items.Add(text2[0]);
        }
 
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int i = 5;
            switch (comboBox1.SelectedItem)
            {
                case "111":
 
                    foreach (TextBox tb in Controls.Cast<Control>().Where(x => x is TextBox).Select(x => x as TextBox))
                    {
 
                        tb.Text = text1[i];
                        i--;
                    }; break;
                case "aaa":
 
                    foreach (TextBox tb in Controls.Cast<Control>().Where(x => x is TextBox).Select(x => x as TextBox))
                    {
                        tb.Text = text2[i];
                        i--;
                    }; break;
 
            }
        }
    }
}
Но он не так работает всеравно. При выборе в combobox (например 111) - в textbox (1,2,3,4,5) не появляются (222;333;444;555;666). И темболее если переписать в textbox2 (333 на nnn) в текстовом файле строка не станет (111;222;nnn;444;555;666)
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 848
23.08.2017, 13:18 6
Arina95, покажите, как вы добавили событие на ComboBox?
1
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 15
23.08.2017, 13:24  [ТС] 7
kingzfate, Создала 1 combobox , 5 textbox и 1 button. Кликнула 2 раза на button в конструкторе - появилось окно с кодом, ввела туда
C#
1
2
3
4
5
6
7
            string[] stArray = File.ReadAllLines(@"C:\1.txt");
 
            text1 = stArray[0].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            text2 = stArray[1].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
 
            comboBox1.Items.Add(text1[0]);
            comboBox1.Items.Add(text2[0]);
Затем 2 раза кликнула на combobox, так же появилось окно с кодом и ввела туда
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            int i = 5;
            switch (comboBox1.SelectedItem)
            {
                case "111":
 
                    foreach (TextBox tb in Controls.Cast<Control>().Where(x => x is TextBox).Select(x => x as TextBox))
                    {
                       
                            tb.Text = text1[i];
                            i--;
                    }; break;
                case "aaa":
 
                    foreach (TextBox tb in Controls.Cast<Control>().Where(x => x is TextBox).Select(x => x as TextBox))
                    {
                        tb.Text = text2[i];
                        i--;
                    }; break;
 
            }
В итоге получилось то что я прислала раньше.
Еще это добавила в самое начало
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
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;
using System.IO;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.Threading;
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 848
23.08.2017, 13:33 8
Arina95, Значит что-то вы делаете не правильно
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
using System;
using System.Data;
using System.IO;
using System.Linq;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        string[] stArray;
        string[,] str;
        int count;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            stArray = File.ReadAllLines(@"C:\1.txt");
            str = new string[stArray.Length, stArray[0].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Length];
 
 
            for (int i = 0; i < stArray.Length; i++)
            {
                for (int j = 0; j < stArray[0].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Length; j++)
                {
                    string[] text = stArray[i].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                    str[i, j] = text[j];                   
                }
                comboBox1.Items.Add(str[i, 0]);
            }
        }
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int a = comboBox1.SelectedIndex;
            count = stArray[0].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Length - 1;
            foreach (TextBox tb in Controls.Cast<Control>().Where(x => x is TextBox).Select(x => x as TextBox))
            {
                tb.Text = str[a, count];
                count--;
            }
        }
    }
}
Вот код который вам нужен, от
C#
1
stArray[0].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Length
можно избавиться, если перенести в переменную, но думаю так наглядно и понятнее, сохранения я не реализовывал, попозже чуть, сначала настройте у себя это решение.
1
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 15
23.08.2017, 14:12  [ТС] 9
kingzfate,
C#
1
                    str[i, j] = text[j];
Индекс находится вне границ массива.
Это как понять?

Добавлено через 20 минут
kingzfate, Я поняла! Если в txt не 6 слов через ; , то так получается. Извините меня( Но там может быть и 4 и 5 слов, просто заполнить нужно будет не 5 textbox'ов а 3 или 4.

Добавлено через 6 минут
kingzfate, Ладно, надеюсь и так примут, правда в тетради у меня записанно как-то не понятно. Осталось только кнопку сохранения сделать) И завтра пойду сдавать))
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 848
23.08.2017, 14:25 10
Arina95, объясните точнее какие данные могут податься на входе и я дам вам исчерпывающий ответ, по тому что было описано в топике, решение (кроме сохранения) уже есть
1
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 15
23.08.2017, 15:52  [ТС] 11
kingzfate, Ну. Просто 1 без ; но в отдельной строке. Тогда 1 должен появиться в комбобокс. И при его выборе - все остальные поля должны оказаться пустыми. Тогда при заполнении этих полей - при сохранении - в txt должно измениться где была строка просто 1 - в 1;то что заполнили в других полях через ; в каждом поле. Если 1;2;3; - то в комбобоксе 1, в текстбоксе1 - 2, в текстбоксе2 - 3.

Добавлено через 1 час 20 минут
kingzfateЭто я так, для примера сказала что без ;. Если код уже написан чтоб ; была обязательно после того слова что попадет в combobox - то можно и с ;. например 1; и дальше пусто - следующая строка. Чтоб просто 1 попала в combobox. А все textbox были пустыми. Если вписать в них что нибудь - они в txt запишутся через ;
0
1 / 3 / 1
Регистрация: 19.08.2017
Сообщений: 61
23.08.2017, 16:03 12
Arina95, Сейчас код работает так:
Если в txt написанно 111;222;333;444 - то "Индекс находится вне границ массива"
Если в txt написанно 111;222;333;444;555 - то в combobox заносится 111, при выборе 111, textbox1 становится 111 (должен становиться 222) - а textbox 5 должен остаться пустым.

Добавлено через 1 минуту
Arina95, Я правильно вас понял?

Добавлено через 41 секунду
Мне кажется тоже этот код пригодится...
0
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 15
23.08.2017, 16:09  [ТС] 13
Prizrac2452, Именно так! Вы сможете переписать код что дал kingzfate ? Чтоб работал так как вы сказали? Или просто допишите кнопку сохранения, может так примут.
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 848
23.08.2017, 16:11 14
Arina95,
C#
1
2
3
4
5
6
7
8
9
10
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int a = comboBox1.SelectedIndex;
            count = stArray[0].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Length - 1;
            foreach (TextBox tb in Controls.Cast<Control>().Where(x => x is TextBox).Select(x => x as TextBox))
            {
                tb.Text = str[a, count];
                count--;
            }
        }
Там переделать только вот этот момент с выбором, домой доеду скину вам решение
1
1 / 3 / 1
Регистрация: 19.08.2017
Сообщений: 61
23.08.2017, 16:15 15
Arina95, Я и сам в этом деле новичек)) Пишу программу для закрывания процессов которые написанны в txt. Подумал что было бы хороше сделать конкретные конфигурации закрытия конкретных процессов, вот и наткнулся на вашу тему. А написал так, чтоб обьяснить kingsafe - что нужно конкретно. Вы просто очень замудренно пишите ...
0
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 15
23.08.2017, 16:43  [ТС] 16
kingzfate, Спасибо вам огромное! Буду ждать.

Добавлено через 8 минут
Prizrac2452, Я сама не понимаю что мне нужно. Тут в тетради я писала в универе под диктовку, диктовали быстро. Писала только смысл. Сейчас что поняла, пытаюсь высказать. Здаание из смысла - есть текст из нескольких слов разделенный ; . Нужно выбрать первое слово в программе, чтоб остальные слова через ; стали изменяемыми. Вчера звала друга с кафедры информатики. Вот он мне и объяснил что нужно combobox и textbox, помог разобраться с конструктором и час пытался написать код. А потом сказал что лучше задать вопрос тут. Сказал что нужно сформировать вопрос конкретнее чтоб получить ответ. Вот такой вопрос и получился.

Добавлено через 15 минут
Еще как такое вообще можно было задать на факультете художественного и музыкального образования, в профиле декоративно-прикладного искусства и дизайна? Что даже объяснить не получается с первого раза что мне нужно.
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 848
23.08.2017, 16:46 17
Arina95, программирование тоже по своему искусство)
2
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 15
23.08.2017, 16:53  [ТС] 18
kingzfate, Ну вот информатику ввели зимой, по ней было 2 пары за все время. Зачетов по ней не было. Но задание по ней к летней сессии задали. Вот это задание. Не будь у меня друга с кафедры информатики, я бы вовсе и не нашла запись что программа нужна visual studio - упоминается за те 2 пары - 1 раз. И уж точно не узнала бы об этом форуме, где вот так вот легко помочь могут. А если вот это все знать - потом легко писать?
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 848
23.08.2017, 20:25 19
Arina95,
Все работает, с исходными файлами Отработало отлично
C#
1
2
3
4
5
111;222;333
aaa;sss;ddd;fff;ggg;zzz
1;2;3;4
7;8;9;0;1;1231
1;321;312;123
Будут вопросы, спрашивайте

Кликните здесь для просмотра всего текста

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
using System;
using System.Data;
using System.IO;
using System.Linq;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        string[] stArray;
        string[][] str;
        int count, count2, a;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            a = comboBox1.SelectedIndex;
            count = str[a].Length - 1;
            count2 = str[a].Length - 1;
 
            foreach (TextBox tb in Controls.Cast<Control>().Where(x => x is TextBox).Select(x => x as TextBox))
            {
                try
                {
                    if (count2 < 5)
                    {
                        tb.Text = "";
                        count2++;
                    }
                    else
                    {
                        tb.Text = str[a][count];
                        count--;
                    }
                }
                catch { }
            }
        }
 
        public static void ResizeArray(ref double[,] arr, int newM, int newN)
        {
            double[,] newArray = new double[newM, newN];
            for (int m = 0; m < arr.GetLength(0); m++)
                for (int n = 0; n < arr.GetLength(1); n++)
                    newArray[m, n] = arr[m, n];
            arr = newArray;
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            a = comboBox1.SelectedIndex;
            count = 5;
            string[,] SaveStr = new string[5, 6];
 
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 6; j++)
                {                  
                    try
                    {
                        SaveStr[i, j] = str[i][j];
                    }
                    catch { SaveStr[i, j] = ""; }                  
                }
            }
            foreach (TextBox tb in Controls.Cast<Control>().Where(x => x is TextBox).Select(x => x as TextBox))
            {
                if (count == 0)
                {
                    SaveStr[a, count] = comboBox1.Items.ToString();
                    break;
                }                
                SaveStr[a, count] = tb.Text;
                count--;
           }
 
            using (StreamWriter sw = new StreamWriter(@"C:\1.txt", false))
            {
                for (int i = 0; i < SaveStr.GetLength(0); i++)
                {
                    string[] line = new string[SaveStr.GetLength(1)];
                    for (int j = 0; j < SaveStr.GetLength(1); j++)
                    {
* * * * * * * * * * * * //Cобираем в строковый массив столбцы текущей строки массива
* * * * * * * * * * * * line[j] = SaveStr[i, j].ToString();
                    }
* * * * * * * * * * //Метод Join() склеивает элементы массива line в одну строку, разделяя их пробелами
* * * * * * * * * * sw.WriteLine(String.Join(";", line));
                }
            }
 
 
        }
        private void button1_Click(object sender, EventArgs e)
        {
            comboBox1.Items.Clear();
            stArray = File.ReadAllLines(@"C:\1.txt");
            str = new string[stArray.Length][];
 
            for (int i = 0; i < str.Length; i++)
            {
                str[i] = new string[stArray[i].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Length];
            }
 
            for (int i = 0; i < str.Length; i++)
            {
                for (int j = 0; j < stArray[i].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Length; j++)
                {
                    string[] text = stArray[i].Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                    str[i][j] = text[j];
                }
                comboBox1.Items.Add(str[i][0]);
            }
        }
    }
}
1
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 15
23.08.2017, 21:08  [ТС] 20
kingzfate, И правда все работает! А что делает кнопка button2 ? Я сначала подумала что сохраняет в файл, но она не сохраняет. Правда я стерла эти строки
C#
1
2
3
4
5
* * * * * * * * * * * * //Cобираем в строковый массив столбцы текущей строки массива
* * * * * * * * * * * *
 
* * * * * * * * * * //Метод Join() склеивает элементы массива line в одну строку, разделяя их пробелами
* * * * * * * * * *
Но это вроде комментарии и из-за них была ошибка.

Добавлено через 1 минуту
Проепод точно не поверит что это я сама)

Добавлено через 5 минут
kingzfate, А нет. Ссылок на клик на эту кнопку просто не было сначала.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2017, 21:08

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Экспорт из таблицы access данных из определённых полей в файл .txt с разделителем используя delphi
Доброго времени суток. Долго искал, но не смог найти целостной картины по теме, возможно...

Чтение .txt построчно в MFC
Добрый день уважаемые форумчане! Второй день уже мучаюсь - не могу понять, как считать строку из...

Чтение txt файла построчно!
Возможно повторюсь, но вопрос вполне конкретен! Нужно, что бы при запуске программы автоматически...

Чтение из .txt построчно (ifstream)
Здравствуйте, возникли некоторые проблемы с ifstream. Не могу сделать чтение из .тхт файла...


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

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

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