爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3118|回复: 4

代码修改新问题:遇到debug和release模式的区别?

[复制链接]

新浪微博达人勋

发表于 2016-6-29 22:45:18 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 jzd19851102 于 2016-6-29 22:47 编辑

           依托MeteoInfoMap_CSharp-master程序框架,对代码进行了部分删减,同时根据自己的需求,进行了部分代码的修改。

        原先的frmMeteoData.cs中的绘图方法代码如下:

  1. private void TSB_Draw_Click(object sender, EventArgs e)
  2. {
  3. string fieldName = CB_Variable.Text;

  4. Display();
  5. }
复制代码

增加了部分代码后为:
  1. private void TSB_Draw_Click(object sender, EventArgs e)
  2. {
  3. string fieldName = CB_Variable.Text;
  4. // 显示当前图层对应的变量和时次信息
  5. LayoutGraphic aTitle = frmMain.CurrentWin.MapDocument.MapLayout.GetTexts()[0];
  6. aTitle.SetLabelText("变量:" + CB_Variable.SelectedItem.ToString() + " "+"时次:" + CB_Time.SelectedItem.ToString());


  7. ////删除上一个图层
  8. frmMain.CurrentWin.MapDocument.ActiveMapFrame.MapView.LockViewUpdate = true;

  9. frmMain.CurrentWin.MapDocument.ActiveMapFrame.RemoveLayerByHandle(_lastAddedLayerHandle);

  10. frmMain.CurrentWin.MapDocument.ActiveMapFrame.MapView.LockViewUpdate = false;

  11. Display();
  12. //添加图例
  13. LayoutLegend aLegend;
  14. if (frmMain.CurrentWin.MapDocument.MapLayout.GetLegends().Count > 0)
  15. aLegend = frmMain.CurrentWin.MapDocument.MapLayout.GetLegends()[0];
  16. else
  17. aLegend= frmMain.CurrentWin.MapDocument.MapLayout.AddLegend(650, 100);

  18. aLegend.LegendStyle=MeteoInfoC.Layout.LegendStyles.Normal;
  19. frmMain.CurrentWin.MapDocument.MapLayout.PaintGraphics();



  20. }
复制代码
如图1-2,增加的代码实现了如下功能
1、在版面可以显示图层对应的变量和时次信息
2、  在左边layerslegend中,不会出现图层的重叠,如图2,如果不增加代码,切换变量或者时次后,出现图层的重叠;
3、     自动添加图例,之前需要手动插入legend

本来今天准备收工了,将vs的调试模式由debug改成release,结果出现了图3的错误




1.jpg
2.jpg
3.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-6-30 09:06:36 | 显示全部楼层
c# 运行示例代码到LayoutGraphic aTitle = mapLayout1.GetTexts()[0];这一行的时候报错,运行meteoinfo是1.1版本,请纠正,谢谢。



“System.ArgumentOutOfRangeException”类型的未经处理的异常在 mscorlib.dll 中发生

其他信息: 索引超出范围。必须为非负值并小于集合大小。
在debug模式下 没有问题

改成release 就报错了

之前有帖子提到说是   maplayout的初始化问题  

LayoutGraphic aTitle = frmMain.CurrentWin.MapDocument.MapLayout.GetTexts()[0];

我  这句代码怎么对maplayout进行初始化呢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-6-30 09:58:47 | 显示全部楼层
jzd19851102 发表于 2016-6-30 09:06
c# 运行示例代码到LayoutGraphic aTitle = mapLayout1.GetTexts()[0];这一行的时候报错,运行meteoinfo是1. ...

这句代码是假定MapLayout中已经有一个title,且是第一个text类型的LayoutGraphic。MapLayout中如果没有Text类型的LayoutGraphic,那么肯定会报错。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-6-30 10:20:25 | 显示全部楼层
本帖最后由 jzd19851102 于 2016-6-30 10:25 编辑
MeteoInfo 发表于 2016-6-30 09:58
这句代码是假定MapLayout中已经有一个title,且是第一个text类型的LayoutGraphic。MapLayout中如果没有Te ...


在debug模式下 为啥没有报错呢?

我现在直接用
  1. title = frmMain.CurrentWin.MapDocument.MapLayout.AddText("变量:" + CB_Variable.SelectedItem.ToString() + " " + "时次:" + CB_Time.SelectedItem.ToString(), frmMain.CurrentWin.MapDocument.MapLayout.Width / 2, 20, 12);
复制代码
在debug和release 模式下都没有问题了


另外,有没有和AddText方法对应的 ClearText类似的方法呢?   
更改变量名或者时次进行重绘时,会出现多个标题 叠加    我现在在绘图前先清title

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-6-30 10:32:24 | 显示全部楼层
标题重叠 如图所示

在进行下一次绘图时,怎样对MapLayout重绘  而现在最新的标题呢
标题重叠.jpg
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表