最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

visio二次開發(fā)--判斷文檔是否已發(fā)生變化(變化就加星號(hào)*)

 更新時(shí)間:2013年04月02日 17:02:08   作者:  
最近做一個(gè)故障樹診斷的項(xiàng)目,用visio二次開發(fā),可以同時(shí)打開多個(gè)繪制的故障樹圖形文檔。項(xiàng)目中需要實(shí)現(xiàn)判斷文檔是否發(fā)生變化,這是很多編輯軟件的基本功能,變化了就加個(gè)星號(hào)*

1.最近做一個(gè)故障樹診斷的項(xiàng)目,用visio二次開發(fā),可以同時(shí)打開多個(gè)繪制的故障樹圖形文檔。項(xiàng)目中需要實(shí)現(xiàn)判斷文檔是否發(fā)生變化,這是很多編輯軟件的基本功能,變化了就加個(gè)星號(hào)*。如果整個(gè)項(xiàng)目從0開始自己設(shè)計(jì)就是另外一回事了,這里是基于visio二次開發(fā),首先想到的是去看微軟的官方文檔,看是否有相關(guān)的API,或則是否改變會(huì)觸發(fā)某些事件,遺憾的是我沒找到。

2.不過visio畢竟是微軟的產(chǎn)品,做的就是好。它對(duì)程序運(yùn)行動(dòng)態(tài)中的很多過程進(jìn)行了定義和監(jiān)視,有一個(gè)對(duì)Scope的監(jiān)視,比如粘貼,復(fù)制,刪除,移動(dòng)對(duì)象,形狀數(shù)據(jù)更改都對(duì)應(yīng)一個(gè)Scope對(duì)象,都有唯一的scopeId(Scope的具體定義就不細(xì)說(shuō)了,具體看開發(fā)文檔)。值得一提的是,這里每個(gè)操作的對(duì)應(yīng)Scope的信息我不是從開發(fā)文檔看的,而是使用Visio里面提供的開發(fā)工具(需要在設(shè)置里面選擇該項(xiàng)功能才有)一個(gè)個(gè)操作觀察的,具體看圖

括號(hào)中的內(nèi)容就是對(duì)應(yīng)的Scope對(duì)象的信息。開頭的編號(hào)是對(duì)應(yīng)的唯一scopeID。每行信息都是一個(gè)事件,都可以在程序監(jiān)視和觸發(fā)。EnterScope和ExitScope之間為一個(gè)Scope對(duì)象。

所以監(jiān)視EnterScope事件,然后判斷當(dāng)前scopeID就可以知道進(jìn)行了什么操作,比如scopeID==1187,就是移動(dòng)了對(duì)象。然后把移動(dòng)對(duì)象,粘貼,刪除等等之類的都或上,這要是這些就可以判定文檔發(fā)生了改變。

我的項(xiàng)目中具體涉及代碼如下:

復(fù)制代碼 代碼如下:

private void VisApplication_EnterScope(Visio.Application app, int scopeID, String description)//故障樹文檔發(fā)生改變,要記錄,關(guān)閉時(shí)提示保存
        {
            axDrawingControl1.Document.Pages[1].CellChanged -= new EPage_CellChangedEventHandler(Form_paint_CellChanged);//文檔發(fā)生更改事件
            axDrawingControl1.Document.Pages[1].CellChanged += new EPage_CellChangedEventHandler(Form_paint_CellChanged);//文檔發(fā)生更改事件
            //   Console.WriteLine("$currentScope.tostring$" + app.CurrentScope.ToString()+ "$ID$" + scopeID.ToString() + "$Des$" + description);
            /*
             1188$ID$1188$Des$設(shè)置對(duì)象大小;0
            delete=1486,//刪除對(duì)象
            dragInto=1246,//拖入圖形
            moveShape = 1187,//移動(dòng)對(duì)象
            shapeData=1312,//形狀數(shù)據(jù)
            changePageSize=1239,//更改頁(yè)面大小
            changeShapeSize = 1189,//設(shè)置對(duì)象大小
            paste = 1022 //粘貼
            paste2 = 1158 //粘貼
            1501//插入注釋
            */
            if (scopeID == 1486 || scopeID == 1246 || scopeID == 1187 || scopeID == 1312 || scopeID == 1239 || scopeID == 1189 || scopeID == 1022 || scopeID == 1158 || scopeID == 1188 || scopeID == 1501)
            {
                needSave = true;//變化了,需要保存到臨時(shí)文件夾

                string temp = TabControl.SelectedTab.Text;
                if (temp[temp.Length - 5] != '*')
                {
                    TabControl.SelectedTab.Text = temp.TrimEnd() + " *    ";
                }
            }
        }

3.Scope的具體定義開發(fā)文檔中很詳細(xì),如果有耐心你也可以一個(gè)個(gè)試,在開發(fā)者工具-事件監(jiān)視器里觀察。
4.至于前兩句EPage_CellChangedEventHandler,這是我的程序中為了動(dòng)態(tài)判斷形狀數(shù)據(jù)是否合法,實(shí)事監(jiān)控形狀數(shù)據(jù)對(duì)應(yīng)的Cel發(fā)生變化的事件進(jìn)行判斷。為什么先刪除事件代理再添加?是為了解決程序里的另一個(gè)問題,這里不細(xì)說(shuō)。

程序中的效果如下:

 

相關(guān)文章

  • C#判斷一天、一年已經(jīng)過了百分之多少的方法

    C#判斷一天、一年已經(jīng)過了百分之多少的方法

    這篇文章主要介紹了C#判斷一天、一年已經(jīng)過了百分之多少的方法,涉及C#針對(duì)時(shí)間及日期的運(yùn)算與判定技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • C#詞法分析器之輸入緩沖和代碼定位的應(yīng)用分析

    C#詞法分析器之輸入緩沖和代碼定位的應(yīng)用分析

    本篇文章介紹了,C#詞法分析器之輸入緩沖和代碼定位的應(yīng)用分析。需要的朋友參考下
    2013-05-05
  • C#開發(fā)Windows UWP系列之3D變換

    C#開發(fā)Windows UWP系列之3D變換

    這篇文章介紹了C#開發(fā)Windows UWP系列之3D變換,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#時(shí)間戳基本用法實(shí)例分析

    C#時(shí)間戳基本用法實(shí)例分析

    這篇文章主要介紹了C#時(shí)間戳基本用法,較為詳細(xì)的講述了時(shí)間戳的概念、生成方法與轉(zhuǎn)換技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C#操作IIS方法集合

    C#操作IIS方法集合

    這篇文章主要介紹了C#操作IIS方法集合的相關(guān)資料,需要的朋友可以參考下
    2015-09-09
  • C#求點(diǎn)集的最小包圍矩形

    C#求點(diǎn)集的最小包圍矩形

    這篇文章主要為大家詳細(xì)介紹了C#求點(diǎn)集的最小包圍矩形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C#設(shè)置頁(yè)面單位和縮放的方法

    C#設(shè)置頁(yè)面單位和縮放的方法

    這篇文章主要介紹了C#設(shè)置頁(yè)面單位和縮放的方法,涉及C#設(shè)置頁(yè)面屬性的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C# 基于NPOI操作Excel

    C# 基于NPOI操作Excel

    最近遇到一個(gè)數(shù)據(jù)導(dǎo)入的需求,語(yǔ)言是.net framework 4.7的C#。但是,這次主要探討NPOI的體驗(yàn),原則就是向前兼容。所以采用.xls的支持。下面就來(lái)看看實(shí)現(xiàn)步驟
    2021-06-06
  • 使用C#實(shí)現(xiàn)簡(jiǎn)單的線性回歸的代碼詳解

    使用C#實(shí)現(xiàn)簡(jiǎn)單的線性回歸的代碼詳解

    最近注意到了NumSharp,想學(xué)習(xí)一下,最好的學(xué)習(xí)方式就是去實(shí)踐,因此從github上找了一個(gè)用python實(shí)現(xiàn)的簡(jiǎn)單線性回歸代碼,然后基于NumSharp用C#進(jìn)行了改寫,需要的朋友可以參考下
    2024-01-01
  • 基于C#的電視臺(tái)節(jié)目表接口調(diào)用代碼

    基于C#的電視臺(tái)節(jié)目表接口調(diào)用代碼

    這篇文章主要介紹了基于C#的電視臺(tái)節(jié)目表接口調(diào)用代碼的相關(guān)資料,需要的朋友可以參考下
    2016-06-06

最新評(píng)論

富阳市| 阿鲁科尔沁旗| 晋中市| 仁布县| 长葛市| 天门市| 三明市| 孝昌县| 赞皇县| 乌拉特中旗| 安义县| 咸阳市| 寻乌县| 从江县| 陈巴尔虎旗| 盐边县| 土默特右旗| 湖口县| 民丰县| 达尔| 徐闻县| 定远县| 独山县| 成安县| 尚义县| 白河县| 上思县| 炎陵县| 卢龙县| 普安县| 巴彦淖尔市| 松桃| 安化县| 鸡西市| 斗六市| 鄄城县| 萝北县| 岗巴县| 乌恰县| 敖汉旗| 黎川县|