Спросите пароль перед восстановлением свернутого окна - PullRequest
2 голосов
/ 23 января 2012

Я ищу, как запросить пароль перед восстановлением свернутого окна.

На самом деле, когда я восстанавливаю окно, главная форма отображается перед отображением диалогового окна пароля.(Я использую событие «Изменить размер» для вызова диалогового окна ввода пароля при восстановлении формы.)

Но мне нужно показать диалоговое окно ввода пароля до того, как будет видна основная форма (поскольку она содержит важныеданные, которые не могут быть видны посторонним лицам)

Любая идея сделать главную форму невидимой, пока пароль не будет проверен.

спасибо

Ответы [ 5 ]

5 голосов
/ 23 января 2012

Вы можете обработать событие Resize формы и сделать все элементы управления невидимыми при минимизации .

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

Например:

private void MyForm_Resize(object sender, EventArgs e)
{
    if ( WindowState == FormWindowState.Minimized )
    {
        // Hide controls.
    }
    else if ( WindowState == FormWindowState.Normal )
    {
        // Ask for password, then show controls.
    }
}

Чтобы упростить отображение / скрытие элементов управления, просто используйте *Элемент управления 1014 * как единственный прямой дочерний элемент формы, поместите все элементы управления внутри этой панели и сделайте этот элемент видимым / невидимым:

enter image description here

(зеленый визображение символизирует Panel элемент управления)

4 голосов
/ 23 января 2012

Это звучит как обходной путь. Почему бы не создать оверлейную панель или работать с видимостью содержимого окна? Тогда вы полностью контролируете то, что могут видеть люди.

Как уже говорилось, предварительный просмотр приложения (и вкладка alt +, вкладка windows + и т. Д.) Также покажет содержимое.

1 голос
/ 23 января 2012

Вы можете установить Visible -Свойство формы на false до тех пор, пока пароль не будет введен, так что форма на самом деле не видна, но я согласен с Aphelion, что наложение может быть лучшим выбором ...

0 голосов
/ 24 января 2012

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

Решение, которое я нашел: поймать щелчок на кнопке минимизации и отобразить панель над главной формой -> это происходит непосредственно перед событием изменения размера, и окна 7 принимают эту картинку в качестве эскиза.

и пример кода:

    private const int WM_SYSCOMMAND = 0x0112; 
    private const int SC_MINIMIZE = 0xf020;
    protected override void WndProc(ref Message m) 
    { 
        if (m.Msg == WM_SYSCOMMAND) 
        { 
            if (m.WParam.ToInt32() == SC_MINIMIZE) 
            { 
                m.Result = IntPtr.Zero; 
                panel1.Height = this.Height; // cover the whole form
                panel1.Width = this.Width;
                panel1.Visible = true; // make it visible
            }
        } 
        base.WndProc(ref m); 
    } 
0 голосов
/ 23 января 2012

Более безопасный / более надежный подход заключается в простом отключении содержимого вашего приложения при минимизации.

Дайте наложение, которое вы создаете текстовое поле для ввода пароля, и вы золотой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...