Daha çox

ArcObjects: ITool.OnMouseUp metodunun icrası necə müəyyənləşdirilir


ArcMap-da miras alan bir alətim var BaseCommand. Alət, istifadəçiyə ekranda bir qrafik çəkməyə imkan verir.

Bu aləti (cari vasitə kimi təyin edilmiş) istinadını istifadə edərək Windows UserForm-dan aktivləşdirdim ICommandBars.find metod.

İndi pəncərələr necə olduqda bir bildiriş ala bilər ITool.OnMouseUp metod tamamlandı? Mən tərəfindən yaradılan heç bir tədbir olmadığını görürəmIToolinterfeys.


Bir vasitə üçün BaseTool'dan miras almalısınız. Aləti bir əlavə olaraq deyil, bir COM obyekti kimi inkişaf etdirmiş olsanız, alətdəki bir xüsusiyyət və ya dəyişən vasitəsi ilə formadan araca istinad edə bilərsiniz. OnMouseUp hadisələrindəki vasitələrdə arayış vasitəsi ilə formada istədiklərinizi edə bilərsiniz.


İlk fikrim alətlərinizi OnMouseUp () metodunu ləğv etmək və formanızda dinlədiyiniz, lakin işləməyəcək bir hadisəni atəşə vermək idi (bunu heç sınamamışdım)

Daha etibarlı bir yol, Windows çəngəlindən istifadə etmək ola bilər. Bunlar hadisələri ələ keçirmək üçün aşağı səviyyəli mexanizmlərdir. Daha çoxunu Windows yardım səhifəsində "Çəngəllərə Baxış" da oxuya bilərsiniz. Sizin işinizdə WH_MOUSE_LL istifadə edərdim.


OnMouseUp hadisəsi yalnız xəritədə bir yerə vurduğunuzda atəşə tutulur. Dialoqunuzu və ya xəritənin xaricindəki hər hansı bir yerə basarsanız, hadisə yanmaz.

Xəritəni tıklayırsınızsa və (qeyri-normal) bir informasiya qutusuna bir hadisə atmağa çalışırsınızsa, SeaJunk-un fikrini təqib edə bilərsiniz.

  • Alətinizdə, formanıza bir istinad verməyə imkan verən bir funksiya ilə bir interfeys tətbiq edin, sonra onMouseUp tədbirinizdə formanıza bəzi funksiyaları zəng edə bilərsiniz.

    interfeys IFormNotifier {void SetFormToBeNotified (Form forması); } sinif YourTool: BaseTool, IFormNotifier {Form _formToBeNotified = null;… kodunuz… // IFormNotifier tətbiqetmə etibarsız SetFormToBeNotified (Form forması) {_formToBeNotified = form; } // OnMouseUp Event public void OnMouseUp (int button, int shift, int x, int y) {// Əgər (_formToBeNotified! = Null) _formToBeNotified.callwhatheverfunctiontonotify (); }}

ICommandBars.find metodu ilə tapdığınız ICommandItem-dən IFormNotifier-ə daxil olmaq üçün ICommandItem.Command xassəsini bir IFormNotifier kimi atmalısınız.

ICommandItem itemFound = commandBar.find (…); if (itemFound! = null) {IFormNotifier formNotifier = itemFound. IFormNotifier kimi əmr; // formu təyin edin, əgər (formNotifier! = null) formNotifier.SetFormToBeNotified (bu); }

Beləliklə, modal olmayan dialoqunuz növbəti dəfə xəritəyə vurduğunuzda bildiriş alacaqdır. Dialoqunuzu bağladığınızda, silinmiş bir formaya daxil olmamaq üçün formu null olaraq təyin etməyiniz vacibdir.


Videoya baxın: ArcObjects. What is ArcObject (Oktyabr 2021).