0

Code Editor を作成するために使用するいくつかの置換コードを使用しています。

のシナリオのように、RichTextbox(コード エディターとして機能する) サンプルにキーワードを入力すると: (rtb) と入力すると、おそらく"Ac"( lb として宣言された) が表示されます。RichTextboxComboBox

内部に文字列を含む context-hint/intellisense のように:

public string[] Accep = { "AcceptRejectRule" };
public string[] Acces = { "AccessibleEvents" };

次に、KeyEventargs コードを使用します。最後に選択した後に Enter キーを押すComboBox と、前に入力した単語に置き換えられ ます。たとえば、 in で"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引数です

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;
}

しかし、代わりに入力すると、「Ac」がメソッドで使用した最短の文字列だったため、「AccessibleEvent」の代わりに出力 "Acces"を選択します。"AccessibleEvents""AccescessibleEvents"RemoveFromStart

今私の質問は、コード内のすべての文字列を作成する方法でした:

var trimmed = RemoveFromStart(Slb, new String[] { "Ac", "Accep", "Acces" });

" が最短文字列として宣言されていて"Accep"も削除することができるため、ユニークです。"Ac

事前にどうもありがとう、あなたが私を助けてくれることを願っています :(

4

1 に答える 1

0

最長の文字列が最初に一致するため、単純に降順で並べるとうまくいくと思います。

 var trimmed = RemoveFromStart(Slb, 
     (new String[] { "Ac", "Accep", "Acces" })
      .OrderByDescending(s=>s));

補足: コードでは大文字と小文字を区別しない比較を検討してください。

于 2013-04-04T06:00:05.887 に答える