第7章
第8章
機能向上のために
- 任意のファイル名で開く・保存することを可能にする。
- 終了時の強制保存を止め、保存するしないの確認ダイアログを表示する。
- バージョン情報を表示する。
「任意のファイルを開く」「名前をつけて保存する」ダイヤログボックス
- OpenFileDialog :「ファイルを開く」ダイアログボックスを表示させて、任意のファイルを開く
→MSDN「OpenFileDialog クラス」 - ファイルを選択せずにキャンセルするとエラー発生
→ファイルストリームがある時はCloseする処理を追加。
System::Void
LoadData() {
System::IO::Stream^ fs;
OpenFileDialog^
openFileDialog1 = gcnew OpenFileDialog;
openFileDialog1->Filter
= "All files (*.*)|*.*|csv files (*.csv)|*.csv";
openFileDialog1->FilterIndex
= 2; openFileDialog1->RestoreDirectory = true;
if ( openFileDialog1->ShowDialog()
== ::DialogResult::OK ) {
if ( (fs = openFileDialog1->OpenFile())
!= nullptr ) {
String^ strDelimiter = ","; array<Char>^
delimiter = strDelimiter->ToCharArray();
array<String^>^
strData; String^ strLine;
System::IO::StreamReader^
sr = gcnew System::IO::StreamReader(fs, System::Text::Encoding::Default);
while (sr->Peek() >= 0){
strLine = sr->ReadLine();
strData =strLine->Split(delimiter);
MoneyDataSet->MoneyDataTable->AddMoneyDataTableRow(
DateTime::Parse(strData[0]), strData[1], strData[2], int::Parse(strData[3]),
strData[4]);
}
sr->Close();
}
}
if(fs)fs->Close();
}
- SaveFileDialog :「名前をつけてファイルを保存する」ダイアログボックスを表示させて、任意のファイルを開く
→MSDN「SaveFileDialog クラス」 - ファイルを選択せずにキャンセルするとエラー発生
→ファイルストリームがある時はCloseする処理を追加。
private: System::Void
SaveData() {
System::IO::Stream^ fs;
SaveFileDialog^
saveFileDialog1 = gcnew SaveFileDialog;
saveFileDialog1->Filter
= "All files (*.*)|*.*|csv files (*.csv)|*.csv";
saveFileDialog1->FilterIndex
= 2; saveFileDialog1->RestoreDirectory = true;
if ( saveFileDialog1->ShowDialog()
== ::DialogResult::OK ) {
if ( (fs = saveFileDialog1->OpenFile())
!= nullptr ) {
String^ strData="";
System::IO::StreamWriter^
sw = gcnew System::IO::StreamWriter(fs,System::Text::Encoding::Default);
for each (MoneyDataSet::MoneyDataTableRow^ drMoney in MoneyDataSet->MoneyDataTable)
{
strData = drMoney->日付.ToShortDateString() +
"," + drMoney->分類 + "," + drMoney->品名 + "," + drMoney->金額.ToString()
+ "," + drMoney->備考; sw->WriteLine(strData);
}
sr->Close();
}
}
if(fs)fs->Close();
}
汎用に使えるメッセージダイヤログボックス
- 確認用ダイアルグボックス(okボタンで閉じるだけ)
例:バージョン情報などを表示させる
private: System::Void
バージョン情報AToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^
e) {
String^ message = "Ver1.00";
String^ caption
= "バージョン情報";
MessageBoxButtons buttons = MessageBoxButtons::OK;
System::Windows::Forms::DialogResult
result;
result = MessageBox::Show( this, message, caption,
buttons );
}
- 確認用ダイアログボックス(Yes/Noで確認を取る)
例:終了時に保存するか聞く対話型選択
private: System::Void
SaveDataChk(){
String^ message = "保存しますか?";
String^
caption = "保存確認";
MessageBoxButtons buttons = MessageBoxButtons::YesNo;
System::Windows::Forms::DialogResult
result;
result = MessageBox::Show( this, message, caption,
buttons );
if ( result == ::DialogResult::Yes ){
SaveData();
}
}
その他メモ
- ウィンドウが閉じるイベントについて
private: System::Void buttonEnd_Click や
private: System::Void 終了XToolStripMenuItem_Click の
this->Close(); で
private: System::Void Form1_FormClosing が実行される。