Bắt đầu với Controls
Phạm vi áp dụng
✅ Bravo 8 · ✅ Bravo 10
<Controls> là thẻ mẹ, dùng để khai báo định nghĩa các control hoặc nhóm các control ở bên trong.
- Có thể được khai báo trong navigator, panelEditor, panelCommand…
- Các control có thể khai báo lồng nhau
- Về cơ bản đều hỗ trợ tất cả các thẻ chung khi định nghĩa control — tuy nhiên tùy theo ClassName mà các thẻ được hỗ trợ có thể khác nhau
Cú pháp
<Controls>
<Ten_Control>
<!-- Khai báo các thẻ trong control -->
</Ten_Control>
</Controls>Quy ước bố cục điển hình của Editor chứng từ
<panelEditor>
<Controls>
<panelParent>...</panelParent> <!-- đầu phiếu -->
<BravoGridContainer>...</BravoGridContainer> <!-- Grid nhập liệu -->
<panelSummary>...</panelSummary> <!-- cuối phiếu -->
</Controls>
</panelEditor>Đây chỉ là quy ước
Việc phân định như này hoàn toàn do người dùng tự định nghĩa — là quy ước chung khi thiết kế màn hình Editor của chứng từ. Ở màn hình khác có thể đặt tên khác.
Mỗi nhóm được coi là 1 control, nên cũng được hỗ trợ đầy đủ các thẻ chung tương ứng với ClassName của nó.
⚠️ Ba lưu ý sống còn
1. Thứ tự khởi tạo control
Khi Load form, các Eval bảng mẹ có khai báo thẻ controls được ưu tiên thực hiện trước.
Eval thiết lập control ở bảng con / cháu phải đặt ở bảng Parent. Nếu đặt trong ServerLoaded hay RowAdded của bảng con/cháu thì vô tác dụng — lúc đó các control chưa được khởi tạo hoặc chưa sẵn sàng nhận dữ liệu.
2.
EmptyAsNullvới TextBoxỞ B8, khi
F2form thì các control được khởi tạo giá trị =NULL.Với BravoTextBox và
BravoDropDownControlBase(BravoComboBox, BravoOpenFileBox,BravoOpenDirBox, BravoSaveFileBox) thì thuộc tínhEmptyAsNullluôn ngầm định =True.→ Cần hết sức lưu ý khi xử lý binding với các control này mà không kiểm tra
ISNULL()thì có thể bị sai kết quả.
3. Dùng Evaluator thay vì thẻ tĩnh
Ngoài việc dùng các thẻ chung, người dùng có thể dùng Eval để thiết lập trạng thái control linh hoạt hơn theo điều kiện, thay vì chỉ chọn
True/Falsecứng.
→ BravoEvaluatorNgoài ra có thể khai báo thay đổi giá trị một thuộc tính áp dụng cho nhiều control ở nhiều loại màn hình khác nhau, hoặc ở tất cả màn hình nhưng theo từng ClassName, bằng cách khai báo thuộc tính đó ở Template.
Bản đồ thẻ
Bố cục & vị trí
| Thẻ | Vai trò |
|---|---|
| Dock | Vị trí hiển thị control trên phông nền |
| Rows · Cols | Định nghĩa khung dòng / cột của control |
| Row · Column | Đặt control ở dòng / cột thứ mấy |
| RowSpan · ColumnSpan | Control nằm chồng lên mấy dòng / cột |
| Anchor | Cố định control vào các cạnh của khung chứa |
| Margin | Khoảng cách đến các mép lề |
| Size · MaximumSize · MinimumSize | Kích thước control |
| Pages | Khai báo các trang (tab) trên màn hình |
Hiển thị & định dạng
| Thẻ | Vai trò |
|---|---|
| Style | Khai báo gộp mọi thuộc tính định dạng |
| Text | Tên / caption của control |
| Font · fontStyle · nFontScale | Font chữ |
| BackColor · ForeColor | Màu nền / màu chữ |
| BorderStyle | Kiểu khung viền |
| TextAlign · ImageAlign | Căn chỉnh |
| Visible | Ẩn / hiện |
Dữ liệu & trạng thái
| Thẻ | Vai trò |
|---|---|
| DataMember | Trường / bảng dữ liệu control hiển thị |
| Name | Tên trường dữ liệu (hỗ trợ biểu thức nhúng) |
| Enabled | Control có bị mờ, không typing được không |
| ReadOnly (control) | Chỉ đọc |
| TabStop | Có dừng con trỏ khi Tab không |
| ClassName · Assembly | Loại control và DLL chứa nó |
| bDisableClipboardUpdated | Chặn cập nhật clipboard |
| ApplyOwnerCommandPermission | Áp phân quyền của lệnh chủ (B10) |
Danh mục ClassName
Liên quan
Layout - Tổng quan · Grid - Tổng quan · BravoEvaluator · Template