2010-09-16 27 views
15

Có cách nào để vô hiệu hóa con trỏ trong hộp văn bản mà không cần thiết lập thuộc tính Enable to false? Tôi đã cố gắng sử dụng thuộc tính ReadOnly nhưng mặc dù thực tế là tôi không thể viết trong hộp văn bản, con trỏ xuất hiện nếu tôi nhấp vào hộp văn bản. Vậy có cách nào để loại bỏ con trỏ này một cách không?Làm thế nào để tắt con trỏ trong hộp văn bản?

Trả lời

12

Thay vào đó, bạn có thể sử dụng số Label. Khi ở trong nhà thiết kế, bạn đặt BorderStyle = Fixed3D, BackColor = WindowAutoSize = False, trông giống như một Hộp văn bản.

Tuy nhiên, con trỏ trong hộp văn bản được cung cấp để người dùng có thể cuộn qua văn bản khi nó dài hơn hộp. Bạn sẽ mất chức năng đó với một Nhãn, trừ khi bạn chắc chắn rằng nó sẽ luôn phù hợp. Ngoài ra, không thể xóa con trỏ khỏi một TextBox.

+0

Hộp văn bản ReadOnly cũng hữu ích để hiển thị thông tin mà người dùng có thể muốn sao chép và dán ở nơi khác. Bằng cách sử dụng Nhãn (hoặc tắt con trỏ) khả năng bị mất hoặc bị giảm. Nhưng nếu bạn thực sự muốn hiển thị thông tin mà không có khả năng chọn nó thì Label là công cụ thích hợp cho công việc. –

+0

@ JeffreyLWhitledge Tôi biết đây là câu hỏi cũ nhưng chỉ để cân nhắc, điều gì xảy ra nếu người dùng yêu cầu thanh cuộn trên nhãn? –

+0

@KyleT: Nếu bạn có đủ số lượng văn bản mà bạn yêu cầu thanh cuộn, thì tôi khuyên bạn vẫn nên sử dụng 'TextBox' thay thế và đặt thuộc tính' ReadOnly' thành 'true'. Con trỏ ở đó thực sự rất hay, vì nó cho phép người dùng chọn các phần của văn bản mà không cần chỉnh sửa nó. – Virtlink

17

Trong C#, bạn có thể sử dụng sau read-only textbox:

public class ReadOnlyTextBox : TextBox 
{ 
    [DllImport("user32.dll")] 
    static extern bool HideCaret(IntPtr hWnd); 

    public ReadOnlyTextBox() 
    { 
     this.ReadOnly = true; 
     this.BackColor = Color.White; 
     this.GotFocus += TextBoxGotFocus; 
     this.Cursor = Cursors.Arrow; // mouse cursor like in other controls 
    } 

    private void TextBoxGotFocus(object sender, EventArgs args) 
    { 
     HideCaret(this.Handle); 
    } 
} 
+0

Tại sao đặt 'BackColor'? Windows đã thực hiện việc này để phù hợp với chủ đề hệ thống của người dùng. –

+0

@Mikhail Semenov Tôi mới đến C#, làm thế nào để gọi sự kiện này 'TextBoxGotFocus', nó không có mặt trong các sự kiện nữa. xin giúp đỡ .. –

+0

Điều này làm việc hoàn hảo cho một RichTextBox nơi tôi đã có một vấn đề tương tự. Mã trong ReadOnlyTextBox() là thừa. – OfficeAddinDev

-3

bạn có thể sử dụng RightToLeft tài sản của Text Box, đặt nó là đúng, bạn sẽ không thoát khỏi con trỏ, nhưng nó sẽ được cố định ở góc bên phải và nó sẽ không xuất hiện tự động sau mỗi văn bản bạn gõ vào hộp văn bản của bạn. Tôi đã sử dụng nó để phát triển một ứng dụng như Windows Calculator.

+3

Chỉ làm mọi thứ trở nên tồi tệ hơn. Cũng thay đổi căn chỉnh, con trỏ vẫn xuất hiện nơi bạn bấm và chọn văn bản là ... lạ. –

8

Trong C# bạn có thể vô hiệu hóa con trỏ trong hộp văn bản bằng cách tạm thời vô hiệu hóa và sau đó kích hoạt lại hộp văn bản bất cứ khi nào nó nhận được tiêu điểm. Lưu ý không cần phải làm cho hộp văn bản chỉ đọc nếu sử dụng phương pháp này. Ví dụ:

private void TextBox_Enter(object sender, EventArgs e) 
{ 
    TextBox.Enabled = false; 
    TextBox.Enabled = true; 
} 
4

nếu bạn đặt hàm hideCaret bên trong sự kiện Textchange, điều này sẽ giải quyết được sự cố.

[DllImport("user32.dll")] 
    static extern bool HideCaret(IntPtr hWnd); 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     HideCaret(textBox1.Handle); 
    } 
0

Bạn có thể đặt chương trình theo chương trình.

textBox1.Cursor = Cursors.Arrow; 
0

Giải pháp dễ nhất cho tôi là chỉ ghi đè lên sự kiện lấy nét và tập trung lại cho phụ huynh. Điều này ngăn cản con trỏ và bất kỳ chỉnh sửa của hộp văn bản của người dùng và về cơ bản vô hiệu hóa hộp văn bản với ra có thiết lập các Enabled = false tài sản.

private void Form1_load(object sender, EventArgs e) { 
    textBox1.ReadOnly = true; 
    textBox1.Cursor = Cursors.Arrow; 
    textBox1.GotFocus += textBox1_GotFocus; 
} 


private void textBox1_GotFocus(object sender, EventArgs e) { 
    ((TextBox)sender).Parent.Focus(); 
} 
Các vấn đề liên quan