求助:如何锁定一个Form的主界面?

btman52 2012-10-26 10:31:04
程序要执行某些耗时较长的功能,已经使用线程处理并能获取值。
现在的问题是需要在线程执行时锁定主界面,就像显示messagebox时禁止主窗体获取焦点一样。
问题很简单,让各位见笑了,求解。
...全文
210 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hauk 2012-10-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

你弄个进度条不就可以了,你直接不让点用户还以为卡住了,直接任务管理器给你强制结束了。。。
[/Quote]

我也建议这样做,做一个和窗体一样大的picturebox,放一张GIF的正在加载样式的图片。
需要的时候把他搞出来就可以了。
kxloveh 2012-10-26
  • 打赏
  • 举报
回复
在Form1中调用:
Form2 f2 = new Form2();
f2.ShowDialog();

在Form2中加入:

protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)
{
return;
}
base.WndProc(ref m);
}

这样就可以让Form2无法关闭了,然后你可以在程序处理完后自己关闭
btman52 2012-10-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
http://topic.csdn.net/u/20100625/10/cb0c1519-2a87-460a-8baa-c554b534d651.html
[/Quote]
感谢,结贴
oh51888 2012-10-26
  • 打赏
  • 举报
回复
你弄个进度条不就可以了,你直接不让点用户还以为卡住了,直接任务管理器给你强制结束了。。。
SocketUpEx 2012-10-26
  • 打赏
  • 举报
回复
        private Int32 WM_NCHITTEST = 0x0084;

Boolean _bSwitch = false;

protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0084)
{
if (_bSwitch)
{
return;
}
}

base.WndProc(ref m);
}

private void button1_Click(object sender, EventArgs e)
{
_bSwitch = !_bSwitch;
}


干掉WM_NCHITTEST消息

wuyq11 2012-10-26
  • 打赏
  • 举报
回复
执行时弹出执行窗口,显示进度条进度条
Tragedy 2012-10-26
  • 打赏
  • 举报
回复
就像显示messagebox时禁止主窗体获取焦点一样 ,使用模式窗口
Hauk 2012-10-26
  • 打赏
  • 举报
回复
this.Enabled = false;这样?

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧