Đăng vào

Tạo form setting trong C# - Phần 1: Tạo Form

Dự kiến bài hướng dẫn sẽ gồm 3 phần:

  • Phần 1: Thiết kế giao diện bằng Windows Form.
  • Phần 2: Viết code PIC CCS-C.
  • Phần 3: Mô phỏng trên Proteus.(Nhiều người chê proteus nhưng mình làm mô phỏng trên Proteus ổn là đổ vào mạch thật chạy cũng OK) Trong project C# mình sẽ hướng dẫn các bạn cách tạo form setting để cài đặt thông số cho Serial Port trong module giao tiếp RS232 mà mình đã thực hiện trong đồ án nhỏ của mình. Thông số cài đặt của sẽ được lưu lại cho dù bạn có đóng chương trình, khi mở chương trình bạn sẽ không phải mất thời gian cài đặt lại cái thông số cho hệ thống.
Windows form C#
setting form

Vào mục setting của solution tạo các gia trị cài đặt như hình

Code Setting Form

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;

namespace PIC2PC
{
    public partial class SettingForm : Form
    {
        SerialPort SettingPort = new SerialPort(); // Port chua thong so cai dat
        public SettingForm()
        {
            InitializeComponent();
            // Quet cac port com tren may tinh
            string[] Ports = SerialPort.GetPortNames();
            cmbPorts.Items.AddRange(Ports); // Add cac port tim duoc vao combobox
            // Khoi tao Baudrate
            string[] Baudrate = { "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200" };
            cmbBaudrates.Items.AddRange(Baudrate);
            //Khoi tao data bits
            string[] Databits = { "6", "7", "8" };
            cmbDatabits.Items.AddRange(Databits);
            // Khoi tao Parity bit
            string[] Paritybits = { "None", "Odd", "Even" };
            cmbParitybits.Items.AddRange(Paritybits);
            // Khoi tao Stop bit
            string[] Stopbits = { "1", "1.5", "2" };
            cmbStopbits.Items.AddRange(Stopbits);
            string[] HandShake = { "None", "XOnXOff", "RequestToSend", "RequestToSendXOnXOff" };
            cmbHandshake.Items.AddRange(HandShake);
        }
        // Xu ly su kien chon cong COM
        private void cmbPorts_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (SettingPort.IsOpen) SettingPort.Close();
            SettingPort.PortName = cmbPorts.SelectedItem.ToString();
        }
        // Xu ly su kien lua chon baudrate
        private void cmbBaudrates_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (SettingPort.IsOpen) SettingPort.Close();
            SettingPort.BaudRate = Convert.ToInt32(cmbBaudrates.Text); // Chuyen kieu String Sang kieu so nguyen
        }
        // Xu ly su kien lua chon Databits
        private void cmbDatabits_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (SettingPort.IsOpen) SettingPort.Close();
            SettingPort.DataBits = Convert.ToInt32(cmbDatabits.Text);
        }
        // Xu ly su kien chon Paritybits
        private void cmbParitybits_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (SettingPort.IsOpen) SettingPort.Close();
            switch (cmbParitybits.SelectedItem.ToString())
            {
                case "Odd":
                    SettingPort.Parity = Parity.Odd;
                    break;
                case "None":
                    SettingPort.Parity = Parity.None;
                    break;
                case "Even":
                    SettingPort.Parity = Parity.Even;
                    break;
            }
        }
        // Xu ly su kien lua chon stopbit
        private void cmbStopbits_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (SettingPort.IsOpen) SettingPort.Close();
            switch (cmbStopbits.SelectedItem.ToString())
            {
                case "1":
                    SettingPort.StopBits = StopBits.One;
                    break;
                case "1.5":
                    SettingPort.StopBits = StopBits.OnePointFive;
                    break;
                case "2":
                    SettingPort.StopBits = StopBits.Two;
                    break;
            }
        }
        // Xu ly su kien lua chon che do Handshaking
        private void cmbHandshake_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (SettingPort.IsOpen) SettingPort.Close();
            switch (cmbHandshake.SelectedItem.ToString())
            {
                case "None":
                    SettingPort.Handshake = Handshake.None;
                    break;
                case "XOnXOff":
                    SettingPort.Handshake = Handshake.XOnXOff;
                    break;
                case "RequestToSend":
                    SettingPort.Handshake = Handshake.RequestToSend;
                    break;
                case "RequestToSendXOnXOff":
                    SettingPort.Handshake = Handshake.RequestToSendXOnXOff;
                    break;
            }
        }
        // Xu ly su kien khi form vua duoc bat len
        private void SettingForm_Load(object sender, EventArgs e)
        {
            // Load cac cai dat ban dau
            cmbPorts.Text = Properties.Settings.Default.PortName;
            cmbBaudrates.Text = Convert.ToString(Properties.Settings.Default.BaudRate);
            cmbDatabits.Text = Convert.ToString(Properties.Settings.Default.DataBits);
            cmbParitybits.Text = Convert.ToString(Properties.Settings.Default.Parity);
            cmbHandshake.Text = Convert.ToString(Properties.Settings.Default.Handshake);
            // StopBits
            switch (Convert.ToString(Properties.Settings.Default.StopBits))
            {
                case "One":
                    cmbStopbits.Text = "1";
                    break;
                case "OnePointFive":
                    cmbStopbits.Text = "1.5";
                    break;
                case "Two":
                    cmbStopbits.Text = "2";
                    break;
            }
        }
        // Xu ly su kien khi click Button Save
        private void btnSave_Click(object sender, EventArgs e)
        {
            Properties.Settings.Default.PortName = SettingPort.PortName;
            Properties.Settings.Default.BaudRate = SettingPort.BaudRate;
            Properties.Settings.Default.DataBits = SettingPort.DataBits;
            Properties.Settings.Default.StopBits = SettingPort.StopBits;
            Properties.Settings.Default.Parity = SettingPort.Parity;
            Properties.Settings.Default.Handshake = SettingPort.Handshake;
            Properties.Settings.Default.Save(); //Saves settings
            Close();
        }
        // Xu ly su kien khi Click Button Close
        private void btnClose_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
}

Code Main Form

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
// Khai bao thu vien Serial Ports
using System.IO;
using System.IO.Ports;

namespace PIC2PC
{
    public partial class DemoPIC2PC : Form
    {
        // Khoi tao doi tuong SerialPort ComPort
        SerialPort ComPort = new SerialPort();
        SettingForm SetupForm = new SettingForm(); // Form cai dat thong so
        public DemoPIC2PC()
        {
            InitializeComponent();
        }
        // Xu li su kien khi Click vao Button Setting
        private void btnSetting_MouseClick(object sender, MouseEventArgs e)
        {
            // Neu Port dang mo thi phai dong port ;lai thi moi setting duoc
            if (ComPort.IsOpen)
            {
                ComPort.Close();
                lbStatus.Text = "Port is closed !";
            }
            lbStatus.Text = "Port is setting...";// Hien thi trang thai
            SetupForm.ShowDialog();// Open setting Form
            btnConnect.Enabled = true;
            lbStatus.Text = "Port is closed! ";
        }

    }
}

Download