Category Archives: C# programming

C# exercises (5) Calculator

my電卓を作ろう

逆ポーランド記法電卓

Reverse Polish Notation Calculator

画面をデザインする

スクリーンショット 2016-05-02 16.20.21

ツールボックスの中で、

  • コモンコントロール「TextBox」
    • TextBox –>  (name): typeText;  text: 0
    • TextBox –> (name): lastText;  text: 0
  • コモンコントロール「Button」
    • Button1 –> (name): plusButton;  text: +
    • Button2 –> (name): subButton; text: –
    • Button3 –> (name): multiButton; text: x
    • Button4 –> (name): divButton; text: /
    • Button5 –> (name): clrButton; text: CL
    • Button6 –> (name): enterButton; text: ER

Formにドラッグ&ドロップする

プログラミング

KeyPressイベントを作成

Form1を選択し、Form1のイベントの表示に切り替えて、「KeyPress」イベントに、FormKeyPressを入力

スクリーンショット 2016-05-02 16.23.53

FormKeyPressメソッドを作成

六つボタンを選択した状態で、コントロール類の、「KeyPress」イベントに、FormKeyPressimageを選択。

スクリーンショット 2016-05-02 16.28.36

private void FormKeyPress(object sender, KeyPressEventArgs e)
{
    string key = e.KeyChar.ToString();
    int n = 0;
    try
    {
        n = int.Parse(key);
    }
    catch
    {
        return;
    }
    string num = typeText.Text + n;
    try
    {
        typeText.Text = "" + int.Parse(num);
    }
    catch
    {
        return;
    }
}

plusButtonClickメソッドを作成

スクリーンショット 2016-05-02 16.41.55

private void plusButtonClick(object sender, EventArgs e)
{
    try
    {
        int lastnum = int.Parse(lastText.Text);
        int typenum = int.Parse(typeText.Text);
        lastText.Text = "" + (lastnum + typenum);
        typeText.Text = "0";
    }
    catch
    {
        return;
    }
}

subButtonClickメソッドを作成

スクリーンショット 2016-05-02 16.42.20

private void subButtonClick(object sender, EventArgs e)
{
   try
   {
       int lastnum = int.Parse(lastText.Text);
       int typenum = int.Parse(typeText.Text);
       lastText.Text = "" + (lastnum - typenum);
       typeText.Text = "0";
   }
   catch
   {
       return;
   }
}

multiButtonClickメソッドを作成

スクリーンショット 2016-05-02 16.43.30

private void multiButtonClick(object sender, EventArgs e)
{
    try
    {
        int lastnum = int.Parse(lastText.Text);
        int typenum = int.Parse(typeText.Text);
        lastText.Text = "" + (lastnum * typenum);
        typeText.Text = "0";
    }
    catch
    {
        return;
    }
}

divButtonClickメソッドを作成

スクリーンショット 2016-05-02 16.44.14

private void divButtonClick(object sender, EventArgs e)
{
    try
    {
        int lastnum = int.Parse(lastText.Text);
        int typenum = int.Parse(typeText.Text);
        lastText.Text = "" + (lastnum / typenum);
        typeText.Text = "0";
    }
    catch
    {
        return;
    }
}

clrButtonClickメソッドを作成

スクリーンショット 2016-05-02 16.45.07

private void clrButtonClick(object sender, EventArgs e)
{
    if (typeText.Text == "0")
    {
        lastText.Text = "0";
    }
    typeText.Text = "0";
}

enterButtonClickメソッドを作成

スクリーンショット 2016-05-02 16.47.49

private void enterButtonClick(object sender, EventArgs e)
{
    string s = typeText.Text;
    lastText.Text = s;
    typeText.Text = "0";
}

作成したコード

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void FormKeyPress(object sender, KeyPressEventArgs e)
        {
            string key = e.KeyChar.ToString();
            int n = 0;
            try
            {
                n = int.Parse(key);
            }
            catch
            {
                return;
            }

            string num = typeText.Text + n;
            try
            {
                typeText.Text = "" + int.Parse(num);
            }
            catch
            {
                return;
            }

        }

        private void plusButtonClick(object sender, EventArgs e)
        {
            try
            {
                int lastnum = int.Parse(lastText.Text);
                int typenum = int.Parse(typeText.Text);
                lastText.Text = "" + (lastnum + typenum);
                typeText.Text = "0";
            }
            catch
            {
                return;
            }
        }

        private void subButtonClick(object sender, EventArgs e)
        {
            try
            {
                int lastnum = int.Parse(lastText.Text);
                int typenum = int.Parse(typeText.Text);
                lastText.Text = "" + (lastnum - typenum);
                typeText.Text = "0";
            }
            catch
            {
                return;
            }

        }

        private void multiButtonClick(object sender, EventArgs e)
        {
            try
            {
                int lastnum = int.Parse(lastText.Text);
                int typenum = int.Parse(typeText.Text);
                lastText.Text = "" + (lastnum * typenum);
                typeText.Text = "0";
            }
            catch
            {
                return;
            }

        }

        private void divButtonClick(object sender, EventArgs e)
        {
            try
            {
                int lastnum = int.Parse(lastText.Text);
                int typenum = int.Parse(typeText.Text);
                lastText.Text = "" + (lastnum / typenum);
                typeText.Text = "0";
            }
            catch
            {
                return;
            }

        }

        private void clrButtonClick(object sender, EventArgs e)
        {
            if (typeText.Text == "0")
            {
                lastText.Text = "0";
            }
            typeText.Text = "0";
        }

        private void enterButtonClick(object sender, EventArgs e)
        {
            string s = typeText.Text;
            lastText.Text = s;
            typeText.Text = "0";
        }
    }
}

My電卓使い方

計算例: 123+456=

まずキーボードから数字123入力

スクリーンショット 2016-05-02 17.01.50

「ER」キーで数字を設定

スクリーンショット 2016-05-02 17.01.53

次の数字456を入力

スクリーンショット 2016-05-02 17.02.00

演算キーで計算

スクリーンショット 2016-05-02 17.02.11

C# exercises (4) Slot machine

Visual Studio community 2015 アカウントについて (学内専用)

スロットマシンの作成

Slot machine

スロットのプログラムに必要な3つの部品

  • 数字を表示させるための部品
    •   → ラベル (Labelコントロール)
  • スロットを開始するための部品
    •   → ボタン (Buttonコントロール)
  • 数字の書き換えを短い間隔で行うため、その間隔を計るための部品
    •   → タイマー (Timerコントロール)

これらの部品はツールボックスに入っている

デザイン

部品の貼り付け

slot2

文字の大きさの変更

フォントの大きさを72ポイント程度にする

プログラム

コントロールとプログラムの関係

  • コントロールに対して何かをすると、イベントが発生する
    • イベントに対応したプログラムを作成する
  • フォーム上のボタン(button1)をダブルクリックすると、ボタンをクリックしたときに発生するイベントに対応したプログラム(button1_Click)が自動的に生成される

slot3

Timerコントロール

一定の間隔で処理をさせたいときに使う

  • timer1:Timerコントロールの変数名
  • Start()はタイマーを開始する命令
  • Intervalに設定している間隔で、定期的にtimer1_Tick()を発生させる
  • Intervalプロパティに設定する時間はミリ秒単位
    • Intervalプロパティに100を設定すると、100ミリ秒(0.1秒)ごとにtimer1_Tick()が呼ばれる

乱数を生成するイベントのプログラムの作成

0以上10未満の乱数を生成する

Timerコントロールをダブルクリック

  • –フォームの下に貼り付いているTimerコントロールをダブルクリックすると、自動的にtimer1_Tickというイベントのプログラムが生成される
  • –その中に、以下のプログラムを書く
  • –Next()命令により、0以上10未満の乱数を生成する
  • –それをLabelコントロールのTextプロパティに代入する
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

        private void timer1_Tick(object sender, EventArgs e)
        {
            label1.Text = DateTime.Now.ToLongTimeString();
            Random random = new Random();
            label1.Text = random.Next(10).ToString();
        }
    }
}

実行してみる

スクリーンショット 2016-05-12 14.55.35

機能追加

音声を追加

  • 一番最初に、using System.Media; を追加
  • button1_Clickイベントの{ } の中に
SoundPlayer sound = new SoundPlayer(@“ファイル名”);
sound.Play();

(ファイル名の指定で、””の前に@を書くと、\を2つ書かなくても良くなる)

停止機能

ボタン(開始/停止)機能

 

C# exercises (3) Common Control

ディジタル時計の作成

Create Digital Clock

デザイン

ツールボックスの中で、

  • –コモンコントロール「TextBox」
  • –コンポーネント「Timer」

Formにドラッグ&ドロップする

スクリーンショット 2016-05-02 15.27.53

Timerのプロパティ(値)を変更

スクリーンショット 2016-05-02 15.28.49

timer1のプロパティ

  • Enabled⇒ True (Enabled:タイマーを実行する)
  • Interval⇒ 1000 (Interval:タイマーの実行間隔, 1000⇒1000ms(1秒))

 

TextBoxのプロパティ

  • Font :36ポイント –文字のサイズ⇒好きなサイズに
  • ForeColor :緑 –文字の色⇒好きな色に
  • BackColor :ブラック –TextBoxの背景色⇒好きな色に
  • TextAlign :Center –文字を表示する場所⇒真ん中(Center)
  • Text: 00:00:00 –表示する文字列⇒最初は00時00分00秒をあらわす

 

スクリーンショット 2016-05-02 15.34.31

 

ディジタル時計の完成

timer1をダブルクリックすると、timer処理に関する関数(メソッド)が自動生成される

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

        private void timer1_Tick(object sender, EventArgs e)
        {
            textBox1.Text = DateTime.Now.ToLongTimeString();
        }
    }
}

 

現在の時間をテキストボックスに表示コードの追加

スクリーンショット 2016-05-02 15.44.58

 

C# exercises (2) Event-driven

イベントドリブンとは

「キーボードのボタンが押された」とか「マウスが移動した」等の、 コンピュータ上で発生するなんらかの事象のことをイベント(event)といい、 イベントが発生したときに行う処理のことをイベント ハンドラー(event handler)と呼びます。 このように、イベントとそれに対する処理により動作するようなプログラムのことをイベント駆動型(event drive)プログラムと呼びます。

課題:ボタンクリックでメッセージボックス に表示

デザインの作成

ツールボックスの中から、Buttonを選択して、Form1に貼り付ける
スクリーンショット 2016-04-14 16.57.10

ボタン名の変更

スクリーンショット 2016-04-14 16.57.57
プログラムの作成
ボタンをダブルクリック(ダブルクリック: マウスの左ボタンを2回連続で押す)

少しずつ入力すると命令が表示されるので、Mesまで入力して、MessageBoxを選択しましょう。

スクリーンショット 2016-04-14 17.00.14
MessageBoxのあとは、「.」 (ドット)を入力、関数「Show」を選択して、(” “); を入力
 スクリーンショット 2016-04-14 17.01.00

完成したコード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello world");
        }
    }
}
*注意:( ” “) ; は全角(漢字)にしてはいけません。全角(漢字)の文章を入れた場合、かならず半角に戻して入力しましょう。
実行してみる
 スクリーンショット 2016-04-14 17.06.18
フォームの表示

ボタンをクリックすると、あいさつメッセージが表示

プロジェクトのパス

c:\Users\chen\documents\visual studio 2015\Projects\test1

C# exercises (1) Guidance

Windowsアプリを作る

C#について

  • 開発しやすく,高機能なプログラミング言語
  • 様々なプログラミング言語の良いところを組合せて作った.
  • プログラムのミス(バグ)が出にくい
  • 学習しやすい
  • 比較的簡単に自分が作成したいWindowsアプリを作れる
  • Windowsアプリの開発ではC#を使うことが標準になってきている。

c472feec-9f9a-a24f-6fe5-8fa1d3d227f6

この課程について

  • Microsoft Visual C# 2015利用
  • とても難しいWindowsアプリの開発をできるだけ簡単にして、いろいろな高度な機能を教えたい。
  • 少しでもプログラミングの楽しさが伝わるように工夫したい。
  • 演習中心:できるだけ見やすく工夫します。
  • 簡単ながら、応用しやすく、かつ、興味がもてるような題材を考えてきます。
  • 試験:レポート
  • 評価:出席+演習+レポート

***

プログラムの作り方

–Microsoft Visual C# 2015 Express Editionを起動
–画面の左下の「スタート」メニュー ⇒ プログラム

⇒ Microsoft Visual C# 2010 Express Edition

•左上のメニューから「ファイル」⇒「新しいプロジェクト」を選択
•「Windowsフォームアプリケーション」が選択された状態で、プロジェクト名に好きな名前を入力する
プロジェクトの初期状況
ツールボックスを固定

 

C# programming exercises

【授業の概要】

 比較的簡単に自分が作成したいWindowsアプリを開発できるVisual C# を無料2015 Visual Studio Communityの統合開発環境を使い学習する。 開発現場でも使われているVisual Studioの使い方やコンポーネント指向やオブジェクト指向を理解できるように、GDI+ APIを使ってGUIのあるプログラムで実践的に学習していく。
簡単ながら、応用しやすく、興味がもてるような題材を使う。自宅のWindowsPCを持っている学生はインストールして実習することで理解が深まる。

【授業要旨】

【テキスト】

回数 題目 授業内容 学習課題 予習時間(分) 復習時間(分)
1 ガイダンス 学習目的 学習目的,  .NET Frameworkとは    VSCommunity開発環境 授業内容を復習する 60
2 イベントドリブンとは ボタンクリックでメッセージボックス に表示 配布教材を読む
授業内容を復習する
30 60
3 ツールボックス ツールボックスの使い方(コモンコントロールTextBox、コンポーネントTimer)デジタル時計の作成 配布教材を読む
授業内容を復習する
30 60
4 GUI 出力 長方形、直線の描画 配布教材を読む
授業内容を復習する
30 60
5 コンソールアプリ キー入力 コンソール出力  CSCPAD 配布教材を読む
授業内容を復習する
30 60
6 マウスを使ったアプリ マウスダウンイベント 配布教材を読む
授業内容を復習する
30 60
7 クラス利用 プロパティとメソッド  変数とデータ型  textBoxと計算プログラム 配布教材を読む
授業内容を復習する
30 60
8 メソッドの使い方 3科目の平均点を表示するプログラム 配布教材を読む
授業内容を復習する
30 60
9 制御構造  配列 foreach文 2つのFormを持つプログラム 1次元配列  構造体 配布教材を読む
授業内容を復習する
30 60
10 オブジェクト指向プログラミング1 クラス  getとset   コンストラクター クラスの継承 ( 名前,生年月日,住所表示プロ) 配布教材を読む
授業内容を復習する
30 60
11 オブジェクト指向プログラミング2 オーバーライド ( 名前,生年月日,住所表示プログラムの続き) 配布教材を読む
授業内容を復習する
30 60
12 総合演習 y=ax^n  のグラフの表示 (pictureBox) 配布教材を読む
授業内容を復習する
30 60
13 課題演習1 簡易なデジタイザとデータのグラフ表示 配布教材を読む
授業内容を復習する
30 60
14 課題演習2 GUIを扱うアプリケーション1  メニュー 配布教材を読む
授業内容を復習する
30 60
15 課題演習3 GUIを扱うアプリケーション2 ファイル操作 授業内容を復習する 30 60

 

参考