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 file到SymbologyControl
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中编译通过。
转自:http://www.gissky.net/Article/1563_2.htm