3

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)
        {

        }
    }
}

3 Answers 3

11

You will need to convert your string[]s into strings. You can do this easily with the string.Join() method:

string separator = ", ";
string[] mag = new string[] { "hello", "world" };

textBoxmag.Text = string.Join(separator, mag);
// textBoxmag.Text == "hello, world";
Sign up to request clarification or add additional context in comments.

Comments

4

This will show the string arrays as commas separated values:

string strLat = String.Join(", ", lat);
string strLon = String.Join(", ", lon);

textBoxlat.Text = strLat;
textBoxlon.Text = strLon;

Comments

2

I don't know if it's the best way, but here is a method on how it can be achieved.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.