東京工芸大学 工学部  電子機械学科 2年 後期 

応用プログラミング 第2回
 2017.9.26 
藤木 文彦

http://fujiki.tv/t-kougei/ouyouprog/
fujiki.kougei@gmail.com  
 ■ 1   ■ 2   ■ 3   ■ 4   ■ 5   ■ 6   ■ 7   ■ 8   ■ 9   ■ 10   ■ 11  ■ 12    ■ 13   ■ 14   ■ 15   ■ 00   ■ 00   ■ 00




インデックスに戻る

 VC# の起動



 
今日の授業も、教室で、説明しながら一緒に進めていきます。


 今週は、


を中心に勉強します。

  1.VC# ラジオボタン radioButton と結果表示


  ホームページでの項目選択で、1項目だけ選択するようになっているものにつけられているボタンを、「ラジオボタン」といいます。

 次のようなやつです。




 今日は、まず、このボタンの設置法を練習します。


 まず、新しプロジェクトを作成するために、次のようにして、。Windowsフォームアプリケーションの作成を選びます。

プロジェクト名を "Project201"
として、新規プロジェクトを開始します。



  2.Label による文字列表示


 まず、設問表示のために文字列を表示します。
 新しいウインドウを出さずに、そのウインドウに文字を表示するには、[ デザイン ]ウインドウの画面に、ツールボックスから、"Label" を選んでドラッグして落とします。




 問題文を入力するために、"Label1" 表示が選択されている非状態で、右下の ”プロパティ”ウインドウで、 "Text" を選択し、問題文を入れていきます。

 右の ▼ ボタンを押すと、広いウインドウで、複数行を入力することができるので便利です。






  3. radioButton による選択肢表示


 次に、ツールボックスから、  " radioButton " を選んで、画面に4か所配置します。配置した順に番号のついた名前になります。

 1つずつ順に画面上で選択し、右のツールボックスの " Text "で、文字を入力します。
 4つに、適当な県名などを入力します。


        

 以下の画面で、ところどころ、タイトルなどに、
 Prog541-radiobutton1
となっているところがありますが、ここは、
Project201
 となっていると見てください。





  4.ボタンの表示


 次に、解答を選んだあとで、結果を表示するためのボタンを配置し、そこに表示する文字を設定します。




  5.if による正誤判定


 表示する画面が決まりましたので、次に、どこで何をすると、何が起こるか を指定します。これは、自分でプログラムを書かないとなりません。

 何がしたいか整理してみます。

 
ラジオボタンを選択し、 解答ボタンを押すと、 正解か不正解かが表示される。

 という動作をさせればよいのです。

 ラジオボタンを押すと選択ボタンが点くところまでは、自動でやってくれますので、その後、「解答」ボタンを押したときに、何をするかを考えます。

 解答ボタンを押したら 
 −> 選択したラジオボタンが 2番だったら「正解」と表示
     それ以外なら 「不正解」と表示


 ラジオボタンの2番が押されている場合に、条件を満たして処理をさせるようなプログラムを、
 解答ボタンを押した後の処理の部分に入れます。

 ラジオボタンの2番が押されているかどうかは次のようにして判別します。

     
 if (radioButton2.Checked)

 これを入れるためには、

 デザインウインドウで、「解答」ボタンをダブルクリックします。

 すると、プログラムで、「解答」ボタンを押した場合の処理を記述する場所、

private void button1_Click(object sender, EventArgs e)



 の間にカーソルが移動します。

 ここからは、ちょっとだけ、キーボードから入力します。




 これで、とりあえず、ラジオボタンを選択し、2番なら、正解、それ以外なら不正解と表示するプログラムができました。

 本当にこんなに簡単でいいのかと思うでしょうが、動くはずです。

 最上部の 
 を右に向けたデバッグボタンを押して、ビルド、実行を行ってみましょう。

 もし、エラーがあると、画面下部のウインドウに、エラーが表示されます。
  書かれていることだけで、エラー内容がわからないときは、とにかくよくプログラムをチェックしましょう。綴り間違いがないか、 ; は、落ちてないか { } は、正しく対応しているか、など。

 さて、正しくビルドされると、実行が開始され、ウインドウが表示されます。(高速なPCでも、数秒から10秒くらい待たされます。)




 ここで、ラジオボタンを適当に選択して「解答」を押してみてください。
 何度でも繰り返せます。

 終了は、 右上の × 印を押してください。

  6.ウインドウ名(タイトルバー)変更





  6..cs ファイル名の変更、保存


 この辺で、作業中のファイルをいったん保存しておきます。

 じつは、ファイル名は、毎回、 "Form1" となっていますので、この名前を変更します。

「ファイル」 メニュー から、
「名前を付けて Form1.cs を保存」 を選び、
ファイル名を、 " Project201.cs " (拡張子は自動でつくはず) として保存します。
(名前が変わるときにウインドウが再表示のために少し乱れます。)

  7.Application.Exit() によるプログラムの終了。





 「終了」 ボックスを2回クリックして、プログラム入力画面に移ります。
 次のように、

private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}

 というプログラムを入れます。必ず「ボタンの部分をクリックして」表示される部分に入力してください。



 前後部分はあらかじめ表示されているはずなので、実際には、次の1行を入れるだけのはずです。

Application.Exit();

 なお、前後のプログラムとの順番が違っていたりしても、構いません。

 「ボタンを押したらこういう動作をする。」というようなプログラムは、順番に実行されるのではなく、ボタンが押されるまで待っていて、押されたら実行される、という形式なので、プログラム中のどこに書いてあっても、ひとまとまりの流れが切れていない限り構わないのです。

 これを実行してみると、次の様に終了ボタンが表示され、右上の×印を押さなくても終了できます。




 同じ画面内への中間結果の表示

  8.label.Text による、ラベルへの文字列表示


 時には、結果の表示を新しいウインドウではなく、そのウインドウ内に出したいとき、あるいは、途中の状態を同一画面内に表示したいときがあります。
 次のように、入力されたものが何であるかを、画面の下部に表示する、というようなことができます。




 これも、そんなに難しくありません。次のようにします。

 なお、この行を表示するために、ボタンの位置の調整が必要となるかもしれませんが、[ デザイン ]画面で、ボタンの位置などをずらせばよいのです。

 次に、上記のような文字を表示したい場所に、"Label" を置きます。表示文字も少し変えましょう。



 次に、ラジオボタンを押すたびに、下の表示が変わるようにします。
 まず、表示される部分の名前が、

 label2

 であることを確認してください。(表示される文字ではありません。)もし、他の番号などになっているときは、以下のプログラムでもその番号などを変更してください。

 ここでやりたいことは、

 ラジオボタンが押されたら 
  −> それにしたがって、 label2 の場所に表示される文字を変える


 ということです。

 次のプログラムでは、順に、
 radioBox の上をクリックして、プログラム入力画面に移動して実行し、また、[ デザイン ]画面に移動し、ということを4回繰り返します。

  “radioButton”の後の”1,2,3,4”の数字を変えるのを忘れないでください。

 赤で囲んだところ以外は自動的に入力されているはずです。
 デザインウインドウ内でボタンをクリックせずに、ここに直接書いただけではうまく動作しないことがありますから、必ず、デザインウインドウにいったん戻ってクリックしなおして入力する、ということを繰り返してください。
(本文は、コピペして数字を入れ替えるだけでも構いません。)




 これを実行すると、次のようになるはずです。


 label2 のプロパティで、
BorderStyle
を Fixed3D にすると、見やすくなります。
ForeColor で、文字の色が変えられます。

 できたら、ここで、プロジェクトごと全部保存して、いったん終わりましょう。

 【演習問題1】 

 

 ここまでに作成した例題を実行し、その実行画面を印刷して 紙で 提出しなさい。

 また、授業で作成したファイルのうち、
 Project201.cs をメールに添付して送ってください。


 【演習問題2】 

 プロジェクト名を " Project202 " とし、csファイルの名前は、"Project202.cs " とします。
 以下に示すような画面表示と動作をするプログラムを作りなさい。

 プログラムが完成したら、その実行画面を印刷して提出しなさい。


 また、授業で作成したファイルのうち、 Project202.cs をメールに添付して送ってください。

  プログラムの仕様 Project202 


 次のような表示となるプログラムを作成しなさい。最下行の解答は、「解答」ボタンが押されてから出るようにしなさい。最初は、「ここに結果が表示されます。」という表示を出しておきます。




 解答は、別ウインドウに出るのではなく、上の図のように、ウインドウの最下部に表示されるようにしなさい。

 なお、正解かどうかの判定部分では、 " else if " を使って、北海道の場合の対応をする必要がありますので、次のような記述になります。
 else の部分に、次のように、追加を挿入します。
(メッセージボックスを別ウインドウに出さないので、この部分は全部書き直すことになる。)

else if (radioButton2.Checked)
{
this.label3.Text = radioButton2.Text + "は、「県」じゃないよ。ひっかけ問題です。";
}
else


(なお、日本で一番広い「県」は、岩手県です。念のため。)


  9.GroupBox を用いて、複数の選択肢群をつくる。


 Project203 として、次のようなプログラムを作ります。

 radioButton は、1画面中に配置されたボタンの中から、どれか一つしか選べませんでしたが、グループごとに1項目を選択するように配置することができます。

 まず最初に、

 ツールボックスで、「コンテナ」 の中から、(あるいは、全ツールの中から) groupBox という項目を選び、画面上に配置します。

 その上にボタンをおきます。

必ず、 groupBox を先においてから、ボタンを配置してください

 そうでないと、ボタンは、グループに入らず、全体のウインドウの部分に配置されたとみなされます


こんな感じに、それぞれに Text を入れていきます。


 Project201 では、ボタンが押される都度、選ばれたものの表示をしましたが、プログラムが面倒ですから、「確定」ボタンが押されてから表示することにします。

 こんな感じになります。


 プログラムの主要部分はこんな感じになります。
「確定」ボタンが押された時に、どのボタンが選ばれているかを判別するのに、次のように、グループボックスの中にあるボタンを順次チェックし、選ばれていたらそのボタンに設定されているテキストをラベルに設定します。


 【演習問題3】 

 上記 Project203 を作成、実行し、その実行画面を印刷して 紙で 提出しなさい。

 また、授業で作成したファイルのうち、
 Project203.cs をメールに添付して送ってください。

 

  10.CheckBox による、複数同時選択


 次のような選択のできるプログラムを作ります。
Project204
とします。



 まず、チェックボックスを配置するために、

panel を 画面上に配置します。

その上に、

CheckBox を配置し、それぞれの Text を書いていきます。



 ボタンを押した時の表示を出す部分のプログラムは、次のようなものです。


 【演習問題4】 

 上記 Project204 を作成、実行し、その実行画面を印刷して 紙で 提出しなさい。

 また、授業で作成したファイルのうち、
 Project204.cs をメールに添付して送ってください。

 


 【演習問題5】 

 panel の AutoScroll を使うとたくさんの選択肢を配置できます。

 Panel1 のプロパティ で、
AutoScroll を True
 とすることで、画面に収まりきらない表示を作り、スクロールして表示、選択することができるようになります。

 次の画面は、Project204 の選択肢の項目を追加したものです。 このような表示となる、

 Project205 を作成、実行し、その実行画面を印刷して 紙で 提出しなさい。

 また、授業で作成したファイルのうち、
 Project205.cs をメールに添付して送ってください。




 
実行画面の印刷


実行画面をプリンタに印刷して提出してもらいます。

方法は、授業中に教室で実演しますので見てください。

 プログラムを実行し画面が表示されている状態で、「Word」を起動します。

 まず、自分の名前と 学生番号を記入しなさい。


次に、Wordの画面で、
   「挿入」 ー> 「スクリーンショット」 を選ぶと、現在ウインドウに表示されている画面が並んで表示されます。

 その中で、実行中の画面を選ぶと、編集画面に、画面のイメージがコピーされます。

画像の大きさを調整して、1ページに収まるようにしたら、その画像を、印刷します。(白黒で良い。授業時間中の課題提出用のプリントは、年間100枚の枚数制限の対象外です。)







【参考資料】





namespace Project201
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void label2_Click(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
//ラジオボタン2が正解の場合の表示



if (radioButton2.Checked)
{
MessageBox.Show(radioButton2.Text + "は正解です");
// this.label2.Text = radioButton2.Text + "が入力されました。";

}
else
{
MessageBox.Show("間違いです");
}
}

private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}

private void label2_Click_1(object sender, EventArgs e)
{

}

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
this.label2.Text = radioButton1.Text + "が入力されました。";
}

private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
this.label2.Text = radioButton2.Text + "が入力されました。";
}

private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
this.label2.Text = radioButton3.Text + "が入力されました。";
}

private void radioButton4_CheckedChanged(object sender, EventArgs e)
{
this.label2.Text = radioButton4.Text + "が入力されました。";
}
}
}


  private void button1_Click(object sender, EventArgs e)
{
foreach (RadioButton selected in groupBox1.Controls)
{
if (selected.Checked)
{
label2.Text = selected.Text;
break;
}

}


 
private void button1_Click(object sender, EventArgs e)
{
label2.Text = "";
foreach(CheckBox selected in panel1.Controls)
{
if(selected.Checked)
{
label2.Text += selected.Text + " と ";
}
}
label2.Text += "が選ばれました。";
}