2010-07-16 36 views
9

Tôi đang chuyển đổi một số TextBox ra cho RichTextBoxes để đạt được một số tính năng thú vị.Tương đương RichTextBox của TextBox.AcceptsReturn

Tôi đã đặt TextBox của mình thành AcceptReturn sao cho phím enter sẽ tạo một dòng mới, thay vì để điều khiển. RichTextBox dường như không có tính năng này.

Có cách nào đơn giản để thực hiện việc này hay tôi phải chụp tất cả các lần nhấn và xử lý chúng riêng lẻ?

Trả lời

16

Lưu ý: Sự cố này chỉ xảy ra khi bạn đặt thuộc tính "AcceptButton" của biểu mẫu.

Đặt RichTextBox.AcceptsTab thành true. Đối với một số lý do này hoạt động cho cả hai tab và phím enter. Nếu bạn chỉ muốn nhập các phím thì bạn sẽ phải viết mã tùy chỉnh.

+0

Cảm ơn bạn. Hóa ra tôi đã có bộ đó. Tôi quên rằng tôi đang xử lý các lần nhấn phím ở mức biểu mẫu để di chuyển giữa các điều khiển khi nhập. Tôi sẽ phải móc tất cả các phím bấm và kiểm tra nhập mỗi lần để ghi đè hành vi của riêng tôi. Cảm ơn. – captncraig

1

Giải pháp là để ghi đè IsInputKey:

protected override bool IsInputKey(Keys keyData) 
{ 
    if (
     (keyData & ~Keys.Modifiers) == Keys.Tab && 
     (keyData & (Keys.Control | Keys.Alt)) == 0 
    ) 
     return false; 

    return base.IsInputKey(keyData); 
} 

Sau khi thiết lập AcceptsTab true, bạn đảm bảo rằng quá trình RichTextBox cả tab và phím trở lại. Với việc triển khai IsInputKey ở trên, chúng tôi đảm bảo rằng phím Tab và Shift + Tab không bao giờ đạt đến số RichTextBox để chúng được sử dụng để điều hướng thay thế.

Ghi đè ở trên phải được dán trong một lớp bắt nguồn từ RichTextBox.

1

Kể từ khi Carter chỉ ra rằng điều này chỉ áp dụng nếu AcceptButton được thiết lập, và giải pháp khác cho thấy bắt nguồn từ lớp RichTextBox, tôi tìm thấy một giải pháp đơn giản khác. Chỉ cần bỏ AcceptButton cho thời gian mà/a RichTextBox có tiêu điểm. Dưới đây là một mã mẫu:

private void RichText_Enter(object sender, EventArgs e) 
{ 
    AcceptButton = null; 
} 

private void RichText_Leave(object sender, EventArgs e) 
{ 
    AcceptButton = OKActionButton; 
} 

Giả định rằng bạn chỉ có một AcceptButton duy nhất và không có khả năng thay đổi. Nếu không, bạn sẽ phải sao chép một số AcceptButton tìm logic ở đây hoặc chỉ sao lưu giá trị AcceptButton trước đó trước khi thiết lập nó thành null.

Giải pháp này cũng có tác dụng phụ khi xóa đường viền mặc định khỏi nút chấp nhận thực, cho biết người dùng nhấn phím Enter bây giờ sẽ không kích hoạt nút đó.

0

Chỉ cần thay đổi tùy chọn Chấp nhận trong Richtextbox Thuộc tính chuyển sang "true", nó sẽ hoạt động như một ma thuật

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