Màn hình login nó như thế này bao gồm 3 textbox : textbox1, 2 và 3
Như thông thường thì khi nhấn tab nó sẽ chuyển vị trí focus vào những ô textbox khác nhau. Ở đây cũng vậy. Nhưng chả hiểu sao khi nhấn tab từ ô textbox đầu tiên để chuyển qua ô textbox thứ 2 thì rất chậm, đôi khi phải chờ một lúc nó mới chuyển qua. Còn từ textbox 2 chuyển sang textbox 3 thì vẫn ok rất nhanh. Tại sao kỳ vậy ?
Sau khi điều tra code thì mình mới phát hiện ra vấn đề ở chỗ khi từ ô textbox1 mà ta nhấn tab thì nó sẽ diễn ra một bước xử lý đó là lấy dự liệu từ ô này gửi lên server và nhận kết quả trả về để fill vào ô textbox 2. Như vậy quá trình gửi lên trả về sẽ mất thời gian và phải khi có đầy đủ dữ liệu trả về thì con trỏ mới focus vào ô textbox 2.
Sự kiện Enter của textbox 2 được viết như sau:
private void userIdComboBox_Enter(object sender, EventArgs e)
{
GetUserId();
}
Hàm GetUserId được viết như sau:
private void GetUserId()
{
List<string> userIds = HttpClientLib.GetUserId(ComboBox1.Text, CommonUtils.GetUUID());
if (userIds != null && userIds.Count > 0)
{
ComboBox2.Items.Clear();
foreach (string userId in userIds)
{
ComboBox2.Items.Add(userId);
}
}
}
Như vậy trong trình biên dịch đã diễn ra một bước chay ngầm rằng đó là các hàm xử lý phải chạy xong thì con trỏ mới focus vào ô textbox2.
Mình đã thử đặt hàm sleep để kiểm tra thì phán đoán rằng hàm gọi API chạy theo thread chứ không chạy theo kiểu tuần tự.
Vậy có giải pháp nào để làm sao chuyển tab giữa textbox 1 và 2 vẫn mượt mà đây ?