Добавить строку richtextbox

111
18 февраля 2022, 02:20

Стояла задача сформировать некий файл из нескольких путём сложения, вычитания, деления и т.д. Но в конце него я хочу добавить одну строку, не могу понять, как это сделать..

private void btCalc_Click(object sender, EventArgs e)
    {
        TXT.Text = "";
        int b = -1;
        string txt = "";
        for (int i = 0; i < lBLN.Count; i++)
        {
            int a = b + 1;
            b = GetB(a);
            int n = RB1.Checked ? b - a + 1 : 2;
            double xa = lBLN[i].xa;
            double xb = lBLN[i].xb;
            double ya = lBLN[i].ya;
            double yb = lBLN[i].yb;
            double dx = xb - xa;
            double dy = yb - ya;
            double dx1 = lDAT[b].x;
            double dy1 = dy * dx1 / dx;
            double cx = dx1 / (n - 1);
            double cy = dy1 / (n - 1);
            double x,y;
            for (int k = a; k <= b; k++)
            {
                if (RB1.Checked)
                {
                    x = xa + (k - a) * cx;
                    y = ya + (k - a) * cy;
                }
                else
                {
                    dx1 = lDAT[k].x;
                    dy1 = dy * dx1 / dx;
                    x = xa + dx1;
                    y = ya + dy1;
                }
                txt += "" + x + " " + y + " " + lDAT[k].z + "\n";

            }
        }
        TXT.Text = txt.Replace(',', '.');
        btSave.Focus();
    }

Тут формируется то, что мне нужно в richtextbox

 txt += "" + x + " " + y + " " + lDAT[k].z + "\n";

Я хочу добавить всего одну строчку снизу "" + xb + " " + yb + " " + lDAT[b].z + "\n"; Но если я это приписываю к txt+=, то эта строка у меня каждый раз (да и понятно, почему). Как мне её в самый конец затолкать?

PS. Задача, описанная выше - решилась, но возник вопрос. Необходимо удалить сначала одну строку из моего richtextbox, а затем только добавить нужную нам строку.

Richtextbox формируется так: txt += "" + x + " " + y + " " + lDAT[k].z + "\n"; Затем, после выполнения цикла я хочу удалить строку последнюю. пишу код: string lastLine = TXT.Lines.Last(); TXT.Lines = TXT.Lines.Where(x => x != lastLine).ToArray(); , но удаления не происходит, так как когда выполнялся цикл, у нас каретка бежала вниз "\n" и получается пустая строка. Если мы перед этим кодом, также вне цикла, добавим вручную строчку txt += "" + xb + " " + yb + " " + lDAT[b].z, то она не появится, так как код для удаления выполнится. Как избавиться от проблемы с кареткой?

Answer 1

В общем я не стал делать красиво, хотя может следовало бы, просто продублировал объявление переменных перед циклом, оставив и в цикле то же самое.

private void btCalc_Click(object sender, EventArgs e)
    {
        TXT.Text = "";
        int b = -1;
        string txt = "";
        int ii=0;
        double xbb = lBLN[ii].xb;
        double ybb = lBLN[ii].yb;
        for (int i = 0; i < lBLN.Count; i++)
        {
            int a = b + 1;
            b = GetB(a);
            int n = RB1.Checked ? b - a + 1 : 2;
            double xa = lBLN[i].xa;
            double xb = lBLN[i].xb;
            double ya = lBLN[i].ya;
            double yb = lBLN[i].yb;
            double dx = xb - xa;
            double dy = yb - ya;
            double dx1 = lDAT[b].x;
            double dy1 = dy * dx1 / dx;
            double cx = dx1 / (n - 1);
            double cy = dy1 / (n - 1);
            double x,y;
            for (int k = a; k <= b; k++)
            {
                if (RB1.Checked)
                {
                    x = xa + (k - a) * cx;
                    y = ya + (k - a) * cy;
                }
                else
                {
                    dx1 = lDAT[k].x;
                    dy1 = dy * dx1 / dx;
                    x = xa + dx1;
                    y = ya + dy1;
                }
                txt += "" + x + " " + y + " " + lDAT[k].z + "\n";

            }
        }
        txt += "" + xbb + " " + ybb + " " + lDAT[b].z + "\n";
        TXT.Text = txt.Replace(',', '.');
        btSave.Focus();
    }

Ну и дополнение. Проблема с удалением каретки (удаление появившейся пустой строки решается через Trim). В случае моей задачи TXT.Text = txt.Replace(',', '.').Trim('\n');

READ ALSO
Помощь с многопоточностью на C# + GUI

Помощь с многопоточностью на C# + GUI

Я делаю не большую утилиту по скачиванию музыки из ВКИспользую библиотеки VK NET для C#

93
Вопрос по void Update и инкременту переменной

Вопрос по void Update и инкременту переменной

У меня есть переменная public Int Counter=0; и в методе Update есть динамическое условие при котором выполняется условие if (ObjIntersectsWith(Obj1)) я хочу вести...

138
Плавный поворот по вектору Unity

Плавный поворот по вектору Unity

данный код резко поворачивает объект по направлению вектораА как сделать плавный поворот по вектору?

122
Документирование форматов информационного обмена по средствам парсинга xsd. Ищу исходники

Документирование форматов информационного обмена по средствам парсинга xsd. Ищу исходники

Пишу софт, который документирует (описывает) формат обмена данными для SOAP сервисов

98