2010-05-26 1 views
1

Моя проблема: я использую TreeView в UserControl. Во время отладки я вижу, что результаты добавляются в TreeView, но этого не происходит, когда я использую этот UserControl для моего MainForm. UserControl, содержащий TreeView, остается пустым во время выполнения основного приложения. Я также ссылался на проект UserControl с моим основным проектом. Здесь я даю свой код для того, чтобы помочь мне.UserControl/TreeView Проблема .... Не получить результат во время выполнения

Заранее спасибо.

Код:

В классе 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); 
} 

В моей MainForm:

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

ответ

0

В Click-событий кнопки вы создаете новый UserControl и фактически не использует пользователя Управление, которое помещается на ваш MainForm.

Либо вы должны вызвать Refresh() в UserControl, который находится на вашем MainForm, либо вам нужно добавить вновь созданный UserControl в ControlsCollection MainForm.

Когда вы добавили UserControl с конструктором VisualStudio, MainForm должен содержать переменную с именем userControl1. На этом вы вызываете Refresh(). Затем вы увидите ожидаемый результат и заполненный TreeView.

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

Если вы хотите использовать новый UserControl каждый раз, когда вы нажимаете на кнопку, вы должны добавить элемент управления в ControlsCollection в MainForm. Но тогда вам нужно выполнить некоторую логику компоновки.

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 
} 
Смежные вопросы