方案思路:
需要office限制编辑的支持,利用限制编辑控制书签的禁止删除
利用书签的Start和End属性控制书签一直保持[]输入状态,非|状态
解决方案:
实现该方案的初始条件
假设word此时是限制编辑状态,在限制编辑word的时候,对要使用的书签设置例外,即没有对书签进行限制编辑
第一步:word启动时候,需要利用书签的Start和End属性控制书签的起始字符位置和结束字符位置,将书签起始和结束字符位置,嵌入word的限制编辑域,贴出代码如下:
private void ThisDocument_Startup(object sender, System.EventArgs e)
{
ptcOhter1.Start = ptcOhter1.Start-1;
ptcOhter1.End = ptcOhter1.End+1;
}
第二步:当书签获得焦点时,将结束字符位置向后移动一位,这样就可以保持书签一直保持[]输入状态,非|状态,贴出代码如下:
//书签获取焦点时候设置书签其实位置
private void ptcOhter1_Selected(object sender, SelectionEventArgs e)
{
Microsoft.Office.Tools.Word.Bookmark bookmark = (Microsoft.Office.Tools.Word.Bookmark)sender;
//bookmark.Start = bookmark.Start - UtilTools.START_RANGE; ;
bookmark.End = bookmark.End + UtilTools.END_VALUE;
}
第三步:书签失去焦点时将书签的end位置复原(如果不恢复位置,多次触发获得焦点事件,就会使结束字符位置不停地累加,变形)
private void ptcOhter1_Deselected(object sender, SelectionEventArgs e)
{
Microsoft.Office.Tools.Word.Bookmark bookmark = (Microsoft.Office.Tools.Word.Bookmark)sender;
bookmark.End = bookmark.End - UtilTools.END_VALUE;
//bookmark.Start = bookmark.Start + UtilTools.START_RANGE;
}
第四步:word关闭前的处理,返回书签的起始字符位置和结束字符位置
private void ApplicationDocument_BeforeClose(object sender, System.ComponentModel.CancelEventArgs e)
{
解除限制编辑
//UtilTools.applicationDocument = this;
//Word.Application newapp = this.Application;
//UtilTools.UnProtectDoc(ref newapp);
//改变书签结束位置
endBookMark();
}