• ベストアンサー

VisualBasic2010のXML読み込み

現在、XMLファイルを扱うソフトウェア(Twitterクライアント)を作成しているのですが、 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1329317763 を参考にして、次のようなプログラムを書いてみました。 'ここから Dim AccountFolder As String = (Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\(アプリ名)\vb\account\") Public tokenkey As XElement Public secretkey As XElement Public userid As XElement Public ScreenName As XElement Dim A As String = (AccountFolder) & ComboBox1.SelectedItem Dim sr As New StreamReader( _ (A), Encoding.GetEncoding("Shift_JIS")) Dim t As String = sr.ReadToEnd() Dim Text As XDocument = XDocument.Parse(t) sr.Close() tokenkey = Text.XPathSelectElement("Application/AccessToken") secretkey = Text.XPathSelectElement("Application/AccessTokenSecret") userid = Text.XPathSelectElement("Application/UserId") ScreenName = Text.XPathSelectElement("Application/ScreenName") Dim f As New Form1() f.ShowDialog(Me) f.Dispose() 'ここまで これは、メインフォーム?とは違うフォームなのですが、 なぜか、メインフォーム?に戻ってしまいます。 ファイルを開くところでエラーが発生している気がします。 というのも、ブレークポイントでそこで止まらなかったからです。 ちなみに、ComboBox1には、アカウント名が入っています。 そのファイルの中身は、 <?xml version="1.0"?> <Application> <AccessToken>***************</AccessToken> <AccessTokenSecret>***********</AccessTokenSecret> <UserId>******</UserId> <ScreenName>***********</ScreenName> </Application> という感じです。 そして、アカウント名のファイルには、拡張子はつけていないです。 どうすれば正常になりますか? .xmlとかを保存処理につけて読み込ませるしかないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • f_onion
  • ベストアンサー率47% (10/21)
回答No.1

いろいろとありますが、 一番気になったのは > これは、メインフォーム?とは違うフォームなのですが、 > なぜか、メインフォーム?に戻ってしまいます。 という部分です。 戻ってしまうとはどういうことでしょうか? 起動してみたらメインフォームしか表示されない。 というのであれば、プロジェクトのプロパティからスタートアップフォームを変更してください。 (アプリケーションタブだったかな) ※ それ以外だと (Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\(アプリ名)\vb\account\") が存在するか Aに期待通りの値が入っているか が気になりました。

noname#156583
質問者

お礼

よく見てみると、Aの最後に&VBcrlf&が入っていました それを消したら動くようになったので、解決にさせて頂きます。 例外処理についても勉強をしていこうと思います。

noname#156583
質問者

補足

多分、Dim sr As New StreamReader( _ (A), Encoding.GetEncoding("Shift_JIS")) とかの処理のところで、なぜか スタートアップフォームが出て、 質問のところに書いたフォームは消えてしまうということです。 Aには、期待通りの値が入っていることを確認しました。 かけていることがあれば教えて下さい。

その他の回答 (2)

  • f_onion
  • ベストアンサー率47% (10/21)
回答No.3

Form1がどうなっているかが気になります。 ひとまず Dim f As New Form1() の手前で ScreenName.Valueなどの値をMessageBoxで表示してみてはどうでしょうか? 提示されているコードが実装してあるフォームがスタートアップフォームですよね? Form1はどういうフォームですか? あとはエラー処理はどうなっていますか? エラーが発生した場合、例外がスローされるのでデバッグ実行であればそこで止まると思いますが。

noname#156583
質問者

お礼

よく見てみると、Aの最後に&VBcrlf&が入っていました それを消したら動くようになったので、解決にさせて頂きます。 例外処理についても勉強をしていこうと思います。

noname#156583
質問者

補足

スタートアップフォームは、 認証されているか、されていないかを分けるために 別なフォームにしていて、認証されていたら、上のコードのフォームとしています Form1が、ツイッタークライアントの本体です MessageBox.show(ScreenName.Value)を実行しても、 そのまま飛ばされてしまいます。 初心者なので、エラー処理等を全く考えていませんでした・・・

回答No.2

例外を無視したり,握り潰していませんか。 ユーザーコードが例外を処理しなかった場合,WinFormsではシステムによって例外が握り潰されます。 MSDN: Application.ThreadException イベント (System.Windows.Forms) http://msdn.microsoft.com/ja-jp/library/system.windows.forms.application.threadexception.aspx 出力ウィンドウで出力元「デバッグ」には,握り潰した例外の名前が出てきますから, その例外が発生したら停止するように設定してみてはどうでしょうか。 # StreamReaderならSystem.IO.IOExceptionが発生している可能性が高いです。

noname#156583
質問者

お礼

よく見てみると、Aの最後に&VBcrlf&が入っていました それを消したら動くようになったので、解決にさせて頂きます。 例外処理についても勉強をしていこうと思います。

noname#156583
質問者

補足

例外を無視というのは、 On Error Resume Next のようなものを使用しているかということなのでしょうか? そうでしたら使用していません。 すいませんが、例外が発生したら停止させるの 具体的なやり方を教えていただけませんでしょうか?

関連するQ&A