#c# #arrays #textbox #substring #checklistbox
#c# #массивы #текстовое поле #substring #контрольный список
Вопрос:
Я нахожусь в школьном проекте, и мне было интересно, как отобразить в многострочном текстовом поле — не в ListBox, это было частью вопроса — как отобразить первые пять букв отмеченных элементов CheckedListBox. Мы не можем показать их напрямую, мы должны создать массив, который будет сохранен в пользовательском классе с помощью конструктора. Моей первой мыслью было использовать событие SelectedIndexChanged контрольного списка и использовать увеличенные, .Items и .substring, чтобы поместить выбранную подстроку в массив. Вот мой первый код:
private void checkedListBox_programmes_SelectedIndexChanged(object sender, EventArgs e)
{
int selection = checkedListBox_programmes.SelectedIndex;
if (selection != -1)
{
if (indice < 5)
{
tabProgrammes[indice] = checkedListBox_programmes.Items[selection].ToString().Substring(0, 6);
indice ;
}
else
{
MessageBox.Show("Tableau de données est rempli");
}
}
}
}
* tabProgrammes и indice инициализируются в моем частичном классе
Это не сработало, потому что снятие флажка index добавило бы строку в мой массив. Итак, второй код (я использую событие buton_click):
// remplissage du tableau avec les éléments sélectionnées
tabProgrammes = checkedListBox_programmes.CheckedItems.OfType<string>().ToArray();
// création du profile
Profil unProfil = new Profil(textBox_Prenom.Text, textBox_Nom.Text, textBox_Utilisateur.Text, dateTimePicker_Naissance.Value, tabProgrammes);
// affichage des donnees
textBox_Affichaqe.Text = unProfil.ToString();
Это работает очень хорошо, потому что я могу проверять и снимать флажок без проблем. ИТАК, моя проблема в том, что мне нужно поместить в мой массив только подстроку (0,6) моих отмеченных элементов.
Идея?
Комментарии:
1. Вы имеете в виду это?
checkedListBox_programmes.CheckedItems.OfType<string>().Select(x => x.Length > 6 ? x.Substring(0, 6) : x).ToArray();
2. Пожалуйста, уточните
3. Да, загадочность, это то, что я искал. Спасибо!
Ответ №1:
Да, вы можете использовать Substring()
в результате OfType<string>()
.
Для этого вам необходимо использовать оператор Select()
Linq в вашем конкретном случае.
Вот пример:
static void Main(string[] args)
{
var dataSource = new object[]
{
42,
"bonjour",
"allo",
1000,
"salut"
};
var myStrings = dataSource
.OfType<string>()
// In this case, we use substring only if the length of the string is above 6.
.Select(s => s.Length > 6 ? s.Substring(0, 6) : s)
.ToArray();
foreach (var item in myStrings)
{
Debug.WriteLine(item);
}
}
Он выводит следующее:
bonjou
allo
salut
Комментарии:
1. Спасибо, это работает действительно хорошо. Можете ли вы объяснить мне => и the ?
2.
=>
используется для лямбда-выражений , а? :
является условным оператором ,if/else
эквивалентным an и.3. Утверждение «Да, вы можете использовать
Substring()
для результатаOfType<string>()
» не совсем корректно. Они не связаны напрямую. Вы используете,OfType<string>()
чтобы убедиться, что у вас естьIEnumerable<string>
, на котором вы можете использоватьSelect<string>(x => ...)
. Затем вы можете использоватьSubstring(...)
наx
в.Select
.