【问题标题】:How to Auto-Complete a tag with ICsharpCode.TextEditor component?如何使用 ICsharpCode.TextEditor 组件自动完成标签?
【发布时间】:2020-02-25 05:52:35
【问题描述】:

我已将 ICSharpCode.TextEditor.dll 组件添加到我的 C# 项目中的 Visual Studio 2017 参考中。接下来,我想找到一种自动完成标签的方法。我在下面提供了一个 GIF 图片来说明我的意思。

我提供了一个代码,我尝试使用组件本身进行调试,但它不起作用。

if (textEditorControl1.Text.Contains("<html>"))
        {
            textEditorControl1.ActiveTextAreaControl.SelectionManager.SelectedText("</html>");                
        }

ICsharpCode.TextEditor 组件与普通 Textbox 的属性不同。

if (textBox2.Text.Contains("<html>"))
        {
            textBox2.SelectedText = "</html>";
        }

如果我尝试调试 TextBox 版本,我会无数次得到标签,直到得到未处理的 System.StackOverflowException。

【问题讨论】:

    标签: c# .net textbox text-editor icsharpcode


    【解决方案1】:

    我找到了您正在寻找的内容here。唯一的问题是,这是普通 TextBox 的工作代码。

    【讨论】:

      【解决方案2】:
      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;
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2010-10-24
        • 2013-11-11
        • 1970-01-01
        • 1970-01-01
        • 2012-01-14
        • 2015-03-27
        • 2020-03-27
        • 2013-10-19
        • 2011-07-30
        相关资源
        最近更新 更多