Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157

Чтение данных из файла в ComboBox

26.12.2015, 14:28. Показов 4059. Ответов 32

Студворк — интернет-сервис помощи студентам
Имеется следующая форма



Необходимо, чтобы при загрузке формы из файла (txt или xml - без разницы) подгружались данные (Name1, Name2 и т.д.) в все ComboBox (ComboBox1, ComboBox2 и т.д.), а при выборе в ComboBox соответствующего имени для него в TextBox (Val1, Val2, Val3, Val4, Val5) загружались данные из файла.

Структуру файла вижу примерно так:
XML
1
2
3
Name1, Val1, Val2, Val3, Val4, Val5
Name2, Val1, Val2, Val3, Val4, Val5
Name3, Val1, Val2, Val3, Val4, Val5
Пример данных:
XML
1
2
3
Параметр1, -2440, 345, 22, 55, 25
Параметр2, 2458, 146, 16, 83, 16
Параметр3, -964, 145, -56, 22, 94
Подскажите как это сделать. И если можно с комментарием по коду
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.12.2015, 14:28
Ответы с готовыми решениями:

Чтение переменной из файла и занесение данных определенной переменной в combobox
Как сделать чтение из бинарного файла определенной переменной, а после занеся ее в combobox . (коллекции)

Чтение из файла в ComboBox
Мне нужно создать программу с помощью которой можно вести список личной библиотеки. В поле у меня два ComboBox, в одном автор, в другом...

Чтение из файла в ComboBox
Есть необходимость записать значения из текстового файла вида: 1.2 5 3 в ComboBox, чтобы при редактировании текстового файла...

32
Почетный модератор
 Аватар для Памирыч
23253 / 9167 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
31.12.2015, 17:47
Студворк — интернет-сервис помощи студентам
~Jack~, так Вы никак добавили по шестому текстбоксу на строку?
А говорите, ничего не добавляете, не меняете.
Нужно уяснить, что любая тютелька в проге способна повлиять на ход событий так, что будешь переписывать весь код.

Поэтому я сто раз говорил и говорю в 101-й - не надо садиться за код, пока нет четко продуманной ее структуры в голове. Импровизация кодинга - плохой спутник
0
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
31.12.2015, 17:55  [ТС]
Цитата Сообщение от Памирыч Посмотреть сообщение
~Jack~, так Вы никак добавили по шестому текстбоксу на строку?
Сейчас у меня выглядит так:



Первая колонка с текстбоксами имеют имена:

VB.NET
1
2
3
4
5
TextBox01
TextBox02
TextBox03
...
TextBox08
Вторая, третья, четвертая, пятая и шестая колонка имееют имена такие

VB.NET
1
2
3
4
5
6
TextBox1, TextBox2, TextBox3, TextBox4, TextBox5
TextBox6, TextBox7, TextBox8, TextBox9, TextBox10
TextBox11, TextBox12, TextBox13, TextBox14, TextBox15
TextBox16, TextBox17, TextBox18, TextBox19, TextBox20
.....
TextBox36, TextBox37, TextBox38, TextBox39, TextBox40
То есть имена расставлены вроде правильно. Первая колонка текстбоксов не должна влиять на исполнение кода.

Даже у Вас в примере на гифке данные не правильно расставлялись
1
Почетный модератор
 Аватар для Памирыч
23253 / 9167 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
31.12.2015, 18:01
~Jack~, по идее верно мыслите, так правильно.
Еще раз покажите файл, код и скриншот, что и как куда загружается
0
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
31.12.2015, 18:09  [ТС]
Цитата Сообщение от Памирыч Посмотреть сообщение
~Jack~, по идее верно мыслите, так правильно.
Еще раз покажите файл, код и скриншот, что и как куда загружается
Полный код программы
Кликните здесь для просмотра всего текста
VB.NET
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
Public Class Form1
    'Глобальная переменная для радиокнопок
    Dim Var4184 As Double = 1
 
 
 
    Dim Data As New List(Of MyData)
 
    Class MyData
        Public Combo, T(4) As String
        ReadOnly Property Text()
            Get
                Return Combo
            End Get
        End Property
    End Class
 
    'Управление радиокнопками
    Private Sub RadioButton2_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton2.CheckedChanged
        If RadioButton2.Checked Then
            LabelH.Text = "∆H, кДж" : LabelS.Text = "∆S, Дж"
            For I As Integer = 1 To 40
                Controls("TextBox" & I).Text *= 4.184
            Next
            Var4184 = 4.184
        Else
            LabelH.Text = "∆H, ккал" : LabelS.Text = "∆S, кал"
            For I As Integer = 1 To 40
                Controls("TextBox" & I).Text /= 4.184
            Next
            Var4184 = 1
        End If
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Считываем информацию из файла и обрабатываем строки. В качестве разделителей между значениями - запятая.
        For Each Line As String In IO.File.ReadAllLines("C:\param-pam-pam.txt", System.Text.Encoding.Default)
            Dim NewData As New MyData
            With NewData
                .Combo = Line.Split(New String() {","}, StringSplitOptions.RemoveEmptyEntries)(0)
                For I As Integer = 0 To 4
                    .T(I) = Line.Split(New String() {","}, StringSplitOptions.RemoveEmptyEntries)(I + 1)
                Next
            End With
            Data.Add(NewData)
        Next
        For I As Integer = 1 To 8
            DirectCast(Controls("ComboBox" & I), ComboBox).Items.AddRange((From s In Data Select s.Combo).ToArray)
            AddHandler DirectCast(Controls("ComboBox" & I), ComboBox).SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged
        Next
 
 
 
 
    End Sub
    'Делаем вставку значений в ячейки для соотвествующих ComboBox
    Private Sub ComboBox_SelectedIndexChanged(ByVal sender As ComboBox, ByVal e As System.EventArgs)
        Dim Ind As Integer = CInt(sender.Name.Replace("ComboBox", "")) - 1
        For I As Integer = Ind * 5 To Ind * 5 + 4
            Controls("TextBox" & I + 1).Text = Data(sender.SelectedIndex).T(I / 5 - Ind) * Var4184
        Next
    End Sub
 
    Private Sub ВыходToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ВыходToolStripMenuItem.Click
        Close()
    End Sub
 
    Private Sub ОПрограммеToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ОПрограммеToolStripMenuItem.Click
        About.ShowDialog()
        Show()
    End Sub
End Class







И еще в догонку. Если файле будут дробные числа, то при компиляции крашится с ошибкой

0
Почетный модератор
 Аватар для Памирыч
23253 / 9167 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
31.12.2015, 18:34
Пришлось опять собирать этот проект.
У меня все работает
Цитата Сообщение от ~Jack~ Посмотреть сообщение
Если файле будут дробные числа
Это нужно было предусмотреть еще на этапе проектировки.
Теперь переделывать.
Файл:
Code
1
2
3
SiO2|-2000|238,4|12|2|22
SrO|232|241|55|11|13
Al2O3|-1124|1431|22|-22|33
Ну и в коде при парсинге заменить запятые на "|"

VB.NET
1
2
3
4
                .Combo = Line.Split(New String() {"|"}, StringSplitOptions.RemoveEmptyEntries)(0)
                For I As Integer = 0 To 4
                    .T(I) = Line.Split(New String() {"|"}, StringSplitOptions.RemoveEmptyEntries)(I + 1)
                Next


2
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
31.12.2015, 19:02  [ТС]
Цитата Сообщение от Памирыч Посмотреть сообщение
У меня все работает
Ну на вашем же скриншоте не верно вставлены данные.

Может Вы не правильно понимаете меня.

В файле мы имеет данные в следующем виде

Name1, Val1, Val2, Val3, Val4, Val5
Name2, Val2_1, Val2_2, Val2_3, Val2_4, Val2_5
....

на форме должно вставляться так:

Name1 вставляется в ComboBox1
Val1 вставляется в InputBox1
Val2 вставляется в InputBox2
Val3 вставляется в InputBox3
Val4 вставляется в InputBox4
Val5 вставляется в InputBox5

Name2 вставляется в ComboBox2
Val2_1 вставляется в InputBox6
Val2_2 вставляется в InputBox7
Val2_3 вставляется в InputBox8
Val2_4 вставляется в InputBox9
Val2_5 вставляется в InputBox10

....

А сейчас у нас вставляется
Val1 в TextBox1, TextBox2, TextBox3
Val2 в TextBox4, TextBox5

что не верно
0
Почетный модератор
 Аватар для Памирыч
23253 / 9167 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
31.12.2015, 19:18
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

~Jack~, когда в школе мои одноклассники изучали математику, я курил в туалетах.
Типичная ошибка в формуле.
VB.NET
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
Public Class Form1
    'Глобальная переменная для радиокнопок
    Dim Var4184 As Double = 1
 
    Dim Data As New List(Of MyData)
 
    Class MyData
        Public Combo, T(4) As String
    End Class
 
    'Управление радиокнопками
    Private Sub RadioButton2_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles RadioButton2.CheckedChanged
        If RadioButton2.Checked Then
            LabelH.Text = "∆H, кДж" : LabelS.Text = "∆S, Дж"
            For I As Integer = 1 To 40
                Controls("TextBox" & I).Text *= 4.184
            Next
            Var4184 = 4.184
        Else
            LabelH.Text = "∆H, ккал" : LabelS.Text = "∆S, кал"
            For I As Integer = 1 To 40
                Controls("TextBox" & I).Text /= 4.184
            Next
            Var4184 = 1
        End If
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Считываем информацию из файла и обрабатываем строки. В качестве разделителей между значениями - палка-копалка.
        For Each Line As String In IO.File.ReadAllLines("C:\param-pam-pam.txt", System.Text.Encoding.Default)
            Dim NewData As New MyData
            'Dim 
            With NewData
                .Combo = Line.Split(New String() {"|"}, StringSplitOptions.RemoveEmptyEntries)(0)
                For I As Integer = 0 To 4
                    .T(I) = Line.Split(New String() {"|"}, StringSplitOptions.RemoveEmptyEntries)(I + 1)
                Next
            End With
            Data.Add(NewData)
        Next
        For I As Integer = 1 To 8
            DirectCast(Controls("ComboBox" & I), ComboBox).Items.AddRange((From s In Data Select s.Combo).ToArray)
            AddHandler DirectCast(Controls("ComboBox" & I), ComboBox).SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged
        Next
    End Sub
    'Делаем вставку значений в ячейки для соотвествующих ComboBox
    Private Sub ComboBox_SelectedIndexChanged(ByVal sender As ComboBox, ByVal e As System.EventArgs)
        Dim Ind As Integer = CInt(sender.Name.Replace("ComboBox", "")) - 1
        For I As Integer = Ind * 5 To Ind * 5 + 4
            Controls("TextBox" & I + 1).Text = Data(sender.SelectedIndex).T(I - (Ind * 5)) * Var4184
        Next
    End Sub
 
End Class
3
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
31.12.2015, 19:31  [ТС]
Цитата Сообщение от Памирыч Посмотреть сообщение
~Jack~, когда в школе мои одноклассники изучали математику, я курил в туалетах.
Типичная ошибка в формуле.
Огромное человеческое спасибо! Работает как надо!
0
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 351
02.01.2016, 12:58
~Jack~, дам тебе совет, разбирайся с базами данных, выучи самые обычные команды sql
в результате все варианты кода написанные выше тебе покажутся бредом (это новый велосипед так сказать, который способен ездить по асфальту, и не способный ездить по твердой земле)
Потом ты поймешь насколько просто будет манипулировать данными такими как у тебя
3
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
04.01.2016, 17:47  [ТС]
Добавил еще в программу ComboBox с помощью которого хотел бы сделать возможность выбора файла для обработки. Сейчас имеется один файл param-pam-pam.txt, будет еще один или два подобных файла. Как осуществить между ними переключение через Combobox?

VB.NET
1
2
3
4
5
6
7
8
9
10
   Private Sub ComboBoxBase_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxBase.SelectedIndexChanged
 
        Select Case ComboBoxBase.SelectedIndex
            Case 0
 
            Case 1
 
        End Select
 
    End Sub
0
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
06.01.2016, 13:33  [ТС]
Цитата Сообщение от ~Jack~ Посмотреть сообщение
Добавил еще в программу ComboBox с помощью которого хотел бы сделать возможность выбора файла для обработки. Сейчас имеется один файл param-pam-pam.txt, будет еще один или два подобных файла. Как осуществить между ними переключение через Combobox?
Памирыч, не подскажите?

И еще один вопрос, на форме сейчас имеются ComboBox'ы а справа от них по 5 ячеек с соотвествующими данными. Как можно сделать отдельное условие для одного значения ComboBox?

Пример:
Допустим у нас есть ComboBox который вставляет соответствующие данные напротив в ячейки. С помощью цикла идет расчет. Но нам необходимо сделать так, если из ComboBox выбран какой-то определенный элемент, то для него происходил особый дополнительный расчет.

Как такое осуществить?
0
Почетный модератор
 Аватар для Памирыч
23253 / 9167 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
06.01.2016, 13:49
~Jack~, в свете последних условий становится очевидно, что задача уже уходит от первоначальной постановки довольно существенно. Я не очень люблю "мутирующие" темы. Лучшая тема состоит из двух постов - 1) Вопрос, 2) ответ. И потом, я не один на форуме, есть еще ребята, и поопытнее (я такой же новичок как и Вы).

Попросите, например, товарища kritjara привести пример с базами данных для Вашей задачи. Совет он дал дельный, если еще даст пример в подтверждение сказанного, будет наглядный пример, из которого Вы почерпнете опыт на долгие годы.
1
 Аватар для ~Jack~
12 / 12 / 3
Регистрация: 30.11.2010
Сообщений: 157
06.01.2016, 21:13  [ТС]
Цитата Сообщение от Памирыч Посмотреть сообщение
~Jack~, в свете последних условий становится очевидно, что задача уже уходит от первоначальной постановки довольно существенно. Я не очень люблю "мутирующие" темы.
Прошу прощения за "мутирующую тему", просто я привык разбирать ошибки по меры поступления. Некоторые идеи для функций рождаются в ходе разработки и не хочется создавать отдельные темы для таких вопросов.

Цитата Сообщение от kritjara Посмотреть сообщение
~Jack~, дам тебе совет, разбирайся с базами данных, выучи самые обычные команды sql
Если можно, покажите пример для моего случая.

Добавлено через 1 час 46 минут
Попробовал сделать переключение файлов таким образом:

VB.NET
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
 Private Sub ComboBoxBase_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxBase.SelectedIndexChanged
 
        Select Case ComboBoxBase.SelectedIndex
            Case 0
 
                ComboBox1.Items.Clear()
                ComboBox2.Items.Clear()
                ComboBox3.Items.Clear()
                ComboBox4.Items.Clear()
                ComboBox5.Items.Clear()
                ComboBox6.Items.Clear()
                ComboBox7.Items.Clear()
                ComboBox8.Items.Clear()
 
                'Считываем информацию из файла и обрабатываем строки. В качестве разделителей между значениями - палка-копалка.
                For Each Line As String In IO.File.ReadAllLines("termodynamics.txt", System.Text.Encoding.Default)
                    Dim NewData As New MyData
                    'Dim 
                    With NewData
                        .Combo = Line.Split(New String() {"|"}, StringSplitOptions.RemoveEmptyEntries)(0)
                        For I As Integer = 0 To 4
                            .T(I) = Line.Split(New String() {"|"}, StringSplitOptions.RemoveEmptyEntries)(I + 1)
                        Next
                    End With
                    Data.Add(NewData)
                Next
                For I As Integer = 1 To 8
                    DirectCast(Controls("ComboBox" & I), ComboBox).Items.AddRange((From s In Data Select s.Combo).ToArray)
                    AddHandler DirectCast(Controls("ComboBox" & I), ComboBox).SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged
                Next
            Case 1
 
                ComboBox1.Items.Clear()
                ComboBox2.Items.Clear()
                ComboBox3.Items.Clear()
                ComboBox4.Items.Clear()
                ComboBox5.Items.Clear()
                ComboBox6.Items.Clear()
                ComboBox7.Items.Clear()
                ComboBox8.Items.Clear()
                'Считываем информацию из файла и обрабатываем строки. В качестве разделителей между значениями - палка-копалка.
                For Each Line As String In IO.File.ReadAllLines("termodynamics2.txt", System.Text.Encoding.Default)
                    Dim NewData As New MyData
                    'Dim 
                    With NewData
                        .Combo = Line.Split(New String() {"|"}, StringSplitOptions.RemoveEmptyEntries)(0)
                        For I As Integer = 0 To 4
                            .T(I) = Line.Split(New String() {"|"}, StringSplitOptions.RemoveEmptyEntries)(I + 1)
                        Next
                    End With
                    Data.Add(NewData)
                Next
                For I As Integer = 1 To 8
                    DirectCast(Controls("ComboBox" & I), ComboBox).Items.AddRange((From s In Data Select s.Combo).ToArray)
                    AddHandler DirectCast(Controls("ComboBox" & I), ComboBox).SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged
                Next
 
        End Select
Но ComboBox вначале не хочет очищаться, а потом добавлять Items. Получается при переключении ComboBase всё время плюсуются (добавляются) Items в ComboBox1...ComboBox8.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.01.2016, 21:13

Combobox и чтение определенных значений из файла
Здравствуйте! Нужна помощь. Есть форма с Combobox, так же есть папка с файлами таблиц. Нужно открыть файл с таблицей, прочитать его и...

Чтение ComboBox из INI-файла и проблема с savedialog
Добрый день, голову сломал,никак не могу решить такою задачу. Все данные введенные и выбранные в программе сохраняются в ini файле, с...

Чтение файла, чтение названия папки где находится файл, запись данных на PHP
Допустим у нас есть структура с папками типа Large -> Vehicles -> Firetruck_0 В этой папке лежит файл формата .dat Что нужно сделать? ...

Чтение заголовка PCX файла и чтение растровых данных PCX файла
Привет форумчане! Столкнулся с такой проблемой. Нужно считать заголовок PCX файла и растровые данные PCX файла. Код написал. Часть...

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла.
#include<iostream> #include<fstream> #include<locale.h> #include<iomanip> #include <cstdlib> using namespace std; struct...


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru