Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2017, 12:27   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Динамически создаваемые контролы на форме

Здравствуйте.
С созданием и размещением контролов на форме в процессе выполнения программы у меня проблем нет.
Проблема заключается в том, что уже созданный и размещённый контрол не изменяет своё видимое содержимое в процессе работы программы. Если компонент статический (прикручен в конструкторе формы) - то такой проблемы не наблюдается.
Доступ к контролу происходит из потока через Invoke.
GetHashCode() при создании и при использовании одинаковые; Equals() == true. При доступе для изменения свойство Text изменяется, а на форме - никаких изменений не происходит. Refresh() не помогает.
Что делать ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 27.02.2017, 12:36   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы точно не создаете новый контрол?
тут на ваш код смотреть надо.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.02.2017, 13:00   #3
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вы точно не создаете новый контрол?
Перепроверил хеш и equals - вроде всё в норме.
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
тут на ваш код смотреть надо
создание лейбов в цикле
Код:
lCurrent=new Label();
lCurrent.Name="task_header_"+cPriority.ToString();
lCurrent.Location=new Point(pCurrent.X,pCurrent.Y);
lCurrent.TabIndex=cPriority-1; // по табу потом определяется индекс таска в интерфейсной реализации
lCurrent.Click+=new EventHandler(label_Click);
lCurrent.Font=this.Font;
lCurrent.BackColor=this.BackColor;
lCurrent.Text=Path.GetFileNameWithoutExtension(tasks[i])+": "; // таск подгружается из файла; тут сложнА всё; этот текст отображается нормально
lCurrent.Visible=lCurrent.Enabled=true;
lCurrent.Parent=this; // что есть что нет - не важно
try { tСurrent=new TaskDataStruct(tasks[i],lСurrent,workSet,expander); } // тоже долго объяснять; тут самое важное - lCurrent
catch { lCurrent.Dispose(); lCurrent=null; continue; } // если при создании таска что то пошло не так - то и всё остальное мне не нужно
this.Controls.Add(lСurrent); // мне кажется, что проблема где то здесь
allTasks.Add(tCurrent); // это List моих тасков
pCurrent.Y+=30;
cPriority++;
Функция вывода информации из потока
Код:
private void ShowInfo(TaskDataStruct taskInfo, ShowInfoDataStruct data, bool enabled=true) // тут тоже всё сложнА
{
	if (taskInfo.Header!=null) // Header - это тот самый lCurrent
		if (taskInfo.Header.InvokeRequired)
			taskInfo.Header.Invoke(new Action(() =>
			{ // сюда заход есть
				taskInfo.Header.Enabled=enabled;
				taskInfo.Header.Text=taskInfo.TaskName+data.MessageText;
				taskInfo.Header.BackColor=data.ShowColor;
			} ));
		else {}
	else {}
}
Между изначальным new TaskDataStruct и местом вывода информации проблем нет; проверено на статичных компонентах.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 27.02.2017 в 13:04.
OmegaBerkut вне форума Ответить с цитированием
Старый 28.02.2017, 04:10   #4
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Всё оказалось проще пареной репы.
lCurrent.AutoSize=true;
Увидел в десигнере формы.
Как я и говорил, не изменяется видимое содержимое.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 28.02.2017, 13:21   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

нет, у вас в итоге оказалось что контрол не имел размера.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.02.2017, 14:05   #6
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
нет, у вас в итоге оказалось что контрол не имел размера.
Яж писал, что изначально устанавливаемый текст отображался. А значит с размером было всё нормально. К тому же, в подтверждение наличия размера ещё играет тот факт, что прикручиваемое событие так же обрабатывалось.
И да - что я говорил изначально, и подтвердил потом, суть та же - не изменялось видимое содержимое. Я то не видел на форме, что содержимое меняется.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 28.02.2017 в 14:25.
OmegaBerkut вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамически создаваемые визуальные компоненты на форме Des80 Общие вопросы Delphi 3 20.09.2016 14:05
Динамически создаваемые компоненты Konstantin_ua Общие вопросы Delphi 2 16.09.2014 11:44
Назначение событий на динамически создаваемые контролы AnDron45 C# (си шарп) 3 10.09.2012 16:46
Динамически создаваемые компоненты Aleksandr_59 Компоненты Delphi 6 30.03.2012 17:44
C# динамически создаваемые textbox Matsur Помощь студентам 1 21.03.2011 16:19