2008-09-04 30 views

Trả lời

10

Bạn có thể thực hiện thông qua một cuộc gọi win32

[DllImport("user32.dll")] 
static extern bool HideCaret(IntPtr hWnd); 
public void HideCaret() 
{ 
    HideCaret(someTextBox.Handle); 
} 
+2

Đừng quên 'using System.Runtime.InteropServices;' và 'ShowCaret (IntPtr hWnd);' – Sam

1

Nếu bạn tắt hộp văn bản (đặt Enable=false), văn bản trong đó vẫn có thể cuộn và có thể chọn. Nếu bạn không thích trình bày trực quan của một hộp văn bản bị vô hiệu hóa (thường là nền màu xám), bạn có thể ghi đè lên màu sắc theo cách thủ công.

Được cảnh báo, màu ghi đè thủ công sẽ làm cho biểu mẫu/điều khiển của bạn trông lạ trên các hệ thống không sử dụng cài đặt màu/chủ đề mặc định. Đừng cho rằng bởi vì kiểm soát của bạn là màu trắng mà kiểm soát của mọi người sẽ có màu trắng. Đó là lý do tại sao bạn nên luôn sử dụng các màu của hệ thống bất cứ khi nào có thể (được xác định trong các điều tra System.Drawing.SystemColors) chẳng hạn như SystemColors.ControlLight.

+1

Không, không thể chọn (hoặc cuộn được) nếu hộp văn bản bị tắt. Bạn có lẽ đang nghĩ đến việc làm cho nó chỉ đọc. –

-4

AFAIK, điều này không thể được thực hiện. Điều khiển TextBox là một điều khiển vui nhộn vì nó thực sự có về hành vi không thể sửa đổi do cách nó chạm vào hệ điều hành. Đây là lý do tại sao nhiều TextBox được tùy chỉnh mát mẻ được viết từ đầu.

Tôi sợ bạn có thể không có khả năng làm những gì bạn muốn làm :(

4

Khi sử dụng các cuộc gọi win32 đừng quên để ẩn con trỏ vào sự kiện GotFocus của textbox.

+2

Cảm ơn vì điều này! Tôi đã thử tất cả mọi thứ ngay cả Nhập sự kiện nhưng nó không hoạt động nhưng điều này làm việc! – ViFer

3

Chỉ cần cho đầy đủ, tôi cần một người chức năng như vậy để sử dụng với một DevExpress WinForms TextEdit control.

Họ đã làm provid e a ShowCaret và phương pháp HideCaret, rất tiếc là chúng được bảo vệ. Vì vậy, tôi đã tạo ra một lớp dẫn xuất cung cấp chức năng. Đây là mã đầy đủ:

public class MyTextEdit : TextEdit 
{ 
    private bool _wantHideCaret; 

    public void DoHideCaret() 
    { 
     HideCaret(); 

     _wantHideCaret = true; 
    } 

    public void DoShowCaret() 
    { 
     ShowCaret(); 

     _wantHideCaret = false; 
    } 

    protected override void OnGotFocus(EventArgs e) 
    { 
     base.OnGotFocus(e); 

     if (_wantHideCaret) 
     { 
      HideCaret(); 
     } 
    } 
} 

Để sử dụng mã này, chỉ cần sử dụng lớp có nguồn gốc thay vì TextEdit lớp gốc trong mã của bạn và gọi DoHideCaret() bất cứ nơi nào, ví dụ trong hàm tạo của biểu mẫu có chứa điều khiển chỉnh sửa văn bản.

Có thể điều này hữu ích cho người nào đó trong tương lai.

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