You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#点击按钮打开图片查看器窗体后无法操作原窗体的问题

这问题我太熟悉了!你现在遇到的核心问题是图片查看器窗体被设置成了模态窗体——这种模式下,它会完全独占你的输入焦点,哪怕你把它最小化,主窗体的控件也会被锁住,必须关掉它才能继续操作主界面。

要解决这个其实很简单,只需要把窗体的打开方式改成非模态就行,具体操作看你用的UI框架:

WinForms 解决方案

你之前大概率是用了 ShowDialog() 方法打开窗体,这正是模态打开的原因。把它换成 Show() 就可以了:

// 替换前(模态,阻塞主窗体)
// var pictureViewer = new PictureViewerForm();
// pictureViewer.ShowDialog();

// 替换后(非模态,主窗体可正常操作)
var pictureViewer = new PictureViewerForm();
pictureViewer.Show(this); // 传入主窗体作为所有者,让两个窗体保持层级关联,可选但推荐

如果之前手动设置了窗体的 Modal 属性为 true,记得把它改成 false(不过用 Show() 的话默认就是非模态,一般不用额外设置)。

WPF 解决方案

WPF里的逻辑差不多,把 ShowDialog() 换成 Show(),如果需要让主窗体成为图片查看器的所有者,提前设置 Owner 属性:

// 替换前(模态)
// var pictureViewer = new PictureViewerWindow();
// pictureViewer.ShowDialog();

// 替换后(非模态)
var pictureViewer = new PictureViewerWindow();
pictureViewer.Owner = this; // 绑定主窗口为所有者
pictureViewer.Show();

额外小提示

如果之后需要在两个窗体之间做数据交互(比如主窗体更新图片查看器的内容),要注意跨窗体操作的线程安全问题——不过这是后话,先解决当前的交互阻塞问题就好啦!

内容的提问来源于stack exchange,提问作者anu

火山引擎 最新活动