Cara membuat dan menggunakan sumber daya di .NET

192

Bagaimana cara membuat sumber daya yang dapat saya rujuk dan gunakan di berbagai bagian program saya dengan mudah?

Masalah khusus saya adalah bahwa saya memiliki NotifyIcon yang ingin saya ubah ikonnya tergantung pada kondisi program. Masalah umum, tapi saya sudah lama berjuang dengan itu.

Matthew Scharley
sumber

Jawaban:

325

Nah, setelah mencari-cari dan mencari-cari berbagai titik dari sekitar StackOverflow (wah, aku sudah suka tempat ini), sebagian besar masalah sudah melewati tahap ini. Saya berhasil menemukan jawaban untuk masalah saya.

Cara membuat sumber daya:

Dalam kasus saya, saya ingin membuat ikon. Ini adalah proses yang serupa, tidak peduli apa pun tipe data yang ingin Anda tambahkan sebagai sumber daya.

  • Klik kanan proyek yang ingin Anda tambahkan sumber daya. Lakukan ini di Solution Explorer. Pilih opsi "Properties" dari daftar.
  • Klik tab "Sumber Daya".
  • Tombol pertama di bagian atas bilah akan membiarkan Anda memilih jenis sumber daya yang ingin Anda tambahkan. Itu harus dimulai pada string. Kami ingin menambahkan ikon, jadi klik dan pilih "Ikon" dari daftar opsi.
  • Selanjutnya, pindah ke tombol kedua, "Add Resource". Anda dapat menambahkan sumber daya baru, atau jika Anda sudah memiliki ikon, Anda dapat menambahkannya juga. Ikuti petunjuk untuk opsi apa pun yang Anda pilih.
  • Pada titik ini, Anda dapat mengklik dua kali sumber daya yang baru ditambahkan untuk mengeditnya. Catatan, sumber daya juga muncul di Solution Explorer, dan mengklik dua kali sama efektifnya.

Cara menggunakan sumber daya:

Hebat, jadi kami memiliki sumber daya baru dan kami ingin sekali memiliki ikon-ikon perubahan yang indah ... Bagaimana kami melakukan itu? Yah, beruntung kami, C # membuatnya sangat mudah.

Ada kelas statis yang disebut Properties.Resourcesyang memberi Anda akses ke semua sumber daya Anda, jadi kode saya akhirnya sesederhana:

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

Selesai! Jadi! Segalanya sederhana ketika Anda tahu caranya, bukan?

Matthew Scharley
sumber
terima kasih untuk ini, sedang mencari hal yang sama persis. apakah ada cara untuk menyematkan file .ico di executable sehingga tidak ditampilkan sebagai file terpisah? Saya harap pertanyaan saya masuk akal. salam,
Amc_rtty
1
@Andrei: Itulah sumber daya. Setelah ditambahkan, itu akan disematkan sebagai bagian dari exe yang dikompilasi.
Matthew Scharley
1
"... sebagian besar masalah sudah melewati tahap ini" - Terlalu Benar ... Terima kasih telah menyatukan ini! Saya tahu itu sederhana ... pada akhirnya.
roadsunknown
1
Sebagai catatan tambahan, file sumber daya dikunci pada waktu kompilasi. Jadi, secara dinamis mengubahnya saat runtime tidak banyak mengubah nilai yang ada. Gunakan file konfigurasi, jika Anda ingin mengubah nilai saat runtime. Dalam hal ini membantu siapa pun.
Purusartha
1
Di VB.NET, sumber daya diakses melalui mis. "My.Resources.GreenIcon"
andy
9

Di atas tidak benar-benar bekerja untuk saya seperti yang saya harapkan dengan Visual Studio 2010. Itu tidak akan membiarkan saya mengakses Properties.Resources, mengatakan itu tidak dapat diakses karena masalah izin. Saya akhirnya harus mengubah pengaturan Ketekunan dalam properti sumber daya dan kemudian saya menemukan cara mengaksesnya melalui file Resources.Designer.cs, di mana ada pengambil otomatis yang memungkinkan saya mengakses ikon, melalui MyNamespace.Properties.Resources .NameFromAddingTheResource. Itu mengembalikan objek bertipe Icon, siap pakai saja.

Quinxy von Besiex
sumber
7

Metode di atas berfungsi dengan baik.

Metode lain (saya mengasumsikan web di sini) adalah membuat halaman Anda. Tambahkan kontrol ke halaman. Kemudian saat dalam mode desain pergi ke: Alat> Hasilkan Sumber Daya Lokal . File sumber daya akan secara otomatis muncul dalam solusi dengan semua kontrol di halaman yang dipetakan dalam file sumber daya.

Untuk membuat sumber daya untuk bahasa lain, tambahkan 4 karakter bahasa ke akhir nama file, sebelum ekstensi ( Account.aspx.en-US.resx, Account.aspx.es-ES.resx ... dll).

Untuk mengambil entri tertentu dalam kode-belakang, hanya memanggil metode ini: GetLocalResourceObject([resource entry key/name]).

Chuck Conway
sumber