C# 未对System.Windows.Form中的UserControl调用UserControl.OnLoad
我有一个C# 未对System.Windows.Form中的UserControl调用UserControl.OnLoad,c#,winforms,C#,Winforms,我有一个ProjectView表单、一个ProjectView、一个项目。由于缺少初始化和数据,ProjectView.OnLoad方法未被调用,并在尝试显示ProjectView表单时导致应用程序崩溃 如何使用Project数据初始化ProjectView对象,即如何调用OnLoad [SmartPart] public partial class ProjectViewForm : Form { public ProjectViewForm() { Initi
ProjectView表单
、一个ProjectView
、一个项目
。由于缺少初始化和数据,ProjectView.OnLoad
方法未被调用,并在尝试显示ProjectView表单时导致应用程序崩溃
如何使用Project
数据初始化ProjectView
对象,即如何调用OnLoad
[SmartPart]
public partial class ProjectViewForm : Form
{
public ProjectViewForm()
{
InitializeComponent(); // gets here
}
protected override void OnLoad(System.EventArgs eventArgs)
{
System.Diagnostics.Trace.WriteLine(""); // doesn't get here
}
}
public partial class ProjectView : System.Windows.Forms.UserControl
{
public ProjectView()
{
InitializeComponent();
...
}
protected override void OnLoad(System.EventArgs eventArgs)
{
this._presenter.OnViewReady();
base.OnLoad(eventArgs);
... populate with Project data ...
}
}
Project
是一个POCO,其数据填充ProjectView
在ProjectViewForm.Designer.cs中,新的项目
和项目视图
被实例化:
partial class ProjectViewForm
{
private void InitializeComponent()
{
Project project1 = new Project();
System.ComponentModel.ComponentResourceManager resources = new
System.ComponentModel.ComponentResourceManager(typeof(ProjectViewForm));
this.projectView1 = new ProjectView();
this.SuspendLayout();
this.projectView1.SomeComponent1 = null;
this.projectView1.SomeComponent2 = null;
...
project1.SomeProperty1 = null;
project1.SomeProperty2 = null;
...
this.Controls.Add(this.projectView1);
this.ResumeLayout(false);
}
private ProjectView projectView1;
}
在控制器中,我有以下代码:
WorkItem.State["CurrentProject"] = project; // Project to display
string key = System.String.Concat("ProjectViewForm", project.Id);
ProjectViewForm projectViewForm = WorkItem.Items.Get<ProjectViewForm>(key); // calls ProjectViewForm constructor
if (projectViewForm == null)
{
projectViewForm = WorkItem.Items.AddNew<ProjectViewForm>(key);
}
else
{
projectViewForm.Focus();
}
projectViewForm.Enter += ProjectViewForm_Enter;
projectViewForm.Leave += ProjectViewForm_Leave;
string formTitle = System.String.Concat (project.Name, " - Status: ", project.ProjectStatusType.Text);
var info = new Microsoft.Practices.CompositeUI.WinForms.WindowSmartPartInfo();
info.Location = System.Windows.Forms.Cursor.Position;
... yadda yadda yadda ...
projectViewForm.Dock = System.Windows.Forms.DockStyle.Fill;
WorkItem.Workspaces[Infrastructure.Interface.Constants.WorkspaceNames.WindowsWorkspace].Show (projectViewForm, info);
WorkItem.State[“CurrentProject”]=project;//要显示的项目
string key=System.string.Concat(“ProjectViewForm”,project.Id);
ProjectViewForm ProjectViewForm=WorkItem.Items.Get(键);//调用ProjectViewForm构造函数
if(projectViewForm==null)
{
projectViewForm=WorkItem.Items.AddNew(键);
}
其他的
{
projectViewForm.Focus();
}
projectViewForm.Enter+=projectViewForm\u Enter;
projectViewForm.Leave+=projectViewForm\u Leave;
string formTitle=System.string.Concat(project.Name,“-Status:”,project.ProjectStatusType.Text);
var info=new Microsoft.Practices.CompositeUI.WinForms.WindowSmartPartInfo();
info.Location=System.Windows.Forms.Cursor.Position;
... 雅达雅达雅达雅达。。。
projectViewForm.Dock=System.Windows.Forms.DockStyle.Fill;
WorkItem.Workspaces[Infrastructure.Interface.Constants.WorkspaceNames.WindowsWorkspace].Show(项目视图表单,信息);
你是说,如果你在该用户控件的OnLoad方法中设置了调试停止,它永远不会停止吗?这是正确的。我们不能在我们这边重新创建类似的东西。如上所述,OnLoad
在控件第一次显示时调用,因此在显示其容器时调用。否则,当容器初始化其控件(或您的代码显式初始化它)时,只调用构造函数。您是否将ProjectView
添加到表单的组件
集合中?它不在您显示的InitializeComponents
中。您是说,如果您在该用户控件的OnLoad方法中放置调试停止,它永远不会停止在那里吗?这是正确的。我们无法在我们这边重新创建类似的内容。如前所述,在控件首次显示时调用OnLoad
,因此,当显示其容器时。否则,当容器初始化其控件(或您的代码显式初始化它)时,只调用构造函数。您是否将ProjectView
添加到表单的组件
集合中?它不在您显示的初始化组件中。