2012-05-13 36 views
33

Tôi đã thử nghiệm các tùy chọn khác nhau cho màu nền của nút và kết thúc việc thay đổi thuộc tính BackColor trong danh mục Giao diện. sau đó tôi đã thay đổi nó trở lại với những gì nó là theo mặc định đó là Control, nhưng nó vẫn trông khác với các nút khác:Cách đặt lại về nút mặc định BackColor?

Screenshot of buttons

tôi đã cố gắng xây dựng dự án và khởi động lại Visual Studio, nhưng nó đã không giúp đỡ .

Tôi biết tôi chỉ có thể kéo một nút khác và sao chép/dán mã, nhưng điều gì gây ra điều này ở địa điểm đầu tiên và cách khắc phục sự cố đúng cách?

+0

Nếu thay đổi trong chế độ thiết kế sau đó chỉ cần đi tới [lại color] tài sản (trong chế độ thiết kế) và click chuột phải. Bạn sẽ nhận được một menu để hoàn nguyên về mặc định. –

Trả lời

54

Thuộc tính BackColor là thuộc tính môi trường theo mặc định, có nghĩa là thuộc tính thừa hưởng giá trị của nó từ kiểm soát gốc. Khi bạn đặt nó rõ ràng thành giá trị cụ thể, ghi đè lên bản chất môi trường xung quanh và buộc nó sử dụng giá trị cụ thể đó.

Điều khiển nút Windows tiêu chuẩn không hỗ trợ các màu tùy chỉnh, vì vậy WinForms sẽ thực sự tùy chỉnh vẽ điều khiển để cho phép nhà thiết kế ghi đè màu của nó. Bằng cách đó, nếu bạn muốn có một nút màu xanh lá cây hoặc màu đỏ xấu xí, bạn có thể làm điều đó. Điều gì đã xảy ra ở đây là bạn đã thiết lập màu nền tùy chỉnh một cách hiệu quả cho điều khiển nút (bạn đặt nó thành màu nền của điều khiển 3D, nhưng nó có thể dễ dàng có màu tía), và điều đó buộc WinForms phải tùy chỉnh vẽ điều khiển và vẽ nền của nó bằng màu được chỉ định của bạn. Đó là những gì mang lại cho nó sự xuất hiện "phẳng" - màu nền bây giờ được vẽ bằng một màu tùy chỉnh duy nhất, thay vì sử dụng hiệu ứng gradient mặc định. Nó sẽ không được chú ý theo chủ đề Windows Classic (trước Aero) vì các nút thực sự là được sơn với màu điều khiển 3D phẳng. Tuy nhiên, Aero thêm gradient và các hiệu ứng "nóng" khác, làm cho nó dính ra như một ngón tay cái đau.

Để xóa giá trị bạn đã đặt và khôi phục tính chất xung quanh của thuộc tính, bạn có thể nhấp chuột phải vào thuộc tính trong Cửa sổ thuộc tính và chọn "Đặt lại". Bạn cũng có thể làm điều đó thông qua mã bằng cách thiết lập thuộc tính để default(Color):

myButton.BackColor = default(Color); 

Bạn cũng sẽ cần phải thiết lập các UseVisualStyleBackColor bất động sản trở lại true, mà được tự động thiết lập để false bất cứ khi nào BackColor tài sản được thay đổi để hỗ trợ các tùy chỉnh màu nền.

Ngoài ra, bạn có thể yêu cầu WinForms bỏ qua các thuộc tính tùy chỉnh như vậy và yêu cầu Windows vẽ nút điều khiển. Thực hiện việc này bằng cách đặt thuộc tính FlatStyle thành FlatStyle.System.

Một lần nữa, điều này có thể được thực hiện trong thiết kế hoặc thông qua mã. Điều này không chỉ ngăn cản bạn thay đổi những điều ngớ ngẩn như màu nền, tạo ra một điều khiển xấu xí, mà còn khôi phục lại hành vi tự nhiên của nút điều khiển Win32 đối với ứng dụng WinForms của bạn, bao gồm các hiệu ứng mờ dần của Aero.

Tôi không biết tại sao điều này không phải là mặc định. Bạn cần phải thực hiện một yêu cầu đặc biệt để có được các điều khiển xấu và không chuẩn. Điều đó không nên xảy ra tự động. Tôi chỉ có thể giả định nó là một nhượng bộ cho các lập trình viên VB 6, những người đã có thể thực hiện tất cả các loại điều khiển xấu xí trong nhiều năm.

+1

Phiên bản VB.NET tương ứng của * mặc định (Màu) * là gì? –

+1

@PeterMortensen: 'New Color()' làm việc cho tôi. – Neolisk

+0

FlatStyle thật tuyệt vời. – Vlad

10

Khi bạn thay đổi màu nền mặc định, nó sẽ lật thuộc tính UseVisualStyleBackColor thành sai.

Chỉ cần thay đổi điều đó thành hiện thực và bạn sẽ được đặt!

0

Tham chiếu đến tiêu đề câu hỏi của bạn, "Cách đặt lại về nút mặc định BackColor?", tôi giải quyết vấn đề của tôi bởi:

Tạo một nút khác, nói ButtonFoo, và đặt nó là vô hình,

ButtonFoo.visible = False 

và bạn có thể sử dụng nút này để có được màu sắc của nó (vì nó là một màu mặc định) để đặt lại màu nút khác của bạn, ví dụ:

ButtonChangedColor.BackColor = ButtonFoo.BackColor 

Có bạn đi; màu được khôi phục về mặc định của nó :)

7

Để khôi phục màu nền mặc định của nút, hãy sử dụng;

Button1.BackColor = SystemColors.ButtonFace 
Button1.UseVisualStyleBackColor = True 
3

gì làm việc cho tôi:

CommandButton1.BackColor = vbButtonFace 
2
Button1.BackColor = Color.FromKnownColor(KnownColor.Control) 

Sử dụng FromKnowColor để truy cập các màu sắc của hệ thống. Nó thực sự là đơn giản.

0

Để khôi phục nền mặc định và foreground là một sử dụng nút:

Button1.BackColor = SystemColors.ButtonFace; 
Button1.ForeColor = default(Color); 
Button1.UseVisualStyleBackColor = true; 
Các vấn đề liên quan