Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/78: Рейтинг темы: голосов - 78, средняя оценка - 4.85
 Аватар для Filislav
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547

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

27.10.2010, 12:14. Показов 14560. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть необходимость записать значения из текстового файла вида:

1.2
5
3

в ComboBox, чтобы при редактировании текстового файла изменялись значения в этом самом комбобоксе.
Подскажите как реализовать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2010, 12:14
Ответы с готовыми решениями:

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

Чтение данных из файла в ComboBox
Имеется следующая форма Необходимо, чтобы при загрузке формы из файла (txt или xml - без разницы) подгружались данные (Name1,...

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

17
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
27.10.2010, 12:16
Цитата Сообщение от Filislav Посмотреть сообщение
в ComboBox, чтобы при редактировании текстового файла изменялись значения в этом самом комбобоксе.
В реальном времени? Если да то смотрите в сторону FileSystemWatcher и StreamReader. Если нет, то только в сторону StreamReader (System.IO).
0
 Аватар для Filislav
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
27.10.2010, 12:35  [ТС]
Нет, не в реальном. Я понял уже что смотреть надо в сторону StreamReader. Мне нужен механизм. Я немного непонимаю где нужно открывать поток чтения и как присвоить значение из файла переменной.

Вот фрагмент кода:
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
public void button1_Click(object sender, EventArgs e)
        {
            try
            {
                double vr;
                double tar = 0.3;
                double res;
                vr = System.Convert.ToDouble(textBox1.Text);
 
                switch (comboBox1.SelectedIndex)
                {
                    case 0: tar = 0.3; break;
                    case 1: tar = 0.6; break;
                }
                switch (comboBox2.SelectedIndex)
                {
                    case 0: tar = 1; break;
                    case 1: tar = 2; break;
                    case 2: tar = 3; break;
                }
                switch (comboBox3.SelectedIndex)
                {
                    case 0: tar = 4; break;
                    case 1: tar = 5; break;
                    case 2: tar = 6; break;
                }
                res = vr * tar;
                textBox2.Text = res.ToString();
Вот здесь вместо присвоенных значений непосредственно в программе, надо чтобы программа брала значение из текстового файла.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
27.10.2010, 12:40
Filislav, посмотри
1
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
27.10.2010, 12:41
Возможно что полезного найдешь для себя в моем FAQ по файлам Пространство имен - System.IO (Работа с файлами, директориями, дисками, памятью)
1
145 / 145 / 26
Регистрация: 09.10.2009
Сообщений: 261
27.10.2010, 13:53
По примеру прямо из msdn:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        private const string FILE_NAME = "test.txt";
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (!File.Exists(FILE_NAME))
            {
                MessageBox.Show("File loading error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
 
            using (StreamReader sr = File.OpenText(FILE_NAME))
            {
                String input;
                while ((input = sr.ReadLine()) != null)
                {
                    comboBox1.Items.Add(input);
                }
                comboBox1.Text = comboBox1.Items[0].ToString();
                MessageBox.Show("Updated", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Если надо при запуске загружать из файла, добавь этот код в лоадер формы. И в свойствах комбобокса для поля DropDawnStyle поставь значение DropDownList, чтобы нельзя было редактировать содержимое.
П.С. Если хочешь использовать где-то эти значения дальше в коде, придется еще и парсить комбобокс по разным типам в трай / кетче. Успехов.
0
 Аватар для Filislav
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
27.10.2010, 14:57  [ТС]
ArtOfLife, мне надо что бы программа прочитала содержимое файла и из каждого прочитанного значения сделала значение переменной "tar".

Привожу на всякий случай текст программы целиком.

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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            monthCalendar1.TodayDate = System.DateTime.Now;  //текущая дата
            monthCalendar1.SelectionRange = new SelectionRange(monthCalendar1.TodayDate, monthCalendar1.TodayDate);
           
        }
        
        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            comboBox1.Items.Add("Тариф 1");
            comboBox1.Items.Add("Тариф 2");
            comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            comboBox2.Items.Add("Мегафон");
            comboBox2.Items.Add("МТС");
            comboBox2.Items.Add("Билайн");
            comboBox3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            comboBox3.Items.Add("Область");
            comboBox3.Items.Add("Регион");
            comboBox3.Items.Add("Страна");
            button1.Enabled = false;
            comboBox1.Enabled = false;
            comboBox2.Enabled = false;
            comboBox3.Enabled = false;
            
        }
 
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && // Запрет ввода со всех кнопок кроме цифр и кнопок управления.
                !(char.IsControl(e.KeyChar)))
            {
                if (!((e.KeyChar.ToString() == ",") && //Исключение запятой из списка запрещенных к вводу символов.
                    (textBox1.Text.IndexOf(",") == -1)))
                    e.Handled = true;
            }
        }
       
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if ((textBox1.Text!=",")&&(textBox1.TextLength > 0)&&((comboBox1.SelectedIndex != -1) || (comboBox2.SelectedIndex != -1) || (comboBox3.SelectedIndex != -1)))
            button1.Enabled = true;
        }
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if ((textBox1.Text != ",") && (textBox1.TextLength > 0))
                button1.Enabled = true;
        }
        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            if ((textBox1.Text != ",") && (textBox1.TextLength > 0))
                button1.Enabled = true;
 
        }
        private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
        {
            if ((textBox1.Text != ",") && (textBox1.TextLength > 0))
                button1.Enabled = true;
        }
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton1.Checked)
            {
                comboBox1.Enabled = true;
                comboBox2.Enabled = false;
                comboBox3.Enabled = false;
            }
 
            else
                if (!comboBox1.Enabled) comboBox1.Enabled = false;
        }
        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton2.Checked)
            {
                comboBox2.Enabled = true;
                comboBox1.Enabled = false;
                comboBox3.Enabled = false;
            }
            else
                if (!comboBox2.Enabled) comboBox2.Enabled = false;
        }
 
        private void radioButton3_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton3.Checked)
            {
                comboBox3.Enabled = true;
                comboBox1.Enabled = false;
                comboBox2.Enabled = false;
            }
            else
                if (!comboBox3.Enabled) comboBox3.Enabled = false;
        }
 
        public void button1_Click(object sender, EventArgs e)
        {
            try
            {
               
                double vr;
                double tar;
                double res;
                vr = System.Convert.ToDouble(textBox1.Text);
 
                switch (comboBox1.SelectedIndex)
                {
                    case 0: tar = 0.3; break;
                    case 1: tar = 0.6; break;
                }
                switch (comboBox2.SelectedIndex)
                {
                    case 0: tar = 1; break;
                    case 1: tar = 2; break;
                    case 2: tar = 3; break;
                }
                switch (comboBox3.SelectedIndex)
                {
                    case 0: tar = 4; break;
                    case 1: tar = 5; break;
                    case 2: tar = 6; break;
                }
                res = vr * tar;
                textBox2.Text = res.ToString();
 
                System.IO.FileInfo fi = new System.IO.FileInfo(Application.StartupPath + "\\log.txt");
                // Поток для записи
                System.IO.StreamWriter sw;
 
                //Если наш файл не найден, то создаем его
                if (fi.Exists)
                    sw = fi.AppendText();
                else
                    sw = fi.CreateText();
                // Если выбран диапазон дат, то записываем для каждой из дат
 
                DateTime dt = monthCalendar1.SelectionStart;
                
                
                sw.WriteLine(dt.ToShortDateString() + "-" + res.ToString("N")+"руб.");
                
                //Закрываем поток
                sw.Close();
                textBox1.Text = string.Empty;
            }
            catch
            {
                if (textBox1.Text == "")
                {
                    MessageBox.Show("Ошибка, необходимо ввести данные");
                }
            }
           
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            Form2 fr2 = new Form2();
            fr2.Show();
        }
Щас я сам еще раз попытаюсь...
0
145 / 145 / 26
Регистрация: 09.10.2009
Сообщений: 261
27.10.2010, 15: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
        private const string FILE_NAME = "test.txt";
        private double tar;
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (!File.Exists(FILE_NAME))
            {
                MessageBox.Show("File loading error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
 
            using (StreamReader sr = File.OpenText(FILE_NAME))
            {
                String input;
                while ((input = sr.ReadLine()) != null)
                {
                    comboBox1.Items.Add(input);
                }
 
                comboBox1.Text = comboBox1.Items[0].ToString();
                MessageBox.Show("Updated", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
 
                try
                {
                    tar = double.Parse(comboBox1.Text);
                    MessageBox.Show("Tar = " + tar, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception)
                {
                    MessageBox.Show("Can't write to 'tar'. Value should be 'double' type.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        }
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                tar = double.Parse(comboBox1.SelectedItem.ToString());
                MessageBox.Show("Tar = " + tar, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception)
            {
                MessageBox.Show("Can't write to 'tar'. Value should be 'double' type.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
Только не забывайте, что в файле значения double нужно писать через запятую, иначе постоянно будете вылетать на catch.
1
 Аватар для Filislav
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
28.10.2010, 10:25  [ТС]
Написал используя последний совет простенькую программку. Не работает как надо. Сначала опишу что не так, потом приведу текст программки. В общем в комбобокс данные из файла грузятся только после нажатия кнопки "Выполнить", до этого поля есть, но переменных в них нету, а после загрузки, появляются еще два пункта комбобокса с данными из файла, а надо чтобы было их всего два Tatif1 и Tarif2. После каждого нажатия кнопки Выполнить количество пунктов в комбобоксе увеличивается на 2 - идет повтор из тестового файла. Расчет не идет. Подправьте пожалуйста текс программы до рабочей или дайте советы. Надо чтобы данные из файла либо грузились в момент загрузки формы либо корретно вставали на Tarif1 и Tarif 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
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
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;
using System.IO;
namespace Exercise
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            comboBox1.Items.Add("Tarif1");
            comboBox1.Items.Add("Tarif2");
        }
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && // Запрет ввода со всех кнопок кроме цифр и кнопок управления.
                !(char.IsControl(e.KeyChar)))
            {
                if (!((e.KeyChar.ToString() == ",") && //Исключение запятой из списка запрещенных к вводу символов.
                    (textBox1.Text.IndexOf(",") == -1)))
                    e.Handled = true;
            }
 
        }
        private const string FILE_NAME = "test.txt";
        private double tar;
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (!File.Exists(FILE_NAME))
            {
                MessageBox.Show("Ошибка загрузки файла", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            using (StreamReader sr = File.OpenText(FILE_NAME))
            {
                String input;
                while ((input = sr.ReadLine()) != null)
                {
                    comboBox1.Items.Add(input);
                }
                comboBox1.Text = comboBox1.Items[0].ToString();
                MessageBox.Show("Updated", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                try
                {
                    tar = double.Parse(comboBox1.Text);
                    MessageBox.Show("Tar = " + tar, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
 
                catch (Exception)
                {
                    MessageBox.Show("Неверный тип данных", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                double vr;
                double res;
                vr = Convert.ToDouble(textBox1.Text);
                res = vr * tar;
                textBox2.Text = res.ToString();
            }
 
        }
    }
}
з.ы. в файле данные находятся в виде:

2
3,5
0
145 / 145 / 26
Регистрация: 09.10.2009
Сообщений: 261
28.10.2010, 10:55
Текст условия для начала предоставьте.
По одному из ваших вопросов: если хотите, чтобы данные подгружались при загрузке формы, вставьте мой код вот сюда:
C#
1
private void Form1_Load(object sender, EventArgs e) { /*...*/ }
П.С. Как формулируем задачу, такие ответы и получаем. Ни больше, ни меньше.

Не по теме:

Кот_в_сапогах спросил людоеда "И ты можешь превратиться даже в мышь???". "Да легко!" - ответил людоед и превратился в мышь.
Кот_в_сапогах прыгнул за мышью, с целью сожрать ее, но мышь дико захохотала и улетела, потому что была летучей мышью.
Так выпьем же за правильно поставленное техническое задание!

0
 Аватар для Filislav
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
28.10.2010, 11:19  [ТС]
Я не жалуюсь, на то что мне плохо обьяснили, я просто прошу немного конкретнее. Если нет времени возиться, то я ни к кому претензий не имею.

Добавлено через 5 минут
Сделал как вы советовали:

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
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;
using System.IO;
namespace Exercise
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            if (!File.Exists(FILE_NAME))
            {
                MessageBox.Show("Ошибка загрузки файла", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            using (StreamReader sr = File.OpenText(FILE_NAME))
            {
                String input;
                while ((input = sr.ReadLine()) != null)
                {
                    comboBox1.Items.Add(input);
                }
                comboBox1.Text = comboBox1.Items[0].ToString();
                MessageBox.Show("Updated", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                try
                {
                    tar = double.Parse(comboBox1.Text);
                    MessageBox.Show("Tar = " + tar, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
 
                catch (Exception)
                {
                    MessageBox.Show("Неверный тип данных", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        }
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && // Запрет ввода со всех кнопок кроме цифр и кнопок управления.
                !(char.IsControl(e.KeyChar)))
            {
                if (!((e.KeyChar.ToString() == ",") && //Исключение запятой из списка запрещенных к вводу символов.
                    (textBox1.Text.IndexOf(",") == -1)))
                    e.Handled = true;
            }
 
        }
        private const string FILE_NAME = "test.txt";
        private double tar;
 
        private void button1_Click(object sender, EventArgs e)
        {
           
                double vr;
                double res;
                vr = Convert.ToDouble(textBox1.Text);
                res = vr * tar;
                textBox2.Text = res.ToString();
            }
 
        }
    }
Грузит сразу, но только первое значение из файла, причем в комбобоксе показыват оба и 2 и 3,5, но когда выбираеш 3,5 считает все равно как будто выбрана 2.
0
145 / 145 / 26
Регистрация: 09.10.2009
Сообщений: 261
28.10.2010, 11:26
Ну так вы ведь "кастрировали" мой код. Каких результатов ожидали? Добавьте вот этот обработчик для комбобокса:
C#
1
2
3
4
5
6
7
8
9
10
11
12
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                tar = double.Parse(comboBox1.SelectedItem.ToString());
                MessageBox.Show("Tar = " + tar, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception)
            {
                MessageBox.Show("Can't write to 'tar'. Value should be 'double' type.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
Он срабатывает при смене значения в комбобоксе.
Далее, добавьте кнопку "Загрузить данные из файла" (что-то типа того), и перенесите туда код загрузки в комбобокс. А в обработчике уже существующей кнопки оставьте только вычисления. И будет вам счастье.

Добавлено через 2 минуты
В итоге у вас будет 2 похожих кода в лоадере формы и обработчике нажатия на "Загрузить данные", а на кнопке "Вычислить" будут находиться только вычисления. Ну и конечно же не забываем про обработчик смены значения в комбобоксе, который я указал выше. Успехов.
1
 Аватар для Filislav
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
28.10.2010, 12:09  [ТС]
Вот что получилось:

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
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;
using System.IO;
namespace Exercise
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            if (!File.Exists(FILE_NAME))
            {
                MessageBox.Show("Ошибка загрузки файла", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            using (StreamReader sr = File.OpenText(FILE_NAME))
            {
                String input;
                while ((input = sr.ReadLine()) != null)
                {
                    comboBox1.Items.Add(input);
                }
                comboBox1.Text = comboBox1.Items[0].ToString();
                MessageBox.Show("Updated", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                try
                {
                    tar = double.Parse(comboBox1.Text);
                    MessageBox.Show("Tar = " + tar, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
 
                catch (Exception)
                {
                    MessageBox.Show("Неверный тип данных", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        }
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && // Запрет ввода со всех кнопок кроме цифр и кнопок управления.
                !(char.IsControl(e.KeyChar)))
            {
                if (!((e.KeyChar.ToString() == ",") && //Исключение запятой из списка запрещенных к вводу символов.
                    (textBox1.Text.IndexOf(",") == -1)))
                    e.Handled = true;
            }
 
        }
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                tar = double.Parse(comboBox1.SelectedItem.ToString());
                MessageBox.Show("Tar = " + tar, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception)
            {
                MessageBox.Show("Can't write to 'tar'. Value should be 'double' type.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
        private const string FILE_NAME = "test.txt";
        private double tar;
 
        private void button1_Click(object sender, EventArgs e)
        {
           
                double vr;
                double res;
                vr = Convert.ToDouble(textBox1.Text);
                res = vr * tar;
                textBox2.Text = res.ToString();
            }
 
        private void button2_Click(object sender, EventArgs e)
        {
            if (!File.Exists(FILE_NAME))
            {
                MessageBox.Show("Ошибка загрузки файла", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            using (StreamReader sr = File.OpenText(FILE_NAME))
            {
                String input;
                while ((input = sr.ReadLine()) != null)
                {
                    comboBox1.Items.Add(input);
                }
                comboBox1.Text = comboBox1.Items[0].ToString();
                MessageBox.Show("Updated", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                try
                {
                    tar = double.Parse(comboBox1.Text);
                    MessageBox.Show("Tar = " + tar, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
 
                catch (Exception)
                {
                    MessageBox.Show("Неверный тип данных", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        }
 
        }
    }
Все равно считает только первый итем из комбобокса т.е. только 2. Может я неправильно в текстовом файле значения указываю?

Добавлено через 10 минут
Вот еще что заметил, при изменении кода:

C#
1
2
3
4
5
6
7
String input;
                while ((input = sr.ReadLine()) != null)
                {
                    comboBox1.Items.Add(input);
                }
                comboBox1.Text = comboBox1.Items[0].ToString();
                comboBox1.Text = comboBox1.Items[1].ToString();
Он выбирает для расчета только второе значение т.е. 3,5 наверное здесь где то проблема, пока не разобрался.
0
145 / 145 / 26
Регистрация: 09.10.2009
Сообщений: 261
28.10.2010, 12:13
А вы событие SelectedIndexChanged для комбобокса вашего определили или просто скопировали код? Нужно в редакторе форм перейти на вкладку событий для комбобокса и назначить ему для поля SelectedIndexChanged данную функцию в качестве обработчика. Подозреваю, что сейчас у вас просто "мертвая" функция в коде висит, т.е. программа не знает, с чем ее связать.
0
 Аватар для Filislav
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
28.10.2010, 12:59  [ТС]
Все заработало, спасибо вам большое за то что уделили мне время.
0
 Аватар для Filislav
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
01.11.2010, 12:29  [ТС]
Еще есть некоторые вопросы, кто занет поделитесь опытом.

Как сделать чтобы в комбобоксе вместо значений загруженных из файла отображались слова, т.е. вместо 2 например "Тариф 1", но при этом грузилось и обсчитывалось 2. Я пробовал comboBox1.Items.Add("Тариф1") при загрузке, но тогда появляется и слово, причем с ошибкой формата данных естественно пустое и 2.

И второй вопрос, можно ли в тестовом файле из которого берется значение сделать пометку ьак чтобы программа не читала это за значение. Например:
2 //Тариф 1
3,5 //Тариф 2
0
145 / 145 / 26
Регистрация: 09.10.2009
Сообщений: 261
01.11.2010, 13:10
Можно в файле задавать данные в формате "Имя - значение", затем парсить это все, и заносить в интерфейс IDictionary<TKey, TValue>. Из интерфейса нашего своеобразного map'a читаем ключи в комбобокс. Ну а потом при выборе соответствующего элемента в том самом комбобоксе, производим поиск по ключу, вытягивая значение, которое в дальнейшем будет использоваться при подсчетах. Как-то так.
1
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
01.11.2010, 22:57
Цитата Сообщение от Filislav Посмотреть сообщение
Как сделать чтобы в комбобоксе вместо значений загруженных из файла отображались слова
Комбобокс можно связать с источником данных через свойство DataSource (в качестве источника используй DataTable), в свойства comboBox1.DisplayMember пишется имя отображаемого столбца, comboBox1.ValueMember - столбца хранящего связанное значение.Свойство comboBox1.SelectedValue возвращает связанное с отображаемым значение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.11.2010, 22:57
Помогаю со студенческими работами здесь

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

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

Чтение чисел из файла. Чтение после конца потока невозможно
Товарищи, помогите. В Pascal'e я не силен, так что не бейте меня ногами, но есть задача: написать обычную программу для расчета некоторых...

Как заменить чтение строки из консоли на чтение текстового файла?
основное задание: найти частоту суффикса (например, &quot;ing&quot;) в текстовом документе. в прикреплённом коде текст вводится прямо в консоль,...

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru