Как сделать так, чтобы текстовые поля начинались с арабского символа (наполовину друг от друга), как это происходит с прописными и маленькими символами на языке по умолчанию? - PullRequest
2 голосов
/ 16 мая 2011

В свойствах автозаполнения текстового поля, когда я вводил символ, такой как «m», он удалял все строки, начинающиеся с «m» или «M», но когда я писал символ «أ» (это арабский символ), он отбрасывал только начало строки с помощью «أ» я хочу, чтобы при вводе «أ», «ا», «'» или «آ» отбрасывались все строки, начинающиеся с любого символа из тех, которые не являются только набранными символами, в приложении Windows C #, которое я не использую ASP.net Какие-либо предложения????

1 Ответ

0 голосов
/ 16 мая 2011

Я очень удивлен, увидев, что ни элемент управления текстовым полем, ни коллекция автозаполненных строк не могут указать, что определяет равенство строк для механизма автозаполнения.Единственный способ получить желаемое поведение - это создать свой собственный механизм автозаполнения.

В прошлом я делал это несколько раз, до того как функциональность была предоставлена ​​фреймворком,и это не сложно.

Просто используйте редактируемый ComboBox вместо TextBox и обработайте событие TextChanged для создания автозаполнения.

Вот некоторый неопробованный псевдокод процедуры:

bool textChangedProgramatically = false;
List<string> myStrings; // The list of items that can appear in the auto-complete.

private static myComboBox_TextChanged(object sender, EventArgs args)
{
    if (textChangedProgramatically)
        return;

    string searchText = myComboBox.Text;

    // Use appropriate culturally-sensative string StartsWith comparisons
    List<string> matchingItems = GetMatchingStrings(searchText, myStrings);

    string firstMatch;
    if (matchingItems.Length > 0)
        firstMatch = matchingItems[0];
    else
        firstMatch = string.Empty;

    myComboBox.Items.Clear;
    myComboBox.Items.AddRange(matchingItems);

    string fulltext = searchText;
    if (firstMatch.Length > fullText.Length)
    {
        fullText = fullText + firstMatch.Substring(fullText.Length);
        textChangeProgramatically = true;
        myComboBox.Text = fullText;
        myComboBox.SelectionStart = searchText.Length;
        myComboBox.SelectionLength = fullText.Length - searchText.Length;
        textChangeProgramatically = false;
    }
}

Хитрость заключается в том, чтобы получить правильное поведение соответствия в GetMatchingStrings.Возможно, вы захотите использовать нормализацию совместимости строк для перевода арабских символов в непрезентационные формы перед выполнением сравнения, но я ожидаю, что правильная перегрузка SubString может обработать все эти случаи для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...