- - PR -
フォームがデザイナで表示できなくなった
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-05-21 20:24
お世話になります。
あぶぽんです。 VB2005(Express Edition)で、作成していたフォームが とつぜん、デザイナで開けなくなってしまいました。 ずっと、開いたままだったので、いつ、何が原因でそうなったのか 見当もつかないのです。 ・Visual Studioを再起動 ・Windows(2000)を再起動 ・.vbファイルの再読み込み をしてみましたが、元に戻りません。 ソリューション エクスプローラのアイコンは、 VBのソースファイルのアイコンになっており、コンテキストメニューには、 「デザイナで開く」の項が出てきません。 ダブルクリックするとForm1.vbのコードが表示されます。 このあたりは詳しくないのですが、Form1.vbのコードは実際には Form1.Designer.vbに書かれていて、Form1.vbは空になっています。 このような場合、どうすれば良いのでしょうか? 他のFormや同ソリューション内の他のプロジェクトでは開けますので、 Form1の設定や、プロジェクトの設定ファイルなどを見てみましたが、 それらしき箇所を見付けることができませんでした。 なんとか、デザイナを開ける方法を教えて頂けませんでしょうか。 ※他のプロジェクトにフォームをコピーするということもやってみましたが コピー先のプロジェクトでも同様にデザイナで開けない状態になってしまいます。 | ||||
|
投稿日時: 2007-05-21 20:37
vbproj ファイルの <ItemGroup> 要素内の Form の <SubType> 要素の値が、 'Form' になっていないというパターンではないでしょうか。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-05-21 20:43
追記です。
ソリューション エクスプローラのコンテキストメニューで、 「ファイルを開くアプリケーションの選択…」というのがあり、 他のフォームでは、「Visual Basic フォームエディタ(規定値)」と なっているのに、Form1だけは「Microsoft Basic エディタ(規定値)」と なっていました。 このダイアログで、「追加…」というボタンがあり、exeが選択できる ようになっているのですが、 「Visual Basic フォームエディタ」とは、どこにあるのでしょうか? これを指定できれば、取り敢えず、開けるのではないかと思っています。 よろしくお願いいたします。 # 今、気づいたのですが、「Express Edition」ではなく # 「Professional Edition」でした……本件と関係ないですね。 | ||||
|
投稿日時: 2007-05-21 21:20
じゃんぬねっとさん、
早速のご回答、本当に助かります。 おっしゃるとおり、そのパターンでした! 本当にありがとうございます。
このSubTypeの項目自体が消えてしまっていました。 しかし、テキストエディタで何度なおしても、 VS起動時に元に戻ってしまうようです。 起動中に何とか早業で、ひらくことができましたが! | ||||
|
投稿日時: 2007-05-21 23:34
designer.vb の方も同様に直す必要があります。 大抵はそれで問題ないハズですが、苦戦しそうであれば新たに Form を追加して、 コピーペーストして古いファイルをデリってしまいましょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-05-22 16:50
じゃんぬねっとさん、
完全に直りました。 ありがとうございます。 僕の場合、Form1.Designer.vbの定義が、Partial Class Form1と なっており、 Form1.vbの内容は完全に空でした。
という定義を入れることで解決しました。 ところで、デザイナ上でコントロールをダブルクリックしたとき、 .Designer.vbが作成される場合と、.vbが作成される場合があるようですが、 何が違うのでしょうか? | ||||
|
投稿日時: 2007-05-22 18:40
自己レスです。
これは、.vb内のクラス定義が消えてしまっていたためで、 本来、イベントなどは.vbファイルに書き、.Designer.vbファイルは、 デザイナが記述するファイルである。 というのが正解でしょうか。 | ||||
|
投稿日時: 2007-05-22 19:56
そうですね。 デザイナというか Visual Studio の IDE 的にはそのような思想になっていると思います。 一言でいえば、Generator が自動生成したコードと分離する、ということです。 このあたりが、パーシャル クラス機能の本領だと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1