Control Properties¶
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ı¶
- Form Name listesinden değişiklik yapılacak formu seç.
- Değiştirilecek kontrol trexEdge ana formuna (
AppForm) aitse "For Main-Form" seçeneğini işaretle. KendiCustom Form'un için bu seçimi yapma. - Add butonuna tıkla; listeye yeni bir satır eklenir.
- Control alanına hedef kontrolün adını gir (XML'deki
nameile birebir). Örnek:btnOk - Property alanına değiştirilecek özelliğin adını gir. Örnek:
Text - Value bölümünde değer kaynağını seç (
msg.,flow.,global., sabitstring,bool,numvb.) ve değeri gir.
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¶
- Form Name listesinden kapatılacak formu seç (örn.
frmTest) - Add butonuna tıkla
- Control alanına formun adını gir (örn.
frmTest) - Property alanına
Visiblegir - Value olarak
bool→falseseç
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? (
Visible≠visible) - Kontrol adı XML'deki ile eşleşiyor mu?
dataTypeseçimi tutarlı mı?boolseç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.