Husain Sabir Ответов: 5

Заглавная буква каждого слова в текстовом поле


Привет,
Я пытаюсь изменить текст в текстовом поле таким образом,чтобы, если я введу "Хусейн Сабир", он должен стать "Хусейн Сабир".
Это код, который я пробовал :
public static string CapitalizeFirstLetters(string sValue)
        {
            char[] array = sValue.ToCharArray();
            // handle the first letter in the string
            if (array.Length >= 1)
            {
                if (char.IsLower(array[0]))
                {
                    array[0] = char.ToUpper(array[0]);
                }
            }

            // scan through the letters, checking for spaces
            for (int i = 1; i < array.Length; i++)
            {
                if (array[i - 1] == ' ')
                {
                    if (char.IsLower(array[i]))
                    {
                        array[i] = char.ToUpper(array[i]);
                    }
                }
            }

            return new string(array);
        }


Но это не работает.Может кто-то пожалуйста, помогите мне?

5 Ответов

Рейтинг:
42

Abhinav S

Попробуй http://www.dotnetperls.com/uppercase-first-letter[^].

Если вы хотите использовать методы расширения, попробуйте http://www.codemeit.com/code-collection/c-to-upper-case-first-letter-of-a-string.html[^].


Husain Sabir

Я использую тот же код.Но это не работает.

Рейтинг:
36

Jibesh

именно этот код создает для вас проблемы.

Вы проверяете вот так, если (array[i - 1] == ' ')

и присвоение такого массива[i]

for (int i = 1; i < array.Length; i++)
{
  if (array[i] == ' ')
  {
    if (char.IsLower(array[i+1]))
     {
        array[i+1] = char.ToUpper(array[i+1]); // space is identified at Index i so next i+1 has to converted to Upper!!
      }
    }
}


Husain Sabir

это потому, что я инициализирован до 1.

Jibesh

Хорошо, извините, я понял, что вы не должны использовать i-1, Просто проверьте i и установите toArray i+1, потому что символ, за которым следует пробел, должен быть преобразован в верхний. Проверьте мое обновленное решение,

Husain Sabir

все еще не работает.
вот что я ввожу: "Хусейн Сабир".
вот что я получаю: "Хусейн Сабир".

Jibesh

вы уверены, что ваш код выглядит так
массив[i+1] = char.ToUpper(array[i+1]);

Husain Sabir

да, это именно так.

Jibesh

Это должно сработать наверняка! можете ли вы разместить свои изменения здесь, чтобы перепроверить то, что вы сделали.

Husain Sabir

может быть, у меня возникли проблемы с вызовом функции.
это правильный путь:
частная txtName_Leave недействительным(объект отправителя, EventArgs в электронной)
{
CapitalizeFirstLetters(txtManufacturerName.Text);
}

Jibesh

частная txtName_Leave недействительным(объект отправителя, EventArgs в электронной)
{
txtManufacturerName.Text = CapitalizeFirstLetters(txtManufacturerName.Text);
}

Husain Sabir

да, я это уже понял.
спасибо за потраченное время и усилия.

Рейтинг:
22

__TR__

Вот примерный подход

string Sampleinput = "husain sabir";
       string Output = "";
       string[] inputWords = Sampleinput.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

       foreach (string word in inputWords)
       {
           char[] a = word.ToCharArray();
           a[0] = char.ToUpper(a[0]);
           Output += new string(a) + " ";
       }
       Console.WriteLine(Output);


Husain Sabir

этот работает, но ничего не показывает.
я имею в виду,когда я ставлю точку останова и вижу, что outpu приходит как "Хусейн Сабир", но текстовое поле все равно показывает его как "Хусейн Сабир".
я вызываю функцию в событии leave моего текстового поля следующим образом:
частная txtName_Leave недействительным(объект отправителя, EventArgs в электронной)
{
Капитал(txtManufacturerName.Текст);
}

где "Capital" - это имя функции, в которой написан ваш код.

__TR__

Что делает метод капитала? Присваивает ли он выходные данные текстовому полю или просто возвращает строку ?

Husain Sabir

есть решение.
и ваше решение тоже работает.
Спасибо!

__TR__

Добро пожаловать.

Jibesh

Вам нужно установить измененный текст обратно в текстовое поле.Свойство Text для отображения измененного текста. вызывая метод, вы pefromed только преобразование, чтобы отобразить его обновление текстового поля.Свойство text.

Рейтинг:
18

Husain Sabir

Решение было не в коде, а в способе вызова функции.
вот как я это сделал:

private void txtName_Leave(object sender, EventArgs e)
        {
            txtManufacturerName.Text = CapitalizeFirstLetters(txtManufacturerName.Text);
        }


спасибо всем за помощь.


Рейтинг:
1

Menon Santosh

проверьте это решение

using System.Globalization;
        private void txtX_Leave(object sender, EventArgs e)
        {
            txtX.Text = ToSentenceCase(txtX.Text);
        }

        public  string ToSentenceCase(string strSen)
        {
            TextInfo myTI = new CultureInfo("en-US", false).TextInfo;
            return myTI.ToTitleCase(strSen);
        }