GUIプログラミングの基本=イベント イベントとは イベントの例 ウィンドウやウィンドウ内のパーツ(ボタン・スクロールバーなど)に発生する

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
2001年11月更新 2章 Windowプログラムの構成 Windowsプログラムおよび       PiasTkプログラムの基本構造.
社会人学習講座 「Javaプログラミング概論」
GridLayout オブジェクト(省略)
         第9回 Swing.
プログラミング 平成22年10月20日 森田 彦.
プログラミング 平成24年10月16日 森田 彦.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
Applet 岡部 祐典 鈴木 敬幸.
~手続き指向からオブジェクト指向へ(Ⅰ)~
Win32APIとMFC H107102 古田雅基 H107048 佐藤一樹 H107126 山下洋平.
C#によるWindowsFormApplication入門
情報理工学部 情報システム工学科 ラシキアゼミ3年 H 岡田 貴大
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
Step-by-Step Guide on How to Start ALICE Analysis
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング 平成23年10月19日 森田 彦.
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
社会人学習講座 「Javaプログラミング概論」
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
プログラミング演習3 第2回 GUIの復習.
ソフトウェア工学 知能情報学部 新田直也.
第1回.リレーショナルデータベースを使ってみよう
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
EVENT プログラミングのスタイル 手続き型: ある決められた場所から開始され, その後は純粋に上から下に流れて行く方式. 実行したいことを, 順番に記述してゆく. 逐次処理形式コーディングの方法である。 今までの授業(情報処理2や3)で 行ってきたプログラミングの演習 bcc32やmake 手続き型.
フォームのデザイン Labelコントロール変更点 (name): labelDate Font Size: 18pt
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
継承の概念と用語 元クラスAA 元のクラス メンバー(フィールド) 変数x,変数y 配列z 新クラス 新クラスAB 追加メンバー 変数 v
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
TCanvas BCB:TCanvasクラスでグラフィックを扱う。 TFormなどもプロパティとして持っている。
プログラミング演習3 第2回 GUIの復習.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言
Jakarta Struts (2) ソフトウェア特論 第11回.
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
オブジェクトのプロパティ プロパティとは? あたかもそういうメンバー変数(フィールド)がそのクラスに存在するかのように見せる仕組み!
もっと詳しくArrayクラスについて調べるには → キーワード検索
プログラミングⅠ 平成30年10月15日 森田 彦.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミングⅠ 平成30年10月22日 森田 彦.
オブジェクト・プログラミング 第8回.
オブジェクト プログラミング 第2回 プログラムの基本.
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
C#プログラミング実習 第3回.
画面への描画 Graphics オブジェクト 紙 ペン Pen オブジェクト Brush オブジェクト 画面のピクセルをカプセル化
メンバとメソッド C言語の構造体 変数の集まり C#言語のクラス + それを処理する関数の集まり フィールド または メンバ変数 メンバ
JAVA入門⑥ クラスとインスタンス.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング 平成24年12月11日 森田 彦.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
:: の扱い 長谷川啓.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
3.テキストボックスによる データ入力 データ入力と表示のプログラム.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
How To WPF アプリケーション Part3 By 中博俊.
Presentation transcript:

GUIプログラミングの基本=イベント イベントとは イベントの例 ウィンドウやウィンドウ内のパーツ(ボタン・スクロールバーなど)に発生する 様々な出来事・きっかけ MouseEnterイベント発生 MouseLeaveイベント発生 イベントの例 マウスがウィンドウ上に入った マウスがウィンドウ上から出た マウスのボタンが押された キーボードのキーが押された ウィンドウが閉じられた ウィンドウが開かれた ウィンドウのサイズが変わった 他のウィンドウの下になっていたウィンドウ全体が前に出た 他のウィンドウに隠れていた一部分が前に出た MouseDownイベント発生 このタイプのイベントが発生したらプログラムはウィンドウ内の文字や図形を描かなければならない → Paint イベント発生 ウィンドウが隠れて出たり,サイズが変わったりするたびにウィンドウ内を描画するのか? 答え: YES! それがウィンドウプログラミングの基本

マウスの関係する処理 マウスがウィンドウ上に入ってきたらウィンドウの背景色を赤にする namespace Matsushima {   using System.Windows.Forms;   using System.Drawing;   using System;   class MyWindow : Form   {     public MyWindow() {}     protected override void OnMouseEnter(EventArgs ea)     {       this.BackColor = Color.Red;     }     protected override void OnMouseLeave(EventArgs ea)       this.BackColor = DefaultBackColor;   }   class koushu8d     public static void Main()       MyWindow mw = new MyWindow();       mw.Text = "これは松島のウィンドウだ";       mw.Height = 100;       mw.Width = 500;       Application.Run(mw); } マウスがウィンドウ上に入ってきたらウィンドウの背景色を赤にする マウスがウィンドウ上から出て行ったらウィンドウの背景色を元に戻す 注)このソースのコンパイルと実行には, System.Windows.Forms.dll,Sysutem.dll, System.Drawing.dllへの参照設定が必要

GUIプログラムの実行方式=イベント駆動(イベントドリブン) イベント発生のタイミングも順序も予測不能 非GUIプログラム GUIプログラム class koushu8 {   public static void Main()   {     int x,i ;     x = x + 10;     Console.WriteLine(・・・);     for(i = 0; i < 10; i++)     {       ・・・・     }     if (x > 20)     ・・・・   } } class koushu8 {   public static void Main()   {     MyWindow mw = new MyWindow();     mw.Text = "題名";     mw.Height = 100;     mw.Width = 500;     Application.Run(mw);   } } 予測可能な一定の順序で処理が進む イベントA発生 イベントA 処理 イベントループ プログラム終了 イベントB発生 イベントB 処理 ウィンドウクローズイベント発生 イベントC発生 イベントC 処理 イベントを処理するルーチン → イベントハンドラ GUIではプログラマの仕事のほとんどはイベントハンドラの作成!

コントロールを使おう ウィンドウ内を描画するPaintハンドラを作成するのはタイヘン 通常のウィンドウズアプリケーションは,ボタンやテキストボックスなどの一定のコンポーネント(部品)でできている クラスControlはクラスFormのベースクラス クラスControlはコンポーネント・オブジェクトを提供するベースクラス 特徴 コントロールのPaintハンドラを作成する必要はない → すでにControlクラスで定義済み ほとんどの処理はコントロールのプロパティの設定・取得でできる クリックやマウスダウン,キーダウンなどほとんどの全てのイベントのイベントハンドラをプロテクトメソッドとして持っている → 基本的なイベントは自動的に処理される → 独自のイベントハンドラを作成するにはそれを   オーバーライドすればよい

いろいろなコントロール ラベル(Label) リストボックス (ListBox) 文字列リストを選択する ボタン(Button) チェックボックス(CheckBox) いくつ選択しても構わない コンボボックス (ConboBox) 文字列リストを選択する グループボックス(GourpBox) ラジオボタンを中に入れる枠 タブコントロール (TabControl) ラジオボタン (RadioButton) 一つだけを選択できる 数値アップダウン (NumericUpDown) 数値を入力する スライダ(TrackBar) テキストボックス (TextBox) 文字列を入力する 「選択する」=「チェックする」

イベントハンドラ以外のプログラミング 起動した時点での日付と時刻を表示するアプリケーション このボタンを押すとアプリケーションを終了

(name)はプロパティではなく,インスタンス(変数)の名前になる. フォームのデザイン Labelコントロール変更点 (name): labelDate Font Size: 18pt TextAlign: MiddleCenter Labelコントロール変更点 (name): labelTime Font Size: 20pt TextAlign: MiddleCenter Buttonコントロール変更点 (name): buttonFinish Text: 終了 Font Size: 12pt (name)はプロパティではなく,インスタンス(変数)の名前になる.

フォームデザイナが自動作成するソース Form1クラスのプライベートメンバの宣言 Font設定等,フォームデザイナで設定した他のプロパティはどこで変更されているのか? using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace Koushu80 { /// <summary> /// Form1 の概要の説明です。 /// </summary> public class Form1 : System.Windows.Forms.Form /// 必要なデザイナ変数です。 private System.ComponentModel.Container components = null;     private System.Windows.Forms.Label labelDate;     private System.Windows.Forms.Label labelTime;     private System.Windows.Forms.Button buttonFinish; public Form1() // // Windows フォーム デザイナ サポートに必要です。 InitializeComponent(); // TODO: InitializeComponent 呼び出しの後に、コンス・・ } /// <summary> /// 使用されているリソースに後処理を実行します。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) if (components != null) components.Dispose(); } base.Dispose( disposing ); Windows Form Designer generated code /// アプリケーションのメイン エントリ ポイントです。 [STAThread] static void Main() Application.Run(new Form1()); 正解: この中で変更されている! 通常は表示されないので,見たい場合は + をクリック. ただし,変更しないこと Formクラスから派生したForm1クラスの定義 Main()メソッド Form1クラスのコンストラクタ 静的メソッドApplication.Run()でフォームを起動 フォームデザイナで設定した三つのコントロールに対応するインスタンスの宣言. インスタンス名(変数名)がnameの設定になっている

日付と時間を扱うクラスライブラリ コンソール用のプログラム using System; class Koushu9 { public static void Main() DateTime dt; dt = DateTime.Now; Console.WriteLine("{0}年{1}月{2}日", dt.Year, dt.Month, dt.Day); Console.WriteLine("{0}時{1}分", dt.Hour, dt.Minute); } 日付と時間を扱うDateTime構造体 現在の時刻を取得する静的プロパティDateTime.Now DateTime構造体は,年,月,日,時,分,秒,曜日等など,様々なプロパティを持っている. →詳しくはDateTimeをキーワード検索 問題: GUIプログラムではDateTime構造体をどこで宣言し,どこで現在時刻を取得するか?

DateTimeのインスタンスを宣言する場所 namespace Matsushima using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace Koushu80 { /// <summary> /// Form1 の概要の説明です。 /// </summary> public class Form1 : System.Windows.Forms.Form /// 必要なデザイナ変数です。 private System.ComponentModel.Container components = null;     private System.Windows.Forms.Label labelDate;     private System.Windows.Forms.Label labelTime;     private System.Windows.Forms.Button buttonFinish;     private DateTime dt; public Form1() // // Windows フォーム デザイナ サポートに必要です。 InitializeComponent(); // TODO: InitializeComponent 呼び出しの後に、コンス・・      DateTime dt; dt = DateTime.Now; labelDate.Text = string.Format("西暦{0}年{1}月{2}日", dt.Year, dt.Month, dt.Day); labelTime.Text = string.Format("{0}時{1}分", dt.Hour, dt.Minute); } /// <summary> /// 使用されているリソースに後処理を実行します。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) if (components != null) components.Dispose(); } base.Dispose( disposing ); Windows Form Designer generated code /// アプリケーションのメイン エントリ ポイントです。 [STAThread] static void Main() DateTime dt; dt = DateTime.Now; Application.Run(new Form1()); 正解その1 DateTimeのインスタンスdtをForm1のメンバとして宣言する →Form1内からアクセス可能 正解その2 インスタンスdtがForm1コンストラクタメソッド内のローカル変数でも良いならこれでOK (この例ではローカル変数でも問題ない) 不正解 インスタンス(変数)dtはMain()メソッド内のローカル変数になるため,イベントハンドラ等からアクセスできない 現在時刻を取得して,Labelコントロールに設定

アプリケーションの終了 buttonFinish これをクリックしたら,アプリケーションが終了する → クリックイベントのイベントハンドラ内で終了処理 イベントハンドラ private void buttonFinish_Click(object sender, System.EventArgs e) {   Application.Exit(); } 静的メソッドApplication.Exit()はアプリケーションを終了させる