
Hướng Dẫn Truyền Dữ Liệu giữa 2 Gui với nhau
Trong bài viết này Tôi xin hướng dẫn đến bạn cách để truyền và nhận một dữ liệu nào đó cho một Gui khác trong phần mền Matlab. Trước khi học bài này thì bạn nên học cách làm sao để liên kết 2 Gui với nhau trước đã. Vì khi bạn biết cách gọi Gui A sang Gui B thì lúc đó ta mới học cách truyền nhận dữ liệu giữa chúng với nhau.

Việc trao đổi dữ liệu này thực sự rất cần thiết trong việc lập trình chúng ta. Sở dĩ tại sao tôi lại nói vậy? Xin thưa với bạn rằng khi làm một dự án lớn thì đồng nghĩa Code chúng ta quá nhiều. Như vậy ta phải biết cách chia nhỏ ra thành từng thành phần nhỏ khác nhau. Như vậy thì ta cần chia nhỏ Gui ra thành nhiều Gui khác đảm nhaann 1 nhiệm vụ nào đó. Việc chia như vậy đồng nghĩa với bạn cần phải trao đổi dữ liệu qua lại để ta có thể tính toán khi nhận được dữ liệu từ Gui khác.
Thực ra thì để nhận được dữ liệu từ một Gui khác thì cũng không khó lắm đâu. Tôi và bạn cùng làm một ví nhỏ dưới đây nhé. Chúng ta sẽ không đặt quá nặng nề về giao diện cũng như chức năng của nó. Đơn giản là ta hiểu được vấn đề rồi thì từ đó bạn có thể áp dụng vào từng bài toán cụ thể của mình sao cho hợp lý.
Giả sử tôi có 2 Gui như hình phía dưới

Bài toán của ta sẽ như sau:Đối với GuiA thì cho người dùng nhập 2 số của bienX và bienY sau đó ta sẽ cộng 2 kết quả này. Khi có kết quả rồi ta sẽ gán vào ketQua và truyền dữ liệu của kết quả này sang cho GuiB cụ thể hơn là gán vào ketQuaGuiA. Oke ta cùng bắt tay vào làm nhé,
1. Ở Gui A
Bạn hãy vào Function tinhToan để viết lệnh cho nó
– Tạo một biến global là result
global result
– Lấy giá trị nhận được của Tag bienX
resultX = str2num(get(handles.bienX, 'string'));
– Lấy giá trị nhận được của Tag bienY
resultY = str2num(get(handles.bienY, 'string'));
Trong đó:
- str2num(): Chuyển đổi kiểu chuỗi sang số. Tại vì ô nhập của ta là Edit Text cho nên nó sẽ trả về kiểu string
- get(): Lấy giá trị
– Tính giá trị của 2 biến x,y
result = resultX + resultY;
– Gán giá trị vào tag ketQua
set(handles.ketQua, 'string', num2str(result));
Trong đó: num2str(): Truyển kiểu số sang chuỗi.
Oke bạn thử chạy trương trình nên và xem kết quả thế nào nhé.

Và đây là toàn bộ code của file trương trình trong Gui A

Để trông chuyên nghiệp hợp thì bạn có thể cho Tag ketQua Off Enable đi cũng được. Vì nó cũng chỉ nhận kết quả cho nên ta cũng không cần thiết để người dùng nhập dữ liệu vào ô này làm gì cả.
2. Ở Gui B
Oke để Gui B có thể nhận được dữ liệu từ Gui hay nói rõ hơn để lấy được giá trị từ biến result. Thì ta làm sau.
Giả sử khi bạn chạy trương trình của Gui B nên thì sẽ có kết quả luôn thì ta sẽ tiến hành viết vào function OpeningFcn
– Lấy dữ liệu
global result
Trong đó: global result: Đã khởi tạo ở Gui A
– Gán giá trị và Tag ketQuaGuiA ở Gui B
set(handles.ketQuaGuiA, 'string', result);
Bạn chạy trương trình nên để xem kết quả.

Như vậy ta đã hoàn thành nhiệm vụ giải ví dụ trên rồi đó.
Mấu chốt của bài học này đó là nếu bạn muốn truyền giá trị nào đó từ Gui A chẳng hạn.Thì bạn chỉ cần cho giá trị đó vào một biến nào đó sau đó đặt trước nó kiểu global. Khi muốn nhận giá trị từ biến đó thì Gui B chẳng hạn bạn có thể gọi nó bằng
global bienTruyenDuLieu
Chỉ một câu đơn giản trên là bạn đã có gán và lấy dữ liệu từ một Gui khác rồi đó.
Tổng Kết:
Trên đây tôi và bạn đã học cách truyền dữ liệu giữa 2 Gui thành công rồi. Qua bài học này bạn có thể tự áp dụng vào từng trường hợp của bạn. Vi vọng bài viết này giúp ích cho bạn! Chúc bạn thành công!
Cho mình hỏi khi nào thì cần khai báo global biến nào đấy. Nếu không khai báo thì bị gì . Với như các định dạng số %s %d %f là gì , chuẩn định dạng của từng cái như thế nào
Hi!
nếu truyền qua 2 GUI trên 2 pc dc ko ad?