2008-12-18 67 views
11

Tôi đang viết chương trình điều khiển trong C#.Bàn điều khiển C#, Console.Xóa sự cố

Có cách nào tôi có thể sử dụng Console.Clear() để chỉ xóa những thứ nhất định trên màn hình bảng điều khiển không?

Dưới đây là vấn đề của tôi:

Tôi có một biểu tượng (tôi đặt nó trên màn hình sử dụng Console.WriteLine()) và một mảng 2ngày mà tôi muốn giữ lại tất cả mọi thứ liên tục và rõ ràng dưới nó.

Trả lời

21

Bạn có thể sử dụng một phương pháp tùy chỉnh để xóa các phần của màn hình ...

static void Clear(int x, int y, int width, int height) 
{ 
    int curTop = Console.CursorTop; 
    int curLeft = Console.CursorLeft; 
    for (; height > 0;) 
    { 
     Console.SetCursorPosition(x, y + --height); 
     Console.Write(new string(' ',width)); 
    } 
    Console.SetCursorPosition(curLeft, curTop); 
} 
+1

Đây là hấp dẫn. Tôi phải kiểm tra điều này. – LeppyR64

+0

vì vậy nếu tôi sử dụng Console.SetWindowSize (chiều rộng, chiều cao) ;, chiều rộng là 60, chiều cao 40. làm thế nào tôi sẽ đi về thanh toán bù trừ nửa dưới của màn hình? – user47415

+0

Xóa (0,20,60,20); – Diadistis

1

Bạn không thể xóa và sau đó viết lại logo và mảng? Bàn điều khiển không được thiết kế để sử dụng như bạn mô tả.

8

Chỉnh sửa: Câu trả lời here cho biết cách bạn có thể điều khiển bảng điều khiển mạnh mẽ hơn nhiều so với tôi đã biết. Những gì tôi viết ban đầu vẫn được áp dụng và có thể hữu ích nếu bạn không có các cơ sở này, có thể bằng một ngôn ngữ khác.


Lưu logo và trạng thái ban đầu của mảng và sau đó khi bạn xóa bảng điều khiển ghi lại giá trị đã lưu, thay vì sử dụng cùng một quy trình tạo.

Như những người khác đã nói, giao diện điều khiển không được thiết kế cho loại hoạt động này, do đó bạn phải làm việc xung quanh nó.

Tùy chọn khác có thể là ghi vào chuỗi hoặc trình tạo chuỗi thay vì trực tiếp trên bảng điều khiển, sau đó bất cứ khi nào bảng điều khiển cần cập nhật, hãy xóa đầu ra và ghi chuỗi/luồng "đầu ra" của bạn vào bảng điều khiển. Điều này sẽ cho phép bạn thực hiện các hoạt động chuỗi/regex vv trên văn bản đầu ra của bạn để loại bỏ/để lại những thứ cụ thể tại chỗ.

Tuy nhiên, điều này sẽ liên quan đến rất nhiều phí giao diện điều khiển vì bạn sẽ kết thúc việc in lại toàn bộ đầu ra trên mỗi lần cập nhật. Một giải pháp cho THAT có thể là giữ một biểu diễn chuỗi/dòng song song của những gì bạn viết vào bàn điều khiển, sau đó khi bạn cần xóa, bạn có thể xóa biểu diễn chuỗi, xóa bảng điều khiển, sau đó viết chuỗi ra lại một lần nữa. Bằng cách đó bạn sẽ chỉ thêm một thao tác ghi bổ sung vào ghi bình thường của bạn và công việc phụ chính sẽ chỉ xảy ra khi bạn xóa bảng điều khiển. Bất cứ điều gì bạn làm, viết cho bảng điều khiển không bao giờ là một hoạt động nhanh, và nếu bạn đang làm rất nhiều hoạt động, nơi công cụ được ghi vào bàn điều khiển, nó có thể là một lực cản đáng kể về hiệu suất của ứng dụng của bạn.

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