c # Form.Hide () против Form.Opacity = 0 - PullRequest
4 голосов
/ 31 мая 2011

Мне было интересно, есть ли какие-то ошибки для создания полностью прозрачной формы (в отличие от ее сокрытия). Например, я знаю, что это то, что застало меня врасплох, когда я скрывал форму:

  1. Если форма скрыта, вы не можете взаимодействовать с ее элементами управления (не можете добавить HTML в элемент управления веб-браузера, не можете нажать кнопку и т. Д.)
  2. Изменение WindowState (свернутого, развернутого и т. Д.) Окна, когда оно скрыто, приведет к тому, что окно появится за пределами вашей рабочей области, когда форма снова будет показана.

Кто-нибудь сталкивался с подобными проблемами (или совершенно другими!) При использовании формы с прозрачностью 0 (полностью прозрачной)?

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Из голосов за мой комментарий, я думаю, я отправлю его в качестве ответа. Я бы не рекомендовал использовать Form.Opacity = 0. Даже если вы можете отключить форму, чтобы предотвратить случайное взаимодействие, я думаю, прозрачная форма будет перекрывать другие окна и вводить пользователя в заблуждение относительно того, почему он не может взаимодействовать с окнами за вашим прозрачным.

Что касается полученных для Form.Hide(), я обычно ставлю в очередь ответы формы так, чтобы, когда форма возвращается в представление (или видимость), она проходит через очередь для обработки действий (т.е. изменения FormState). Изменение формы, пока она скрыта, также может сбить пользователя с толку.

1 голос
/ 31 мая 2011

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

frmMain.Opacity = 0; // To make it invisible.
frmMain.VisibleInTaskbar = false; // To make the taskbar entry of the form disappear, and to make sure that the WindowState isn't changed.
frmMain.Enabled = false; // To make sure the user doesn't type something in the form, or presses a button (by pressing enter) by accident.
...