【问题标题】:How can I use an event to cause a method to run?如何使用事件使方法运行?
【发布时间】:2008-09-25 18:35:50
【问题描述】:

所以在我的文档中它说:

公共事件 TreeViewPlusNodeCheckedEventHandler NodeChecked()

您可以使用此事件来运行,以使方法在任何时候运行 在树上选中节点的复选框。

那么,如何在我的代码隐藏文件中添加一个在检查节点时将运行的方法?我要运行的方法是:

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();
    }
}

与 2008 年相比 C# .net 3.5

【问题讨论】:

    标签: c# .net events methods


    【解决方案1】:

    您需要为事件分配一个委托并让它运行您想要的方法。类似的东西:

    TreeViewControl.NodeChecked += new TreeViewPlusNodeCheckedEventHandler(TOCNodeCheckedServer)

    【讨论】:

      【解决方案2】:

      只需为事件添加一个处理程序。

      myTreeView.NodeChecked += new TreeViewPlusNodeCheckedEventHandler(TOCNodeCheckedServer);
      

      或者(因为实际上不需要实例化 TreeViewPlusNodeCheckedEventHandler)

      myTreeView.NodeChecked += TOCNodeCheckedServer;
      

      【讨论】:

        【解决方案3】:

        这是为事件注册处理程序的标准案例

        treeView.NodeChecked += TOCNodeCheckedServer;
        

        【讨论】:

        • 我应该把线放在哪里?在方法之外?
        • 可以访问 treeView 变量的任何地方。对于在设计时创建的 TreeView,Form 的构造函数或加载处理程序将起作用。
        【解决方案4】:

        关于表单添加的初始化方法

        TOCTree.NodeChecked += new TreeViewPlusNodeCheckedEventHandler (TOCNodeCheckedServer);
        

        这将告诉您的应用在 TOCNode 触发 NodeChecked 事件时运行 TOCNodeCheckedServer。

        网络上有大量资源解释了它的工作原理。查看http://www.csharphelp.com/archives/archive253.html 举个例子。

        【讨论】:

        • 原谅我的无知,但是当我查看我的 .cs 文件时,我没有看到初始化表单的方法。我错过了什么?
        • 表单上是否有先运行的方法?没有看到你的代码的加载方法很难说,但你应该有一个方法,它是表单的入口点。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-07
        • 1970-01-01
        • 2015-05-01
        • 2014-11-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多