как сделать командную строку в многострочном TextBox - PullRequest
1 голос
/ 25 октября 2011

Я работаю с некоторыми электронными приборами, использующими GPIB.Я могу общаться с такими инструментами, как это:

K2400.WriteString("*IDN?", true);
textBoxK2400.Text += K2400.ReadString() + Environment.NewLine;

В первой строке будет выполнена команда, а во второй строке я добавлю ответ последней команды в текстовое поле.Как я могу написать команду в текстовом поле напрямую и добавить ответ?

Например, если пользовательская команда вводится после индикатора, например «>>», и нажимает клавишу ВВОД, ответ должен быть добавлен в следующей строкетекстового поля.

Так, как я могу прочитать последнюю строку текстового поля и добавить респон в новой строке?Я ищу метод как:

private void Execute(string command)
{
  K2400.WriteString(command, true);
  textBoxK2400.Text += K2400.ReadString() + Environment.NewLine;
}

Ответы [ 4 ]

5 голосов
/ 25 октября 2011

Используйте два текстовых поля (текстовое поле и список может быть лучше), но сделайте так, чтобы они выглядели как «одно» текстовое поле. При использовании WPF это может выглядеть довольно красиво и, по крайней мере, в форме Windows.

сделал быстрый тест ..

enter image description here

И с этим кодом для события KeyPress для текстового поля:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Return)
        {
            listBox1.Items.Add(textBox1.Text);
            textBox1.Text = String.Empty;
            listBox1.SelectedIndex = listBox1.Items.Count - 1;
        }
    }
1 голос
/ 25 октября 2011

private void Execute (строковая команда) {K2400.WriteString (command, true);textBoxK2400.Text + = K2400.ReadString () + Environment.NewLine;}

вот оно.Я бы просто порекомендовал «буферизовать» часть текста, а не весь, потому что он может быть длинным к концу.Вы можете разбить его на строки раньше и взять несколько строк (то есть 10).

И не забудьте , чтобы сделать поле черным, а текст зеленым, это выглядит гораздо более профессиональнокогда командное поле оформлено таким образом.

1 голос
/ 25 октября 2011

Вы можете попробовать это:

private void textBoxK2400_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Return)
    {
        string command = textBoxK2400.Text.Split('\n').LastOrDefault();
        if (!String.IsNullOrEmpty(command) && command.StartsWith(">>"))
        {
            K2400.WriteString(command.Substring(2), true);
            textBoxK2400.Text += K2400.ReadString() + Environment.NewLine;
            textBoxK2400.Text += ">>"; // It's not necessary
        }
    }
}
0 голосов
/ 25 октября 2011

Ну, во-первых, я бы предложил использовать RichTextBox. Для захвата ENTER вы должны использовать KeyPress Event.

private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            { 
                string LastLine = richTextBox1.Lines[richTextBox1.Lines.Length-2];
                if (LastLine.StartsWith(">>"))
                {
                    //here you can filter the LastLine
                    K2400.WriteString(LastLine, true);
                    richTextBox1.AppendText(K2400.ReadString() + Environment.NewLine);
                }
                else
                {
                    //here you can unwrite the last line
                    string[] totalLines = richTextBox1.Lines;
                    richTextBox1.Text = "";
                    for (int i = 0; i < totalLines.Length - 2; i++)
                    {
                        richTextBox1.AppendText(totalLines[i]+Environment.NewLine);
                    }
                    MessageBox.Show("That was not a valid command");
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...