フォームのデザイン Labelコントロール変更点 (name): labelDate Font Size: 18pt

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

初年次セミナー 第13回 2次元グラフィックス(1).
上手なプレゼンのための ワンポイント・アドバイス
情報処理演習 (9)グラフィックス システム科学領域 日浦 慎作.
初年次セミナー 第14回 2次元グラフィックス(2).
GridLayout オブジェクト(省略)
プログラミング演習3 李 亜民クラス 第2回 ラスタライズ.
図の挿入 ●方法1 ①図を挿入する位置にカーソルを置く。 ②「挿入」タブ ⇒「図」 → 「ファイルから」とクリックする。 ③挿入するファイルを選択し、「挿入」をクリックする。 ●方法2(書式までコピーされるので、ファイルサイズが大きくなる) ①挿入する図をコピーする。 ② 挿入する位置にカーソルを移動し、ツールバーまたは右クリックメニューの「貼り付け」をクリックする。
情報処理 第7回.
パソコン教室(作図編) ワークフロア清柳.
Applet 岡部 祐典 鈴木 敬幸.
MajorなMeasure 囚人.
Win32APIとMFC H107102 古田雅基 H107048 佐藤一樹 H107126 山下洋平.
C#によるWindowsFormApplication入門
アルゴリズムとプログラミング (Algorithms and Programming)
第四回 VB講座 画像とタイマー.
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
プロセッシング入門1 初歩のプログラミング.
プログラミング演習3 第2回 GUIの復習.
情報処理 第7回 表がある文書の作成.
基礎プログラミング演習 第10回.
ソフトウェア工学 知能情報学部 新田直也.
グラフィックス、その1 色の表示 フォントを変えて文字を表示 直線、四角形、楕円形の描画 円弧の描画 多角形の描画
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
EVENT プログラミングのスタイル 手続き型: ある決められた場所から開始され, その後は純粋に上から下に流れて行く方式. 実行したいことを, 順番に記述してゆく. 逐次処理形式コーディングの方法である。 今までの授業(情報処理2や3)で 行ってきたプログラミングの演習 bcc32やmake 手続き型.
プログラミング演習3 第3回 ミニプロジェクト.
継承の概念と用語 元クラスAA 元のクラス メンバー(フィールド) 変数x,変数y 配列z 新クラス 新クラスAB 追加メンバー 変数 v
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
電界中の電子の運動 シミュレータ作成 精密工学科プログラミング基礎 資料.
TCanvas BCB:TCanvasクラスでグラフィックを扱う。 TFormなどもプロパティとして持っている。
プログラミング演習3 第2回 GUIの復習.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
諸連絡 USBメモリの販売について 日時:6月23日(月)授業開始前 商品:プリンストン社製32MBのUSBメモリ
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
プログラミング基礎a 第12回 Java言語による図形処理入門(3) アニメーション入門
プログラミング基礎a 第11回 Java言語による図形処理入門(3) アニメーション入門
オブジェクトのプロパティ プロパティとは? あたかもそういうメンバー変数(フィールド)がそのクラスに存在するかのように見せる仕組み!
もっと詳しくArrayクラスについて調べるには → キーワード検索
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
ここに 表題や引用文が入る 背景への図の使用とキャプションへのテクスチャの適用 (中級)
計算機プログラミングI 第5回 配列 文字列(Stringクラス) mainの引数 配列の利用例
プログラミングⅠ 平成30年10月22日 森田 彦.
オブジェクト・プログラミング 第8回.
Processing Processingでお絵かき.
第8回放送授業.
GUIプログラミングの基本=イベント イベントとは イベントの例 ウィンドウやウィンドウ内のパーツ(ボタン・スクロールバーなど)に発生する
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
Smart Graphic Layout トピック ステートメント 赤色の背景に画像を含む SmartArt グラフィック (中級)
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
画面への描画 Graphics オブジェクト 紙 ペン Pen オブジェクト Brush オブジェクト 画面のピクセルをカプセル化
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
メンバとメソッド C言語の構造体 変数の集まり C#言語のクラス + それを処理する関数の集まり フィールド または メンバ変数 メンバ
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
スライドの終わりまでテキストが繰り返しスクロールされます • スライドの終わりまでテキストが繰り返しスクロールされます •
サンプル見出し テキスト 1 行目 テキスト 2 行目 テキスト 3 行目 (中級) 図の背後でタイトルを移動させるアニメーション効果
情報実習I (第15回) 木曜4・5限 担当:北川 晃.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
3.テキストボックスによる データ入力 データ入力と表示のプログラム.
Processing Processingでお絵かき.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
PowerPoint の基本操作 情報機器の操作 (e).
Presentation transcript:

フォームのデザイン Labelコントロール変更点 (name): labelDate Font Size: 18pt TextAlign: MiddleCenter Labelコントロール変更点 (name): labelTime Font Size: 20pt TextAlign: MiddleCenter Buttonコントロール変更点 (name): buttonFinish Text: 終了 Font Size: 12pt

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コントロールに設定

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

ウィンドウ内に絵を描こう 直線 line 四角形 rectangle 円/楕円 ellipse 中身の詰まった円/楕円 FillEllipse 中身の詰まった扇形 FillPie 扇形 pie これらはコントロールではない → フォームデザイナで設定できない

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

フォームデザイナによるPaintハンドラの作成 (1) かみなりボタンをクリック (2) Paintハンドラの項をダブルクリック (3) Paintハンドラのメソッド形式が自動的に作成され,コードエディタが開く

Paintハンドラの例 private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Pen GreenPen = new Pen(Color.Green); Pen RedPen = new Pen(Color.Red); Pen YellowPen = new Pen(Color.Yellow); g.DrawLine(GreenPen, 10, 10, 200, 200); g.DrawEllipse(RedPen, 50, 50, 30, 30); g.DrawPie(YellowPen, 120, 100, 150, 150, 15, 120); Pen RedThickPen = new Pen(Color.Red, 10); g.DrawRectangle(RedThickPen, 150, 20, 100, 50); SolidBrush blueBrush = new SolidBrush(Color.Blue); SolidBrush BrownBrush = new SolidBrush(Color.Brown); g.FillPie(blueBrush, 20, 80, 100, 100, 15, 120); g.FillEllipse(BrownBrush, 150, 100, 50, 50); } 直線 line 円/楕円 ellipse 四角形 rectangle 中身の詰まった円/楕円 FillEllipse 扇形 pie 中身の詰まった扇形 FillPie

コンピュータの画面 ピクセル 画素 絵素 現在の普通のパソコン 横1024ピクセル x 縦768ピクセル XGAサイズ 少し前のパソコンやノートパソコン 横800ピクセル x 縦600ピクセル SVGAサイズ OD教室のパソコン 横1280ピクセル x 縦1024ピクセル SXGAサイズ

画面への描画 Graphics オブジェクト 紙 ペン Pen オブジェクト Brush オブジェクト 画面のピクセルをカプセル化 描画の基本になる 紙 原点 (0,0) X方向 Y方向 300ピクセル (デフォルト値) ペン Pen オブジェクト 線を引く 色,幅(線の太さ),線スタイル(点線など)等の多数のプロパティを持っている Brush オブジェクト 図形を塗りつぶす  単色で塗りつぶすSolidBrush  画像パターンで塗りつぶすTextureBrush  グラジエーション効果で塗りつぶすLinearGradientBrush 実際に描画可能な領域 292x273ピクセル (デフォルト値の場合)

Paintハンドラの例 Graphicsオブジェクトを Paintハンドラ内で取得 緑・赤・黄色で太さが1ピクセルのPenオブジェクトを作成 private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Pen GreenPen = new Pen(Color.Green); Pen RedPen = new Pen(Color.Red); Pen YellowPen = new Pen(Color.Yellow); g.DrawLine(GreenPen, 10, 10, 200, 200); g.DrawEllipse(RedPen, 50, 50, 30, 30); g.DrawPie(YellowPen, 120, 100, 150, 150, 15, 120); Pen RedThickPen = new Pen(Color.Red, 10); g.DrawRectangle(RedThickPen, 150, 20, 100, 50); SolidBrush blueBrush = new SolidBrush(Color.Blue); SolidBrush brownBrush = new SolidBrush(Color.Brown); g.FillPie(blueBrush, 20, 80, 100, 100, 15, 120); g.FillEllipse(brownBrush, 150, 100, 50, 50); } 緑色ペンで座標値(10,10)から(200,200)へ直線を引く 青字はインスタンス名(変数名)なので自由に変えられる 赤色ペンで,左上隅の座標が(50, 50)で幅30,高さ30の正方形に内接する円を描く 赤色で太さ10ピクセルのペン 赤色で太いペンで左上(150,20),幅100,高さ50の長方形を描く 青と茶色の単色ブラシ 左上隅の座標が(20, 80)で幅100,高さ100の長方形に内接する円のうち15度から120度の扇形を青色ブラシで塗りつぶす 茶色ブラシで,左上隅の座標が(150, 100)で幅50,高さ50の正方形に内接する円を塗りつぶす 描画メソッドの種類やその詳細については Graphicsクラスをキーワード検索

コントロールで図形描画を制御する 作図ボタンを押すと,入力した値の10倍 の長さ(ピクセル)の太線を引く public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.NumericUpDown numericUpDown1; private System.Windows.Forms.Button button1; /// <summary> /// 必要なデザイナ変数です。 /// </summary> private System.ComponentModel.Container components = null; private int length = 0; ・・・略 private void button1_Click(object sender, System.EventArgs e) length = (int) (numericUpDown1.Value); this.Refresh(); } private void Form1_Paint(object sender, PaintEventArgs e) Graphics g = e.Graphics; g.DrawLine(new Pen(Color.Blue, 20), 0, 20, length*10, 20); (int) ( x ) で変数xの型をint型に変換する numericUpDown.ValueはDecimal型のプロパティなのでそのままではint型変数に代入できない Form1の描画領域を一旦消去して,Paintハンドラを強制的に呼び出すメソッド 太さ20ピクセルの青色ペンで直線を描画 直線の長さを表わす変数 NumericUpDownコントロールのインスタンス numericUpDown1 200ピクセル 作図ボタンのクリック イベントハンドラ Paintイベントハンドラ 図形描画を制御する仕組み 変数値の変更 変数 length 変数値の参照

図形をアニメーションする 緑の円が左から右へ移動してゆく public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Timer timer1; private System.ComponentModel.IContainer components; private int position = 0; public Form1() InitializeComponent(); timer1.Start(); } ・・・略 private void timer1_Tick(object sender, System.EventArgs e) position = position + 5; this.Refresh(); private void Form1_Paint(object sender, PaintEventArgs e) if (position > 300) position = 0; Graphics g = e.Graphics; Rectangle rect = new Rectangle(position, 50, 40, 40); g.DrawEllipse(new Pen(Color.Green), rect); タイマーのTickイベントハンドラ.Intervalプロパティは100[ms]に設定 タイマースタート positionの値がある程度大きくなったら元に戻す 円の現在位置を示す変数 100[ms]ごとに位置を5ピクセル移動する (position, 50)の位置に直径40の円を描画 タイマーのTick イベントハンドラ 変数 position Paintイベントハンドラ 変数値の変更 変数値の参照 図形をアニメーションする仕組み

Rectangle 楕円/円描画の引数 位置座標 高さ 幅 void DrawEllipse(Pen pen, int x, int y, int width, int height); 位置座標 幅 高さ 一つの引数形式 void DrawEllipse(Pen pen, Rectangle rect); 別の引数形式 位置座標と,幅,高さをカプセル化したRectangleオブジェクトは画面上の四角形の領域を表わしている Bottom  この Rectangle 構造体の下端の y 座標を取得します。 Height この Rectangle 構造体の高さを取得または設定します。 IsEmpty この Rectangle のすべての数値プロパティに値ゼロがあるかどうかをテストします。 Left この Rectangle 構造体の左端の x 座標を取得します。 Location この Rectangle 構造体の左上隅の座標を取得または設定します。 Right この Rectangle 構造体の右端の x 座標を取得します。 Size この Rectangle のサイズを取得または設定します。 Top この Rectangle 構造体の上端の y 座標を取得します。 Width この Rectangle 構造体の幅を取得または設定します。 X この Rectangle 構造体の左上隅の x 座標を取得または設定します。 Y この Rectangle 構造体の左上隅の y 座標を取得または設定します。 ==等値演算子 2 つの Rectangle 構造体の位置およびサイズが同じかどうかをテストします。 !=非等値演算子 2 つの Rectangle 構造体の位置またはサイズが異なるかどうかをテストします。 Rectangleのプロパティとオーバーロード演算子 座標をfloat形式で表現した RectangleFオブジェクトもある

Point 直線描画の引数 一つの引数形式 位置座標 1 void DrawLine(Pen pen, int x1, int y1, int x2, int y2); 位置座標1 位置座標2 別の引数形式 位置座標 2 void DrawLine(Pen pen, Point p1, Point p2); 位置座標をカプセル化したPointオブジェクト Pointのプロパティとオーバーロード演算子 直線群描画の引数 IsEmpty この Point が空かどうかを示す値を取得します。 X この Point の x 座標を取得または設定します。 Y この Point の y 座標を取得または設定します。 加算演算子 Point を指定の Size で平行移動します。 等値演算子 2 つの Point オブジェクトを比較します。その結果によって、 2 つの Point オブジェクトの X プロパティと Y プロパティの値が等しいかどうかが示されます。 ==非等値演算子 2 つの Point オブジェクトを比較します。その結果によって、 2 つの Point オブジェクトの X プロパティと Y プロパティの値が異なるかどうかが示されます。 !=減算演算子 Point を指定の Size の負の値だけ平行移動します。 位置座標 p[0] 位置座標 p[1] 位置座標 p[2] 直線群描画メソッドの引数形式 Pointオブジェクトの配列 位置座標 p[3] void DrawLines(Pen pen, Point[] p); 座標をfloat形式で表現した PointFオブジェクトもある