第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 が実行される。