Очень простой редактор

Привет всем.Хочу написать простой XML редактор и вот натолкнулась на проблему, помогите пожалуйста решить ее. Так вот, когда пользователь вводит "<" символ, открывается контекстное меню, и пользователь выбирает нужный тег. Когда же он вводит ">" символ, автоматически тег должен закрываться. У меня проблема при вводе ">" символа. Почему то символ появляется в начале текста, получается вот так - "><А" вместо "<А>" .
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 SimpleXMLEditor
{
    public partial class Form1 : Form
    {
        string entered;
        public Form1()
        {
            InitializeComponent();
        }
 
 
        private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            Point point = this.richTextBox1.GetPositionFromCharIndex(richTextBox1.SelectionStart);
            point.Y += (int)Math.Ceiling(this.richTextBox1.Font.GetHeight()) + 22 + this.Location.Y + menuStrip1.Size.Height;
            point.X += 22 + this.Location.X;
 
            if (e.KeyChar == '<')
            {
                contextMenuStrip1.Show(point);
            }
            if (e.KeyChar == '>')
            {
                richTextBox1.Text += "<" + entered + "/>";
            }
        }
 
        private void aToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Text += aToolStripMenuItem.Text;
            entered = aToolStripMenuItem.Text;
        }
 
        private void bToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Text += bToolStripMenuItem.Text;
            entered = bToolStripMenuItem.Text;
        }
 
        private void cToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Text += cToolStripMenuItem.Text;
            entered = cToolStripMenuItem.Text;
        }
    }
}
6 ответов

Anna502, замени строку
richTextBox1.Text += "<" + entered + "/>";
на
richTextBox1.AppendText("><" + entered + "/");
                richTextBox1.ScrollToCaret();


Anna502, замени строку
richTextBox1.Text += "<" + entered + "/>";
на
richTextBox1.AppendText("><" + entered + "/");
                richTextBox1.ScrollToCaret();
Спасибо. Но вот теперь такая проблема Если хочу, например в теге <А> добавить тег B, то вот что получается - <B>. Очень не нравится, когда ввожу имя тега, каретка почему-то появляется в начале строки, как сделать, чтоб оставался там где была?


Дак вcтавляйте не в конец текстбокса, а относительно курсора (richTextBox1.SelectionStart)


Anna502, самый примитивный способ - это расщепление текста на две части - до и после вставки, а затем их объединяете с третьей частью - самим тегом и его текстом. И все эти действия. я так думаю, надо производить в обработчики отпускания клавиши.


Вот пример из моей программы. Правда, это HTML-редактор
private void toolPanel_Click(object sender, EventArgs e)
        {
            string st = "";
            if (sender == boldButton)
                st = "b";
            else if (sender == italicButton)
                st = "i";
            else if (sender == underlineButton)
                st = "u";
            else if (sender == strikeButton)
                st = "s";
            else if (sender == subButton)
                st = "sub";
            else if (sender == supButton)
                st = "sup";
            Clipboard.SetText("<" + st + ">" + richTextBox1.SelectedText + "</" + st + ">");
            if (richTextBox1.SelectionLength == 0)
            {
                richTextBox1.Paste();
                richTextBox1.SelectionStart -= st.Length + 3;
            }
            else
                richTextBox1.Paste();
            Clipboard.Clear();
            LightText();
        }


Ребята, всем огромное спасибо, вы мне очень помогли. Кажется получилось!!