- PR -

デザイン画面でデザインできなくなる

投稿者投稿内容
こまりもの
会議室デビュー日: 2005/06/25
投稿数: 3
投稿日時: 2005-06-25 01:04
いつも、拝見させていただき、勉強させていただきます。

VB.NET(Visual Studio .NET 2003)でWindowsアプリケーションを作成しております。
レイアウトを統一したくて、Mainというフォームを作成し、そのフォームを継承しております。
Mainフォームにはフォームを切り替えるためのコードを記入しております。
ところが、突然、継承先のフォーム(Mainフォームでないフォーム)すべてがデザイナで表示しようとすると、
「ドキュメントを読み込み中にエラーが発生しました。このエラーを修正してから、再度ドキュメントを読み込んでください。エラーメッセージは以下のとおりです。インデックスおよび長さの文字列内の場所を参照しなければなりません。パラメータ名:length」
となって、開くことができません。
継承元のMainフォームは表示ができます。
とくにlengthをつかった箇所をみつけることができず、新しいプロジェクトを作成し、同じMainというフォームを作成して継承先フォームを無理やりそのプロジェクトに追加してみると、開くことができたのですが、何度か修正をするとまた開くことができませんでした。
すみませんが、どなたか、原因がわかる方いらっしゃらないでしょうか。

たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-06-26 18:22
提示していただいた情報だけで原因がわかる人は居なさそうですね。
問題が再現する最小限のコードを提示していただければ検証できますよ。

_________________
たつごろー
codeseek
こみゅぷらす
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-06-26 19:34
継承したフォーム、がミソでしょう。確か、Formから直に継承されたフォームでないとデザインできないはず・・・というスレッドがあったはず。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-06-27 09:56
引用:

確か、Formから直に継承されたフォームでないとデザインできないはず・・・というスレッドがあったはず。


「こともある」が正解だと思います。
ビルドエラーが 1 度起きると、リソースが剥がされたりして表示されなくなりますね。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
こまりもの
会議室デビュー日: 2005/06/25
投稿数: 3
投稿日時: 2005-06-27 10:18
ご回答ありがとうございます。また、返答がおそくなってしまい申し訳ありません。

引用:
提示していただいた情報だけで原因がわかる人は居なさそうですね。
問題が再現する最小限のコードを提示していただければ検証できますよ。



説明不足で、申し訳ありません。
画面の構成としては、以下になってます。
 
 継承フォームB(継承元 Main)
 継承フォームC(継承元 Main)
 継承フォームD(継承元 Main)

それそれ、左側がメニュー部分になっており、他フォームへ遷移するできるボタンが3つがあります。
そしてそのメニュー部分をMainで作っています。
Main内にはそれぞれのボタンに
Dim frmA As New AFORM
Dim frmCurr As Form
frmCurr = appContext.MainForm
If form.Name <> frmCurr.Name Then
form.Show()
appContext.MainForm = form
frmCurr.Close()
End If
と記述しております。
実行すると問題がなく動くのですが、デザイン画面を修正しようとすると
継承フォームの修正ができません。

引用:
継承したフォーム、がミソでしょう。確か、Formから直に継承されたフォームでないとデザインできないはず・・・というスレッドがあったはず。



引用:
「こともある」が正解だと思います。
ビルドエラーが 1 度起きると、リソースが剥がされたりして表示されなくなりますね。



別プロジェクトを作成し、それぞれのフォームをつくり直したあと、デザイナで画面が表示されていたのに、1度ビルドエラーを起こしたら表示されなくなりました。

いろいろありがとうございます。まだ、デザインを変更していかなくてはならないので、継承を使わない方法をとってみようと思います。
本当に。、勉強になりました。ありがとうございます。

[ メッセージ編集済み 編集者: こまりもの 編集日時 2005-06-27 10:22 ]
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2005-06-27 12:47
コンパイルが通っていれば表示できそうな気がしますが。

じゃんぬねっとさんが仰っておられるようにリソースファイル関連の問題もあります。
コンパイルが成功した後、一度プロジェクトを閉じて開きなおしてもだめですか?


あと、デザイナで表示するためには、
引数なしのコンストラクタが必要とか、条件もありますが
その場合エラーメッセージが違いますしね。
おりば〜ず
会議室デビュー日: 2003/03/08
投稿数: 7
投稿日時: 2005-06-27 12:51
すでにクローズ気味ですが・・・

私も今のプロジェクトで同じ現象が起きたことがあります。
みなさんおっしゃるとおり、継承フォームの場合、親フォームがビルドされていなかったり、
ビルドエラーを起こしたりすると、デザイナが表示されなくなります。

経験上、ビルドエラーを解消してリビルドするだけで、大概は表示できるようになります。
それでもダメな場合は、デザイナが表示されないフォームをプロジェクトから一度削除し、
もう一度追加してあげると直ります。

継承フォームは何かと便利なので、面倒でも私はこんな感じでやり過ごしています。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-06-27 12:56
引用:

説明不足で、申し訳ありません。
画面の構成としては、以下になってます。


提示していただいたコードでは再現テストができません。
不具合がでる最低限のコードにできないですか?

というか、もう終わりですかね。
継承を使わないことで対応できるならそのほうがよいと思います。

_________________
たつごろー
codeseek
こみゅぷらす

スキルアップ/キャリアアップ(JOB@IT)