QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

フォームがデザイナで表示できなくなった

お世話になります。
あぶぽんです。

VB2005(Express Edition)で、作成していたフォームが
とつぜん、デザイナで開けなくなってしまいました。

ずっと、開いたままだったので、いつ、何が原因でそうなったのか
見当もつかないのです。

・Visual Studioを再起動
・Windows(2000)を再起動
・.vbファイルの再読み込み

をしてみましたが、元に戻りません。

ソリューション エクスプローラのアイコンは、
VBのソースファイルのアイコンになっており、コンテキストメニューには、
「デザイナで開く」の項が出てきません。

ダブルクリックするとForm1.vbのコードが表示されます。

  このあたりは詳しくないのですが、Form1.vbのコードは実際には
  Form1.Designer.vbに書かれていて、Form1.vbは空になっています。

このような場合、どうすれば良いのでしょうか?

他のFormや同ソリューション内の他のプロジェクトでは開けますので、
Form1の設定や、プロジェクトの設定ファイルなどを見てみましたが、
それらしき箇所を見付けることができませんでした。

なんとか、デザイナを開ける方法を教えて頂けませんでしょうか。

※他のプロジェクトにフォームをコピーするということもやってみましたが
 コピー先のプロジェクトでも同様にデザイナで開けない状態になってしまいます。

質問者:あぶぽん

回答

あぶぽんさんの書き込み (2007-05-21 20:24) より:

他のFormや同ソリューション内の他のプロジェクトでは開けますので、

Form1の設定や、プロジェクトの設定ファイルなどを見てみましたが、

それらしき箇所を見付けることができませんでした。

vbproj ファイルの 要素内の Form の 要素の値が、
'Form' になっていないというパターンではないでしょうか。

_________________C# と VB.NET の入門サイト
じゃんぬねっと日誌

投稿者:じゃんぬねっと

編集 履歴 (0)

追記です。

ソリューション エクスプローラのコンテキストメニューで、
「ファイルを開くアプリケーションの選択…」というのがあり、

他のフォームでは、「Visual Basic フォームエディタ(規定値)」と
なっているのに、Form1だけは「Microsoft Basic エディタ(規定値)」と
なっていました。

このダイアログで、「追加…」というボタンがあり、exeが選択できる
ようになっているのですが、

「Visual Basic フォームエディタ」とは、どこにあるのでしょうか?
これを指定できれば、取り敢えず、開けるのではないかと思っています。

よろしくお願いいたします。

# 今、気づいたのですが、「Express Edition」ではなく
# 「Professional Edition」でした……本件と関係ないですね。

投稿者:あぶぽん

編集 履歴 (0)

じゃんぬねっとさん、
早速のご回答、本当に助かります。

おっしゃるとおり、そのパターンでした!

本当にありがとうございます。



  <ItemGroup>
    <Compile Include="Form1.vb">
      <SubType>Form</SubType>
    ...

このSubTypeの項目自体が消えてしまっていました。

しかし、テキストエディタで何度なおしても、
VS起動時に元に戻ってしまうようです。

起動中に何とか早業で、ひらくことができましたが!

投稿者:あぶぽん

編集 履歴 (0)

あぶぽんさんの書き込み (2007-05-21 21:20) より:

しかし、テキストエディタで何度なおしても、

VS起動時に元に戻ってしまうようです。

起動中に何とか早業で、ひらくことができましたが!

designer.vb の方も同様に直す必要があります。
大抵はそれで問題ないハズですが、苦戦しそうであれば新たに Form を追加して、
コピーペーストして古いファイルをデリってしまいましょう。

_________________C# と VB.NET の入門サイト
じゃんぬねっと日誌

投稿者:じゃんぬねっと

編集 履歴 (0)

じゃんぬねっとさん、

完全に直りました。
ありがとうございます。

僕の場合、Form1.Designer.vbの定義が、Partial Class Form1と
なっており、
Form1.vbの内容は完全に空でした。



Public Class Form1
End Class

という定義を入れることで解決しました。

ところで、デザイナ上でコントロールをダブルクリックしたとき、
.Designer.vbが作成される場合と、.vbが作成される場合があるようですが、

何が違うのでしょうか?

投稿者:あぶぽん

編集 履歴 (0)

自己レスです。

ところで、デザイナ上でコントロールをダブルクリックしたとき、

.Designer.vbが作成される場合と、.vbが作成される場合があるようですが、

これは、.vb内のクラス定義が消えてしまっていたためで、
本来、イベントなどは.vbファイルに書き、.Designer.vbファイルは、
デザイナが記述するファイルである。

というのが正解でしょうか。

投稿者:あぶぽん

編集 履歴 (0)

あぶぽんさんの書き込み (2007-05-22 18:40) より:

これは、.vb内のクラス定義が消えてしまっていたためで、本来、イベントなどは.vbファイルに書き、.Designer.vbファイルは、デザイナが記述するファイルである。

というのが正解でしょうか。

そうですね。
デザイナというか Visual Studio の IDE 的にはそのような思想になっていると思います。

一言でいえば、Generator が自動生成したコードと分離する、ということです。
このあたりが、パーシャル クラス機能の本領だと思います。

_________________C# と VB.NET の入門サイト
じゃんぬねっと日誌

投稿者:じゃんぬねっと

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。