Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 07.09.2012
Сообщений: 48

Класс содержащий labels

09.01.2014, 11:42. Показов 2970. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Суть проблемы: есть форма, на которой довольно много лейблов, логически разделенных на группы. Для удобства работы с ними (изменение текста) я решил создать класс, содержащий набор лейбов и возвращающий нужный. Таким образом у меня было бы несколько экземпляров класса = кол-ву групп. Проблема в том, что для работы с ними они должны быть объявлены статически, а label не статический контрол. Подскжите, пожалуйста, как можно решить подобную проблему?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.01.2014, 11:42
Ответы с готовыми решениями:

Определить класс химический элемент, содержащий информацию о названии элемента его химических свойствах. Определить класс медикаменты, содержащий разн
Определить класс химический элемент, содержащий информацию о названии элемента его химических свойствах. Определить класс медикаменты,...

Класс: Дописать производный класс, дополняющий базовый и содержащий минимум 2 функции-члена...
Составьте программу на языке С#, которая должна содержать: 1) базовый класс в соответствии с вариантом; 2) производный класс,...

Создать класс колесо, имеющее радиус. Определить конструкторы. Создать класс машин, содержащий класс колесо
Создать класс колесо, имеющее радиус. Определить конструкторы. Создать класс машин, содержащий класс колесо. Дополнительно есть марка,...

7
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.01.2014, 12:34
Почему бы не использовать панель и для разделения на группы, и для использования в качестве коллекции? Как-то запутано получается у тебя. Почему они (и кто они?) должны быть статическими?
0
71 / 66 / 29
Регистрация: 28.10.2013
Сообщений: 248
09.01.2014, 13:01
Сделать 1 класс с N (количество групп) вложенными классами. Объявить глобальную переменную класса. Доступ к внутренним классам (группам) реализовать через индексаторы. Там же сделать методы для добавления, удаления лейблов и т.п.
Пример обращения:
Code
1
2
labels.Names[2].Text = "Текст третьего лейбла в группе 'Names'";
MessageBox.Show(String.Format("Второй - {0}!", (labels.Sex[1].Text == "Мужской") ? "мужик" : "не мужик вовсе"));
Добавления (можно через перегрузку сделать автоматическое создание/добавление уже имеющегося на форме лейбла):
Code
1
2
labels.Names.Add(label1);
labels.Family.Add("новый лейбл, расположим на panelFam", panelFam);
Если же количество групп неизвестно, то сделать единый класс, но тогда при создании, добавлении, извлечении экземпляра лейбла придется передавать еще и имя группы в качестве параметра.
1
0 / 0 / 0
Регистрация: 07.09.2012
Сообщений: 48
09.01.2014, 13:14  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
Почему бы не использовать панель и для разделения на группы, и для использования в качестве коллекции? Как-то запутано получается у тебя. Почему они (и кто они?) должны быть статическими?
Вопрос решен. Объясню. Я хотел создать, к примеру 10 объектов классов, которые бы хранили, к примеру, 10 лейблов. то есть таблица лейблов 10х10. для обращения к конкретному лейблу объект класса, содержащий его должен быть виден отовсюду. т.к. в С# нет понятия глобальной области видимости -> он должен быть статическим. А лейбл не статический. решил с помощью объвления статического массива, который заполняется с поднятием формы.

А что ты имел ввиду говоря о панели? какой панели?

Добавлено через 10 минут
Lutk, интересное решение, пригодится)) Спасибо. Можешь выложить более подробный код описания класса и перегрузки?

Если интересно, то вот мой:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public  class test_processing
    {
        public System.Windows.Forms.Label power;
        public System.Windows.Forms.Label init_bios;
        public System.Windows.Forms.Label bios_done;
        public System.Windows.Forms.Label bit_start;
        public System.Windows.Forms.Label bit_done;
        public System.Windows.Forms.Label cycles;
        public System.Windows.Forms.Label result;
 
        public test_processing(System.Windows.Forms.Label _power, System.Windows.Forms.Label _init_bios, System.Windows.Forms.Label _bios_done,
            System.Windows.Forms.Label _bit_start, System.Windows.Forms.Label _bit_done, System.Windows.Forms.Label _cycles, System.Windows.Forms.Label _result)
        {
            power = _power;
            init_bios = _init_bios;
            bios_done = _bios_done;
            bit_start = _bit_start;
            bit_done = _bit_done;
            cycles = _cycles;
            result = _result;
        }
 
        public System.Windows.Forms.Label get_label(string test)
        {
            System.Windows.Forms.Label res = new System.Windows.Forms.Label();
            switch (test)
            {
                case "BITstart": res = bit_start; break;
                case "BITdone": res = bit_done; break;
            }
//////////   etc /////////////
            return res;
        }
    }
 
 public partial class Frm : Form
    {        
        static test_processing[] lable_coll = new test_processing[12];       
    
 
        private void Frm_Load(object sender, EventArgs e)
        {
           
            test_processing comp1 = new test_processing(lbl1Pow, lblInitBios1, lblBiosDone1, lblBitSt1, lblBitDone1, lblCycSet1, lblRes1);
            lable_coll[0] = comp1;
 
////////
}
0
71 / 66 / 29
Регистрация: 28.10.2013
Сообщений: 248
09.01.2014, 13:28
Переборщил я что-то с внутренними классами.. это все первый рабочий день и адское утро)
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static public class glb // глобальный класс
{
    static public MyLabels Labels = new MyLabels();
}
 
public class MyLabels // общий класс лабелей
{
    public List<Label> Name { get; set; }
    public List<Label> Sex { get; set; }
    public List<Label> Age { get; set; }
 
    public MyLabels() // конструктор для начальных инициализаций
    {
        Name = new List<Label>();
        Sex = new List<Label>();
        Age = new List<Label>();
    }
}
По сути это все. Доступ из любого места программы:
Code
1
2
3
4
5
glb.Labels.Names.Add(label1); // добавили имеющуюся
glb.Labels.Names.Add(new Label()); // создали новую
glb.Labels.Names[1].Text = "Новая лабель"; // поправили новую
form1.Controls.Add(glb.Labels.Names[1]); // добавили новую на форму
MessageBox.Show("Всего лабелей 'Names': " + glb.Labels.Names.Count.ToString());
Удобство единого класса в том, что мы можем добавить в него что угодно, например узнать сколько лабелей ВСЕГО:
Code
1
2
3
4
5
6
7
... // в классе MyLabels
    public int Count()
    {
        return Names.Count + Sex.Count + Age.Count;
    }
...
MessageBox("Всего лабелей: " + glb.Labels.Count.ToString());
1
0 / 0 / 0
Регистрация: 07.09.2012
Сообщений: 48
09.01.2014, 13:37  [ТС]
Lutk, спасибо, отличное решение, действительно удобно, точно пригодится)
0
71 / 66 / 29
Регистрация: 28.10.2013
Сообщений: 248
09.01.2014, 13:40
В принципе при создании лабелей может быть удобным передавать в конструктор некие параметры, например текст, цвет, etc. Для этого уже определенно понадобится внутренний класс, могу накидать по приходу домой, на коленке не айс)
0
0 / 0 / 0
Регистрация: 07.09.2012
Сообщений: 48
09.01.2014, 13:56  [ТС]
Цитата Сообщение от Lutk Посмотреть сообщение
В принципе при создании лабелей может быть удобным передавать в конструктор некие параметры, например текст, цвет, etc. Для этого уже определенно понадобится внутренний класс, могу накидать по приходу домой, на коленке не айс)
Спасибо, не нужно)) принцип понятен))
Возник другой вопрос, может сможешь подсказать такое же красивое решение?))

Есть клиент-сервер. Клиент должен послать сначала строку, потом файл (~10 Kb) потом опять строку. Все посылаемое переводится в массив байтов. Проблема следующая: сервер ловит все как непрерывный поток байтов. Как бы мне реализовать пакетную передачу? или как-то по-другому решить эту проблему. Создавать отдельный класс, потом его сериализовать/десериализовать не хочется. Другими словами мне нужно послать статус, что на клиете тест начался, потом отослать log файл и послать статус, что тест завершен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.01.2014, 13:56
Помогаю со студенческими работами здесь

Класс содержащий vector
Вот я написал класс с использованием vector #include &lt;vector&gt; #include &lt;iostream&gt; using namespace std; class Vector { ...

Класс содержащий строку символов
Добрый день. Не пойму как правильно написать след. код. Задача: 13. Заполните массив данными и затем выведите их на экран. Для...

Класс, содержащий абстрактное поле
Здравствуйте. Хочу сделать так, чтобы класс содержал одним из своих полей интерфейс. Как лучше реализовать, чтобы извне невозможно...

Класс, содержащий сведения о студентах
На основе данных входного файла составить список студентов группы, включив следующие данные: ФИО, номер группы, результаты сдачи трех...

ООП: класс, содержащий подклассы
Существует класс, который содержит под классы, каждый подкласс содержит еще подклассы, и так цепочка продолжается. Можно провести...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru