Como posso usar um evento para causar um método para executar?
Pergunta
Então, na minha documentação diz:
evento público TreeViewPlusNodeCheckedEventHandler NodeChecked ()
Você pode usar esse evento para corrida causa um método para executar sempre que o check-box para um nó é verificado na árvore.
Então, como posso adicionar um método para o meu código por trás do arquivo que será executado quando um nó está marcada? O método que eu quero correr é:
protected void TOCNodeCheckedServer(object sender, TreeViewPlusNodeEventArgs args)
{
TreeViewPlusNode aNode = args.Node;
if (!aNode.Checked)
return;
List<string> BaseLayers = new List<string>();
_arcTOCConfig.BaseDataLayers.CopyTo(BaseLayers);
List<MapResourceItem> mapResources = new List<MapResourceItem>();
if (BaseLayers.Contains(aNode.Text))
{
foreach (BaseDataLayerElement anEl in _arcTOCConfig.BaseDataLayers)
{
if (!aNode.Text.Equals(anEl.Name))
{
if (aNode.TreeViewPlus.Nodes.FindByValue(anEl.Name).Checked)
{
aNode.TreeViewPlus.Nodes.FindByValue(anEl.Name).Checked = false;
aNode.TreeViewPlus.Nodes.FindByValue(anEl.Name).Refresh();
MapResourceItem aMapResource = this.Map1.MapResourceManagerInstance.ResourceItems.Find(anEl.Name);
aMapResource.DisplaySettings.Visible = false;
this.Map1.RefreshResource(anEl.Name);
mapResources.Add(aMapResource);
this.Map1.MapResourceManagerInstance.ResourceItems.Remove(aMapResource);
}
else
{
MapResourceItem aMapResource = this.Map1.MapResourceManagerInstance.ResourceItems.Find(anEl.Name);
mapResources.Add(aMapResource);
this.Map1.MapResourceManagerInstance.ResourceItems.Remove(aMapResource);
}
}
}
foreach (MapResourceItem aMapResource in mapResources)
{
int count = this.Map1.MapResourceManagerInstance.ResourceItems.Count - 1;
this.Map1.MapResourceManagerInstance.ResourceItems.Insert(count, aMapResource);
this.Map1.MapResourceManagerInstance.CreateResource(aMapResource);
}
this.Map1.InitializeFunctionalities();
this.Map1.Refresh();
}
}
VS 2008 c # NET 3.5
Solução
Você precisa atribuir um delegado para o evento e tê-lo executar o método que você deseja. Algo como:
TreeViewControl.NodeChecked + = new TreeViewPlusNodeCheckedEventHandler (TOCNodeCheckedServer)
Outras dicas
Basta adicionar um manipulador para o evento.
myTreeView.NodeChecked += new TreeViewPlusNodeCheckedEventHandler(TOCNodeCheckedServer);
ou (porque instanciar o TreeViewPlusNodeCheckedEventHandler não é realmente necessário)
myTreeView.NodeChecked += TOCNodeCheckedServer;
Este é um caso padrão de registrar um manipulador para um evento
treeView.NodeChecked += TOCNodeCheckedServer;
Em seu método Inicializar para a forma add
TOCTree.NodeChecked += new TreeViewPlusNodeCheckedEventHandler (TOCNodeCheckedServer);
Isto irá dizer seu aplicativo para executar TOCNodeCheckedServer quando o TOCNode aciona o evento NodeChecked.
Há um monte de recursos na web explicando como isso funciona. Confira http://www.csharphelp.com/archives/archive253.html como um exemplo.