麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > C# > 正文

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

2020-01-24 03:29:47
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

2.不過(guò)visio畢竟是微軟的產(chǎn)品,做的就是好。它對(duì)程序運(yùn)行動(dòng)態(tài)中的很多過(guò)程進(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ō)了,具體看開(kāi)發(fā)文檔)。值得一提的是,這里每個(gè)操作的對(duì)應(yīng)Scope的信息我不是從開(kāi)發(fā)文檔看的,而是使用Visio里面提供的開(kāi)發(fā)工具(需要在設(shè)置里面選擇該項(xiàng)功能才有)一個(gè)個(gè)操作觀察的,具體看圖

括號(hào)中的內(nèi)容就是對(duì)應(yīng)的Scope對(duì)象的信息。開(kāi)頭的編號(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的具體定義開(kāi)發(fā)文檔中很詳細(xì),如果有耐心你也可以一個(gè)個(gè)試,在開(kāi)發(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è)問(wèn)題,這里不細(xì)說(shuō)。

程序中的效果如下:

 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 素人视频在线观看免费 | 91九色视频观看 | 午夜精品毛片 | 一级毛片在线免费观看视频 | 久久99国产精品视频 | 精品成人在线观看 | 在线观看免费毛片视频 | 午夜九九九 | 韩国精品视频在线观看 | 国产亚洲综合一区二区 | 亚洲一区在线免费视频 | 久久精品一区二区三区不卡牛牛 | 国产正在播放 | 秋霞a级毛片在线看 | 一级毛片在线免费观看视频 | 亚洲一区在线免费视频 | 国产成人综合在线观看 | 亚洲精久久 | 毛片国产 | 久久精品免费国产 | 九九精品在线观看视频 | 色婷婷一区二区三区 | 精品国产一区二区亚洲人成毛片 | 精品一区二区三区毛片 | 国产精品免费大片 | 欧美一级二级毛片视频 | 亚洲免费高清 | 粉嫩av一区二区三区四区在线观看 | 国产免费视频在线 | 欧美一级电影网站 | 色悠悠久久久久 | 国产一区二区视频网站 | 精品久久999 | 国产精品午夜在线观看 | 国产精品久久久久久久久久久久午夜 | 最新欧美精品一区二区三区 | 成人毛片网站 | 热re91久久精品国产99热 | 黄污网站在线观看 | 色婷婷tv | 国产精品久久久麻豆 |