Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
1

Изменение значения в Combobox при работе с Com портом

13.06.2017, 11:01. Показов 2544. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день всем, есть такая проблема. На форме существует combobox с выбором номера порта. Работаю с VCP. В ноутбуке по умолчание порта нет, пока не подключишь шнурок. Так вот Например я открываю форму, шнурок еще не подключен, а в combobox пустота, подключаю шнурок - в системе определяется COM порт с номером, а в combobox по прежнему пустота. И наоборот, шнурок выдернул, а в combobox висит номер порта. Как можно это победить? Примерно понимаю, что нужно дергать событие, но где и как не знаю. Буду благодарен за помощь!

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 MainForm()
        {
            InitializeComponent();
            LoadListboxes();
        }
 
void LoadListBoxes()
{
string[] ports = SerialPort.GetPortNames();
 
            lstPorts.DataSource = ports; // Это Combobox;
 
            try
            {
                if (lstPorts.Items.Count != 0)
                    lstPorts.SelectedIndex = 0;
                
                else
                {
                    lstPorts.Text = String.Empty;
                    // mb.Close();
                }
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2017, 11:01
Ответы с готовыми решениями:

порядок байт в пакетах при работе с cоm-портом
Всем доброго времени суток. Уважаемые программисты, у меня возник такой вопрос: Есть пакет,...

Изменение значения Combobox в DataGridview
Добрый день! В datagrid имеется столбец combobox. C помощью извращений с событиями смог...

Как сделать чтобы при выборе в combobox , менялись значения в других combobox?
Есть два combobox. Как их сделать зависимыми друг от друга. Что бы при выборе одного combobox...

C# Как сделать чтобы при выборе в combobox , менялись значения в других combobox?
Приветствую коллеги. Только встал на путь программирования и столкнулся с дилеммой. Есть форма,...

7
Эксперт .NET
12077 / 8386 / 1281
Регистрация: 21.01.2016
Сообщений: 31,593
13.06.2017, 12:22 2
Лучший ответ Сообщение было отмечено Jman как решение

Решение

Jman, у SerialPort нет таких событий. Вам нужно по таймеру обновлять список портов. Или перезапускать свою программу, ничего в этом страшного нет. Можно ещё кнопку добавить "Обновить список портов".
1
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
13.06.2017, 12:24  [ТС] 3
Т.е можно например раз в 10 сек. обновлять порты? Я просто не знаю, как выбрать оптимальное время.
0
Эксперт .NET
12077 / 8386 / 1281
Регистрация: 21.01.2016
Сообщений: 31,593
13.06.2017, 12:28 4
Jman, это какое-то переусложнение. Просто перезапустите приложение и всё. COM-порт - штука очень не богатая на возможности. Очень много софта так работает, никто ещё, вроде бы, из-за этого не повесился.
1
Эксперт .NET
10557 / 6484 / 1503
Регистрация: 25.05.2015
Сообщений: 19,644
Записей в блоге: 14
13.06.2017, 14:24 5
Лучший ответ Сообщение было отмечено Jman как решение

Решение

Можно подписаться на события винды по подключению/отключению устройств и обновлять список по ним, а не по таймеру.
2
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
13.06.2017, 14:26  [ТС] 6
Цитата Сообщение от Rius Посмотреть сообщение
Можно подписаться на события винды по подключению/отключению устройств и обновлять список по ним, а не по таймеру.
Можете подробнее рассказать, как можно это сделать? Или где почитать?
0
Эксперт .NET
10557 / 6484 / 1503
Регистрация: 25.05.2015
Сообщений: 19,644
Записей в блоге: 14
13.06.2017, 14:26 7
См.
WM_DEVICECHANGE
DEVICE_ARRIVAL
DEVICE_REMOVECOMPLETE
RegisterDeviceNotification
UnregisterDeviceNotification

На форуме уже достаточно поднималось.
2
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
13.06.2017, 14:43  [ТС] 8
Круто!! Спасибо. Накидал пример. Все работает.
C#
1
2
3
4
5
6
7
8
9
10
11
12
 public static class References
    {
         /// <summary>
        /// System and programm constants
        /// </summary>
        public const int TIMER_INTERVAL = 1000;
        public const int READ_TIMEOUT = 1000;
        public const int WRITE_TIMEOUT = 1000;
        public const int WM_DeviceChange = 0x219; //usb
        public const int DBT_DEVICEARRIVAL = 0x8000; // Device is connected
        public const int DBT_DEVICEREMOVECOMPLETE = 0x8004; //Device is disconnected
    }
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
 public partial class MainForm : Form
    {
 
        public MainForm()
        {
            InitializeComponent();
        }
 
        // Windows Device manager handler
 
        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
 
            if (m.Msg == References.WM_DeviceChange)
            {
                if (m.WParam.ToInt32() == References.DBT_DEVICEARRIVAL)
                {
                    //новое usb подключено
                    MessageBox.Show("New dev connected");
                }
                if (m.WParam.ToInt32() == References.DBT_DEVICEREMOVECOMPLETE)
                {
                    // usb отключено
                    MessageBox.Show("Dev disconnected");
                }
 
            }
 
        }
1
13.06.2017, 14:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2017, 14:43
Помогаю со студенческими работами здесь

Изменение значения ComboBox внутри WebBrowser
Здравствуйте, нужна помощь! Вот я присваиваю TextBox'у в webbrowser1 значение из СomboBox'а...

Изменение значения textbox при выборе определенной строки combobox
Всем привет. Прошу помощи у более знающих, может кто сталкивался. Есть таблица sprvidzaloga в ней...

Ошибка при работе с COM-портом
Здравствуйте! Пульт, собранный на микроконтроллере, периодически посылает по RS485 на компьютер...

Потеря данных при работе с COM портом
Добрый день. У меня сложилась проблема с программированием COM порта. Я пишу программу, которая...


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

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