Ana içeriğe geç

Control Properties

Control Properties
Inputs: 1
Outputs: 1
Kategori: trexMes service

Form üzerindeki kontrollerin görsel ve davranışsal özelliklerini çalışma zamanında ayarlar. Visible, Enabled, Text, ForeColor gibi her türlü property atamasını yapar.

Ne Zaman Kullanılır?

Form üzerindeki herhangi bir kontrolün (Label, Button, TextBox, Panel, vb.) herhangi bir özelliğini çalışma zamanında değiştirmek için kullanılır: metni güncelleme, görünürlük, renk, etkinleştirme/devre dışı bırakma, boyut…

Formun kendisini kapatmak için de kullanılır — formun Visible property'si false yapılır.

Form Bind Controls ile farkı

Control Properties özellik atar; Form Bind Controls yalnızca Grid datasource veya web kontrol source değeri atamak için kullanılır.

  • Bir Label veya Button'un Text'ini değiştirmek → Control Properties
  • Bir formu kapatmak → Control Properties (Visible = false)
  • Bir Grid'in DataSource'una JSON array bağlamak → Form Bind Controls

Kullanımı

  1. Form Name listesinden değişiklik yapılacak formu seç.
  2. Değiştirilecek kontrol trexEdge ana formuna (AppForm) aitse "For Main-Form" seçeneğini işaretle. Kendi Custom Form'un için bu seçimi yapma.
  3. Add butonuna tıkla; listeye yeni bir satır eklenir.
  4. Control alanına hedef kontrolün adını gir (XML'deki name ile birebir). Örnek: btnOk
  5. Property alanına değiştirilecek özelliğin adını gir. Örnek: Text
  6. Value bölümünde değer kaynağını seç (msg., flow., global., sabit string, bool, num vb.) ve değeri gir.
Control : btnOk
Property: Text
Value   : msg.  →  payload.orderLabel

Property Tablosu

Alan Tip Varsayılan Açıklama
name string Canvas üzerinde gösterilecek ad
formname string (boş) Hedef form adı
formainform boolean false Ana form (AppForm) mı?
props array [] Özellik atama listesi

props Yapısı

Her satır 4 alan içerir:

Anahtar Açıklama Örnek
p Kontrol adı (ControlName) btnSubmit
v Özellik adı (PropertyName) Enabled
d Değer veya path true
dt Değer kaynağı (dataType) bool
[
  { "p": "btnSubmit", "v": "Enabled",   "d": "true",          "dt": "bool" },
  { "p": "lblTitle",  "v": "Text",      "d": "Yeni Sipariş",  "dt": "str"  },
  { "p": "txtQty",    "v": "ForeColor", "d": "Red",           "dt": "str"  },
  { "p": "btnSave",   "v": "Visible",   "d": "payload.canSave","dt": "msg" }
]

dataType Çeşitleri

dt alanı değerin nereden okunacağını belirler:

dataType Anlam Tipik Kullanım
msg Mesaj nesnesinden Dinamik değerler
flow Flow context Geçici state
global Global context Sabit ayarlar
num Sabit sayı 42, 100
json Sabit JSON {"color":"red"}
bool Sabit boolean true, false
jsonata JSONata ifadesi $count(payload.items) > 5
diğer Sabit string "Red", "Verdana"

Çıkış Mesajı

{
  "operationtype": "ControlProperties",
  "receiveddata": { /* event data */ },
  "name": "OrderForm",
  "value": [
    { "ControlName": "btnSubmit", "PropertyName": "Enabled",   "Value": true   },
    { "ControlName": "lblTitle",  "PropertyName": "Text",      "Value": "Yeni" },
    { "ControlName": "txtQty",    "PropertyName": "ForeColor", "Value": "Red"  }
  ]
}

Asenkron İşlem Modeli

Node, tüm property atamalarını Promise.all ile paralel çözümler:

let tasks = node.props.map((item) => {
    return new Promise((resolve, reject) => {
        switch (item.dt) {
            case 'msg':    computedValue = RED.util.getMessageProperty(msg, item.d); break;
            case 'flow':   computedValue = node.context().flow.get(item.d); break;
            case 'global': computedValue = node.context().global.get(item.d); break;
            case 'jsonata':
                // Async JSONata çözümlemesi
                let expr = RED.util.prepareJSONataExpression(item.d, node);
                RED.util.evaluateJSONataExpression(expr, msg, (err, result) => {
                    err ? reject(err) : resolve({
                        ControlName: item.p,
                        PropertyName: item.v,
                        Value: result
                    });
                });
                return;
            // ...
        }
        resolve({ ControlName: item.p, PropertyName: item.v, Value: computedValue });
    });
});

Promise.all(tasks).then((bindcontrols) => { /* msg.payload.push */ });

Tipik Property İsimleri

WinForm kontrolleri için en sık kullanılan özellikler:

Property Tip Örnek Değer
Visible bool true / false
Enabled bool true / false
Text string "Kaydet"
BackColor string "Red", "#FF0000"
ForeColor string "White"
Font.Bold bool true
Width number 200
Height number 40

Form Kapatma

Bir Custom Form'u programatik olarak kapatmak için formun adını hem Form Name hem Control alanına girin ve Visible property'sini false yapın.

Yapılandırma

  1. Form Name listesinden kapatılacak formu seç (örn. frmTest)
  2. Add butonuna tıkla
  3. Control alanına formun adını gir (örn. frmTest)
  4. Property alanına Visible gir
  5. Value olarak boolfalse seç
Form Name : frmTest
Control   : frmTest
Property  : Visible
Value     : bool  →  false

Akış Örneği — Buton ile Formu Kapat

flowchart LR
    A["Form Events\nfrmTest / btnKapat / Click"] --> B["Control Properties\nfrmTest.Visible = false"]
    B --> C[Responser]

    style A fill:#ccffcc,color:#000
    style B fill:#ccffcc,color:#000
    style C fill:#ccffcc,color:#000

Aynı node'da birden fazla işlem

Formu kapatırken aynı Control Properties node'una ek satırlar ekleyerek başka işlemler de yapabilirsiniz. Örneğin formu kapatıp aynı anda başka bir kontrolü güncelleyebilirsiniz.

Tipik Akış

flowchart LR
    A[Business Events] --> B[Custom Form]
    B --> C[Form Bind Controls]
    C --> D[Control Properties<br/>btnSave.Enabled=true]
    D --> E[Responser]

    style A fill:#ccffcc,color:#000
    style B fill:#ccffcc,color:#000
    style C fill:#ccffcc,color:#000
    style D fill:#ccffcc,color:#000
    style E fill:#ccffcc,color:#000

Önemli Notlar

Property isimleri büyük harfle başlar

WinForm property isimleri PascalCase'dir: Visible, Enabled, Text, BackColor — küçük harfle başlamazlar.

Form henüz açılmadıysa

Control Properties panele property atama gönderir; ancak form henüz açılmamışsa atama uygulanamaz. Akışta önce Custom Form olmalıdır.

Sık Karşılaşılan Hatalar

Property uygulanmıyor

  • Property adı yazımı doğru mu? (Visiblevisible)
  • Kontrol adı XML'deki ile eşleşiyor mu?
  • dataType seçimi tutarlı mı? bool seçtiyseniz değer "true"/"false" string olmalı.

JSONata hatası

JSONata ifadesi sentaks hatası içeriyorsa node hata fırlatır. İfadeyi önce başka bir akışta change node'unda test edin.

İpuçları

Toplu disable/enable

Bir formun tüm input'larını disable etmek istiyorsanız her birini tek tek listelemek yerine bir function node ile dinamik liste oluşturun ve dataType: jsonata ile döndürün.

Renkler için string formatı

Renk değerleri için WinForm Color enum isimleri (Red, LightBlue, Crimson) veya HTML hex (#FF0000) kullanılabilir.

İlgili