Как получить выбранные элементы комбинированного списка и текст на кнопке при повторном открытии формы в C # - PullRequest
0 голосов
/ 14 мая 2018

Я создал проект в приложении формы C # windows в Visual Studio 2010 и .net Framework версии 4.0.

В моем проекте главная форма содержит другую форму с именем Communication.Форма связи имеет пять комбинированных полей для настроек COM-порта и кнопку подключения.Когда я выбираю элементы из выпадающего списка в поле со списком и нажимаю кнопку подключения, текст на кнопке показывает отключение.Тогда я закрою форму связи. Компорт подключается.

Моя главная проблема заключается в том, что, когда я снова открываю форму для отключения связи.Я хочу, чтобы в поле со списком были те же элементы, а текст на кнопке показывает «Отключение», как и раньше.

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

Код для формы связи

 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)
    {
        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 == ""))
        {
            MessageBox.Show("Please select all communication settings and then Save", "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";

            }

        }
    }

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

И Код для основной формы, где эта форма связи открыта

 private void connectToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Connect connect = new Connect();
        connect.ShowDialog();
        if (connect.Connect_Status == true)
        {
            lb_Comm.Text = String.Format("Connected to '{0}'", connect.cb_CommPort.SelectedItem);
        }
        else
        {
            CommPortManager.Instance.COM_Close();
            lb_Comm.Text = "Not Connected";
        }
  }

1 Ответ

0 голосов
/ 14 мая 2018

Вы должны создать класс Serializable, в котором вы будете сохранять индексы комбинированных списков.

[Serializable]
class SaveComboSettings
{
    [OptionalField]
    public int cmb1SelectedIndex = 0;

    [OptionalField]
    public int cmb2SelectedIndex = 0;
}

Во время закрытия формы Вам необходимо сериализовать индекс комбинированных блоков в объекте этого класса. Нравится -

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    //Assigning the current selected index of combobox to serialize class.
    SaveComboSettings f1 = new SaveComboSettings();
    f1.cmb1SelectedIndex = this.comboBox1.SelectedIndex;
    f1.cmb2SelectedIndex = this.comboBox2.SelectedIndex;

    //Serialize
    BinaryFormatter bf = new BinaryFormatter();
    FileStream fsout = new FileStream("ComboBoxSettings.binary", FileMode.Create, FileAccess.Write, FileShare.None);
    try
    {
        using (fsout)
        {
            bf.Serialize(fsout, f1);                   
        }
    }
    catch (Exception Ex)
    {
        //Some Exception occured
    }  
}

Когда форма загружается обратно / перезапускается, Вам необходимо десериализовать настройки и вернуть значения поля со списком обратно -

public Form1()
{
    InitializeComponent();

    DeserializeFormSettings();

}

public void DeserializeFormSettings()
{          
    BinaryFormatter bf = new BinaryFormatter();
     FileStream fsin;

    if(File.Exists("ComboBoxSettings.binary"))
        fsin = new FileStream("ComboBoxSettings.binary", FileMode.Open, FileAccess.Read, FileShare.None);
    else
        return;
    try
    {
        using (fsin)
        {
            SaveComboSettings f1 = (SaveComboSettings)bf.Deserialize(fsin);
            this.comboBox1.SelectedIndex = f1.cmb1SelectedIndex;
            this.comboBox2.SelectedIndex = f1.cmb2SelectedIndex;
        }
    }
    catch(Exception Ex)
    {
        // "An error has occured";  
    }
}

Этот пример создан только со списком. Вы также можете использовать тот же способ для строки на кнопке.

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