- 締切済み
Windows のLabel が白地の赤×印になる
WindowsXP-Pro Ver.2002 SP2 上で Visual Studio 2005 Standard Edition でVB2005による開発を行っております。 開発アプリ上で、データの連続投入試験を行なっていたら、 「外部コンポーネントで例外をスローしました」エラーとなり、 画面の一部のLabel が白地に赤い×印の表示になってしまいました。【添付画像参照】 本来ならば青地に”元 計”の黒文字が表示される筈なのですが… 当方初心者の為、何が悪いのかさっぱり見当がつかず、往生しております。 調べるきっかけだけでも教えてもらえたらありがたいのですが。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- MARU4812
- ベストアンサー率43% (196/452)
私は、言い訳をするのでも、放置するよりずっといいと判断する方なんだけども、 言い訳を聞いて分かった事は、 > 退職した先輩に本件について相談しようとメールしたところ、要確認箇所と > して指示を受けていた為 退職した先輩と私の目の付け所が似通ってるかもしれないという事と、 それでも、”要確認箇所”の1つとして指摘するぐらいしかできない 話だという事。 > 今回の現象は発生後、同様のオペレーションで数十回再実行してみたの > ですが、再現しませんでした。 つまり、世の中の同じ現象を見た人も、少ないかもしれない事。 …私の認識どおりではないのかな?最初からそんな意識で発言したつもり ですが。 簡単に再現しない時点で、普通なら扱いが難しい可能性を考えるのですが、 そう認識していれば、質問時に少しでも情報を提供しようとしますよね? でも、質問文は「教えてどら○もん」的な。。。 こんな事を言うと「質問してズバリ回答が来る可能性もゼロではない」 みたいな発言をする人がいますが、私に言わせれば「ゼロではないが 高いとも思えないでしょう?」という事です。「どれだけ自分が幸運に 恵まれた人間だと思っているの?」と。「単純に判断できなかっただけ でしょう?」と。 つまり「問題に対する認識が甘く、説明を怠った」事実に変わりは 無いと思うんですけどね。 …言い訳しないよりマシだと思いますが。 質問掲示板での質問って半分以上が質問者の対応が悪いと思ってるので、 別にこの件に関して思うところはありませんし、スルーして終わりに しているスレッドの方が多いです。気分を害したとか気にしてるかも しれませんが「情報が出てくるかな?」と思っての書き込みです。 特定の質問者やスレッドに対する意識って私は非常に低いですので 気にしなくていいです。 ところで、 この手の問題って、例え回答が付いたとしても、再現しないものを どうやって修正完了と判断するのか?という事まで考えないといけない ですよね? システムログまで確認したり、プログラム構成上特別な事をしていないか 確認したり、それでもだめならログ出力機能を追加して実行環境でログ を確認を継続するとか。質問以前にやるべき事が山ほどあります。 >当方初心者の為、何が悪いのかさっぱり見当がつかず と書いちゃう人では無理なんですよ。 どちらにしても貴方からの追加情報が出ない限り、話は進まないと 思いますし、そろそろ過去ログに埋もれる時期なんで、私も今後 回答つけるかどうかアヤしいです。 続けてもらっても私に何の被害もないですけど、このスレッドは閉じて このスレッドのURLつきで再質問も考えたほうがいいかもしれません。 (追加情報が無ければそちらでも回答が付かない可能性が高いですが)
- MARU4812
- ベストアンサー率43% (196/452)
> これは画面.Designer.vb を開き、件のコントロールを New する箇所で確認しました。 初心者なのにデフォルトでは非表示のはずのファイルで、コンストラクタを 確認する技量はお持ちなんですね。 > サードパーティー製コントロールで発生した場合はどのように対処されたのでしょうか? 結論から言えば、対処できませんでした。リソースメモリを確保するとか、そういう 低い層の原因だろうと考えられたため、実現したかった特殊な操作をあきらめ、 普通のコントロールの使い方をして回避しました。 初心者の方に分かるまでこれ以上詳しく説明する気は起きません。 スタックトレースに出力されている関数は > System.Windows.Forms.Control. からはじまっているように.NET Framework に用意された関数の実行されたログ です。関数名で WEB 検索するか、ローカルヘルプでも検索できると思います。 実際にプログラムでも利用できる関数が並んでいます。1つ1つ調べていけば どのような処理中だったか予想する事は可能です。 VB プログラマがプログラムした関数名なども、実行された段階で > WindowsApplication1.Form1.test() 行 11 みたいに表示されます。が、提示の内容ではそれが出ていないように見えます。 つまり、 1)VB プログラマが通常コーディングしない、デザイン画面の操作で 自動で書かれる(コンストラクタなどの)コードで起きている。 2)上記で出てくるようなコードを、VB プログラマが意図的に(動的にコント ロールを操作するなどの目的で)コーディングしている部分で起きている。 といった可能性が高いと考えられます。 1)の場合、画面のデザイン変更の繰り返しで自動で書き込む処理が上手く いかず、ごっそり初期化コードが抜けて保存されていたとかいう経験も ありますが、稀ですので、設定している項目が特殊という事が現段階では 一番大きな可能性だと思います。継承とかして、独自のコントロールを 作っているような場合も初期化で不都合を起こしやすいですかね。 2)の場合、その手法自体が特殊。。。というか上級者向けで、設定も 特殊なものを適用しがちですね。(厳密には中級者向けレベルだろうけど) あと気になるのは、やっぱりエラーメッセージの「外部コンポーネント」 Label 自体は System.Windows.Forms.Label なんだけど、ライブラリ(DLL) 化して参照してたりするのかなぁ。 結論としては新規プロジェクトに Label を貼り付けて、文字列を設定して いる程度では絶対起きないだろうということです。 そうなると、コードを見るしかないんですよね(エラーが起きた時点で コードを見るなんて常識でしょうが)。 コンストラクタ(New)を知っているなら、画面の初期化段階からデバッグ できますよね?1行1行ステップ実行できますよね? > 調べるきっかけだけでも教えてもらえたらありがたいのですが。 あほかと思いますよ。エラーが起こっている処理の前後を全部調べれば いいでしょう? 管理者の立場の方なんですかね?概要は掴めて一部重要だと思われることも 分かるけど、実際の作業は初心者でもできるレベルのことができない。 それとも単に自分で解決する気が無いだけでしょうか? 自称初心者の"さっぱり見当がつかず"はただの怠慢だと思いますので、 私は明確な敵意を持ちます。これ以上レスは付けませんので、まぁ 頑張って下さい。
- MARU4812
- ベストアンサー率43% (196/452)
> 個人情報や客先を特定する情報が見えないので問題ないと思っていました。 それは掲示板で削除対象となるような内容ですね。 そうではなく、職場で上司に「私だけの知識では解決できない場合、画面の キャプチャ付きで一般のWEB上の掲示板で質問しても問題ないでしょうか?」 と聞いておくべきです。難色を示す場合は少なくないです。 エラーメッセージが出てるなら、その意味を調べる。メッセージをキーワードに 同様の事例を探す。 デバッグしてエラーの原因を絞り込む。 それも思いつかないような初心者なら、エラー対処などできないと思います。 素直に諦めた方がいいでしょう。 「外部コンポーネント」とわざわざ言われているのだから、本当に System.Windows.Forms.Label クラスなのか怪しいのですが?確実に .NET Framework で用意された Label クラスですか?どうやって それを確認しましたか? > 白地に赤い×印の表示 長年開発してますが、なかなか見ない現象です。サードパーティ製のコントロール で同様の表示になった事はあります。 現象とエラーメッセージだけで原因を特定するのは難しいと思います。 その意味でも初心者には荷が重いでしょう。
補足
ありがとうございます。 念のため、エラー発生時のStackTraceを上げておきます。 場所 System.Drawing.SafeNativeMethods.Gdip.GdipDrawString(HandleRef graphics, String textString, Int32 length, HandleRef font, GPRECTF& layoutRect, HandleRef stringFormat, HandleRef brush) 場所 System.Drawing.Graphics.DrawString(String s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format) 場所 System.Windows.Forms.ControlPaint.DrawStringDisabled(Graphics graphics, String s, Font font, Color color, RectangleF layoutRectangle, StringFormat format) 場所 System.Windows.Forms.Label.OnPaint(PaintEventArgs e) 場所 System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs) 場所 System.Windows.Forms.Control.WmPaint(Message& m) 場所 System.Windows.Forms.Control.WndProc(Message& m) 場所 System.Windows.Forms.Label.WndProc(Message& m) 場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Messasge& m) 場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) で、「白地に赤い×印」となったのは間違いなく System.Windows.Forms.Label クラスです。 これは画面.Designer.vb を開き、件のコントロールを New する箇所で確認しました。 サードパーティー製コントロールで発生した場合はどのように対処されたのでしょうか? 手掛かりにしたいと思いますので、教えてもらえますでしょうか? よろしくお願いします。
- MARU4812
- ベストアンサー率43% (196/452)
業務ソフトの実行画面をWEBに載せてもいいの? そこから考え直すべきでしょう。
お礼
ご忠告ありがとうございました。 個人情報や客先を特定する情報が見えないので問題ないと思っていました。
お礼
アドバイスも含め、有難うございました。 2~3言い訳をさせて下さい。 画面.Designer.vb については、退職した先輩に本件について相談しようとメールしたところ、要確認箇所として指示を受けていた為、知っていました。 あと最初の質問時にあげておくべきだったのですが、今回の現象は発生後、同様のオペレーションで数十回再実行してみたのですが、再現しませんでした。 また発生時はEXEからの起動の為、エラー発生箇所をデバッガ上から特定する事もできなく、結局ステップ実行を行なってもエラー発生箇所にたどり着けない状況なんです。 こんな理由から対処経験のある方のアドバイスが頂ければと思い、投稿したんです。