public partial class Form1 : Form
{
private Form _childForm; //确保只显示一个(对话框)窗体
public Form1()
{
InitializeComponent();
}
protected override void OnActivated(EventArgs e)
{
//当本窗体被激活时,子窗体存在,就激活子窗体(仿模式窗体)
if (_childForm != null)
{
_childForm.Invoke(new Action(_childForm.Activate));//激活
}
base.OnActivated(e);
}
private void button1_Click(object sender, EventArgs e)
{
if (_childForm != null) //防止重复显示(防止意外的意外,可以省略)
return;
this.Enabled = false;//禁用窗体,防止意外
_childForm = new Form2();
//Form2 是需要显示的对话框,可以在上面写你提示的文字信息等
//去除标题栏(防止改大小关闭等等)
_childForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
//不在任务栏显示
_childForm.ShowInTaskbar = false;
//初始位置在显示器中央
_childForm.StartPosition = FormStartPosition.CenterScreen;
//以上3项均可以在窗体属性中直接设置
//绑定关闭事件
_childForm.FormClosed += new FormClosedEventHandler(ChildFormOnFormClosed);
_childForm.Show();//弹出
//这里做你需要做的操作
_childForm.Close();//关闭
}
private void ChildFormOnFormClosed(object sender, FormClosedEventArgs e)
{
this.Enabled = true;//仿对话框关闭时,重启用窗体
_childForm.FormClosed -= ChildFormOnFormClosed;//解除绑定,可以省略
_childForm = null;//确保下次能再次弹出窗体
}
}
还有些小漏洞,再说吧
创建一个新的Form设个半透明 具体自己美化 然后用主页面showdialog() 这个新建的FORM
主页面执行任务用线程去执行 线程任务结束时 关闭这个子页面
这个思路差不多能满足你的要求吧
你就在执行过程中,直接在当前窗体显示一个“执行中……”,然后把enable设成false,执行完再改成true
showdialog()自动关闭会有问题吧
第一个想到的是panel,用showdialog(),因为panel可以很好的设计外观,让页面更和谐,当然也有其他的方法
用组件和窗体都可以实现。
顺便完成任务。