2008-08-16 32 views
5

Tôi có một UserControl bao gồm ba TextBox. Trên một biểu mẫu tôi có thể có một hoặc nhiều hoặc UserControl của tôi. Tôi muốn thực hiện hành vi tab của riêng tôi vì vậy nếu người dùng nhấn Tab trong TextBox thứ hai, tôi chỉ nên di chuyển đến TextBox thứ ba nếu TextBox thứ hai có bất cứ thứ gì được nhập vào. Nếu không có gì được nhập vào trong TextBox thứ hai thì điều khiển tiếp theo của biểu mẫu sẽ được lấy nét theo hành vi tab bình thường. Nếu người dùng đã không nhập bất cứ điều gì trong TextBox đầu tiên hoặc thứ hai và các tab nhấn có trường hợp đặc biệt này, nơi một điều khiển trên biểu mẫu nên được bỏ qua.Hành vi tab ghi đè trong WinForms

Bằng cách sử dụng ProcessDialogKey tôi đã quản lý để làm cho nó hoạt động tốt nhưng tôi vẫn có một vấn đề. Câu hỏi của tôi là nếu có cách phát hiện cách điều khiển WinForms tập trung vì tôi cũng muốn biết liệu UserControl của tôi có tập trung từ Tab hay Shift-Tab và sau đó thực hiện công cụ kỳ lạ của mình nhưng nếu người dùng nhấp vào điều khiển tôi không muốn làm bất cứ điều gì đặc biệt.

Trả lời

3

Theo nguyên tắc chung, tôi sẽ nói ghi đè hành vi tiêu chuẩn của khóa TAB sẽ là một ý tưởng tồi. Có lẽ bạn có thể làm điều gì đó như vô hiệu hóa hộp văn bản thứ 3 cho đến khi một mục nhập hợp lệ được thực hiện trong hộp văn bản thứ hai.

Bây giờ, khi nói điều này, tôi cũng đã chia quy tắc này theo yêu cầu của khách hàng. Chúng tôi đã nhập chức năng chính như phím tab, trong đó phím enter sẽ lưu giá trị trong trường văn bản và chuyển con trỏ đến trường tiếp theo.

1

Tôi không nghĩ có cách tích hợp sẵn mà bạn có thể thực hiện. Tất cả các sự kiện lấy nét của WinForms (GotFocus, LostFocus, Enter, Leave) được gọi với tham số EventArgs trống, sẽ không cung cấp cho bạn bất kỳ thông tin bổ sung nào.

Cá nhân, tôi sẽ tắt hộp văn bản thứ ba, như Rob Thomas nói. Nếu bạn quyết tâm làm điều này, tuy nhiên, sẽ không khó để thiết lập một giải pháp hướng dẫn (đọc: hackish). Khi phím tab được nhấn (nếu tiêu điểm nằm trên hộp văn bản thứ hai), hãy đặt một biến trong biểu mẫu của bạn. Nếu đối tượng tiếp theo tập trung thì đó là hộp văn bản thứ ba, sau đó bạn biết chính xác nó đã xảy ra như thế nào.

0

Tôi đồng ý với DannySmurf. Lộn xộn với thứ tự tab có thể cung cấp cho bạn địa ngục sau này nếu các yêu cầu cho việc thay đổi ứng dụng.

Một điều khác mà bạn có thể làm là triển khai một số loại trình hướng dẫn để người dùng trải qua.

1

Lý do cho hành vi tab lạ này là tất cả về tốc độ trong quá trình nhập. Nó thực sự tốt để có được một số đầu vào, tôi đã không nghĩ về việc vô hiệu hóa một hộp văn bản nhưng điều đó thực sự có thể làm việc. Nhưng bằng cách sử dụng phím Enter để chấp nhận đầu vào thậm chí đã không vượt qua tâm trí của tôi. Điều đó sẽ làm việc tốt hơn rất nhiều. Người dùng có thể nhập các số và sau đó nhấn enter để chấp nhận đầu vào và hộp văn bản tiếp theo có thể sẽ là hộp văn bản hoạt động. Nó giống như có bánh và ăn nó quá, yếu tố tốc độ là có kể từ khi sử dụng phím enter không có tab không cần thiết phải được thực hiện để có được đúng lĩnh vực và sử dụng phím enter bên cạnh bàn phím số làm cho nó thực sự trơn tru.

Cảm ơn bạn đã nhập!

0

Tốt hơn là tắt điều khiển, hãy thử trò chuyện xung quanh bằng TabStop - nếu điều này là sai, kiểm soát sẽ chỉ bị bỏ qua khi tabbing.

Tôi cũng khuyên rằng sự kiện đã thay đổi của TextBox là nơi sẽ cập nhật TabStop trên các điều khiển khác.

Tôi đã làm điều tương tự với điều khiển đăng nhập, nơi người dùng có thể nhập tên người dùng hoặc địa chỉ email (trong các trường riêng biệt), cộng với mật khẩu của họ và tabStop là thứ tôi đã sử dụng để hoàn thành công việc.

Các vấn đề liên quan