Find.Execute bir ContentControl içinde bir sonuç bulursa, ContentControlOnEnter ve ContentControlOnExit olaylarının tetiklenmesine neden olur. Bu özellikle can sıkıcı bir durumdur çünkü seçim hala içerik kontrolünde olsa bile çıkış olayı patlar, bu nedenle aktif olan bir içerik kontrolüne bağlı olan butonların durumunu ayarlayan herhangi bir kod yanlış durumda görünecektir.MS Word VSTO Eklenti Find.Execute yangınları ContentControlOnEnter olayı
Verilen kelime "test", tek bir içerik kontrolü içeren bir belge ve aşağıdaki kod: Aşağıdaki açmış olur
// In setup
Application.ActiveDocument.ContentControlOnEnter += ActiveDocument_ContentControlOnEnter;
private void ActiveDocument_ContentControlOnEnter(Word.ContentControl ContentControl)
{
var selRange = _Application.Selection.Range;
_logger.Debug(m => m("Selection: {0}-{1}", selRange.Start, selRange.End));
}
//Later in another method
var finder = _Application.ActiveDocument.Range().Find;
_logger.Debug("Find.Execute start");
finder.Execute("test);
_logger.Debug("Find.Execute end");
: Biz bir sürü kod var
38137 [VSTA_Main] DEBUG - Find.Execute start
38141 [VSTA_Main] DEBUG - Selection: 1-5
38149 [VSTA_Main] DEBUG - Find.Execute end
o ContentControlOnEnter ve ContentControlOnExit olaylarını işler ve bulma işleminin çağrılmasına neden olması gerçekten sorunlara neden olur!
Find.Execute'u bu olayları tetiklemeden kullanmanın bir yolu var mı? Başarısız olan, Find-tetiklenen olanlar ve gerçek kullanıcı olanları ayırt etmek için iyi bir yol var mı? Giriş ve çıkış olayları arasındaki zamanı kullanmayı denedim, ancak bu güvenilir değil.
Hmm .. Ben de benzer (yanı sıra manuel işlemi gerçekleştirmeden önce olay işleyicileri kaldırma ve sonra bunları ekleyerek yeniden) bir şey denedim ama görünüyordu Bu durumda, Find.Execute bittikten sonra enter olayı tetiklenecektir, bu durumda, bool bayrağı, olay işleyicilerindeki kodun çalıştığı saat kadar yanlış olacaktır. Yine de bir atış yapacağım! – Zout