Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UserControl/TreeView问题…运行时未获得结果_C#_Winforms - Fatal编程技术网

C# UserControl/TreeView问题…运行时未获得结果

C# UserControl/TreeView问题…运行时未获得结果,c#,winforms,C#,Winforms,我的问题是,我正在用户控件中使用TreeView。在调试时,我可以看到结果添加到TreeView中,但当我在MainForm上使用该UserControl时,不会发生这种情况。包含TreeView的UserControl在主应用程序运行时保持空白。我还在主项目中引用了UserControl项目。在这里,我给出了帮助我的代码 提前谢谢 代码: 在UserControl类中: public override void Refresh() { PopulateTreeView(); } priv

我的问题是,我正在用户控件中使用TreeView。在调试时,我可以看到结果添加到TreeView中,但当我在MainForm上使用该UserControl时,不会发生这种情况。包含TreeView的UserControl在主应用程序运行时保持空白。我还在主项目中引用了UserControl项目。在这里,我给出了帮助我的代码

提前谢谢

代码

在UserControl类中:

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);
}
private void button1_Click(object sender, EventArgs e)
{
   UserControl userControl = new UserControl();
   userControl.Refresh();
}
在我的主窗体中:

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);
}
private void button1_Click(object sender, EventArgs e)
{
   UserControl userControl = new UserControl();
   userControl.Refresh();
}

在按钮的单击事件中,您正在创建一个新的UserControl,而不是实际使用放置在MainForm上的UserControl

或者,必须对MainForm上的UserControl调用Refresh(),或者必须将新创建的UserControl添加到MainForm的ControlsCollection

使用VisualStudio的设计器添加UserControl时,MainForm应包含名为userControl1的变量。在这个问题上,您可以调用Refresh()。然后您应该看到预期的结果和填充的树视图

private void button1_Click(object sender, EventArgs e)
{
  userControl1.Refresh();  // Assume that the name of UserControl is userControl1
}
如果希望在每次单击按钮时使用新的UserControl,则必须将该控件添加到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
}