Порт последовательной связи будет закрыт после нажатия на кнопку Закрыть в C # - PullRequest
0 голосов
/ 05 июня 2018

Я работаю над проектом в приложении формы C # windows.

В этом проекте главная форма содержит подчиненную форму для связи через последовательный порт.Подформа «Connect» имеет две кнопки Connect и Close.Также 5 комбинированных списков для выбора скорости передачи, имени Com, четности, стоп-битов и бит данных.

Когда я нажимаю кнопку «Подключить» после выбора всех настроек в выпадающих списках.порт подключается, и кнопка подключения становится отключена.И я закрою форму Connect

. Теперь моя проблема в том, что при повторном открытии формы, не нажимая кнопку «Отключить» при закрытии формы, Comport отключается.Я не хочу, чтобы ComPort закрывался.

Пожалуйста, помогите мне решить эту ошибку.Я не знаю, где я ошибся.Заранее спасибо.

Код подключения Connect

 public partial class Connect : Form
{
    public bool Connect_Status = false;

    public Connect()
    {
        InitializeComponent();
        COM_List();

    }

   private void COM_List()
    {
        for (int i = 0; i < CommPortManager.Instance.GetCommList().Count; i++)
        {
            cb_CommPort.Items.Add(CommPortManager.Instance.GetCommList()[i]);
        }
    }


   private void btn_Connect_Click(object sender, EventArgs e)
   {
       if (btn_Connect.Text == "Connect")
       {
           CommPortManager.Instance.PortName = cb_CommPort.Text;
           CommPortManager.Instance.BaudRate = cb_BaudRate.Text;
           CommPortManager.Instance.Parity = cb_Parity.Text;
           CommPortManager.Instance.StopBits = cb_StopBits.Text;
           CommPortManager.Instance.DataBits = cb_DataBits.Text;

           if ((cb_CommPort.Text == "") || (cb_BaudRate.Text == "") || (cb_Parity.Text == "") || (cb_DataBits.Text == "") || (cb_StopBits.Text == ""))
           {
               if (cb_CommPort.Text == "")
               {
                   MessageBox.Show("Please select COM Port and then Connect", "TestCertificate", MessageBoxButtons.OK, MessageBoxIcon.Information);
               }
               else if (cb_BaudRate.Text == "")
               {
                   MessageBox.Show("Please select BaudRate and then Connect", "TestCertificate", MessageBoxButtons.OK, MessageBoxIcon.Information);
               }
               else if (cb_Parity.Text == "")
               {
                   MessageBox.Show("Please select Parity and then Connect", "TestCertificate", MessageBoxButtons.OK, MessageBoxIcon.Information);
               }
               else if (cb_DataBits.Text == "")
               {
                   MessageBox.Show("Please select DataBits and then Connect", "TestCertificate", MessageBoxButtons.OK, MessageBoxIcon.Information);
               }
               else if(cb_StopBits.Text == "")
               {
                   MessageBox.Show("Please select StopBits and then Connect", "TestCertificate", MessageBoxButtons.OK, MessageBoxIcon.Information);
               }

               Connect_Status = false;
           }
           else
           {
               if (CommPortManager.Instance.COM_Open() == false)
               {
                   MessageBox.Show("Could not open the COM port. Most likely it is already in use, has been removed, or is unavailable.", "TestCertificate", MessageBoxButtons.OK, MessageBoxIcon.Information);
                   Connect_Status = false;
               }
               else
               {
                   //CommPortManager.Instance.COM_Close();
                   Connect_Status = true;
                   btn_Connect.Text = "Disconnect";
                   cb_CommPort.Enabled = false;
                   cb_BaudRate.Enabled = false;
                   cb_DataBits.Enabled = false;
                   cb_Parity.Enabled = false;
                   cb_StopBits.Enabled = false;
                   btn_Connect.BackColor = System.Drawing.Color.Salmon;
               }

           }
       }
       else
       {
           CommPortManager.Instance.COM_Close();
           btn_Connect.Text = "Connect";
           Connect_Status = false;
           cb_CommPort.Enabled = true;
           cb_BaudRate.Enabled = true;
           cb_DataBits.Enabled = true;
           cb_Parity.Enabled = true;
           cb_StopBits.Enabled = true;
           btn_Connect.BackColor = System.Drawing.Color.DarkTurquoise;
       }
   }

   private void btn_Close_Click(object sender, EventArgs e)
   {
       this.Close();
   }

 private void Connect_Load(object sender, EventArgs e)
 {
      //code here to setup the value;
     cb_CommPort.Text = CommPortManager.Instance.PortName;
     cb_BaudRate.Text = CommPortManager.Instance.BaudRate;
     cb_Parity.Text = CommPortManager.Instance.Parity;
     cb_StopBits.Text = CommPortManager.Instance.StopBits;
     cb_DataBits.Text = CommPortManager.Instance.DataBits;

     if (CommPortManager.Instance.IsOpen == true)
     {
         btn_Connect.Text = "Disconnect";
         btn_Connect.BackColor = System.Drawing.Color.Salmon;
         cb_CommPort.Enabled = false;
         cb_BaudRate.Enabled = false;
         cb_DataBits.Enabled = false;
         cb_Parity.Enabled = false;
         cb_StopBits.Enabled = false;
     }
     else
     {
         btn_Connect.Text = "Connect";
         Connect_Status = false;
         cb_CommPort.Enabled = true;
         cb_BaudRate.Enabled = true;
         cb_DataBits.Enabled = true;
         cb_Parity.Enabled = true;
         cb_StopBits.Enabled = true;
         btn_Connect.BackColor = System.Drawing.Color.DarkTurquoise;

     }
 }


}

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Я подозреваю, что событие загрузки формы.вам нужно установить статус соединения true при его открытии

    private void Connect_Load(object sender, EventArgs e)
    {
        //code here to setup the value;
        cb_CommPort.Text = CommPortManager.Instance.PortName;
        cb_BaudRate.Text = CommPortManager.Instance.BaudRate;
        cb_Parity.Text = CommPortManager.Instance.Parity;
        cb_StopBits.Text = CommPortManager.Instance.StopBits;
        cb_DataBits.Text = CommPortManager.Instance.DataBits;

        if (CommPortManager.Instance.IsOpen == true)
        {
            Connect_Status = true;
            btn_Connect.Text = "Disconnect";
            btn_Connect.BackColor = System.Drawing.Color.Salmon;
            cb_CommPort.Enabled = false;
            cb_BaudRate.Enabled = false;
            cb_DataBits.Enabled = false;
            cb_Parity.Enabled = false;
            cb_StopBits.Enabled = false;
        }
        else
        {
            btn_Connect.Text = "Connect";
            Connect_Status = false;
            cb_CommPort.Enabled = true;
            cb_BaudRate.Enabled = true;
            cb_DataBits.Enabled = true;
            cb_Parity.Enabled = true;
            cb_StopBits.Enabled = true;
            btn_Connect.BackColor = System.Drawing.Color.DarkTurquoise;

        }
    }
0 голосов
/ 05 июня 2018

Похоже, что если вы нажмете Connect, то изменит btn_Connect.Text на Disconnect (если порт открыт), теперь текст кнопки «Отключить» и if (btn_Connect.Text == "Connect") теперь false и else называется, что делает CommPortManager.Instance.COM_Close();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...