Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
borovik
210 / 204 / 52
Регистрация: 25.07.2010
Сообщений: 1,162
#1

Перебор контрола с подстановкой. Найти Label с заданным текстом. - C# WPF

08.10.2011, 16:37. Просмотров 1504. Ответов 5
Метки нет (Все метки)

привет нужно перебрать label с подстановкой, типа
C#
1
2
3
4
5
6
private void button1_Click(object sender, RoutedEventArgs e){
  for (int i=5; i<11; i++){
    if (Label[i].text == "bob")
      count++;
  }
}
помогите правильно написать

Добавлено через 39 минут
вот так поулчилось для winForm а для wpf никак ((

C#
1
2
3
4
5
private void button1_Click(object sender, EventArgs e){
  for (int i=5; i<11; i++){
    if (this.Controls["label" + i.ToString()].Text == "bob") count++;
  }
}

http://www.cyberforum.ru/csharp-net/thread288991.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2011, 16:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перебор контрола с подстановкой. Найти Label с заданным текстом. (C# WPF):

Динамическое создание контрола Label с текстом
Приветствую знатоков с#. Помогите найти ошибку. По щелчку мыши должен...

На активном листе найти все совпадения с заданным текстом и вывести их количество
Всем привет. Помогите, пожалуйста, решить следующую задаче средствами VBA...

размещение контрола с текстом по вертикали
такой вопрос: можно ли разместить контрол, содержащий определенный текст...

Изменение текста в ToolTip вместе с текстом контрола
Когда мышь задерживается на лейбле, показывается tooltip. Подсказка в tooltip -...

перебор label
привет нужно перебрать label с подстановкой, типа for (int i=5; i&lt;11; i++){ ...

5
I2um1
Злой няш
1405 / 1103 / 374
Регистрация: 05.04.2010
Сообщений: 1,949
08.10.2011, 19:11 #2
К примеру:
Дизайнер
XML
1
2
3
4
5
6
7
8
9
10
11
<Window x:Class="WpfAppTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="250" Width="250">
    <StackPanel x:Name="stack">
        <Label Content="bob" />
        <Label Content="rob" />
        <Label Content="bob" />
        <Button Click="Button_Click" />
    </StackPanel>
</Window>

Код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Windows;
using System.Windows.Controls;
 
namespace WpfAppTest
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            int count = 0;
            foreach (var child in stack.Children)
            {
                Label temp = child as Label;
                if (temp != null && temp.Content.ToString() == "bob")
                    count++;
            }
            MessageBox.Show(count.ToString());
        }
    }
}

А проблема в том у вас, что у окна всего один элемент и зачастую это контейнер.
1
borovik
210 / 204 / 52
Регистрация: 25.07.2010
Сообщений: 1,162
08.10.2011, 21:02  [ТС] #3
Blood-Angel, а с for никак?
0
I2um1
Злой няш
1405 / 1103 / 374
Регистрация: 05.04.2010
Сообщений: 1,949
08.10.2011, 21:50 #4
Цитата Сообщение от borovik Посмотреть сообщение
Blood-Angel, а с for никак?
А смысл? Я ничего сложного не написал, а через for все только становится сложнее, накладно и медленнее:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            int count = 0;
            UIElement[] elements = new UIElement[stack.Children.Count];
            stack.Children.CopyTo(elements, 0);
            for (int i = 0; i < elements.Length; i++)
            {
                Label temp = elements[i] as Label;
                if (temp != null && temp.Content.ToString() == "bob")
                    count++;
            }
            MessageBox.Show(count.ToString());
        }
Можно и совсем тупо сделать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            UIElement[] elements = new UIElement[stack.Children.Count];
            stack.Children.CopyTo(elements, 0);
 
            List<Label> labels = new List<Label>();
            for (int i = 0; i < elements.Length; i++)
                if (elements[i] is Label)
                    labels.Add((Label)elements[i]);
 
            int count = 0;
            for (int i = 0; i < labels.Count; i++)
                if (labels[i].Content.ToString() == "bob")
                    count++;
            MessageBox.Show(count.ToString());
        }
P.S. Я так понял у кое-кого проблемы со знаниями основ C#.

Добавлено через 18 минут
А вот к примеру реализация через Linq:
C#
1
2
3
4
5
6
7
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            int count = stack.Children
                .Cast<UIElement>().Where(x => x is Label)
                .Cast<Label>().Where(x => x.Content.ToString() == "bob").Count();
            MessageBox.Show(count.ToString());
        }
1
borovik
210 / 204 / 52
Регистрация: 25.07.2010
Сообщений: 1,162
08.10.2011, 21:57  [ТС] #5
у когото проблемы с пониманием вопроса )
есть пару десяток label - уже есть
нужно проверить задаваемый диапазон, как раньше делал на winform, без создания новых элементов или списков, но как я понял не существует такогоже решения для wpf

C#
1
2
3
4
5
private void button1_Click(object sender, EventArgs e){
  for (int i=5; i<11; i++){
    if (this.Controls["label" + i.ToString()].Text == "bob") count++;
  }
}
0
I2um1
Злой няш
1405 / 1103 / 374
Регистрация: 05.04.2010
Сообщений: 1,949
08.10.2011, 22:14 #6
borovik, те все примеры, что я показал, работают всегда. Можно еще создать в коде (через дизайнер создать только контейнер) массив меток и самому их добавить на контейнер, после чего использовать этот массив:
C#
1
2
3
4
5
6
private void button1_Click(object sender, RoutedEventArgs e){
  for (int i=5; i<11; i++){
    if (Label[i].Content.ToString() == "bob")
      count++;
  }
}
Да вот только микрософтеры не советуют такого делать.
Самый простой вариант, имхо, через linq.
0
08.10.2011, 22:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2011, 22:14
Привет! Вот еще темы с решениями:

Перекинуть Label из окна в контейнер пользовательского контрола
Добрый день уважаемые форумчане сейчас самостоятельно разрабатываю компонент...

Перебор Label's в foreach
есть групбокс, в нем есть два столбца меток. вроде такого label1 label4...

Label с разноцветным текстом
Доброго времени суток!! У меня в программе используются компоненты Label. Но...

label с разноцветным текстом
Привет хочу сделать лейбл с разноцветным текстом, чтоб в каждой строке был...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru