Cách tạo và sử dụng tài nguyên trong .NET


192

Làm cách nào để tạo tài nguyên mà tôi có thể tham khảo và sử dụng trong các phần khác nhau của chương trình?

Vấn đề cụ thể của tôi là tôi có một Thông báo mà tôi muốn thay đổi biểu tượng tùy thuộc vào trạng thái của chương trình. Một vấn đề phổ biến, nhưng tôi đã phải vật lộn trong một thời gian dài.

Câu trả lời:


325

Chà, sau khi tìm kiếm xung quanh và cùng nhau tìm ra nhiều điểm khác nhau từ xung quanh StackOverflow (gee, tôi yêu nơi này rồi), hầu hết các vấn đề đã qua giai đoạn này. Tôi đã cố gắng tìm ra câu trả lời cho vấn đề của mình.

Cách tạo tài nguyên:

Trong trường hợp của tôi, tôi muốn tạo một biểu tượng. Đó là một quá trình tương tự, cho dù bạn muốn thêm loại dữ liệu nào dưới dạng tài nguyên.

  • Nhấp chuột phải vào dự án bạn muốn thêm tài nguyên. Làm điều này trong Solution Explorer. Chọn tùy chọn "Thuộc tính" từ danh sách.
  • Nhấp vào tab "Tài nguyên".
  • Nút đầu tiên dọc theo đỉnh của thanh sẽ cho phép bạn chọn loại tài nguyên bạn muốn thêm. Nó sẽ bắt đầu trên chuỗi. Chúng tôi muốn thêm một biểu tượng, vì vậy hãy nhấp vào biểu tượng đó và chọn "Biểu tượng" từ danh sách tùy chọn.
  • Tiếp theo, di chuyển đến nút thứ hai, "Thêm tài nguyên". Bạn có thể thêm tài nguyên mới hoặc nếu bạn đã tạo một biểu tượng, bạn cũng có thể thêm tài nguyên đó. Thực hiện theo các hướng dẫn cho bất kỳ tùy chọn bạn chọn.
  • Tại thời điểm này, bạn có thể nhấp đúp vào tài nguyên mới được thêm để chỉnh sửa nó. Lưu ý, tài nguyên cũng hiển thị trong Solution Explorer và nhấp đúp vào đó cũng hiệu quả.

Cách sử dụng tài nguyên:

Tuyệt vời, vì vậy chúng tôi có tài nguyên mới của mình và chúng tôi rất muốn có những biểu tượng thay đổi đáng yêu đó ... Làm thế nào để chúng tôi làm điều đó? Vâng, may mắn cho chúng tôi, C # làm cho điều này cực kỳ dễ dàng.

Có một lớp tĩnh được gọi là Properties.Resourcescho phép bạn truy cập vào tất cả các tài nguyên của bạn, vì vậy mã của tôi cuối cùng đơn giản như:

paused = !paused;
if (paused)
    notifyIcon.Icon = Properties.Resources.RedIcon;
else
    notifyIcon.Icon = Properties.Resources.GreenIcon;

Làm xong! Đã kết thúc! Mọi thứ đều đơn giản khi bạn biết cách, phải không?


cảm ơn vì điều này, đã tìm kiếm điều tương tự chính xác. Có cách nào để nhúng các tệp .ico trong tệp thực thi để chúng không hiển thị dưới dạng các tệp riêng biệt không? tôi hy vọng câu hỏi của tôi có ý nghĩa liên quan,
Amc_rtty

1
@Andrei: Đó chính xác là tài nguyên. Khi được thêm vào, nó sẽ được nhúng như một phần của exe đã biên dịch.
Matthew Scharley

1
"... hầu hết các vấn đề đã qua giai đoạn này" - Quá đúng ... Cảm ơn bạn đã kết hợp vấn đề này! Tôi biết nó thật đơn giản ... cuối cùng.
roadunknown

1
Là một lưu ý phụ, các tệp tài nguyên bị khóa trong thời gian biên dịch. Vì vậy, thay đổi động chúng trong thời gian chạy không làm thay đổi các giá trị hiện có. Sử dụng tập tin cấu hình, nếu bạn muốn thay đổi giá trị trong thời gian chạy. Trong trường hợp này giúp bất cứ ai.
Purusartha

1
Trong VB.NET, các tài nguyên được truy cập thông qua ví dụ "My.Resource.GreenIcon"
andy

9

Những điều trên không thực sự hiệu quả với tôi như tôi mong đợi với Visual Studio 2010. Nó không cho phép tôi truy cập vào Properties.Resource, cho biết nó không thể truy cập được do các vấn đề về quyền. Cuối cùng tôi đã phải thay đổi cài đặt Kiên trì trong các thuộc tính của tài nguyên và sau đó tôi tìm thấy cách truy cập thông qua tệp Resources.Designer.cs, nơi nó có trình nhận tự động cho phép tôi truy cập vào biểu tượng, thông qua MyNamespace.Properies.Resource .NameFromAddingTheResource. Điều đó trả về một đối tượng thuộc loại Biểu tượng, sẵn sàng để sử dụng.


7

Phương pháp trên hoạt động tốt.

Một phương pháp khác (tôi giả sử web ở đây) là tạo trang của bạn. Thêm điều khiển vào trang. Sau đó, trong khi ở chế độ thiết kế, hãy chuyển đến: Công cụ> Tạo tài nguyên cục bộ . Một tệp tài nguyên sẽ tự động xuất hiện trong giải pháp với tất cả các điều khiển trong trang được ánh xạ trong tệp tài nguyên.

Để tạo tài nguyên cho các ngôn ngữ khác, hãy thêm ngôn ngữ 4 ký tự vào cuối tên tệp, trước phần mở rộng ( Account.aspx.en-US.resx, Account.aspx.es-ES.resx ... vv).

Để lấy các mục cụ thể trong mã phía sau, chỉ cần gọi phương thức này : GetLocalResourceObject([resource entry key/name]).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.