我正在使用一些代码来替换代码编辑器。
就像我在RichTextbox
中输入关键字(用作代码编辑器)时的场景一样
示例:我在"Ac"
(rtb)中输入RichTextbox
,然后会显示ComboBox
(声明为lb)。
就像上面带字符串的context-hint / intellisense一样:
public string[] Accep = { "AcceptRejectRule" };
public string[] Acces = { "AccessibleEvents" };
然后我使用KeyEvent
args代码,如果我在ComboBox
中选择后按Enter键
lastword将替换为我之前输入的单词,就像我输入的那样
"Ac"
"Ac"
中ComboBox
开头的所有字符串都会显示:
---这适用于在richtextbox中输入的每个单词
if (token == "letterA" || token.StartsWith("Ac") || token.StartsWith("ac") || token.StartsWith("AC"))
{
int length = line.Length - (index - start);
string commentText = rtb.Text.Substring(index, length);
rtb.SelectionStart = index;
rtb.SelectionLength = length;
lb.Visible = true;
KeyWord keywordsHint = new KeyWord();
foreach (string str in keywordsHint.ac)
{
lb.Items.Add(str);
lb.SelectedIndex = lb.FindStringExact(str);
}
}
---这是一个KeyEvent
args
if (e.KeyCode == Keys.Enter)
{
string Slb = lb.SelectedText.ToString();
var trimmed = RemoveFromStart(Slb, new String[] { "Ac", "Accep", "Acces" });
rtb.SelectedText = trimmed;
lb.Hide();
}
然后,当我选择ComboBox
示例时,我输入"Ac"
,因为我想选择AccessibleEvent
当我按下Enter时,在ComboBox
("AcceptRejectRule"
,"AccessibleEvents"
)内
输出将为"AccessibleEvents"
,因为它已被声明"Ac
“将被删除
替换此参数上方和内部的代码:
//Replacing Parameter:
public string RemoveFromStart(string s, IEnumerable<string> strings)
{
foreach (var x in strings.Where(s.StartsWith))
{
return s.Remove(0, x.Length);
}
return s;
}
但是当我输入"Acces"
而不是我选择"AccessibleEvents"
时,输出将是:
"AccescessibleEvents"
代替“AccessibleEvent”,因为“Ac”是最短的
我在RemoveFromStart
方法中使用的字符串。
现在我的问题是如何在代码中创建每个字符串:
var trimmed = RemoveFromStart(Slb, new String[] { "Ac", "Accep", "Acces" });
我可以将"Accep"
删除偶数"Ac
“的唯一标识为最短字符串。
提前多多谢谢你,希望你能帮助我:(。真的非常需要帮助。
答案 0 :(得分:0)
我认为简单地排序降序将起作用,因为最长的字符串将首先匹配:
var trimmed = RemoveFromStart(Slb,
(new String[] { "Ac", "Accep", "Acces" })
.OrderByDescending(s=>s));
附注:在代码中考虑不区分大小写的比较。