我正在搜索如何在恢复最小化窗口之前询问密码。
实际上,当我恢复窗口时,在显示密码对话框之前,主窗体是可见的。 (我使用“调整大小”事件在表单还原时调用我的密码对话框。)
但我需要在主窗体可见之前显示密码对话框(因为它包含未经授权的人无法看到的敏感数据)
在验证passord之前,任何想法都要使主窗体不可见。
感谢
答案 0 :(得分:5)
您可以处理表单的Resize
事件,并在最小化时使所有控件不可见。
然后,依次处理正在恢复的表单的Resize
事件,请求密码并再次显示所有控件。
E.g:
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.
}
}
为了简化控件的显示/隐藏,只需使用Panel
控件作为表单的唯一直接子项,将所有控件放在此面板中并使其成为可见/隐身:
(图片中的绿色代码表示Panel
控件)
答案 1 :(得分:4)
这听起来像是一种解决方法。为什么不创建覆盖面板或使用窗口内容的可见性?然后,您可以完全控制人们可以看到的内容。
如前所述,应用预览(以及alt +标签,窗口+标签等)也会显示内容。
答案 2 :(得分:1)
您可以将表单的Visible
- 属性设置为false
,直到输入密码,这样表单才真正可见,但我同意Aphelion的说法,叠加效果可能更好选择...
答案 3 :(得分:0)
更安全/更可靠的方法是在最小化时简单地清除应用程序的内容。
给你创建一个文本框的叠加层输入密码,你就是金色的。
答案 4 :(得分:0)
所有提议的解决方案都不起作用: 在调整大小事件发生之前,Win7似乎会截取您的应用程序的屏幕截图,因此即使您添加了一个面板(或者如果您尝试隐藏某些控件),主窗体仍然可以在缩略图中看到。
我发现的解决方案:点击最小化按钮并在主窗体上显示一个面板 - >这发生在调整大小事件之前,Windows 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);
}