よろしくお願いします。テキストボックスの値をINIファイルに書き込んでいるのですが、テキストボックスの値が無い時に、どうやらINIファイルのキーごと消えるみたいです。自分で考えたのは、テキストボックスの値が無い時に、IF文で書込みのステートメントを飛ばすというものですが、他に良い方法はないでしょうか。
> テキストボックスの値をINIファイルに書き込んでいるのですが、テキストボックスの値が> 無い時に、どうやらINIファイルのキーごと消えるみたいです。それが仕様です、それで何か不都合がでているのでしょうか?http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpsysinf/html/_win32_writeprivateprofilestring.asp
> テキストボックスの値をINIファイルに書き込んでいるのですが、テキストボックスの値が> 無い時に、どうやらINIファイルのキーごと消えるみたいです。恐らく、現在のコードは、 strNewValue = Text1.Text Call WritePrivateProfileString(strSection, strKey, strNewValue, strFile)となっているかと思いますが、それを strNewValue = Text1.Text & vbNullChar Call WritePrivateProfileString(strSection, strKey, strNewValue, strFile)に変更してみてください。TextBox の内容が空だった場合に、Text プロパティが返す値が、"" ではなく vbNullString である点に注意してください。
strNewValue = Text1.Text では、削除されるがstrNewValue = Text1.Text & "" なら 削除されないってのも何か変な気が。
> strNewValue = Text1.Text では、削除されるが> strNewValue = Text1.Text & "" なら 削除されないってのも何か変な気が。それが仕様です、それで何か不都合がでているのでしょうか? という返しは冗談として。RDO 1.0 では、列に vbNullString を渡すと致命的なエラーになる事があったので、 'rs("ID").Value = Text1.Text 'これは使用しない rs("ID").Value = Text1.Text & "" 'こちらを推奨のように記述していた時期(VB4 当時)がありました、当方では。(^^;
> > strNewValue = Text1.Text では、削除されるが> > strNewValue = Text1.Text & "" なら 削除されないってのも何か変な気が。> > それが仕様です、それで何か不都合がでているのでしょうか? という返しは冗談として。TextプロパティがvbNullStringを返すというのは初めて知りました。驚きですね。Windows APIの文字列引数にvbNullStringを渡した場合、NULLポインタを渡したことになるので、WritePrivateProfileStringhttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpsysinf/html/_win32_writeprivateprofilestring.aspの以下の記述にある理由で、キーが削除されますね。>lpString > ファイルに書き込むべき、NULL で終わる文字列へのポインタを指定します。NULL を指定す> ると、この関数は、lpKeyName パラメータで指定されたキーを削除します。 vbNullStringがNULLポインタとして扱われる話は以下に記載があります。Windows API に Visual Basic から NULL 文字列を渡す方法http://support.microsoft.com/kb/162622/ja#機械翻訳のため変な日本語ですが、
ご解答有難うございます。話が盛り上がってるみたいですね。strNewValue = Text1.Text & vbNullCharこの様にして、解決しました。有難うございます。