Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
5 / 5 / 1
Регистрация: 05.11.2013
Сообщений: 58

Из вспомогательной формы модифицировать Label на основной

15.01.2014, 16:18. Показов 829. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги,

подскажите пожалуйста (а то путаница в голове) как реализуется right-way вроде бы простая связка:
2 класса, класс формы и вспомогательный.
Надо из вспомогательного модифицировать label на форме.
Где объявлять событие, и где на него подписываться?
Ход мыслей:
- во вспомогательном что-то происходит, генерируется событие (соответственно, объявляем его во вспомогательном)
- класс формы узнает о нем (значит, подписываемся в классе формы) и должен присвоить label.Content то, что вспомогательный класс передал.
Лямбда у нас будет во вспомогательном классе или в классе формы? По идее, во вспомогательном, элементов формы не видно, кроме того, он не владелец формы и изменять содержимое не может? Как реализовать, алгоритм?
Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2014, 16:18
Ответы с готовыми решениями:

Диаграмма по основной и вспомогательной оси
Не получается сделать диаграмму так, как показано в документе ворд. в файле ексель - мои попытки сделать такую диаграмму. в ворде -...

Обновление основной формы данными из внедрённой формы, основанной на основной форме
Всем привет! Извиняюсь за тавтологию, но зато изложено кратко! В приложении БД. Не обращайте внимание на много таблиц и схему. Они в...

[WPF] Размер формы от шрифта и текста label и перемещение формы мышкой по label
Здравствуйте. Возможно глупый вопрос но я новичек в wpf. Как там сделать размер формы в зависимости от шрифта и текста label. И как сделать...

5
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
15.01.2014, 16:55
Кликните здесь для просмотра всего текста
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
public partial class Form1 : Form
{
    SomeClass s = new SomeClass();
    public Form1()
    {
        InitializeComponent();
        s.SomeEvent += s_SomeEvent;
    }
 
    void s_SomeEvent(MyEventArgs e)
    {
        this.label1.Text = e.Value.ToString();
    }
}
 
class MyEventArgs : EventArgs
{
    public int Value { get; private set; }
 
    public MyEventArgs(int value)
    {
        this.Value = value;
    }
}
 
class SomeClass
{
    public delegate void MyDelegate(MyEventArgs e);
 
    public event MyDelegate SomeEvent;
 
    public void Calc(int a)
    {
        for (int i = 0; i < 10; i++)
            a += i;
        SomeEvent(new MyEventArgs(a));
    }
}


Добавлено через 8 минут
Поправка:
C#
1
2
3
4
5
6
7
public void Calc(int a)
    {
        for (int i = 0; i < 10; i++)
            a += i;
        if (SomeEvent != null)
            SomeEvent(new MyEventArgs(a));
    }
1
5 / 5 / 1
Регистрация: 05.11.2013
Сообщений: 58
15.01.2014, 17:06  [ТС]
Во, вопрос в тему - зачем проверка числа подписчиков на нулл, если я их контролирую(я же создаю экземпляры) и точно знаю, что они подпишутся, при инициализации ?

И имеет ли смысл наследоваться от EventArgs и создавать экземпляр класса в куче, если всего-то нужно - передать строку в лямбда-функцию?
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
15.01.2014, 17:16
Если на событие никто не подписался, то его вызов приведет к исключению.
Создание своего делегата и класса параметров привел для примера, вобщем-то можно и создать событие
C#
1
public event EventHandler<T> SomeEvent;
1
5 / 5 / 1
Регистрация: 05.11.2013
Сообщений: 58
15.01.2014, 17:21  [ТС]
Wow, I know kung-fu!

Реализовал через void delegate(string).

Спасибо!
0
5 / 5 / 1
Регистрация: 05.11.2013
Сообщений: 58
20.01.2014, 14:21  [ТС]
Рано радовался, похоже.
Начал усложнять реализацию, и столкнулся с проблемами синхронизации доступа потоков к форме
В методе экземпляра вспомогательного класса генерирую эвент, в котором передаю int, который выступает в качестве Value для ProgressBar и string в качестве Content для Label. В экземпляре класса окна подписываюсь на эвент с применением лямбда-функции, в которой и присваиваю значения прогрессбару и лэйблу. Генерирует "The calling thread cannot access this object because a different thread owns it."
Если же вызывать через Dispatcher.BeginInvoke(new Action(() => {prgbar.Value = x; label.Content = y;} - то контролы на форме не изменяются, при брекпоинте проваливается во внутренний дотнетовский цикл обработки WM-сообщений. Такое ощущение, что лямбда во втором случае не срабатывает.
Коллеги, подскажите, как отлаживать такой тип ошибок? Или может у кого есть линки на статьи, посвященные отладке синхронизации?
Спасибо!

Добавлено через 10 минут
Продолжаю держать вас в курсе =)
В общем, такое поведение возникает только когда потоки дочернего процесса (который запускается во вспомогательном классе, и прогресс которого я и хочу показывать на форме) перенаправляются в streamreader, отчего дочерний процесс фэйлится и каким-то образом влияет на мой код. Перенаправление stderr, stdout делал в асинхронном режиме на основе примера из msdn. Соответственно, скорректирую вопрос - есть ли какие-либо подводные камни в перенаправлении потоков экземпляра класса Process?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.01.2014, 14:21
Помогаю со студенческими работами здесь

Ввод условий поиска с помощью вспомогательной формы
В форме ввода данных разместить кнопку «Поиск». Эта кнопка должна обеспечить открытие вспомогательной формы, в которой указывается название...

Соответствие значения поля подчиненной формы полю таблицы основной формы
Здравствуйте. В основной форме две подчиненные формы, одна в табличном режиме другая в режиме формы. Так вот, значения подчиненной формы...

Установление ширины элемента разделённой формы по ширине основной формы
Здравствуйте! Подскажите пожалуйста, как в разделённой форме ширину элемента формы автоматически устанавливать по ширине основной формы в...

Фильтрация данных основной формы через данные подчиненной формы в MS Access 2013
Может кто подскажет, есть ли простое решение, когда есть стандартные 2 таблички (главная-1 и вторичная - 2), связанные через третью и есть...

Вывести на label локальный IP и Основной шлюз компьютера и изменить их
Здравствуйте, ув. пользователи нашего форума! Пытаюсь написать программу которая будет отображать и изменять локальный IP адрес...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru