tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル構造体の内容を丸ごとテキストボックスに書込むには
記事No8132
投稿日: 2008/09/11(Thu) 18:47
投稿者sio
いつもお世話になっております。
タイトルにもあります通り、下のような方法で構造体に書かれたデータを
丸ごと一度にファイルへ書き込みたいのですが、
「str2の値をStringに変換できません」とエラーが出てしまいます。
構造体の内容を丸ごと書き込むことは無理なのでしょうか。

    Public Structure str1
        Dim A As String
        Dim B As String
    Dim Z As str2
    End Structure

    Public Structure str2
        Dim C As String
        Dim D As String
        Dim E As String
    End Structure

    Public arrStr(2) as str


    arrStr(0).Z.C = "あ"
    arrStr(0).Z.D = "い"
    arrStr(0).Z.E = "う"

        Dim Writer As New IO.StreamWriter(dir, False, _
                                    System.Text.Encoding.GetEncoding("Shift-Jis"))
        Dim LineText As String
        Dim BuffRow As String
        '出力
            LineText = ""
            LineText = arrStr(0).Z


            Writer.WriteLine(LineText)

        Writer.Close()
        Writer.Dispose()

結果、ファイルに"あいう"と出力されるイメージです。

[ツリー表示へ]
タイトルRe: 構造体の内容を丸ごとテキストボックスに書込むには
記事No8134
投稿日: 2008/09/11(Thu) 22:59
投稿者よねKEN
> 「str2の値をStringに変換できません」とエラーが出てしまいます。
> 構造体の内容を丸ごと書き込むことは無理なのでしょうか。

エラーの出ている箇所は

LineText = arrStr(0).Z

の行ですよね?左辺はString型、右辺はstr2型ですのでエラーメッセージの
文字通りです。異なる型で変換方法も定義されていませんので、
このままではVBのコンパイラにはどうしようもありません。
いくつかやり方はあると思いますが、一つの方法として以下のような方法があります。

【抜粋】
>     Public Structure str2
>         Dim C As String
>         Dim D As String
>         Dim E As String
          Public Overrides Function ToString() As String
              Return C & D & E
          End Function
>     End Structure

  :略
  
>             LineText = arrStr(0).Z

LineText = arrStr(0).Z.ToString()

[ツリー表示へ]
タイトルRe^2: 構造体の内容を丸ごとテキストボックスに書込むには
記事No8135
投稿日: 2008/09/12(Fri) 10:13
投稿者sio
> 【抜粋】
> >     Public Structure str2
> >         Dim C As String
> >         Dim D As String
> >         Dim E As String
>           Public Overrides Function ToString() As String
>               Return C & D & E
>           End Function
> >     End Structure
>
>   :略
>  
> >             LineText = arrStr(0).Z
>
> LineText = arrStr(0).Z.ToString()

なるほど・・・構造体内で文字列でまとめてしまえばいいんですね。
やってみます。
ご回答ありがとうございます。

[ツリー表示へ]