14
智智智智@nia_tn1012 智智智智智智智智智智 WPF 智智 #4 at 智智智智智智智智智智智智 WPF 智智智智智智智智智智智智智智智智智智智智智智 1 07/05/2022

業務アプリ勉強会Wpf4

Embed Size (px)

Citation preview

Page 1: 業務アプリ勉強会Wpf4

1

智中ニア( @nia_tn1012 )

業務系システム勉強会 WPF 入門 #4 at イメージ情報開発株式会社

WPF アプリを作って、情報アシスタントの業務を効率化

05/02/2023

Page 2: 業務アプリ勉強会Wpf4

2

1. About me2. 作った WPF アプリ3. そのアプリで利用した LINQ

目次

Page 3: 業務アプリ勉強会Wpf4

3

• 智中 ニア ( Nia Tomonaka ) / @nia_tn1012

• 湘南生まれの学生• プログラミング言語 : C# / XAML / PHP• 好物 : 紅茶とコーヒー、シラス丼 etc.• 趣味 : 写真撮影 / 音ゲー( Reflec Beat など)

• たまにイラストを描いています• 最近、ブログを KUSANAGI に移行しました

1. About me

Page 4: 業務アプリ勉強会Wpf4

4

• フォームに入力するだけで日報の本文データを作成する、「日報メーカー」

2. 作った WPF アプリ

Page 5: 業務アプリ勉強会Wpf4

5

• 大学の情報アシスタントでは、毎日の業務内容を日報として記入し、メールで送信

2.1. 開発したきっかけ

◆ 勤怠概要 勤務時間 : 8:40 ~ 12:40

◆ 業務概要  8:40 ~ 10:25 : 自習室として運営しました。 ( 備考 : 利用者数は 16 名程でした。 )  10:30 ~ 12:00 : 授業「プログラミング演習 A 」のサポートをしました。  12:00 ~ 14:30 : 自習室として運営しました。 ( 備考 : 利用者数は 32 名程でした。 )

◆ PC 、ソフトウェアなどのトラブル  0 件 特にありませんでした。

◆ 質問  2 件 ・・・

注:この日報はサンプルです。

Page 6: 業務アプリ勉強会Wpf4

6

• 1 文ごとにインデントを合わせるのが煩雑• 項目の記入漏れや件数の数え間違いなどの問題が起きることがある

⇒ アプリで解決

2.1. テキストで直接入力する課題点

Page 7: 業務アプリ勉強会Wpf4

7

• LINQ to XML の Elements メソッド• インデックス付きの Select メソッド• OrderBy メソッドと ThenBy メソッド(後日ブログで・・・)

3. 今回作成したアプリで利用した LINQ

Page 8: 業務アプリ勉強会Wpf4

8

• LINQ to XML は、 LINQ を使って XML データを操作する機能• 例えば、 XElement クラスにある Elements メソッドは指定した

要素名に一致する、 XElement のシーケンス( IEnumerable<XElement> )を取得

3.1. LINQ to XML の Elements メソッド

<list> <fruit id=“1”> リンゴ </fruit> <fruit id=“2”> バナナ </fruit> <fruit id=“3”> みかん </fruit></list>

IEnumerable<XElement><fruit id=“1”> リンゴ </fruit><fruit id=“2”> バナナ </fruit><fruit id=“3”> みかん </fruit>

list.Elements( “fruit” )

Page 9: 業務アプリ勉強会Wpf4

9

• 今回作成したアプリでは、入力したデータを XML ファイルに保存する機能があり、そのファイルを読み込む時、以下ように操作

1. LINQ to XML の Elements メソッドで、リストの項目名を指定し、 IEnumerable<XElements> を取得

2. 1. の戻り値に Select メソッドをつなげて、各要素である XElementsからリストの項目用に定義したクラス型に射影

3.1. LINQ to XML の Elements メソッド

questionlist.Elements( “question” ).Select( item => new QuestionItem{ QuestionItem = DateTime.Parse( item.Attribute( “time” ).Value ), Question = item.Element( “question” ).Value, Answer = item.Element( “answer” ).Value })

Page 10: 業務アプリ勉強会Wpf4

10

<questionlist> <question time=”9:00”> <question> 質問 1</question> <question> 回答 1</question> </question> <question time =”10:00”> <question> 質問 2</question> <question> 回答 2</question> </question></questionlist>

IEnumerable<XElement><question time=“9:00”> <question> 質問 1</question> <question> 回答 1</question></question><question time=“10:00”> <question> 質問 2</question> <question> 回答 2</question></question>

IEnumerable<QuestionItem>QuestionItem { QuestionTime = 9:00, Question = “ 質問 1”, Answer = “ 回答 1”}QuestionItem { QuestionTime = 10:00, Question = “ 質問 2”, Answer = “ 回答 2”}

Page 11: 業務アプリ勉強会Wpf4

11

• Select メソッドには、以下の 2 種類がオーバーロードされている

3.2. インデックス付きの Select メソッド

IEnumerable<Fruit>リンゴバナナみかん

リンゴバナナみかん

リンゴ 0バナナ 1みかん 2

要素にインデックスを付けて列挙

要素のみを列挙

Page 12: 業務アプリ勉強会Wpf4

12

• 今回作成したアプリでは、日報の本文データ作成する時、リストの項目に番号を付けて出力

3.2. インデックス付きの Select メソッド

StringBuilder sb = new StringBuilder()

sb.Append( $“◆ 質問  {questionList.Count} 件” );foreach( var item in questionList .Select( ( val, index ) => new { No = index + 1, Vaule = val } )) { sb.AppendLine( $”   [{item.No}]” ); sb.AppendLine( $”   質問時刻 : {item.Value.Time.ToString( “H:mm” )}” ); sb.AppendLine( $”    Q. {item.Value.Question}” ); sb.AppendLine( $”    A. {item.Value.Answer}” );}

Page 13: 業務アプリ勉強会Wpf4

13

3.2. インデックス付きの Select メソッド

IEnumerable<QuestionItem>QuestionItem { QuestionTime = 9:00, Question = “ 質問 1”, Answer = “ 回答 1”}QuestionItem { QuestionTime = 10:00, Question = “ 質問 2”, Answer = “ 回答 2”}

◆ 質問  2 件  [1]  質問時刻 : 9:00   Q. 質問 1   A. 回答 1  [2]  質問時刻 : 10:00   Q. 質問 2   A. 回答 2  

Page 14: 業務アプリ勉強会Wpf4

14

ご清聴ありがとうございました!

Thank you !