1. 📊 테이블 그리드 행(Row) 이벤트
그리드에서 행을 추가하거나 지울 때 발생하며, 사전 검증이나 수량/금액 재계산에 핵심적으로 사용됩니다.
- ROWINSERTBEFORE: 그리드에 새 행을 추가하기 직전 실행
➔ "헤더의 필수값(회원 ID) 안 적었으면 행 추가 버튼 눌러도 행 생성하지 마!" (사전 차단/검증)
- ROWINSERTAFTER: 그리드에 새 행이 추가된 직후 실행
➔ "새 행 생성됐으니 순번(Line No) 1씩 늘려서 채우고 기본 수량 1개로 세팅해!" (초기값 세팅)
- ROWDELETEBEFORE: 그리드에서 행을 지우기 직전 실행
➔ "정말 이 항목을 삭제할 건지 확인 메시지 띄우고, '아니오' 누르면 삭제 취소해!" (삭제 승인)
- ROWDELETEAFTER: 그리드에서 행이 지워진 직후 실행
➔ "행 지워졌으니 남아있는 책들 기준으로 총 금액이랑 건수 다시 계산해!" (후속 정리 및 재합산)
2. 📑 테이블 셀(Cell) & 선택 이벤트
그리드 내부의 특정 칸이나 선택 위치가 바뀔 때 발생합니다.
- CELLCHANGEBEFORE: 셀의 값이 바뀌기 직전 실행
➔ "입력한 대여 수량이 현재 재고 수량보다 많으면 입력 취소하고 이전 값으로 돌려놓아!" (값 유효성 검사)
- CELLCHANGEAFTER: 셀의 값이 바뀐 직후 실행
➔ "책 단가나 수량이 바뀌었으니 해당 행의 대여금액과 하단 총합계를 실시간 계산해!" (실시간 연산)
- DBLCLICK: 그리드의 특정 행이나 셀을 더블클릭할 때 실행
➔ "이 행 더블클릭했으니 선택한 도서 번호 부모 창으로 넘겨주고 팝업 닫아!"
- SELECTIONCHANGED: 사용자가 다른 행이나 셀을 클릭해서 선택 위치(Active Row)를 바꿀 때 실행
➔ "선택된 행이 바뀌었으니 하단 상세 영역에 새로 선택한 항목 정보 뿌려줘!"
3. 🖥️ 화면(Dialog) 생명주기 이벤트
다이얼로그 화면이 열리고 닫히는 전체 흐름을 제어합니다
- BEFORE: 화면이 사용자 눈에 보이기 직전(메모리 로딩 단계) 실행
➔ "화면 켜지기 전에 기본 회사코드('1000') 세팅하고 변수들 초기화해!"
- AFTER: 화면이 사용자 눈에 짜잔하고 나타난 직후 실행
➔ "화면 로딩 끝났으니 DB에서 목록 조회(SEARCH)해서 그리드에 채워넣어!"
사실상 BEFORE와 AFTER는 같은 역할이지만, 분리해둔 것뿐
- TRANSCALLED: 다른 화면에서 파라미터(Parameter)를 받으면서 열릴 때 실행
➔ "부모 화면에서 넘겨준 대여 번호 받아서 상세 정보 자동 조회해!"
- CLOSEBEFORE: 사용자가 화면을 닫으려고 할 때(X 버튼 등) 실행
➔ "저장 안 된 변경사항이 있는데 정말 창 닫을 건지 물어봐!"
4. 🔲 일반 UI 컨트롤 이벤트 (TextField, Button 등)
버튼, 텍스트 필드 등 일반 UI 요소에서 발생합니다
- CLICK: 버튼을 클릭했을 때 실행
➔ "조회/저장/삭제 버튼 눌렀으니 해당 업무 로직 실행해!"
- GAINFOCUS: 입력창에 커서(Focus)가 들어가는 순간 실행
➔ "이 입력창에 커서 들어왔으니 하단 상태바에 입력 안내 문구 띄워!"
- LOSEFOCUS: 입력창에서 커서가 벗어나는(다른 곳 클릭) 순간 실행
➔ "입력 마치고 딴 데 클릭했으니 입력한 회원 ID가 진짜 DB에 있는지 검증해!"