Delphi'da Ağaç Düğümüne Daha Fazla Özel Veri Saklayın

TTreeView Delphi bileşen hiyerarşik bir öğe listesi görüntüler— ağaç düğümleri. Düğüm, düğüm metni ve isteğe bağlı bir görüntü ile sunulur. Ağaç görünümündeki her düğüm, TTreeNode sınıfının bir örneğidir.

Ağaç görünümünü tasarım zamanında öğelerle doldurabilirsiniz. TreeView Öğeleri Düzenleyicisi, çoğu durumda, uygulamanızın ne hakkında olduğuna bağlı olarak ağaç görünümünüzü çalışma zamanında doldurursunuz.

TreeView Öğeleri Düzenleyicisi yalnızca bir düğüme "ekleyebileceğiniz" bir avuç bilgi olduğunu gösterir: metin ve birkaç görüntü dizini (normal durum, genişletilmiş, seçilen ve benzerleri için).

Özünde, ağaç görünümü bileşeninin programlanması kolaydır. Ağaca yeni düğümler eklemek ve hiyerarşilerini ayarlamak için birkaç yöntem vardır.

Ağaç görünümüne ("TreeView1" olarak adlandırılır) nasıl 10 düğüm ekleyeceğiniz aşağıda açıklanmıştır. Öğeler özelliğinin ağaçtaki tüm düğümlere erişim sağladığını unutmayın. AddChild ağaç görünümüne yeni bir düğüm ekler. İlk parametre (hiyerarşiyi oluşturmak için) üst düğümdür ve ikinci parametre düğüm metnidir.

instagram viewer

AddChild yeni eklenen TTreeNode öğesini döndürür. Yukarıda kod örneği, 10 düğümün tümü kök düğüm olarak eklenir (üst düğüme sahip değildir).

Daha karmaşık durumlarda düğümlerinizin daha fazla bilgi taşımasını isteyebilirsiniz - tercihen geliştirdiğiniz projeye özgü bazı özel değerlere (özelliklere) sahip olmak.

Veritabanınızdan müşteri siparişi öğesi verilerini görüntülemek istediğinizi varsayalım. Her müşterinin daha fazla siparişi olabilir ve her sipariş daha fazla üründen oluşur. Bu, bir ağaç görünümünde görüntülenebilen hiyerarşik bir ilişkidir:

Veritabanınızda her sipariş ve her kalem için daha fazla bilgi olacaktır. Ağaç görünümü (salt okunur) geçerli durumu görüntüler ve seçilen siparişin sipariş başına (hatta öğe başına) ayrıntılarını görmek istersiniz.

Kullanıcı "Order_1_1" düğümünü seçtiğinde, sipariş ayrıntılarının (toplam toplam, tarih vb.) Kullanıcıya gösterilmesini istersiniz.

O zaman, veritabanından gerekli verileri getirebilirsiniz, ancak doğru verileri elde etmek için seçilen siparişin benzersiz tanımlayıcısını (diyelim bir tamsayı değeri) bilmeniz gerekir.

Bu sipariş tanımlayıcısını düğümle birlikte depolamanın bir yoluna ihtiyacımız var, ancak Text özelliğini kullanamıyoruz. Her bir düğümde depolamamız gereken özel değer bir tamsayıdır (sadece bir örnek).

Böyle bir durum ortaya çıktığında, Tag özelliğini (birçok Delphi bileşenine sahiptir) aramak cazip gelebilir, ancak Tag özelliği TTreeNode sınıfı tarafından gösterilmez.

Ağaç Düğümlerine Özel Veri Ekleme: TreeNode. Veri Özelliği

Bir ağaç düğümünün Data özelliği, özel verilerinizi bir ağaç düğümü ile ilişkilendirmenize olanak tanır. Veri bir Işaretçi ve nesnelere ve kayıtlara işaret edebilir. TreeView'de XML (RSS Yayını) Verilerini Görüntüleme Kayıt tipi değişkenini bir ağaç düğümünün Data özelliğine dönüştürür.

Birçok öğe türü sınıfı Data özelliğini ortaya çıkarır; öğeyle birlikte herhangi bir nesneyi depolamak için kullanabilirsiniz. Bir TListView bileşeninin TListItem örneği. İşte Data özelliğine nasıl nesne eklenir.

Ağaç Düğümlerine Özel Veri Ekleme: TreeView. CreateNodeClass

TTreeNode öğesinin Data özelliğini kullanmak istemiyorsanız, bunun yerine kendi TreeNode öğenizin birkaç özellikle genişletilmesini istiyorsanız, Delphi'nin de bir çözümü vardır.

Yapabilmek istediğini söyle

Standart TTreeNode'u kendi özelliklerinizle nasıl genişleteceğiniz aşağıda açıklanmıştır:

  1. TTreeNode öğesini genişleterek TMyTreeNode öğenizi oluşturun.
  2. Bu bir dize özelliği MyProperty ekleyin.
  3. Düğüm sınıfınızı belirtmek için ağaç görünümü için OnCreateNodeClass'ı işleyin.
  4. Form düzeyinde TreeView1_SelectedNode özelliği gibi bir şey gösterin. Bu TMyTreeNode tipinde olacaktır.
  5. Seçilen düğümün değerini SelectedNode öğesine yazmak için ağaç görünümünün OnChange öğesini kullanın.
  6. Yeni özel değer okumak veya yazmak için TreeView1_Selected.myProperty'yi kullanın.

İşte tam kaynak kodu (TButton: "Button1" ve TTreeView: "TreeView1" formda):

Bu kez TTreeNode sınıfının Data özelliği kullanılmaz. Bunun yerine, TTreeNode sınıfını kendi ağaç düğüm sürümünüz olacak şekilde genişletirsiniz: TMyTreeNode.

Ağaç görünümünün OnCreateNodeClass olayını kullanarak, standart TTreenode sınıfı yerine özel sınıfınızın bir düğümünü oluşturursunuz.