有了前面的批加拼音,批删除拼音就不难想象了。
在Main()函数中适当位置增加一个功能入口:
// 批删除拼音
actions.NewItem("批删除拼音", "为当前记录以及同库的其他后方记录删除拼音", "BatchRemovePinyin", false);
然后在MyHost类的适当位置增加BatchRemovePinyin()函数的代码:
void BatchRemovePinyin()
{
int nRet = 0;
Stop stop = new DigitalPlatform.Stop();
stop.Register(this.DetailForm.MainForm.stopManager, true); // 和容器关联
stop.Style = StopStyle.EnableHalfStop;
stop.BeginLoop();
try
{
for (; ; )
{
Application.DoEvents();
if (stop.State != 0)
break;
RemovePinyin(this.PinyinCfgXml);
RemovePinyin(this.OldPinyinCfgXml);
nRet = this.DetailForm.DoSaveAll();
if (nRet == -1)
break;
nRet = this.DetailForm.SafeLoadRecord(this.DetailForm.BiblioRecPath, "next");
if (nRet <= 0)
break;
}
}
finally
{
stop.EndLoop();
stop.Unregister();
}
}
代码修改完毕。保存它。试验一下吧。
思考题:
要是我想从当前记录开始,向ID号更小的方向去继续处理循环呢?
艾,还是把答案公布了吧。
上面代码中有一行:
nRet = this.DetailForm.SafeLoadRecord(this.DetailForm.BiblioRecPath, "next");
把"next"改为"prev"就可以了。
~~~
自从学会了如何循环处理多条记录,恐怕不少人以后想象力就是一发不可收了吧!