C# 在C语言中自动完成HTML标记#

C# 在C语言中自动完成HTML标记#,c#,html,.net,winforms,C#,Html,.net,Winforms,我一直在尝试在Winforms Richtextbox中实现自动HTML标记功能。我是C#的初学者,我需要一份参考书,所以我遇到了。使用此给定代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using Syst

我一直在尝试在Winforms Richtextbox中实现自动HTML标记功能。我是C#的初学者,我需要一份参考书,所以我遇到了。使用此给定代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace AutoCompleteHTMLTags_CSharp
    {
        public partial class Simple_Form : Form
        {
            public Simple_Form()
            {
                InitializeComponent();
            }

            public static String EnteredString = "";
            public static Boolean Is_LessThanKeyPressed = false;
            public static Boolean Is_GreaterThanKeyPressed = false;
            public static Boolean Is_AutoCompleteCharacterPressed = false;
            public Boolean Is_SpaceBarKeyPressed = false;
            public Boolean Is_TagClosedKeyPressed = false;

            public String[] tagslist ={
            "html",
            "head",
            "title",
            "body",
            "h1",
            "h2",
            "h3",
            "h4",
            "h5",
            "h6",
            "b",
            "u",
            "i",
            "sub",
            "sup",
            "center",
            "strike",
            "font",
            "p",
            "style",
            "pre",
            "marquee",
            "ul",
            "ol",
            "a",
            "img",
            "table",
            "tr",
            "th",
            "td",
            "frameset",
            "iframe",
            "form",
            "input",
            "button",
            "textarea",
            "select",
            "div",
            "fieldset",
            "span",
            "strong",
            "em",
            "big",
            "small"
            };


            public void ProcessAutoCompleteBrackets(String s)
            {
                int sel = richTextBox1.SelectionStart;
                switch (s)
                {
                    case "(":
                        richTextBox1.Text = richTextBox1.Text.Insert(sel, ")");
                        richTextBox1.SelectionStart = sel;
                        Is_AutoCompleteCharacterPressed = true;
                        break;

                    case "[":
                        richTextBox1.Text = richTextBox1.Text.Insert(sel, "]");
                        richTextBox1.SelectionStart = sel;
                        Is_AutoCompleteCharacterPressed = true;
                        break;

                    case "\"":
                        Is_AutoCompleteCharacterPressed = true;
                        richTextBox1.Text = richTextBox1.Text.Insert(sel, "\"");
                        richTextBox1.SelectionStart = sel;
                        break;

                    case "'":
                        richTextBox1.Text = richTextBox1.Text.Insert(sel, "'");
                        richTextBox1.SelectionStart = sel;
                        Is_AutoCompleteCharacterPressed = true;
                        break;
                }
            }



            private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                String ch = e.KeyChar.ToString();


                this.ProcessAutoCompleteBrackets(ch);

                if (ch == "<")
                {
                    Is_LessThanKeyPressed = true;
                    Is_SpaceBarKeyPressed = false;
                    EnteredString = "";
                }
                else if (ch == ">")
                {
                    if (!Is_TagClosedKeyPressed)
                    {
                        Is_GreaterThanKeyPressed = true;
                        Is_SpaceBarKeyPressed = false;

                        int oldsel = richTextBox1.SelectionStart;

                        for (int i = 0; i < tagslist.Length; i++)
                        {
                            if (EnteredString == tagslist[i])
                            {
                                richTextBox1.Text = richTextBox1.Text.Insert(oldsel, "</" + tagslist[i] + ">");
                                richTextBox1.SelectionStart = richTextBox1.SelectionStart + oldsel;
                                EnteredString = "";
                            }
                        }

                        Is_LessThanKeyPressed = false;
                    }
                    else
                    {
                        Is_TagClosedKeyPressed = false;
                    }
                }

                else
                {
                    if (Is_LessThanKeyPressed)
                    {
                        for (char a = 'a'; a <= 'z'; a++)
                        {
                            if (a.ToString() == ch)
                            {
                                EnteredString += ch;
                            }
                            else if (a.ToString().ToUpper() == ch)
                            {
                                EnteredString += ch;
                            }
                        }
                        for (int a = 0; a <= 9; a++)
                        {
                            if (a.ToString() == ch)
                            {
                                EnteredString += ch;
                            }
                        }
                    }
                }


                // if user itself closes the tag
                if (Is_LessThanKeyPressed)
                {
                    if (ch == "/")
                    {
                        Is_TagClosedKeyPressed = true;
                        Is_SpaceBarKeyPressed = true;
                        EnteredString = "";
                    }
                }
            }

            private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
            {
                switch (e.KeyCode)
                {
                    case Keys.Space:
                        Is_SpaceBarKeyPressed = true;

                        if (Is_GreaterThanKeyPressed)
                        {
                            Is_GreaterThanKeyPressed = false;
                        }
                        Is_LessThanKeyPressed = false;

                        for (int i = 0; i < tagslist.Length; i++)
                        {
                            if(EnteredString==tagslist[i])
                            {
                                EnteredString = tagslist[i];
                            }
                        }
                        break;

                    case Keys.Up:
                        if (Is_AutoCompleteCharacterPressed == false)
                        {
                            EnteredString = "";
                            Is_AutoCompleteCharacterPressed = false;
                        }
                        Is_SpaceBarKeyPressed = false;
                        break;

                    case Keys.Down:
                        if (Is_AutoCompleteCharacterPressed == false)
                        {
                            EnteredString = "";
                            Is_AutoCompleteCharacterPressed = false;
                        }
                        Is_SpaceBarKeyPressed = false;
                        break;

                    case Keys.Left:
                        if (Is_AutoCompleteCharacterPressed == false)
                        {
                            EnteredString = "";
                            Is_AutoCompleteCharacterPressed = false;
                        }
                        Is_SpaceBarKeyPressed = false;
                        break;

                    case Keys.Right:
                        if (Is_AutoCompleteCharacterPressed == false)
                        {
                            EnteredString = "";
                            Is_AutoCompleteCharacterPressed = false;
                        }
                        Is_SpaceBarKeyPressed = false;
                        break;

                    case Keys.Enter: EnteredString = "";
                        Is_SpaceBarKeyPressed = false;
                        break;

                    case Keys.Back:
                        int sel = richTextBox1.SelectionStart;
                        Point pt = richTextBox1.GetPositionFromCharIndex(sel);
                        char ch = richTextBox1.GetCharFromPosition(pt);
                        if (EnteredString.Length > 0)
                        {
                            if (ch != '>')
                            {
                                EnteredString = EnteredString.Remove(EnteredString.Length - 1);
                                Is_LessThanKeyPressed = true;
                            }
                        }
                        if (ch == '<')
                        {
                            EnteredString = "";
                        }
                        break;
                }
            }
        }
    }
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用系统文本;
使用System.Windows.Forms;
名称空间自动完成HTMLTAGS\u CSharp
{
公共部分类简单形式:形式
{
公共简易表格()
{
初始化组件();
}
公共静态字符串EnteredString=“”;
公共静态布尔值为_LessThanKeyPressed=false;
公共静态布尔值为_greaterThankeySpressed=false;
公共静态布尔值为_AutoCompleteCharacterPressed=false;
公共布尔值为_SpaceBarKeyPressed=false;
公共布尔值为_TagClosedKeyPressed=false;
公共字符串[]标记列表={
“html”,
“头”,
“头衔”,
“身体”,
“h1”,
“h2”,
“h3”,
“h4”,
“h5”,
“h6”,
“b”,
“u”,
“我”,
“子”,
“sup”,
“中心”,
“罢工”,
“字体”,
“p”,
“风格”,
“前”,
“字幕”,
“ul”,
“ol”,
“a”,
“img”,
“表”,
“tr”,
“th”,
“td”,
“框架集”,
“iframe”,
“表格”,
“输入”,
“按钮”,
“文本区域”,
“选择”,
“div”,
“字段集”,
“跨度”,
“强大”,
“嗯”,
“大”,
“小”
};
public void ProcessAutoCompleteBrackets(字符串s)
{
int sel=richTextBox1.SelectionStart;
开关
{
格“(”):
richTextBox1.Text=richTextBox1.Text.Insert(sel,“)”;
richTextBox1.SelectionStart=sel;
是_AutoCompleteCharacterPressed=true;
打破
格“[”:
richTextBox1.Text=richTextBox1.Text.Insert(sel,“]”);
richTextBox1.SelectionStart=sel;
是_AutoCompleteCharacterPressed=true;
打破
大小写“\”:
是_AutoCompleteCharacterPressed=true;
richTextBox1.Text=richTextBox1.Text.Insert(sel,“\”);
richTextBox1.SelectionStart=sel;
打破
案例“'”:
richTextBox1.Text=richTextBox1.Text.Insert(sel,“”);
richTextBox1.SelectionStart=sel;
是_AutoCompleteCharacterPressed=true;
打破
}
}
private void richTextBox1_按键(对象发送器,按键事件参数e)
{
字符串ch=e.KeyChar.ToString();
这是一个自动完成的过程(ch);
如果(ch==“”)
{
如果(!被按下)
{
Is_greaterThankeySpressed=true;
Is_SpaceBarKeyPressed=假;
int oldsel=richTextBox1.SelectionStart;
for(int i=0;i对于(char a='a';a如果您想处理诸如滚动位置之类的低级别消息,则必须降低到Win32消息级别,RTB不会给您任何开箱即用的细粒度控制


具体来说,您需要查看和,它返回并设置字符的点结构,分别显示在左上角(即滚动位置)。存储当前滚动位置,编辑字符串,并将滚动位置设置回以前存储的位置。

ScrollToCaret()中
方法,RichTextBox将控件的内容滚动到当前插入符号位置。

无任何(相关)源代码,我们所能做的就是猜测。我的猜测是你在文本末尾追加标记对,而不是在光标位置插入。@rickvdbosch不完全正确。我完全按照你说的做,在光标位置插入文本。请参阅我的编辑,添加的代码。这篇文章需要悬赏。@RJay为什么?“我下载了一些代码,但它的行为很奇怪”通常不是一个好问题。此外,虽然这是一个有趣的练习,但确实不应该使用此代码。另外,请参见示例:您尝试过什么吗?