2010-05-26 25 views
1

我的问题是,我在UserControl中使用TreeView。在调试时,我可以看到结果在TreeView中添加,但是当我将该UserControl用于MainForm时,不会发生这种情况。包含TreeView的UserControl在主应用程序运行时保持空白。我也使用我的主项目引用了UserControl项目。我在这里给我的代码来帮助我。UserControl/TreeView问题....在运行时没有得到结果

在此先感谢。

代码

在用户控件类:

public override void Refresh() 
{ 
    PopulateTreeView(); 
} 
private void PopulateTreeView() 
{ 
    TreeNodeCollection treeNodeCollection; 
    treeNodeCollection = CreateParentNode("My Information"); 
    CreateChildNode(treeNodeCollection, "Name"); 
    CreateChildNode(treeNodeCollection, "Address"); 
    this.Update(); 
    myTreeView.ExpandAll(); 
} 
private TreeNodeCollection CreateParentNode(string parentNode) 
{ 
    TreeNode treeNode = new TreeNode(parentNode); 
    myTreeView.Nodes.Add(treeNode); 
    return treeNode.Nodes; 
} 
private void CreateChildNode(TreeNodeCollection nodeCollection, string itemName) 
{ 
    TreeNode treeNode = new TreeNode(itemName); 
    nodeCollection.Add(treeNode); 
} 

在我的MainForm:

private void button1_Click(object sender, EventArgs e) 
{ 
    UserControl userControl = new UserControl(); 
    userControl.Refresh(); 
} 

回答

0

在您创建按钮的点击事件一个新的用户控件,并没有实际使用用户放置在您的MainForm上的控件。

要么你必须在你的MainForm上的UserControl上调用Refresh(),或者你必须将新创建的UserControl添加到MainForm的ControlsCollection中。

当您将UserControl与VisualStudio的Designer一起添加时,MainForm应包含一个名为userControl1的变量。在这你可以调用Refresh()。然后你应该看到预期的结果和填充的TreeView。

private void button1_Click(object sender, EventArgs e) 
{ 
    userControl1.Refresh(); // Assume that the name of UserControl is userControl1 
} 

如果您想使用一个新的用户控件每次单击该按钮,您必须将控件添加到MainForm的的ControlsCollection。但是你必须执行一些布局逻辑。

private void button1_Click(object sender, EventArgs e) 
{ 
    UserControl userControl = new UserControl(); 
    userControl.Refresh(); 
    this.Controls.Add(userControl); 
    // Perform layout logic and possibly remove previous added UserControl 
}