- PR -

InvalidCastExceptionエラー

1
投稿者投稿内容
徹夜
会議室デビュー日: 2004/03/22
投稿数: 11
投稿日時: 2004-04-05 06:13
VB.Net2003 スマートデバイスアプリで開発しています。

処理が起動する前にファイルを読込ませて、ある構造体変数にセットします。
その構造体変数をFormが開いた時にテキストボックスにセットしているのですが、
どういう訳かInvalidCastExceptionエラーが発生してEXEが終了します。
以前も同じ事があったのですが、特に何をしてうまくいったのか解らないですが
正常に動作しました。という状況です。

InvalidCastExceptionエラーが発生する要因を教えて下さい。
宜しくお願いします。

構造体列挙(共通モジュール側)
Public Structure ptypLgSuplyTstRpt
Dim strAddr1 As String
Dim strAddr2 As String
Dim strAddr3 As String
End Structure

Public pKyoIn() As ptypLgSuplyTstRpt
Public pKyoOt() As ptypLgSuplyTstRpt



@Form_Load時に

Call DataCHk()
call InWork_Eki()


ADataCHk関数(共通モジュール側)
public function DataCHk()
Dim Rfile As System.IO.StreamReader 'ファイルの読み込み
Dim Shift_JIS As System.Text.Encoding 'Shift_JIS
Dim StrLine1 As String = ""
redim pKyoIn(0)
Shift_JIS = System.Text.Encoding.GetEncoding("Shift_JIS")
Rfile = New StreamReader("C:\Test1.txt", Shift_JIS)
StrLine1 = Rfile.ReadLine()
If StrLine1 = "" Then Exit Do
pKyoIn(0).strAddr1 =Trim(Mid(StrLine1, 1, 7))
pKyoIn(0).strAddr2 =Trim(Mid(StrLine1, 7, 7))
pKyoIn(0).strAddr3 =Trim(Mid(StrLine1, 14, 7))
Rfile.close

'仮領域
Redim pKyoOt(0)
pKyoOt(0).strAddr1 =pKyoIn(0).strAddr1
pKyoOt(0).strAddr2 =pKyoIn(0).strAddr2
pKyoOt(0).strAddr3 =pKyoIn(0).strAddr3

end function

AInWork_Eki関数(フォーム.VB)
private Sub InWork_Eki()
 Text2.txt= pKyoIn(0).strAddr1
Text3.txt =pKyoOt(0).strAddr1
Text4.txt =pKyoOt(0).strAddr2
Text1.txt =pKyoOt(0).strAddr3
end Sub



Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-05 08:54
いくつかお尋ねしたいのですが。。。

1.InvalidCastExceptionが、なぜ発生するか、お調べになりましたか?
2.ソースを書き写していらっしゃいますが、どこで発生するのでしょうか?
3.「InWork_Eki」で発生と仮定して、pKyoIn、pKyoOtの構造は、
  どうなっているのでしょうか?


お節介:
pKyoIn(0).strAddr1 =Trim(Mid(StrLine1, 1, 7))
→pKyoIn(0).strAddr1 =StrLine1.SubString(1, 7).Trim()


↓↓一郎さん
 それは気がつかなかった。ということは、Text1などが「TextBoxではない」可能性もありますね!!

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-04-05 10:32 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-05 09:50
例外がどの行で発生するのか書いていただかないことにはなんとも・・・

あと、InWork_Eki()内のText2.txt等のtxtというのは何でしょう。
もしかしてTextBoxを継承して独自の機能拡張を行っていますか?
徹夜
会議室デビュー日: 2004/03/22
投稿数: 11
投稿日時: 2004-04-05 14:11
記述ミスで申し訳ありません。
"txt"と記述してありますが、正式には"Text"です。
private Sub InWork_Eki()
 Text2.Text= pKyoIn(0).strAddr1
Text3.Text =pKyoOt(0).strAddr1
Text4.Text =pKyoOt(0).strAddr2
Text1.Text =pKyoOt(0).strAddr3
end Sub
と正しくは記述します。

pKyoIn、pKyoOtの構造は全て文字列取得用です。

一郎さん
例外がどの行で発生するか調べてみました。

InWork_Eki()内でpKyoOt(0).strAddr1 をText3.textにセットしている所で
エラーが発生していました。
Msgbox等でpKyoOt(0).strAddr1 等の中身を調べてみましたが、
データはきちんと取得されていました。
Text2.Text= pKyoIn(0).strAddr1 は問題ないでした。





1

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