http://www.gissky.net- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> ArcObjects开发 >> 正文

《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现2

作者:3SDN.Net    文章来源:3SDN原创    点击数:    更新时间:2009-5-12
摘要:在第七讲 图层符号选择器的实现的第一阶段中,我们完成了符号选择器窗体的创建与调用。在第二阶段中,我们继续完成符号参数的调整与“更多符号”的加载。

2.7     添加更多符号菜单

还记得我们在开始的时候添加了ContextMenuStrip控件吗?现在它终于派上用场了。我们要实现的功能是:单击“更多符号”弹出菜单(ContextMenu),菜单中列出了ArcGIS自带的其它符号,勾选相应的菜单项就可以在SymbologyControl中增加相应的符号。在菜单的最后一项是“添加符号”,选择这一项时,将弹出打开文件对话框,我们可以由此选择其它的ServerStyle文件,以加载更多的符号。

(1)       定义全局变量

SymbolSelectorFrm中定义如下全局变量,用于判断菜单是否已经初始化。

 //菜单是否已经初始化标志

bool contextMenuMoreSymbolInitiated = false;

(2)       双击“更多符号”按钮,添加Click事件。

在此事件响应函数中,我们要完成ServerStyle文件的读取,将其文件名作为菜单项名称生成菜单并显示菜单。代码如下:

 

/// <summary>

/// “更多符号按下时触发的事件

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnMoreSymbols_Click(object sender, EventArgs e)

{

    if (this.contextMenuMoreSymbolInitiated == false)

    {

        string sInstall = ReadRegistry("SOFTWARE\\ESRI\\CoreRuntime");

        string path = System.IO.Path.Combine(sInstall, "Styles");

        //取得菜单项数量

        string[] styleNames = System.IO.Directory.GetFiles(path, "*.ServerStyle");

        ToolStripMenuItem[] symbolContextMenuItem = new ToolStripMenuItem[styleNames.Length + 1];

        //循环添加其它符号菜单项到菜单

        for (int i = 0; i < styleNames.Length; i++)

        {

            symbolContextMenuItem[i] = new ToolStripMenuItem();

            symbolContextMenuItem[i].CheckOnClick = true;

            symbolContextMenuItem[i].Text = System.IO.Path.GetFileNameWithoutExtension(styleNames[i]);

            if (symbolContextMenuItem[i].Text == "ESRI")

            {

                symbolContextMenuItem[i].Checked = true;

            }

            symbolContextMenuItem[i].Name = styleNames[i];

        }

        //添加更多符号菜单项到菜单最后一项

        symbolContextMenuItem[styleNames.Length] = new ToolStripMenuItem();

        symbolContextMenuItem[styleNames.Length].Text = "添加符号";

        symbolContextMenuItem[styleNames.Length].Name = "AddMoreSymbol";

        //添加所有的菜单项到菜单

        this.contextMenuStripMoreSymbol.Items.AddRange(symbolContextMenuItem);

        this.contextMenuMoreSymbolInitiated = true;

    }

    //显示菜单

    this.contextMenuStripMoreSymbol.Show(this.btnMoreSymbols.Location);

}

 

(3)       添加contextMenuStripMoreSymbol控件的ItemClicked事件。

当单击某一菜单项时响应ItemClicked事件,将选中的ServerStyle文件导入到SymbologyControl中并刷新。当用户单击“添加符号”菜单项时,弹出打开文件对话框,供用户选择其它的ServerStyle文件。代码如下:

 

/// <summary>

/// “更多符号按钮弹出的菜单项单击事件

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void contextMenuStripMoreSymbol_ItemClicked(object sender, ToolStripItemClickedEventArgs e)

{

    ToolStripMenuItem pToolStripMenuItem = (ToolStripMenuItem)e.ClickedItem;

    //如果单击的是添加符号

    if (pToolStripMenuItem.Name == "AddMoreSymbol")

    {

        //弹出打开文件对话框

        if (this.openFileDialog.ShowDialog() == DialogResult.OK)

        {

            //导入style fileSymbologyControl

            this.axSymbologyControl.LoadStyleFile(this.openFileDialog.FileName);

            //刷新axSymbologyControl控件

            this.axSymbologyControl.Refresh();

        }

    }

    else//如果是其它选项

    {

        if (pToolStripMenuItem.Checked == false)

        {

            this.axSymbologyControl.LoadStyleFile(pToolStripMenuItem.Name);

            this.axSymbologyControl.Refresh();

        }

        else

        {

            this.axSymbologyControl.RemoveFile(pToolStripMenuItem.Name);

            this.axSymbologyControl.Refresh();          

        }

    }          

}   

2.8     编译运行

相信你已经盼这一步很久了吧,按照惯例,按下F5吧!大功造成。

以上代码在AE9.2+VS2005+XP中编译通过。

上一页  [1] [2] 

Tags:ArcGIS Engine  
责任编辑:gissky
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 中国地图