Hi I am new to C# and I having problems with my first windows form application.
I have data coming in from serial port and have worked out a way of processing and storing the data into 3 different string arrays. What I cant work out is how to display the data in the arrays into their own individual text boxes, I would only want to display the data in the array pointed to by the current index position.
I have 3 text boxes in my windows forms design already they are named:textBoxmag
, textBoxlat
and textBoxlon
I would like to display the variables string[] mag
, string[] lat
and string[] lon
in their corresponding text boxes.
Please help me guys I properly stuck with this even though it may seem simple to you more experienced C# programmers. Below is my code:
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;namespace WindowsFormsApplication1{ public partial class Form1 : Form { string RxString;// where the raw serial data is stored string[] mag = new string[1000];//where magnetic data is stored string[] lat = new string[1000];//where latidude data is stored string[] lon = new string[1000];///where longitude data is stored string ends = "\r\n";//end of data sentence identifier string starts = "G";//start of data sentence identifier int i; //index lat data int j;//index lon data int k;//index mag data public Form1() { InitializeComponent(); } private void buttonStart_Click(object sender, EventArgs e) { serialPort1.PortName = "COM5";//define sierial port in which PIC is connected to serialPort1.BaudRate = 4800;//set baud rate to match PIC serialPort1.Open(); if (serialPort1.IsOpen)//if the port is open you can press the start button { buttonStart.Enabled = false;//start button disbaled buttonStop.Enabled = true;//stop button enabled textBox1.ReadOnly = false;//allow writing in text box } } private void buttondtop_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) { serialPort1.Close(); buttonStart.Enabled = true; buttonStop.Enabled = false; textBox1.ReadOnly = true; } } private void DisplayText(object sender, EventArgs e) { textBox1.AppendText(RxString);//add watever is in raw data string to what is already in text box } private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)//activates when port is open and data in buffer { RxString = serialPort1.ReadExisting();//read raw data from serial port into string this.Invoke(new EventHandler(DisplayText));//invoke allows it to call function diplay text if (RxString.StartsWith(starts))//if the string starts with "G" { if ((RxString.Length > 36))//if there is aleast one string sentence { if (RxString.EndsWith(ends))// if the string ends with "\r\n" process the string serialPort1.Close();//close serial port lat[i] = RxString.Split(',')[0].Substring(4);// extract latitude store in string array i++;//increment index of latitude data array lon[j] = RxString.Split(',')[2];// extract longitude store in string array j++;//increment index of longitude data array mag[k] = RxString.Split(',')[3].Substring(7).Trim();// extract magnetic data store in string array k++;//increment index of magnteric data array RxString = null;//Reset raw data string serialPort1.Open();//open serial port ready for new string sentence } } else RxString = null;// if the raw data string sentence does not start with "G" reset the array } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (serialPort1.IsOpen) serialPort1.Close(); } private void labellat_Click(object sender, EventArgs e) { } private void label3_Click(object sender, EventArgs e) { } }}