SORU
5 HAZİRAN 2009, Cuma


Neden koddan bir eventhandler aramak için kötü bir uygulamadır?

Bir menü öğesi ve aynı işi yapmak için bir düğme var. Neden bir kontrol eylem olay görev kodunu koy ve diğer denetim bu olay için bir çağrı yapmak için kötü bir uygulama mı? Delphi vb6 yok ama realbasic değil gibi bu seçenek " menüsünü ve düğmesini her iki tarafından çağrılan bir yöntemi içine kod koymak gerektiğini söylüyor

CEVAP
5 HAZİRAN 2009, Cuma


Programı nasıl düzenlenir, bir soru. Sizin tarif ettiğiniz senaryoda, menü öğesinin davranışı düğme açısından tanımlanacaktır:

procedure TJbForm.MenuItem1Click(Sender: TObject);
begin
  // Three different ways to write this, with subtly different
  // ways to interpret it:

  Button1Click(Sender);
  // 1. "Call some other function. The name suggests it's the
  //    function that also handles button clicks."

  Button1.OnClick(Sender);
  // 2. "Call whatever method we call when the button gets clicked."
  //    (And hope the property isn't nil!)

  Button1.Click;
  // 3. "Pretend the button was clicked."
end;

Bu üç uygulama herhangi bir iş olacak amaneden menü düğmesi üzerinde bu kadar bağımlı olması gerekir?Menü öğesi tanımlamak gerektiğini düğmesine bu kadar özel yapan ne? Eğer yeni bir UI tasarım uzak düğmeli mi, menü ne olacak? Daha iyi bir şekilde bağlı, denetimlerin bağımsız yani olay işleyicisi eylemleri faktör. Bunu yapmak için birkaç yolu vardır:

  1. MenuItem1Click yöntemi temelli kurtulmak ve MenuItem1.OnClick olay özelliği için Button1Click yöntemi atamak için. Bu kafa karıştırıcı için yöntemler adlı düğmeler atanan menü öğeleri' olaylar, çok istersin yeniden olay işleyicisi, ama sorun değil, çünkü aksine VB, Delphi yöntemi isimlertanımlayınne ilgileniyorlar olaylar. Herhangi bir olay işleyicisi için herhangi bir yöntem imzaları aynı olduğu sürece atayabilirsiniz. Her iki bileşen' olayları tip OnClick tek bir uygulama paylaşmak için TNotifyEvent,.Ne, ait oldukları değil ne için isim yöntemleri.

  2. Başka bir yol, ayrı bir yöntem haline düğmenin olay işleyicisi kodu taşımanızı ve bileşenleri' olay işleyicileri: . bu yöntemi çağırmak için var

    procedure HandleClick;
    begin
      // Do something.
    end;
    
    procedure TJbForm.Button1Click(Sender: TObject);
    begin
      HandleClick;
    end;
    
    procedure TJbForm.MenuItem1Click(Sender: TObject);
    begin
      HandleClick;
    end;
    

    Gerçekten işler yapan bir kod doğrudan ya da bir bileşeni bağlı değil . bu şekilde, ^strong>bu denetimleri daha kolay değiştirmek için özgürlük verironları adlandırarak gibi, ya da farklı kontrol eder. bunların yerine Bileşen kodu üçüncü yol götürür bizi ayıran:

  3. 4, özellikle de anlattığınız durum için tasarlanmıştır, aynı komut için birden çok UI yolları vardır TAction bileşen, Delphi tanıtıldı. (Diğer dilleri ve geliştirme ortamları benzer kavramlar; Delphi özgü değil.) TAction's OnExecute olay işleyicisi ve sonra düğmesine ve menü öğesi, hem Action özelliği olan eylem atayın. olay işleme kodu koy

    procedure TJbForm.Action1Click(Sender: TObject);
    begin
      // Do something
      // (Depending on how closely this event's behavior is tied to
      // manipulating the rest of the UI controls, it might make
      // sense to keep the HandleClick function I mentioned above.)
    end;
    

    Düğme gibi davranan başka bir UI öğesi eklemek ister misiniz? Sorun değil. Ekleyin Action özelliğini ayarlayın ve bitti. Hayır Yeni kontrol bakmak ve eski gibi hareket yapmak için daha fazla kod yazmak gerekiyor. Zaten bir kere bir kod yazdım.

    TAction sadece olay işleyicileri ötesine geçer.UI denetimleri üniforma özellik ayarları sahip olmasını sağlar, başlıklar, ipuçları, görünürlük, enabledness ve simgeler dahil. Bir komut zaman geçerli değil, eylem Enabled özellik buna göre ayarlayın ve herhangi bir bağlantı kontrolleri otomatik olarak devre dışı kalacaktır. Hiç bir komut araç çubuğu sayesinde engelli olma konusunda endişelenmenize gerek, ama hala örneğin menü üzerinden etkin. Hatta action OnUpdate olay böylece eylem güncellemek kendisi dayalı mevcut koşullar, yerine ihtiyacı olduğunu ne zaman bir şeyler olur belki ihtiyacınız ayarlamak için Enabled özellik hemen.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Day9TV

    Day9TV

    22 NİSAN 2010
  • LardTardProductions's channel

    LardTardProd

    10 NİSAN 2009
  • megablueblaster

    megablueblas

    23 HAZİRAN 2006