Form.Show()不显示其子控件想在结构不良的应用程序中加载数据时使用它。问题是frmPleaseWait.Show()显示了表单,但没有显示其中的控件。它只是一个白色的矩形。现在frmPleaseWait.ShowDialog()显示子控件但不允许UI加载其数据。我错过了什么?下面是我尝试执行此操作的代码片段。请等待=新的frmPleaseWait();PleaseWait.Show(这个);//在HUD对象中设置所有可用的HUD值HUD.LastName=GetCurrentRowVal("LastName").Trim();HUD.FirstName=GetCurrentRowVal("FirstName")。修剪();HUD.PersonId=Convert.ToInt32(GetCurrentRowVal("PersonID").Trim());HUD.SSn=GetCurrentRowVal("SSN").Trim();HUD.MiddleName=GetCurrentRowVal("MiddleName")。修剪();HUD.MasterID=ConnectBLL.BLL.DriInterface.CheckForDriId(HUD.PersonId).ToString();//这会加载大量带有数据的UserControlsshellForm.FormPaint(HUD.PersonId);请稍候.Close();编辑:根据答案和我的尝试进行跟进。这就是我所拥有的,但是我在pleaseWaitInstance.Location=parent.PointToScreen(Point.Empty);处得到了一个跨线程异常。pleaseWaitInstance.Location=parent.PointToScreen(Point.Empty);如果我删除该行,它将运行但它在我的屏幕左上角运行并忽略应用程序的位置。publicpartialclassfrmPleaseWait:XtraForm{publicfrmPleaseWait(){InitializeComponent();}privatestaticfrmPleaseWaitpleaseWaitInstance;publicstaticvoidCreate(XtraFormparent){vart=newSystem.Threading.Thread(()=>{pleaseWaitInstance=();pleaseWaitInstance.FormClosed+=(s,e)=>pleaseWaitInstance=null;pleaseWaitInstance.StartPosition=FormStartPosition.Manual;pleaseWaitInstance.Location=parent.PointToScreen(Point.Empty);Application.Run(pleaseWaitInstance);});t.SetApartmentState(System.Threading.ApartmentState.STA);t.IsBackground=true;t.开始();}publicstaticvoidDestroy(){if(pleaseWaitInstance!=null)pleaseWaitInstance.Invoke(newAction(()=>pleaseWaitInstance.Close()));您的表单不起作用,因为shellForm不起作用。UI线程忙于加载和绘制控件,它无法同时绘制您的PleaseWait表单。您需要创建一个单独的线程来泵送消息循环以保持您的PWform处于活动状态。你可以让它像这样工作:publicpartialclassPleaseWait:Form{privatestaticPleaseWaitmInstance;publicstaticvoidCreate(){vart=newSystem.Threading.Thread(()=>{mInstance=newPleaseWait();mInstance.FormClosed+=(s,e)=>mInstance=null;Application.Run(mInstance);});t.SetApartmentState(System.Threading.ApartmentState.STA);t.IsBackground=true;t.开始();}publicstaticvoidDestroy(){if(mInstance!=null)mInstance.Invoke(newAction(()=>mInstance.Close()));}privatePleaseWait(){InitializeComponent();}//ETC..。示例用法:PleaseWait.Create();尝试{System.Threading.Thread.Sleep(3000);}最后{PleaseWait.Destroy();我有同样的问题,但这个解决方案并没有帮助我。我的方法如下:在program.cs中,我实例化“PleaseWait”-Form并将其作为参数提供给主表单:pleaseWaitFormpleaseWait=newpleaseWaitForm();应用程序运行(新Form1(请等待));Form1的构造函数是这样开始的:publicForm1(pleaseWaitFormpleaseWait){InitializeComponent();请稍等。显示();}这种方式很容易更改,即PleaseWait表单的进度条,而不会遇到线程问题。Sincerely,Volker以上是C#学习教程:Form.Show()不显示其子控件共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——本文来自网络收集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
