C# how substring() a string from (the response of reading from serial port) количество строк, отображаемых в текстовом поле
namespace ProjectOne { public partial class MainForm : Form { private void StatusBtn_Click(object sender, EventArgs e) { //command sent to serial port and responds a series of lines string StatusInfoToshow = "?D\r"; string commForMeter = string.Format(StatusInfoToshow); try { if (statusofMeter.serialPortForApp.IsOpen) { bool doesContain = commForMeter.Contains("\r"); if (doesContain) { foreach (char s in commForMeter) { currentDataToShow.serialPortForApp.Write(s.ToString()); } } } } catch (Exception) { statusofMeter.ShowDataInScreenTxtb.Text = "TimeOUT Exception"; } } int LineCounter= 0; public void SerialPortInApp_DataReceived(object sender,SerialDataReceivedEventArgs e) { DataToSetandGet = serialPortForApp.ReadExisting(); if (this.InvokeRequired) { Invoke(new MethodInvoker(delegate { Textbox1.AppendText(LineCounter.ToString()+ DataToSetandGet .Replace("\n", " ") .Replace("\r", "\r\n")); })); } } } }
Что я уже пробовал:
int LineCounter= 0; public void SerialPortInApp_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { DataToSetandGet = serialPortForApp.ReadExisting(); if (this.InvokeRequired) { //I insert the the increment numbering index for each new line displayed in the textbox but index start at 0 not 1, if I set LineCounter=1 it print 1 instead of 0 and the 1 again for next line Invoke(new MethodInvoker(delegate { Textbox_One.AppendText(LineCounter.ToString() + DataToSetandGet .Replace("\n", " ") .Replace("\r", "\r\n")); })); } catch (Exception) { Textbox_One.Text = "TimeOUT error"; } }
моя кнопка отправляет команду на прослушивание в последовательный порт и отправляет ответ.
ответ в последовательном порту будет показывать записи, считанные с датчика, и каждая строка(показания с датчика в устройстве, подключенном к порту) всегда начинается с нулевого символа строки "0" в начале каждой строки.
Я хотел бы удалить() или подстроку (), которая равна нулю "0", когда она отображает каждый из них .
Я не могу использовать подстроку()
Линейный счетчик.ToString()+ DataToSetandGet.Substring(n позиция в строке)
потому что дайте мне ошибку
- startIndex не может быть больше длины строки.:
эта ошибка вызвана тем, что она читается следующим образом:
//0 запись\Р//0 запись\Р//0 запись\Р//0 запись\Р//0 записей
Invoke(new MethodInvoker(delegate {
Textbox1.AppendText(LineCounter.ToString()+ DataToSetandGet
.Заменить("\п", " ")
.Заменить("\р", "\р\н"));
}));
Возврат каретки "\r" происходит потому, что команда
перед использованием LineCounter он отображает
//0 запись
//0 запись
//0 запись
//0 запись
//0 запись
после использования счетчика он отображает:как позиционировать индекс, чтобы начать с 1 вместо 0
//1 0 запись &ЛТ;==если LineCounter=1 а если LineCounter=0 это набор первой строке в ноль
//1 0 запись и следующая строка как одна
//2 0 запись
//3 0 запись
//4 0 запись
корректное отображение должно быть таким: как реализовать Substring() или удалить()
//1 запись
//2 Запись
//3 запись
//4 запись
//5 запись