2012-03-22 7 views
5

Đây là nỗ lực đầu tiên của tôi để tạo GUI trong MATLAB. Tôi đã không thể tìm được cách để phát hiện khi tiêu điểm được chuyển từ một chỉnh sửa văn bản sang một đối tượng khác. Tôi cần chức năng như vậy vì vậy tôi có thể kiểm tra "tại chỗ" đầu vào của người dùng và thay đổi màu nền của văn bản chỉnh sửa thành màu đỏ, nếu đầu vào được tạo thành một cách không chính xác.Làm cách nào để phát hiện mất tập trung từ đối tượng chỉnh sửa văn bản?

Nói cách khác, sẽ rất thuận tiện cho người dùng cuối có thể viết biểu thức của mình trong chỉnh sửa văn bản, sau đó nhấn tab để chuyển sang chỉnh sửa văn bản tiếp theo và đồng thời xem nền đỏ trong chỉnh sửa văn bản đầu tiên trong trường hợp có sự cố với đầu vào.

Tôi đã nghĩ đến một số lựa chọn thay thế để kiểm tra đầu vào của người dùng nhưng chúng không thuận tiện như trên. Làm thế nào tôi có thể thực hiện một cái gì đó như thế này?

Trả lời

7

Khi bạn nhấn tab để di chuyển tiêu điểm từ hộp văn bản có thể chỉnh sửa sang đối tượng uicontrol khác, thì callback function của hộp văn bản có thể chỉnh sửa sẽ được gọi. Vì vậy, bạn sẽ chỉ phải đặt mã để kiểm tra văn bản và cảnh báo người dùng về một vấn đề trong hàm gọi lại của uicontrol văn bản có thể chỉnh sửa của bạn.

Lưu ý rằng the documentation bang mà gọi lại cho một uicontrol cũng sẽ được gọi dưới những điều kiện khác:

  • Nhấp một thành phần, các thanh menu, hoặc nền của GUI.

  • Đối với một hộp văn bản có thể chỉnh sửa một dòng, nhấn Nhập.

  • Đối với hộp văn bản có thể chỉnh sửa nhiều dòng, nhấn Ctrl + Nhập.

Ví dụ, đây là một thực hiện gọi lại rất đơn giản mà sẽ thiết lập màu nền văn bản với giá trị màu xám mặc định nếu chuỗi là một trong hai 'yes' hoặc 'no', hoặc đỏ nếu chuỗi là bất cứ điều gì khác:

function callback_fcn(hSource, eventData) 
    if ismember(get(hSource, 'String'), {'yes', 'no'}) 
    set(hSource, 'BackgroundColor', [0.941176 0.941176 0.941176]); 
    else 
    set(hSource, 'BackgroundColor', 'r'); 
    end 
end 
+0

lol, vì vậy freaking đơn giản ... Cho đến nay tôi nghĩ rằng các chức năng gọi lại được gọi khi một nút lệnh được nhấn. Cảm ơn nhiều! – niels