当前位置: 首页 > 编程语言 > C#

Windows.Forms,在非模态状态下显示禁用窗体Share

时间:2023-04-10 16:28:01 C#

Windows.Forms,在非模态状态下显示禁用窗体我在非模态状态下显示禁用窗体时遇到了一些问题。下面是示例代码:publicpartialclassForm1:Form{//....privatevoidbutton1_Click(objectsender,EventArgse){try{Form2form=newForm2();form.Enabled=false;表格.显示();//有效,但表单没有所有者//form.Show(this);//给出一个System.InvalidOperationException//...//...我的程序在这里显示一个消息框,向用户询问一些东西//...当“表单”显示在后台时form.Close();}catch(Exceptionex){MessageBox.Show(ex.Message);}}}知道为什么Show()(不带参数)有效,但是Show(this)会抛出异常吗?在我的场景中,表单必须知道它的所有者才能正确显示它,所以我可以这样做:form.Enabled=false;form.Owner=这个;形式.显示();但这真的是一个很好的解决方案吗?编辑:感谢您的快速回答。看来我们真的在这里的框架中发现了一个错误。尽管有您的建议,但我认为我会坚持我的解决方案,因为在“显示”后禁用表单会对用户产生丑陋的可见效果。那或调用Show(this)然后禁用它是我能想到的两种方法。这是典型的剪切和粘贴错误。看起来他们复制了ShowDialog()中的代码,显示禁用的表单,因为对话框不起作用。用户将被卡住,无法再做任何事情。但是他们忘记删除Show()方法中的测试。只需在Show()调用后禁用它。来自Microsoft的参考资料来源:publicvoidShow(IWin32Windowowner){if(owner==this){thrownewInvalidOperationException(SR.GetString("OwnsSelfOrOwner",newobject[]{"Show"}));}if(base.Visible){thrownewInvalidOperationException(SR.GetString("ShowDialogOnVisible",newobject[]{"Show"}));}//这里!!!如果(!base.Enabled){thrownewInvalidOperationException(SR.GetString("ShowDialogOnDisabled",newobject[]{"Show"}));}if(!this.TopLevel){thrownewInvalidOperationException(SR.GetString("ShowDialogOnNonTopLevel",newobject[]{"Show"}));}if(!SystemInformation.UserInteractive){thrownewInvalidOperationException(SR.GetString("CantShowModalOnNonInteractive"));}if(((owner!=null)&&((((int)UnsafeNativeMethods.GetWindowLong(newHandleRef(owner,Control.GetSafeHandle(owner)),-20))&8)==0))&&(owneris控制)){owner=((Control)owner).TopLevelControlInternal;顺便说一下,声明了一个MSConnect错误。以上就是C#学习教程:Windows.Forms,在非模态状态下显示所有被禁用窗体共享的内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处: