Kesalahan dengan Microsoft WinForms Seri 1: Perangkat Grafis

Saya mempunyai masalah dengan sampel ini. Saya baru saja mengunduhnya dan menjalankannya (Visual Studio 2010). Saya belum menyentuh apa pun.masukkan deskripsi gambar di sini

Maaf untuk Bahasanya, ini dalam bahasa Italia. Dari atas ke bawah tertulis:

  • Untuk menghindari hilangnya informasi sebelum memuat Jendela perancang, kesalahan berikut perlu diatasi:
  • Tidak dapat memvisualisasikan perancang Windows untuk file tersebut, karena tidak ada kelas yang dapat dirancang. Utilitas perancang telah memeriksa kelas-kelas berikut: SpinningTriangleControl --- Tidak dapat memuat kelas dasarnya "WinFormsGraphicsDevice.GraphicsDeviceControl". Verifikasi bahwa ada referensi ke perakitan dan semua proyek telah dihasilkan.
  • Di bawahnya tertulis hal yang sama

Perhatikan bahwa:

  • Jika saya kompilasi dan jalankan, itu berhasil.
  • Di toolbar ide, terkadang (saya tidak mengerti kapan), ada dua kontrol yang dibuat dengan sampel, SpinningTriangleControl dan SpriteFont; terkadang mereka menghilang. Jika hal ini terjadi, kontrol juga akan dihapus dari bentuk MainWindow proyek!
  • Saya tidak tahu apakah ini penting, tapi Saya perhatikan bahwa kontrol tersebut sering hilang dan hilang sendiri dari xxx.designer.cs saat saya menambahkan beberapa kontrol baru, seperti menu toolstrip, dll, atau saya menambahkan beberapa Acara baru Penangan untuk beberapa kontrol.

Saya benar-benar tidak mengerti apa yang terjadi.

Edit Oleh JT: Repro ada di sini: sdrv.ms/1kIhI5o

Langkah-langkah repro:

Buka solusi
Pilih kontrol flowLayoutPanel1
Jalankan aplikasi
Hentikan aplikasi
Sekarang coba pilih gameWrapper!

Hasil:
Kontrol gameWrapper tidak dapat dipilih lagi, bahkan tidak muncul di daftar dropdown Windows Properti pada kontrol formulir!


person Francesco Bonizzi    schedule 09.12.2013    source sumber
comment
Sampel itu diserahkan pada 1/10/2008, mungkin proyek itu ingin VS2008 berfungsi dengan baik, mungkinkah? PS: senang melihat orang Italia lainnya di sini   -  person pinckerman    schedule 15.12.2013
comment
Terima kasih atas sarannya, mungkin saja menurut saya. PS. aku juga senang :)   -  person Francesco Bonizzi    schedule 15.12.2013
comment
@misiMe Aplikasi contoh ini bermasalah sekali! Saya menjalankannya beberapa kali tidak mengubah apa pun dan sekarang panel kiri tidak muncul. Saya telah mengikuti langkah-langkah repro Anda untuk mencoba mendapatkan panel yang tepat yang menyebabkan masalah desainer tetapi tidak bisa. Bisakah Anda mengunggah solusi Anda (ke situs web temp-share, hilangkan apa pun yang tidak relevan), sehingga saya/kami dapat mereproduksi masalah Anda secara langsung dan melihat apakah saya/kami dapat mendiagnosis akar permasalahannya.   -  person Jeremy Thompson    schedule 25.12.2013
comment
@JeremyThompson Terima kasih banyak! Ini tautannya: sdrv.ms/1kIhI5o Saat saya meng-zip file dengan dua Proyek: buka proyek OhmGameProject. Di sini Anda dapat mereproduksi masalah dengan membuka Jendela desainer MainForm, lalu menjalankan aplikasi. Ketika Anda keluar dari aplikasi (saya melakukannya dengan menekan tombol x pada jendela), Anda akan kembali ke desainer Windows. Di sini (terkadang) Anda akan melihat bahwa Anda tidak dapat memilih kontrol GameWrapper2 (inilah masalahnya). Kemudian jika Anda mencoba menambahkan beberapa kontrol di mana saja, simpan, tutup jendela desainer dan buka kembali, GameWrapper2 tidak akan ada di sana   -  person Francesco Bonizzi    schedule 26.12.2013


Jawaban (7)


Saya telah melihat hal ini terjadi dalam beberapa skenario.

1) Proyek mendapat referensi untuk dirinya sendiri.

Jika Anda memiliki kontrol pengguna di proyek A, dan menggunakan desain untuk menambahkan kontrol pengguna ke formulir juga di proyek A, Visual Studio akan menambahkan referensi mandiri yang akan mengacaukan desainer.

2) Membuat kelas dasar abstrak untuk elemen visual.

Karena kelas abstrak tidak dapat dibuat instance-nya, desainer tidak akan dapat membuat instance untuk dirender di desainer.

3) bug Mode Desain

Jika Anda menggunakan properti DesignMode untuk menentukan apakah UserControls harus memuat data dalam peristiwa seperti Load() atau tidak, Anda perlu tahu bahwa DesignMode akan rusak jika Anda menyarangkan kontrol lebih dari satu tingkat. Anda dapat menyiasatinya dengan membuat variabel designmode Anda sendiri dengan mematikan LicenseManager.UsageMode.

person Scope Creep    schedule 23.12.2013
comment
Ya, kelasnya abstrak, bagaimana saya bisa menyelesaikannya? Selain itu, terkadang diambil kendalinya, terkadang tidak. - person Francesco Bonizzi; 24.12.2013
comment
Kelas dasar Anda harus berupa kelas konkret, bukan kelas abstrak. Untuk melakukan ini, Anda perlu mengalihkan semua metode abstrak ke metode virtual. Kata kunci virtual akan memungkinkan Anda atau pengembang lain untuk mengganti implementasi dasar, namun jika tidak ada implementasi penggantian yang disediakan dalam subkelas, maka akan ditetapkan secara default ke implementasi dasar. Saya tahu ini dapat mengganggu, karena Anda mungkin ingin MEMAKSA metode tertentu untuk diterapkan di subkelas, oleh karena itu kata kunci abstraknya...tetapi menggunakan metode virtual akan memungkinkan Anda mempertahankan dukungan desainer. - person Scope Creep; 26.12.2013
comment
Terima kasih. Setelah banyak mencari, ini adalah solusi VALID untuk masalah saya. Saya baru saja menghapus abstrak dari GraphicsDeviceControl dan menjadikan dua metode virtual (Perbarui dan Gambar) yang abstrak. Terima kasih! - person Francesco Bonizzi; 06.01.2014

Hal ini juga terjadi pada saya dari waktu ke waktu. Satu-satunya hal yang berhasil adalah menghapus kontrol khusus dari jendela dan kemudian menambahkannya lagi.

person Mariano    schedule 10.12.2013

Saya menambahkan langkah-langkah repro ke dalam pertanyaan Anda dan mengalami setengah dari masalahnya.

Langkah-langkah repro:
1. Membuka solusi
2. Memilih kontrol flowLayoutPanel1
3. Menjalankan aplikasi
4. Menghentikan aplikasi

Maka saya tidak bisa memilih kontrol gameWrapper! Kontrol gameWrapper bahkan tidak muncul di daftar dropdown kontrol formulir di Jendela Properti!

Saya mencoba menambahkan kontrol seperti yang Anda sebutkan menyebabkan masalah, saya bahkan menambahkan SpinningTriangleControl.cs kontrol pengguna yang ditampilkan di tangkapan layar Anda sebagai masalah (tetapi itu tidak termasuk dalam solusi repro itu telah diunggah).

Untuk mereproduksi SpinningTriangleControl.cs kontrol pengguna yang tidak dapat dibuka sesuai tangkapan layar Anda, cukup tinggalkan using OhmGame_Level_editor; referensi Namespace:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Menambahkan using OhmGame_Level_editor; memungkinkan saya membuka kontrol pengguna SpinningTriangleControl.cs tanpa kesalahan desainer.

Itu pasti bug XNA/Visual Studio - bagaimana ketika kontrol selain gameWrapper dipilih dan kemudian setelah menjalankan/menghentikan aplikasi kontrol gameWrapper terlihat tetapi tidak dapat dipilih!

Solusi:
Saya menemukan ketika saya membuka solusi dan mengunci kontrol gameWrapper maka saya dapat memilihnya tidak peduli apakah itu dipilih atau tidak ketika menjalankan/menghentikan aplikasi.

masukkan deskripsi gambar di sini

person Jeremy Thompson    schedule 26.12.2013
comment
Sayangnya, setelah sekian lama, meskipun saya mengunci kontrol, gameWrapper menghilang seperti waktu lainnya... - person Francesco Bonizzi; 29.12.2013
comment
Mohon maaf, sarankan Anda menyampaikan hal ini kepada Microsoft di connect.microsoft.com. Saya yakin seorang insinyur di Redmond akan mampu mereproduksi masalah tersebut dengan cukup cepat dan memberikan saran. Menjalankan proyek sampel dengan sendirinya (beberapa kali) panel kiri menghilang sehingga jelas ada bug.. - person Jeremy Thompson; 30.12.2013
comment
Terima kasih :) Selamat tahun! - person Francesco Bonizzi; 30.12.2013

Umumnya masalah seperti itu terlihat saat membuat kontrol khusus. Untuk ini, Bangun WinFormsGraphicsDevice dan tempelkan exe yang dihasilkan ke jalur berikut dari versi Visual studio yang Anda gunakan.

C:\Program Files\Microsoft Visual Studio \Common7\IDE

mulai ulang studio visual Anda dan lihat apakah masalah ini telah teratasi. Saya menghadapi masalah dengan kontrol khusus saya dan memperbaikinya dengan cara ini. Semoga ini berhasil juga untuk Anda.

person sunnytyra    schedule 16.12.2013
comment
Saya mencoba ini, nanti akan terlihat :) Terima kasih! - person Francesco Bonizzi; 16.12.2013
comment
Saya tidak yakin tetapi dapat merancang bantuan debugging waktu untuk melihat di mana masalahnya. msdn.microsoft.com/en-us/ perpustakaan/5ytx0z24%28v=vs.90%29.aspx - person sunnytyra; 17.12.2013

Hal ini tampaknya disebabkan oleh referensi yang salah. Coba yang berikut ini: Tutup semua file. Bersihkan solusinya dan bangun kembali. Kemudian cari proyek atau dll tempat kelas GraphicsDeviceControl ditentukan. Hapus referensi. Tambahkan kembali referensi, bangun kembali. Coba buka kontrolnya lagi.

person Radin Gospodinov    schedule 17.12.2013

Anda harus mencoba melakukan beberapa percobaan/penangkapan dan menggunakan breakpoint dan menemukan pengecualian dengannya. Saya juga pikir masalah Anda merujuk pada sesuatu dengan komponen GUI seperti SpriteFont, ContentManager, GraphicsDevice...Misalnya:

content = new ContentManager(Services, "Content"); 

spriteBatch = new SpriteBatch(GraphicsDevice); 

font = content.Load<SpriteFont>("fontName"); // make sure font was loaded fine.
person Ringo    schedule 20.12.2013
comment
Sebenarnya saya menggunakan Visual Studio 2010 pro dengan semua pembaruan terinstal. - person Francesco Bonizzi; 21.12.2013

Saya punya masalah di desainer dengan bentuk yang mewarisi dari bentuk lain. Perancangnya tidak ingin menampilkannya. Dalam kasus saya, desainernya hilang karena tidak ada konstruktor tanpa argumen. Kode dikompilasi dan dieksekusi dengan baik karena saya menggunakan konstruktor dengan 1 argumen. Untuk sedikit merapikan kodenya, saya mencoba menghapus konstruktor tanpa argumen, tetapi saya harus memasangnya kembali agar desainernya berfungsi. Anda dapat mencoba menyetel konstruktor tanpa argumen di kontrol warisan dan kontrol dasar.

person Guillaume Michel    schedule 20.12.2013