Posted on 2006-06-01 11:51
东人EP 阅读(702)
评论(1) 编辑 收藏 引用 所属分类:
MapInfo
把鼠标放在图元上点击一下,就能出现tips,但是这个tips的内容是系统生成的,并且只能显示一行,也不知道能不能编程修改它的显示方式,所以我就写了几行代码,来实现自定义的多行tips显示。
步骤:
1)在Winform中加入MapControl和一个TextBox
2)将TextBox的属性MultiLine设为True, Visable设为False,BorderStyle设为FixSingle
3)捕获MapControl1的MouseDown和MouseUp事件,函数内容如下:
private void mapControl1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
//如果没有转载任何tab文件,则返回
if(mapControl1.Map.Layers.Count == 0 || this.currentLayerName=="")//currentLayerName是顶层Layer的名字,同时也是Table的名字
return;
MapInfo.Engine.Selection selection=MapInfo.Engine.Session.Current.Selections.DefaultSelection;
MapInfo.Data.Table table=MapInfo.Engine.Session.Current.Catalog.GetTable(currentLayerName);
MapInfo.Data.IResultSetFeatureCollectionfeatureCollection=selection[table];
//如果没有选中任何图元,或者选中多个图元,则返回
if(featureCollection==null||featureCollection.Count!=1)
return;
//取第一个图元
MapInfo.Geometry.Geometry geometry=featureCollection[0].Geometry;
//创建连接和命令来查询table中的数据
MapInfo.Data.MIConnection connection=new MapInfo.Data.MIConnection();
MapInfo.Data.MICommand command=connection.CreateCommand();
command.CommandText="SELECT * FROM "+currentLayerName+" WHERE Objwithin @featureObject";
command.Parameters.Add("@featureObject",geometry);
connection.Open();
MapInfo.Data.MIDataReader dataReader=command.ExecuteReader();
int n=dataReader.FieldCount;
this.textBoxInfoTips.Clear();
//把查询到的内容放进tips中
for(int i=0;i<n;i++)
{
this.textBoxInfoTips.AppendText(dataReader.GetName(i)+"\t");
}
this.textBoxInfoTips.AppendText("\n");
while(dataReader.Read())
{
for(int i=0;i<n;i++)
{
object o=dataReader.GetValue(i);
if(o==DBNull.Value)
this.textBoxInfoTips.AppendText("null\t");
else
this.textBoxInfoTips.AppendText(o.ToString()+"\t");
}
this.textBoxInfoTips.AppendText("\n");
}
//改变tips的显示位置
this.textBoxInfoTips.Location=new System.Drawing.Point(e.X,e.Y+50);
this.textBoxInfoTips.Visible=true;
}
private void mapControl1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
this.textBoxInfoTips.Visible=false;
}
=====
代码已测试通过。