Khi tôi chuyển sang điều khiển CEdit trên hộp thoại bằng cách sử dụng phím tab hoặc các phím mũi tên, tất cả văn bản trong điều khiển được chọn. Hành vi này đang gây ra cho tôi các vấn đề và tôi muốn nó nếu điều khiển chỉ đặt con trỏ ở đầu (hoặc kết thúc) của văn bản và không chọn bất cứ điều gì. Có cách nào đơn giản để thực hiện việc này không (ví dụ: thuộc tính của điều khiển mà tôi có thể đặt)?CEdit chọn mọi thứ khi lấy nét
Trả lời
Tôi không nghĩ rằng kiểu như vậy tồn tại.
Nhưng bạn có thể thêm handler OnSetfocus với trình hướng dẫn:
void CMyDlg::OnSetfocusEdit1()
{
CEdit* e = (CEdit*)GetDlgItem(IDC_EDIT1);
e->SetSel(0); // <-- hide selection
}
Một cách khác để đạt được mục tiêu của bạn là để ngăn chặn các nội dung từ được chọn. Khi điều hướng qua các điều khiển trong hộp thoại, trình quản lý hộp thoại sẽ truy vấn các điều khiển tương ứng về các thuộc tính nhất định liên quan đến hành vi của chúng. Theo mặc định, điều khiển chỉnh sửa phản hồi với cờ DLGC_HASSETSEL
(trong số những người khác) để chỉ báo cho trình quản lý hộp thoại rằng nội dung của nó phải được chọn tự động.
Để giải quyết vấn đề này, bạn phải phân lớp kiểm soát chỉnh sửa và xử lý thông báo WM_GETDLGCODE để thay đổi cờ phù hợp. Đầu tiên, lấy một lớp từ CEdit
:
class CPersistentSelectionEdit : public CEdit {
public:
DECLARE_MESSAGE_MAP()
afx_msg UINT OnGetDlgCode() {
// Return default value, removing the DLGC_HASSETSEL flag
return (CEdit::OnGetDlgCode() & ~DLGC_HASSETSEL);
}
};
BEGIN_MESSAGE_MAP(CPersistentSelectionEdit, CEdit)
ON_WM_GETDLGCODE()
END_MESSAGE_MAP()
Tiếp theo phân lớp kiểm soát thực tế. Có một số cách để làm điều này. Để giữ cho mọi thứ đơn giản chỉ cần khai báo thành viên lớp m_Edit1
loại CPersistentSelectionEdit
trong lớp thoại của bạn và thêm một mục thích hợp ở DoDataExchange
:
// Subclass the edit control
DDX_Control(pDX, IDC_EDIT1, m_Edit1);
Tại thời điểm này bạn có một kiểm soát chỉnh sửa mà không có nội dung của nó tự động chọn khi điều hướng đến. Bạn có thể kiểm soát việc lựa chọn bất cứ cách nào bạn muốn.
Nếu bạn sử dụng phương pháp này, bạn không bị mất vị trí dấu mũ mỗi khi bạn đặt trọng tâm vào hộp văn bản, vì vậy tôi thích nó. – DanDan
- 1. Chọn một điều khiển WPF khi nó được lấy nét
- 2. Cách thêm bóng vào TextView khi chọn/lấy nét
- 3. Chọn mọi hàng thứ n bằng NHibernate
- 4. Hộp nhập liệu lấy nét khi tải
- 5. Spinner không lấy nét
- 6. Điều khiển TreeView trong C#, chọn() và lấy nét
- 7. Lấy mọi đối tượng thứ 2 trong danh sách
- 8. Có thể lấy "mọi thứ" từ javax.naming.InitialContext không?
- 9. Chọn tất cả văn bản bên trong EditText khi văn bản được lấy nét
- 10. Chọn mọi phần tử thứ hai từ mảng bằng lambda
- 11. Lấy nét một cách ngẫu nhiên khi di chuyển
- 12. Phát hiện Khi máy ảnh AVFoundation kết thúc lấy nét
- 13. Trả lời bàn phím khi không lấy nét? (C#, Vista)
- 14. Cách lấy ô được lấy nét trong JTable trong nhiều lựa chọn
- 15. Lấy nét sau chuột trong wxPython?
- 16. CSS3: Cách chọn mọi phần tử thứ 4 và thứ 5
- 17. DataGridView: Cách chọn toàn bộ Cột và bỏ chọn mọi thứ khác?
- 18. Sử dụng ListBox trong phạm vi lấy nét
- 19. UITextField mất sự kiện lấy nét
- 20. jQuery trường nhập năng động lấy nét
- 21. Máy ảnh iPhone mất tự động lấy nét khi sử dụng ZBarSDK
- 22. jQuery UI Trộm cắp lấy nét
- 23. SQL WHERE column = mọi thứ
- 24. Mọi thứ nhanh hơn ImageMagick?
- 25. Khoảng cách lấy nét của máy ảnh
- 26. WTForms ... html, tự động lấy nét?
- 27. Làm cho tiện ích Tkinter lấy nét
- 28. Google Goggles Camera Tự động lấy nét
- 29. NSOpenPanel - Mọi thứ không được chấp nhận?
- 30. Mọi thứ biên dịch, nhưng Resharper đánh dấu mọi thứ màu đỏ?
Điều này không hoàn toàn phù hợp với tôi. Điều khiển chỉnh sửa của tôi là nhiều dòng và nội dung của chúng có thể cao hơn kiểm soát (tôi có thanh cuộn dọc). BNoScroll cần phải là TRUE và lựa chọn cho "no select" là -1, 0, vì vậy mã của tôi gọi nó là 'e-> SetSel (-1, 0, TRUE);'. Điều này duy trì bất kỳ vị trí cuộn hiện tại nào khi tôi duyệt qua các điều khiển của hộp thoại của mình, nhưng cũng đảm bảo không có gì được chọn khi tiêu điểm quay trở lại điều khiển chỉnh sửa của tôi. – franji1