2013-11-16 3 views
0

Когда загружается форма, я хотел бы, чтобы она отображала загрузочное изображение (внутри Picture Box) и стандартную метку Windows с некоторым текстом. Однако все, что я вижу, это белые квадратики, или иногда я вижу другую форму внизу. Как я могу правильно отобразить изображение и ярлык.Элементы управления WinForm прозрачны и не отображаются должным образом

Я пытался установить AllowTransparency на false, когда форма загружается, а также задает ключ прозрачности формы другому цвету, но ничего не сработало.

Проект C# .Net v3.5 (также пробовал v4 и v4.5).

Любые идеи?

+1

Графический интерфейс может сделать только одну вещь в то время. Когда он «загружает форму», он также не может обновлять графический интерфейс. Вызовите метод Update() формы явно, чтобы он был по крайней мере полностью окрашен. Заходите вперед, выполняя дорогостоящий код, например запросы dbase, в рабочий поток или используя async/await. –

+0

Я не мог найти метод обновления в форме. Я быстро просмотрел потоки, но из примеров, которые я нашел, это не позволит мне изменить метку формы из потока. –

+0

Класс Form имеет метод Update(). Унаследовано от класса Control. Лучше оставить его компилятору, чтобы найти его, иначе понятия не имею, что «я не мог его найти». Это метод экземпляра, если это имеет значение. –

ответ

1

Во-первых, вы не можете отображать изображение, ожидание-ожидание, а затем изменять изображение - это никогда не будет перерисовывать что-либо, что приведет к описанным вами симптомам. Чтобы «подождать», вам нужно вернуть управление в свой основной цикл приложения, чтобы он мог продолжать обрабатывать сообщения (например, обрабатывать запросы перерисовки для вашего окна). Один из способов сделать то, что вы хотите, - отобразить начальное состояние (заставку), а затем использовать таймер, чтобы перезвонить вам позже, чтобы изменить отображение на второе состояние.

Следующая проблема, с которой вы сталкиваетесь, заключается в использовании элементов управления формы с прозрачностью. Большинство элементов управления относятся к «прозрачным», как «заполняйте свой фон цветом ваших родительских элементов управления», чего вы не хотите. Простым способом это реализовать обработчик Paint и нарисовать изображение и текст для себя - это дает вам гораздо больший контроль над тем, как выглядит ваш дисплей, а также позволит вам получить более чистое перерисовку (никаких мерцаний или других проблем, вызванных дисплей создается, но бит в нескольких элементах управления)

Наконец, рассмотрите возможность внедрения вашего экрана заставки в виде отдельного элемента управления/формы, который вы показываете над своей основной формой во время загрузки, поскольку это упрощает «наложение» на ваша основная форма, не изменяя ее дизайн вообще.

+0

Прозрачность - это просто артефакт, хороший способ получить прозрачность - это не рисовать :) –

+0

Я не хочу менять изображение - я хочу, чтобы он отображал изображение вместо белого ящика. Если я удалю изображение, так что есть только ярлык, он тоже не отображает это! –

-1

Просто напишите formObjectName.Refresh() после formObjectName.Show()

Смежные вопросы