Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Làm thế nào để thay đổi màu sắc tiền cảnh và màu nền văn bản trong một cửa sổ giao diện điều khiển bằng cách sử dụng Visual C#

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:319883
Đối với một Microsoft Visual Basic.NET Phiên bản của bài viết này, xem 319234.

Bài viết này đề cập đến Microsoft sau.Không gian tên thư viện lớp của NET Framework:
  • System.Runtime.InteropServices

TRONG NHIỆM VỤ NÀY

TÓM TẮT
Bài viết từng bước này mô tả cách thay đổi tiền cảnh và nền màu sắc của văn bản được viết vào cửa sổ giao diện điều khiển bằng cách sử dụng Visual C#.

Bài viết này mô tả làm thế nào để lưu các thiết đặt ban đầu của cửa sổ giao diện điều khiển khi bắt đầu chương trình, làm thế nào để sửa đổi các thiết đặt màu và làm thế nào để khôi phục lại các màu sắc với giá trị ban đầu của họ khi ra khỏi chương trình.

back to the top

Giới thiệu

Để thay đổi màu sắc tiền cảnh và nền văn bản hiển thị cửa sổ giao diện điều khiển, sử dụng các SetConsoleTextAttribute Win32 ứng dụng lập trình chức năng giao diện (API). Chức năng này tập hợp các thuộc tính của các nhân vật đang ghi vào bộ đệm màn hình.

Khi bạn thay đổi các thuộc tính này tại thời gian chạy, những thay đổi là hợp lệ cho miễn là giao diện điều khiển cửa sổ đang mở. Nếu bạn đóng và mở lại các cửa sổ giao diện điều khiển, các thuộc tính được đặt lại về giá trị mặc định của họ. Nếu bạn thực hiện chương trình từ một dòng lệnh trong một cửa sổ giao diện điều khiển đang chạy, những thay đổi bạn thực hiện cho các thuộc tính văn bản có hiệu lực trong đó giao diện điều khiển cửa sổ cho miễn là các cửa sổ đang mở, ngay cả sau khi thoát khỏi chương trình của bạn. Vì vậy, một chương trình sẽ khôi phục các thuộc tính màu sắc ban đầu trước khi ra khỏi chương trình.

Bạn có thể có được các thuộc tính văn bản của cửa sổ giao diện điều khiển bằng cách sử dụng các GetConsoleScreenBufferInfo API chức năng. Chức năng này lấp đầy một thể hiện của các CONSOLE_SCREEN_BUFFER_INFO cấu trúc thông tin về các thiết đặt hiện thời bộ đệm đầu ra. Các wAttribute tham số cấu trúc này chứa thông tin màu định nghĩa phía sau và nền màu sắc của văn bản. Những màu sắc có thể là bất kỳ sự kết hợp màu sắc có thể được tạo ra bằng cách kết hợp màu đỏ, lục và lam.
   OriginalColors = ConsoleInfo.wAttributes;   SetConsoleTextAttribute(hConsoleHandle, color);				
Bạn có thể sử dụng các ResetColor phương pháp để đặt lại thuộc tính bộ đệm đầu ra khỏi cửa sổ giao diện điều khiển các giá trị ban đầu bị bắt khi chương trình bắt đầu thực hiện nó.
   SetConsoleTextAttribute(hConsoleHandle, OriginalColors);				
back to the top

Ví dụ-by-step

  1. Trong phòng thu trực quan.NET hoặc Visual Studio 2005, tạo ra một dự án Visual C# giao diện điều khiển ứng dụng mới.
  2. Trong giải pháp Explorer, bấm chuột phải vào dự án của bạn, hãy nhấp vào Thêm, và chọn Thêm Class để thêm một lớp mới vào chương trình của bạn.
  3. Dán đoạn mã mẫu sau trong lớp được tạo ra. Kiểm chứng rằng mẫu mã thay thế tất cả hiện có mã trong lớp.
       using System;   using System.Runtime.InteropServices;   namespace ConsoleColor   {      /// Summary description for Class2.      public class Class2      {         private int hConsoleHandle;         private COORD ConsoleOutputLocation;         private CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo;         private int OriginalColors;         private const int  STD_OUTPUT_HANDLE = -11;         [DllImport("kernel32.dll", EntryPoint="GetStdHandle", SetLastError=true,                         CharSet=CharSet.Auto,                         CallingConvention=CallingConvention.StdCall)]		private static extern int GetStdHandle(int nStdHandle);         [DllImport("kernel32.dll", EntryPoint="GetConsoleScreenBufferInfo",                         SetLastError=true, CharSet=CharSet.Auto,                         CallingConvention=CallingConvention.StdCall)]		private static extern int GetConsoleScreenBufferInfo(int hConsoleOutput,                         ref CONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo);         [DllImport("kernel32.dll", EntryPoint="SetConsoleTextAttribute",                         SetLastError=true, CharSet=CharSet.Auto,                         CallingConvention=CallingConvention.StdCall)]		private static extern int SetConsoleTextAttribute(int hConsoleOutput,                                 int wAttributes);          public enum Foreground         {			            Blue = 0x00000001,            Green = 0x00000002,            Red = 0x00000004,            Intensity = 0x00000008         }         public enum Background         {            Blue = 0x00000010,            Green = 0x00000020,            Red = 0x00000040,            Intensity = 0x00000080         }         [StructLayout(LayoutKind.Sequential)] private struct COORD         {            short X;            short Y;         }			         [StructLayout(LayoutKind.Sequential)] private struct SMALL_RECT         {            short Left;            short Top;            short Right;            short Bottom;         }         [StructLayout(LayoutKind.Sequential)] private struct CONSOLE_SCREEN_BUFFER_INFO         {            public COORD dwSize;            public COORD dwCursorPosition;            public int wAttributes;            public SMALL_RECT srWindow;            public COORD dwMaximumWindowSize;         }         // Constructor.         public Class2()         {            ConsoleInfo = new CONSOLE_SCREEN_BUFFER_INFO();            ConsoleOutputLocation = new COORD();            hConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);            GetConsoleScreenBufferInfo(hConsoleHandle, ref ConsoleInfo);            OriginalColors = ConsoleInfo.wAttributes;         }		         public void TextColor(int color)         {            SetConsoleTextAttribute(hConsoleHandle, color);         }		         public void ResetColor()         {            SetConsoleTextAttribute(hConsoleHandle, OriginalColors);         }      }   }					
  4. Dán đoạn mã mẫu sau trong lớp tập tin có chứa các Chính chức năng. Kiểm chứng rằng mẫu mã thay thế tất cả các mã hiện có trong tập tin.
       using System;   namespace ConsoleColor   {      class Class1      {         [STAThread]         static void Main(string[] args)         {            Class2 TextChange = new Class2();            Console.WriteLine("Original Colors");            Console.WriteLine("Press Enter to Begin");            Console.ReadLine();            TextChange.TextColor((int)Class2.Foreground.Green +                                 (int)Class2.Foreground.Intensity);            Console.WriteLine("THIS TEXT IS GREEN");            Console.WriteLine("Press Enter to change colors again");            Console.ReadLine();            TextChange.TextColor((int)Class2.Foreground.Red +                                 (int)Class2.Foreground.Blue +                                 (int)Class2.Foreground.Intensity);            Console.WriteLine("NOW THE TEXT IS PURPLE");            Console.WriteLine("Press Enter to change colors again");            Console.ReadLine();            TextChange.TextColor((int)Class2.Foreground.Blue +                                 (int)Class2.Foreground.Intensity +                                 (int)Class2.Background.Green +                                 (int)Class2.Background.Intensity);            Console.WriteLine("NOW THE TEXT IS BLUE AND BACKGROUND OF IT IS GREEN");            Console.WriteLine("Press Enter change everything back to normal");            Console.ReadLine();            TextChange.ResetColor();            Console.WriteLine("Back to Original Colors");            Console.WriteLine("Press Enter to Terminate");            Console.ReadLine();	 }      }   }					
  5. Nhấn F5 để biên dịch và sau đó chạy chương trình.
back to the top

Giải đáp thắc mắc

Nếu bạn gặp vấn đề, hãy kiểm chứng rằng bạn đang đi qua một giá trị hợp lệ như tham số cho các TextColor phương pháp. Để tạo một giá trị hợp lệ, kết hợp các giá trị mà bạn có được từ các Tiền cảnhNền enumerations được định nghĩa trong lớp.

back to the top
THAM KHẢO
Để biết thêm chi tiết, ghé thăm Web site sau của Microsoft:
Chức năng giao diện điều khiển
http://msdn2.Microsoft.com/en-US/Library/ms682073.aspx
Để biết thêm chi tiết, bấm vào số bài viết dưới đây để xem bài viết trong cơ sở kiến thức Microsoft:
319257 Làm thế nào để: Xoá giao diện điều khiển cửa sổ với Visual C#.NET
back to the top

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 319883 - Xem lại Lần cuối: 08/27/2011 22:58:00 - Bản sửa đổi: 2.0

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# 2005 Express Edition

  • kbhowtomaster kbmt KB319883 KbMtvi
Phản hồi