Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 LINQ ADO.NET JavaScript DataGridView GridView AjaxPro DevExpress 面向对象 Extjs XML HTML教程 Oracle jQuery WPF MVC 分页 Office2010 GDI+ Visual C++2010 Dojo MySQL VB.NET WCF4.0 ASPxGridView WinForm textbox Sql2005 cookie Discuz!NT checkbox WCF SQL经典语句 T-SQL F# asp.net VS2008 SQL Ajax DropDownList VS2008新特性 TreeView Access Flex 页面执行时间 字符串 DataSet VB2005 回调 动画 C#时间 游戏 ASP.NET MVC
当前位置: 主页 > vs2010教程 >

C# 4.0(vs2010)中的动态类型和动态编程(2)

时间:2009-09-10 21:32来源:未知 作者:admin 点击:

4. 添加对HTML DOM对象的动态访问
  我们在Page类中添加两个dynamic类型的对象doc和win,分别表示当前页面和窗口,修改后Page类如下:

public partial class Page : UserControl
        {
        
// 添加的代码
            dynamic doc = HtmlPage.Document.AsDynamic();
            dynamic win
= HtmlPage.Window.AsDynamic();
        
//
}

  然后,我们修改Page类的函数btnSearch_Click(),当用户点击”Get All”按钮后,更加用户搜索的内容,修改窗口的标题。

void btnSearch_Click(object sender, RoutedEventArgs e)
        {
                doc.Title
= "Pictures of " + txtTag.Text;
                lstPictures.ItemsSource
= Source.LoadItems();
        }
 

  5. 添加Virtual Earth Jscript控件
  打开解决方案中的测试页StartPage.htm,在<title>标签的前面添加如下Jave Script代码,引用Virtual Earth控件:

<script type="text/javascript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.1"/>

  然后,在<body>标签中添加如下代码,定义地图控件的位置和大小:

<div id='myMap' style="position:absolute; top:40px; left:200px; width:550px; height:400px;"/>

  通过简单的两步,我们就完成了对测试页面的修改。接下来的工作就是通过C#访问和控制Virtual Earth控件了。

  6. 用C#代码控制Virtual Earth控件
  在Page类中添加如下代码控制Virtual Earth控件,以实现获取地图,添加Pin的功能:

dynamic map = null;

        
void GetMap()
        {
                map
= win.New.VEMap("myMap");
                map.LoadMap();
        }

        
void AddPin(Item item)
        {
                dynamic loc
= win.New.VELatLong(item.Latitude, item.Longitude);
                var pin
= map.AddPushpin(loc);
                pin.SetTitle(item.Title);
                pin.SetDescription(item.Description);
                map.SetCenterAndZoom(loc,
7);
        }

忆苦才能思甜。为了体会动态编程给我们带来的便利,我们来看看在没有动态类型的C# 3.0中,AddPin()函数应该如何实现。如果是在C# 3.0中,我们的doc,win和map 都将是静态类型,为了执行这些对象的某些方法,需要进行显式的类型转换,同时,还需要将方法名作为字符串传递以实现方法的调用。很明显,C# 3.0中的实现过程非常繁琐,而C# 4.0中的实现是如此的优雅而自然。

void AddPin(Item item)
  {
ScriptObject loc
= win.CreateInstance("VELatLong", item.Latitude, item.Longitude);
ScriptObject pin
= (ScriptObject)map.Invoke("AddPushpin", loc);
pin.Invoke(
"SetTitle", item.Title);
pin.Invoke(
"SetDescription", item.Description);
map.Invoke(
"SetCenterAndZoom", loc, 7);
}

  最后,我们需要在适当的位置调用这两个函数,以实现地图的加载和Pin的添加。在Page类的Init()函数中添加GetMap()函数调用:

public void Init()
{
          GetMap();
}

  另外,在lstPictures_SelectionChanged()函数中添加AddPin()函数,当用户选择的图片变化后,重新获取Pin的位置并添加到地图上:

void lstPictures_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
          Item selected
= lstPictures.SelectedItem as Item;
          AddPin(selected);
}

  7. 编译解决方案
  到这里为止,我们对项目的修改就全部完成了。重新编译整个解决方案,我们可以看到添加Virtual Earth控件后的页面。当我们在左侧列表中选择图片后,Pin会定位到这幅图片拍摄的地点,当我们把鼠标移动到Pin上时,则会显示图片和更多的相关信息。

 


                                   图2 添加Virtual Earth控件后的页面

 

Tags:vs2010 C# 4.0
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价