第38講 データベースソフト(住所録)の制作=並列処理の練習☆☆
第6話 Form1.hとForm2.hの解説
Form1コード再掲
#pragma once
#include"stdafx.h"
#include"Form2.h"
namespace 住所録 {
        ・
        ・
        ・
#pragma endregion
  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           dataGridView1[0,0]->Value=marshal_as<String^>(u[0]);
           dataGridView1[1,0]->Value=marshal_as<String^>(u[1]);
           dataGridView1[3,0]->Value=marshal_as<String^>(u[2]);
           dataGridView1[2,0]->Value=marshal_as<String^>(u[3]);
           dataGridView1[4,0]->Value=marshal_as<String^>(u[4]);
           dataGridView1[5,0]->Value=marshal_as<String^>(u[5]);
           dataGridView1[6,0]->Value=marshal_as<String^>(u[6]);
           dataGridView1[7,0]->Value=marshal_as<String^>(u[7]);
           dataGridView1[8,0]->Value=marshal_as<String^>(u[8]);
           dataGridView1[9,0]->Value=marshal_as<String^>(u[9]);
           dataGridView1[10,0]->Value=marshal_as<String^>(u[10]);
           dataGridView1[11,0]->Value=marshal_as<String^>(u[11]);
           dataGridView1[12,0]->Value=marshal_as<String^>(u[12]);
           dataGridView1[13,0]->Value=marshal_as<String^>(u[13]);
           dataGridView1[14,0]->Value=marshal_as<String^>(u[14]);
           dataGridView1[15,0]->Value=marshal_as<String^>(u[15]);
           dataGridView1[16,0]->Value=marshal_as<String^>(u[16]);
        }

  private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
           Thread^ t=gcnew Thread(gcnew ThreadStart(f));
           t->Start();
        }
        static void f(){
           Application::Run(gcnew Form2());
        }

};
}
Form2コード再掲
#pragma endregion
  private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
          String^ w;
          w=comboBox1->Text;
          marshal_context^ c=gcnew marshal_context();
          string s=c->marshal_as<string>(w);
          u[0]=s;
          w=textBox1->Text;
          s=c->marshal_as<string>(w);
          u[1]=s;
          w=comboBox2->Text;
          s=c->marshal_as<string>(w);
          u[2]=s;
          w=textBox2->Text;
          s=c->marshal_as<string>(w);
          u[3]=s;
          w=comboBox3->Text;
          s=c->marshal_as<string>(w);
          u[4]=s;
          w=textBox3->Text;
          s=c->marshal_as<string>(w);
          u[5]=s;
          w=textBox4->Text;
          s=c->marshal_as<string>(w);
          u[6]=s;
          w=textBox5->Text;
          s=c->marshal_as<string>(w);
          u[7]=s;
          w=textBox6->Text;
          s=c->marshal_as<string>(w);
          u[8]=s;
          w=textBox7->Text;
          s=c->marshal_as<string>(w);
          u[9]=s;
          w=textBox8->Text;
          s=c->marshal_as<string>(w);
          u[10]=s;
          w=textBox9->Text;
          s=c->marshal_as<string>(w);
          u[11]=s;
          w=textBox10->Text;
          s=c->marshal_as<string>(w);
          u[12]=s;
          w=textBox11->Text;
          s=c->marshal_as<string>(w);
          u[13]=s;
          w=textBox12->Text;
          s=c->marshal_as<string>(w);
          u[14]=s;
          w=textBox13->Text;
          s=c->marshal_as<string>(w);
          u[15]=s;
          w=textBox14->Text;
          s=c->marshal_as<string>(w);
          u[16]=s;
          delete c;
       }

       private: System::Void button1_Click_1(System::Object^ sender, System::EventArgs^ e) {
         Close();
       }
};
}

解説
System::Void button1_Clickの1行目の
marshal_as<String^>(u[0]);
の部分についてはすでに解説してありましたね。

marshal_as<String^>(・)はsting型の文字・をString^型に変換するものです。

Form2のSystem::Void button1_Clickの
          String^ w;
          w=comboBox1->Text;
          marshal_context^ c=gcnew marshal_context();
          string s=c->marshal_as<string>(w);
          u[0]=s;

の部分についてもすでに解説が済んでいます。
ここのコードは
          String^ w;
          w=comboBox1->Text;
          marshal_context^ c=gcnew marshal_context();
          u[0]=c->marshal_as<string>(w);
でもよいですね。

u[0]=c->marshal_as<string>(w);のc->marshal_as<string>(w)はString^型wをstring型に変更するものでした。
c->marshal_as<string>(w)は、『cのstring様式』と翻訳すれば、奇妙な感じは減るのではないでしょうか。

つまり、箱cにString^型wをsting型に変換したものを入れなさいです。

でも何故、u[0]=marshal_as<string>(w);で済む様式にしなかったのでしょうかね。
反対はdataGridView1[0,0]->Value=marshal_as<String^>(u[0]);で済むのですから。

疑問は残りますが、
文法ですから、ここは丸暗記するしかありません。


これで一応コードの解説は終わりにして、
いよいよお待ちかねのメニューバーのファイルを搭載します。
データをファイルに保存したり、ファイルを開いたり、
できるようになると本当にソフトを作ったという実感が出てくるのではないでしょうか。

第5話へ 第7話へ

戻る

VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)