Как сделать окно прозрачным c

Обновлено: 15.05.2024


I have the same problem as you. Have you found a solution?


"An unhandled exception of type 'System.NullReferenceException' occurred in fadingform.exe
Additional information: Object reference not set to an instance of an object."

private void button1_Click(object sender, System.EventArgs e)
for (int i=100;i>1;i--)
Form1.ActiveForm.Opacity = i / 100.0;
/// And another loop to slow down the fading window
for (int num=0;num <20;num++)
>
>
>

protected void trackBar1_Scroll (object sender, System.EventArgs e)
Form1.Opacity = (TrackBar1.Value) / 100;
>

I'm very new to programming and so I may have missed something (heck, even my VCR is a chore to program for me.)


Oooooouch!! Extremlllly sorry Jeery. Thanx a ton for pointing it out!! The (terrible) T in Form1.Opacity = (TrackBar1.Value) / 100; should be in lower caps.


Well not exactly
it depends on what YOU name the trackBar as
ANY control is what YOU name it as !

so you can go int the Form (Design) tab - pull out the properties tab of the control you wish you mess with - change the name to whatever. Now that 'whatever' is what the name of the control is !





1. The correct way to access the Opacity property is not directly through Form1, but rather
Form1.ActiveForm.Opacity

2. Just to be safe, make sure you cast the results of (trackBar1.Value/100) to a float. It
(I believe) defaults to casting it to the Int32 value of (tada!) 0, making an invisible
form.

3. Adding the minimum value of 10 to the trackbar was a nice safety measure, but personally
I tend to over-error check my programs, so I would throw in a little blurb in the scroll
event handler like so:
if( Form1.ActiveForm.Opacity == 0.0 ) Form1.ActiveForm.Opacity = 0.10; // 10% visible
>
Just in the remote case something hiccups, etc.

Again, all in all very informative article!


thanx kimbal for yr comments.

points noted on the safe way to acces the opacity value. thanx a lot!!

hey dont worry the window will not go totally transparent so that u wont be able to see it!! as u've discovered 'cause of the min val of the track bar. .


The Opacity is a double value, so the expression of (trackBar1.Value)/100 must be (trackBar1.Value)/100.0.

General News Suggestion Question Bug Answer Joke Praise Rant Admin

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Microsoft Logo

Gray Pipe

Приносим извинения. Запрошенное содержимое было удалено. Вы будете автоматически перенаправлены через 1 секунду.

Лучший отвечающий

Вопрос

Возможно ли сделать так, чтобы у ListBox'а элементы были видимы и активны, а панель на которой они расположены была прозрачна. (не путать с

)
нужно, чтобы можно было добраться до элементов, расположенных позади ListBox'а. (между элементами ListBox'а есть просветы).
Ситуация: Коллекции (ListBox'ы или ListView) визуально должны быть расположены в одном пространстве. Элементы коллекций содержат кнопки.
(разрабатываю на WPF)
заранее Спасибо!

Ответы

Все ответы

Можно привести пример? Какие свойства ListBox требуется определить? (пробовал различные реализации ItemTemplate и Template)

Вопрос актуален. Есть ли такая возможность? вырезать с помощью свойства Clip я думаю было бы неправильно.

Задача оказалась не такой простой, но она решаемая это факт. Для подтверждения взял вот эти строчки

Как видно из примера мы полностью стираем стандартный шаблон элемента задавая пустой ControlTemplate и событие щелчка проходит на кнопку под элементом. Осталось его теперь переделать так что бы элемент выполнял свои функции и решал поставленную задачу. Проблема в том, что в стандартный ListBox входит еще и ScrollViewer, а значит что его шаблон тоже придется переопределять.

В общем пока вам вот эта информация, чуть позже постараюсь подкинуть еще информации или полностью решить задачу.

К сожалению как показал вот этот тестовый код:

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

попробуйте в свойствах окна сделать AllowsTransparency="True" Opacity="0.9" WindowStyle="None", а в вашем элементе Opaciti="1"

Хотя я и не уверен, что правильно понял вашу ситуацию, но все же предложу свой вариант.

Если кратко, то ListBox вкладывается в Popup, для которого есть возможность указать AllowsTransparency="True". Попутно пишем свой ControlTemplate для ListBox и ListBoxItem. После этого получаем что-то вроде этого

но радуемся не долго. Пробуем изменить размер окна и. размер окна меняется, а наш Popup с ListBox'ом остается на прежнем месте. Для решения этой проблемы ничего лучше, кроме как обрабатывать событие окна SizeChanged и заново устанавливать IsOpen="True" я не придумал.

P.S. Этот вариант реализации ужасен и накладывает серьезные ограничения на компоновку, не используйте его в реальном приложении.

UPD. Обнаружены проблемы: при размере окна меньшем, чем размер ListBox'а Popup вылезает за пределы окна, а также если переместить окно, то Popup выходит за границы окна (т.е. остается на прежнем месте, возможна корректировка положения Popup в обработчике события Window.LocationChaged).

Microsoft Logo

Gray Pipe

Приносим извинения. Запрошенное содержимое было удалено. Вы будете автоматически перенаправлены через 1 секунду.

Лучший отвечающий

Вопрос

Мне нужно сделать label.BackColor, что бы он был прозрачный. Ну было видно что бы за ним, например форму.

Ответы

на форме label1


но лейбл за кнопкой не виден


Все ответы

фон для формы установили?


другие контролы не будут видны сквозь лейбл


другие контролы не будут видны сквозь лейбл


Ау! Мне кто-то поможит!? Есть идеи почему у меня не так? Может я не туда код вставил? Так скажите куда.

на форме label1

Всё норм код работает, там просто баг был какойта. После перезапука винды всё норм:)

А что если мне надо поверх кнопки label положить? Что мне сделать что бы label1 был прозрачным, а кнопка нет?


но лейбл за кнопкой не виден


Центры разработки

Обучение

Сообщество

Свяжитесь с нами

Программы

logo

© 2022 Microsoft

На этот раз позарез нужна прозрачная форма!
Пере искал много чего.
Но почти все полагается на TransparecyKey, а он как назло оказывается не работает когда делаю окно дочерным(родитель - десктоп), не просто не работает, а вообще не отображается, хоть и работает(то есть выкидывает по таймерам все месседж боксы и тд. ). Говорят что в ХР все работает, но у меня в Вин7 почему то не хочет
В инете поискав наткнулся на МСДН, там сообщали что с TransparecyKey может быть баг, если глубина цвета выше 24битов. Я опустил свой экран до 16бит и не какого результата, хотя на этот раз форма появилась.

В общем нужен рабочий метод, чтобы форма была прозрачной а контролы- нет.
Может как нибудь прорисовать? Я с этим сильно не дружил

Как сделать окно прозрачным по краям?
Здравствуйте, специалисты по Windows Forms. Подскажите - возможно ли сделать окно - которое было.


Как сделать чтобы окно было прозрачным
Извините за нубский вопрос

Как сделать,чтобы при нажатии на кнопку открывалось дочернее окно?
Как сделать,чтобы при нажатии на кнопку открывалось дочернее окно?

Tkinter, ругается на Entry.get() если дочернее окно открыто из функции
_author__ = 'Eugene' from tkinter import * from tkinter import ttk def.

QwertyX, получилось сделать, но только когда форма является главной: установил для формы одинаковый цвет BackColor и TransparencyKey. А для чего тебе родительское окно == десктоп?

QwertyX, ну так значки на рабочем столе ведь все-равно нажиматься не должны (форма мешает). Может окно всё время по Z-order на самый низ кидать? Просто не пойму зачем родитель == десктоп.

Я первым делом про З-Ордер и думал, вот только проблем с ним много вышло.
А с чего ты взял что форма тамагочи на весь экран? Она аккуратненько, красивенько должна быть над треем
Но пока она просто над треем Ни фига не аккуратно и ни фига не красиво
Нужно как нибудь найти способ отрисовки формы с прозрачным цветом

Что то мне совсем плохо думается к концу дня

Что вообще нужно сделать кроме прозрачности формы? Как она должна работать? Я до сих пор не врублюсь - чего хочешь ))

QwertyX, ну вот я сделал форму с прозрачным фоном. Теперь вопрос: почему она обязательно должна быть дочерней к рабочему столу?

Добавлено через 20 секунд

А к тому что форма это окно для системы.
а окна можно делать не только квадратными.
из своего рисунка создаешь регион (типа контура)
регион вешаешь на окно оно будет по форме похоже на рисунок
и рисуешь рисунок на окне
и не надо никакой прозрачности где нет рисунка нет окна(формы)

Первая форма - параметры и тд.
Из нее происходит выше описанная форма, эдакий анимированный сгусток энергии, представляющий искусственный интеллект.

Так же у искусственного интеллекта присутствуют некоторые черты "тамагочи", у него есть периодически появляющийся голод, настроение в зависимости от некоторых факторов(времени, возможно погоды, и еще нескольких) и некоторые другие функции.

П.С.
Считай меня ненормальным, но я уже реализовал базу для первой части с распознаванием и ответом. Осталось только предвидеть как можно более вопросов и быть креативным с ответами
Голод можно повесить на банальный таймер, время получается легко, а как получить погоду - в инете полно примеров как использовать локацию юзера заданную в панели управления, чтобы получить прогноз

Сейчас еще и друг подключился, так что все течет как надо. Я пока отдыхаю и занимаюсь внешним видом. По этому собственно и мой вопрос.
А на десктопе тамагочи, потому что это все типа экранной живности, а куда еще засунуть живность если на десктоп? Там до него легче всего добраться и там он лучше всего смотрится.

П.П.С.
Теперь надеюсь вопросов нет?

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

Форма является основным компонентом графического интерфейса программы. Именно на ней размещаются управляющие интерфейсы.

Рассмотрим некоторые из свойств формы, которые влияют на её внешний вид.

Объявляем форму

Для того что бы объявить форму, нам надо добавить библиотеку System.Windows.Forms.dll

После объявляем форму $main_form

Отобразим форму $main_form.

В результате получилась вот такая форма:

DefaultForm

Что бы в загаловке формы отобразить текст нужно присвоить его свойству Text нашей формы:

Текст отобразится в заголовке:

DefaultFormTextHello

Изменение размера формы:

Давайте изменим размер формы.

Это можно сделать через свойства Width(ширина) и Height(высота) формы, где значения параметров это кол-во пикселей.

Этого же результата можно добиться используя параметр формы Size:

Так же можно задать размер с помощью параметра DesktopBounds:

Так же для изменения размеров можно воспользоваться свойством ClientSize

Однако этот параметр задаёт клиентскую область формы, которая по размерам меньше самой формы. Поэтом получившаяся форма, по размерам окажется больше, чем в предыдущих примерах.

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

Для этогу существуют такие параметры , как MinimumSize(минимальный размер формы) и MaximumSize (максимальный размер формы). Если задать эти параметры, то в период жизни форма не сможет за них выйти.

Пример объявления данных свойств:

Но вычислять область окна бывает довольно сложно, удобнее всего отдать эту задачу автоматическим средствам управления окнами.

Для этого с начала надо разрешить менять размер формы, в зависимости от расположения объектов в области видимости свойством AutoSize перевести его в значение true

После надо выбрать режим автоматического подбора размера формы и указать его в свойстве AutoSizeMode. Существует два режима этого свойства GrowOnly и GrowAndShrink:

GrowOnly — режим разрешает ужимать размер формы если в этой области нет элементов управления, но не меньше, чем указанов параметрах Width и Height

GrowAndShrink — режим разрешает ужимать размер формы если в этой области нет элементов управления, игнорируя параметры Width и Height но не меньше чем MinimumSize, при этом форма не будет растягиваться по требованию пользователя, но форму можно будет развернуть на всё окно.

Шрифты

Так же не малую роль в отображении формы влияют шрифты. К тому же настройки шрифтов наследуются на управляющие элементы принадлежащие этой форме.

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

Что бы поменять цвет шрифта существует следующее свойство ForeColor:

Не малуюроль в определении размеров управляющих элементов играет размер шрифта его можно узнать из свойства AutoScaleBaseSize, его так же можно перераспределить.

Шаблон окна

Шаблон окна формы опредиляется парметром FormBorderStyle, который может принимать семь значений Fixed3D, FixedDialog, FixedSingle, FixedToolWindow, None, Sizabl, SizableToolWindow по умолчанию стоит значение Sizable. Заметим, что внешний вид формы на примерах может существенно отличаться на разных компьютерах и существенно зависит от OC. Так же после назначения определённого шаблона окна в дальнейшем его можно будет редактировать другими свойствами формы.

Рассмотрим шаблоны формы:

Fixed3D — Фиксированная трехмерная граница. Форме запрещено менять размер, однако её можно развернуть на весь экран или свернуть.

FormBorderStyleFixed3D

FixedDialog — Толстая фиксированная граница в диалоговом окне-стиля. Так же как и в Fixed3D запрещено менять размер. Однако иконка в левой верхней части окна не отображается.

FormBorderStyleFixedDialog

FixedSingle — фиксированная, одно строковая граница.

FormBorderStyleFixedSingle

FixedToolWindow — Граница окна инструментов, которое нельзя изменить. Окно инструментов не отображается в панели задач или в окно, которое появляется при нажатии пользователем клавиши ALT+TAB. Хотя форма FixedToolWindow не отображается в панели задач, однако лучше явно необходимо установить свойство ShowInTaskbar в значение false.

FormBorderStyleFixedToolWindow

None — Форма без рамки. Она не умеет изменять размер, и свёртываться в панель задач, но её можно развернуть.

FormBorderStyleNone

Sizable — Граница с изменяемыми размерами. Данная форма может изменять размер, разворачиваться и сворачиваться в панель задач.

FormBorderStyleSizable

SizableToolWindow — Окно может изменять размер окна, разворачивать окно на всё окно, сворачивать в панель задач. Однако кнопки MaximizeBox и MinimizeBox не отображаются. Так же окно не отображается в панели задач однако окно появляется при нажатии клавиш ALT+TAB.

FormBorderStyleSizableToolWindow

Управляющие кнопки

Для управления отображения управляющими кнопками используются следующие свойства ControlBox, MaximizeBox и MinimizeBox.

Свойство ControlBox управляет видимостью всей областью управляющих кнопок. По умолчанию она находиться в состоянии true.

DefaultFormTextHello

Зададим данному свойству значение false

FormControlBoxFalse

Если в форме свойству Text присвоить пустое значение, то шапка формы совсем исчезнет.

Вот так будет выглядеть форма:

FormNotTitle

Включим назад ControlBox и рассмотрим следующие свойства: MaximizeBox и MinimizeBox. Они тоже булевые и служат для того, что бы выключать кнопки развернуть окно и свернуть окно. По умолчанию они имеют свойство true. Рассмотрим как выглядит их выключение:

FormMaximizeBoxFalse

FormMinimizeBoxFalse

Однако, если выключить и MaximizeBox и MinimizeBox кнопки перестают быть видимыми:

FormMaximizeBoxMinimizeBoxFalse

Заметим так же, что отключение кнопок по одиночке или одновременно влияет не только на отображение этих кнопок и возможностями их использовать, но так же и на свойство формы. Так на форме с выключенным свойством MaximizeBox пользователю отключаются все стандартные возможности распахнуть форму на весь экран. Так же дела обстоят и с MinimizeBox.

С отключённым ControlBox отключается возможность изменять размер формы, но её можно распахнуть и свернуть, например сочитанием клваишь «win»+»up» и «win»+»down».

Иконка.

Иконка отображаемая в левом верхнем углу формы, а так же отображаемая в панели задач может определить через свойство формы Icon например вот так:

Где «d:\favicon.ico» это путь к иконке.

Если же мы не хотим, что бы иконка отображалась, то её можно скрыть, с помощью свойства ShowIcon установив его в состояние false. Если же шаблон окна не подразумевает наличия иконки, её так же можно включить через это свойство установи параметр truе

Элемент захвата

Для того, чтобы задать видимость захвата для изменения размера, отображаемого в правом нижнем углу формы. Нужно воспользоваться свойством SizeGripStyle. Оно имеет 3 значенич Auto, Hide, Show

Данное значение стоит по умолчанию. Форма сама решает отображать этот элемент или нет.

Элемент будет скрыт с формы.

FormSizeGripStyleHide

элемент отображается на форме

FormSizeGripStyleShow

Цвет и прозрачность.

Что бы задасть цвет формы нужно воспользоваться свойством BackColor, этот параметр будет наследоваться размещённым на данной форме управляющим элементам. Сделаем цвет рабочей области, например синим:

FormBackColor

Но однотонный цвет може не совсем удовлетворять нашим потребностям… для этого можно указать картинку в качестве заднего фона, с помощью свойства формы BackgroundImage

FormBackgroundImage

Мы так же можем определить, какой цвет на форме будет являтся «прозрачным» но этот эфект больше похож на вырезание дырок в форме, так как клик по прозрачной части формы будет обрабатываться не формой, а окном за ней. Для этого сначало, надо разрешить использовать прозрачность, для этого в свойстве AllowTransparency мы должны присвоить знчение true
$main_form.AllowTransparency =$true

А в свойстве TransparencyKey формы мы должны указать, какой цвет будет заменяться на прозрачный.

Эти параметры прозрачности будут так же наследоваться на управляющие элементы формы.

FormTransparencyKey

Это свойство можно использовать для рисования не стандартных окон убрав перед этим рамку формы

Если же мы не хотим делать дырки в форме, а всеволишь сделать её слегка прозрачной, мы можем воспользоваться свойством Opacity, значения в ней колеблятся от 0 это полностью прозрачная до 1, не прозрачная.

FormOpacity

Курсор

Для изменения вида курсора в приложении можно воспользоваться свойством формы Cursor:

После данного действия курсор над приложением будет заменятся на «d:\Cursor.cur».

Так же можно узнать перехватывается ли курсор приложением в даннй момент, для этого нужно посмотреть данные свойства формы Capture

Что бы уведомить пользователя о текущем процессе, можно так же включить курсор ожидания указав в свойстве UseWaitCursor значение true

Состояние окна.

Что бы узнать в каком состоянии находиться окно или изменить его, можно воспользоваться свойством формы WindowState оно принимает три значения Maximized, Minimized, Normal.

Что бы развернуть окно:

Свернуть в панель задач:

Перевести в обычный(свободный) режим:

Зеркальный вид окна

Так же есть возможность показать зеркальную форму обычно это используют для приложений в которых ввод текста происходит с права на лево.

Для этого нам нужно сначала включить поддержку ввода текста с права на лево свойством формы RightToLeft

У этого свойства кроме значения YES, который включает поддержку ввода текста с права на лево, существуют другие параметры. Это NO выключает поддержку ввода текста с права на лево. И Inherit — наследовать значения от родительского элемента, установленно по умолчанию.

Только после этого можно отобразить форму зеркально установив свойство формы RightToLeftLayout в значение true

FormMirrored

Посмотреть отображается ли форма в зеркальном виде можно из свойства формы IsMirrored.

Отображение в Панели задач.

Для того, что бы скрыть форму из панели задач, есть следующее свойство формы ShowInTaskbar. Это свойство имеет булевый тип и чтобы форма скрылась из пнели задач надо указать значение false. Однако эту форму можно будет найти по «Alt»+»Tab»

Видимость окна.

Так же если надо сделать, что бы форма не закрывалась другими окнами можно воспользоваться свойством TopMost. Если установить его в значение true то другие окна не смогут заслонить его.

Для формы существуют параметры видимости, но для отображения формы лучше пользоваться функция Enabled если установить его в значение false, то его не удасться отобразить методом ShowDialog().

Так же если надо скрыть форму, то это можно сделать изменив свойство Visible на false. Можно так же отобразить форму, но это может быть не всегда хорошей идеей, лучше пользоваться методом ShowDialog.

Комментарии:

Комментарии 12

Огромное спасибо за подробный разбор!
Очень сильно помогло в пониманиии концепции построения GUI для повершела =)

Приятно осознавать, что мой блог помогает людям. 🙂

Действительно подробно, практически на пальцах. Сохранил в избранном.;)
Но можно задать вопрос? 😉 Во всех «мануалах» рассказывается как сделать окно, как сделать кнопки, поля и т.д. Но я нигде не нашёл информации (тем более в доходчивой, простой форме как у Вас) — как сделать так, что бы окно не закрывалось при нажатии кнопок. Что бы окно было полноценным, т.с.
Например — есть поле ввода ФИО сотрудника, рядом кнопка «Выбор» или «Поиск» — ввел в поле часть фамилии, нажал на кнопку, запустилась часть скрипта которая делает выборку пользователей, открывается окно ISE со списком найденных пользователей, выбрал необходимого пользователя, нажал Ок, окно ISE закрылось, и в поле ввода уже появилось полное ФИО сотрудника, плюс в этом же окне сразу отобразилась необходимая информация (домен, срок действия пароля и т.д…. не суть), потом, если надо можно было бы воспользоваться еще какими нибудь кнопками, а вот когда нажмешь кнопку «Ок» или «Запустить», тогда уже запустится основная часть скрипта, сделает своё дело, и в этом же окне напишет результат. После этого можно либо закрыть окно кнопкой «Закрыть», «Отмена», кнопкой закрытия окна, либо воспользоваться скриптом (этим окном) еще раз.
Всё, что я не пробовал — ведёт к одному — как только нажму любую кнопку — окно закрывается. 🙁

Немного удивила проблема. А разве всё работает не так, как вы описали? 🙂
Как добирусь до винды с powershell попытаюсь состряпать какойнить пример… предположительно это будет завтра.

Читайте также: