最好通过将打开的表单与另一个无边框且大小相同的表单重叠来完成.这允许您确保禁用整个表单,包括控件和标题栏.在项目中添加一个新类并粘贴此代码:
using System;
using System.Drawing;
using System.Collections.Generic;
using System.Windows.Forms;
class DialogOverlay : IDisposable {
public DialogOverlay() {
var cnt = Application.OpenForms.Count;
for (int ix = 0; ix < cnt; ++ix) {
var form = Application.OpenForms[ix];
var overlay = new Form { Location = form.Location, Size = form.Size, FormBorderStyle = FormBorderStyle.None,
ShowInTaskbar = false, StartPosition = FormStartPosition.Manual, AutoScaleMode = AutoScaleMode.None };
overlay.Opacity = 0.3;
overlay.BackColor = Color.Gray;
overlay.Show(form);
forms.Add(overlay);
}
}
public void Dispose() {
foreach (var form in forms) form.Close();
}
private List<Form> forms = new List<Form>();
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
private void DialogButton_Click(object sender, EventArgs e) {
using (new DialogOverlay())
using (var dlg = new Dialog()) {
if (dlg.ShowDialog(this) == DialogResult.OK) {
// etc...
}
}
}
Run Code Online (Sandbox Code Playgroud)
调整Opacity和BackColor属性以调整效果.它适用于任何类型的对话框,包括OpenFileDialog等内置对象,以及应用程序中的任何开放表单集.请注意Application.OpenForms是一个小小的错误.
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |