Ứng dụng WinForms của tôi có một Hộp văn bản mà tôi đang sử dụng làm tệp nhật ký. Tôi đang thêm văn bản mà không có hình thức nhấp nháy bằng cách sử dụng TextBox.AppendText(string);
, tuy nhiên khi tôi cố gắng thanh lọc văn bản cũ (như thuộc tính .Text kiểm soát đạt đến giới hạn .MaxLength), tôi nhận được nhấp nháy khủng khiếp.Dừng nhấp nháy TextBox trong khi cập nhật
Mã Tôi đang sử dụng như sau:
public static void AddTextToConsoleThreadSafe(TextBox textBox, string text)
{
if (textBox.InvokeRequired)
{
textBox.Invoke(new AddTextToConsoleThreadSafeDelegate(AddTextToConsoleThreadSafe), new object[] { textBox, text });
}
else
{
// Ensure that text is purged from the top of the textbox
// if the amount of text in the box is approaching the
// MaxLength property of the control
if (textBox.Text.Length + text.Length > textBox.MaxLength)
{
int cr = textBox.Text.IndexOf("\r\n");
if (cr > 0)
{
textBox.Select(0, cr + 1);
textBox.SelectedText = string.Empty;
}
else
{
textBox.Select(0, text.Length);
}
}
// Append the new text, move the caret to the end of the
// text, and ensure the textbox is scrolled to the bottom
textBox.AppendText(text);
textBox.SelectionStart = textBox.Text.Length;
textBox.ScrollToCaret();
}
}
Có cách nào gọn gàng của thanh lọc dòng văn bản từ phía trên cùng của điều khiển mà không gây nhấp nháy? Một textbox không có các phương thức BeginUpdate()/EndUpdate() mà một ListView có.
Hộp văn bản có kiểm soát ngay cả điều khiển phù hợp nhất cho nhật ký bảng điều khiển không?
Chỉnh sửa: Nhấp nháy TextBox dường như là hộp văn bản cuộn lên trên cùng (trong khi tôi dọn dẹp văn bản ở đầu điều khiển), và sau đó ngay lập tức cuộn xuống dưới cùng. - tất cả xảy ra rất nhanh, vì vậy tôi chỉ thấy nhấp nháy lặp đi lặp lại.
Tôi cũng vừa xem this question và đề xuất là sử dụng ListBox, tuy nhiên tôi không biết điều này có hiệu quả trong trường hợp của tôi hay không (như trong hầu hết các trường hợp). một nhân vật tại một thời điểm.
Có thể muốn thay đổi "nếu" thành "trong khi" - trong trường hợp xóa dòng văn bản đầu tiên không đủ để cho phép văn bản mới phù hợp với TextBox. –
Cũng phát hiện Noam. Cảm ơn. – Bryan
Bài đăng này có một số thông tin khác về điều này - http://stackoverflow.com/questions/1333393/how-to-prevent-a-windows-forms-textbox-from-flickering-on-resize –