SlideShare a Scribd company logo
2014/05/10 CLR/H in TOKYO #2 VB Festival
VB.NET による業務アプリ
Ahf(小尾 智之)
2014/05/10 CLR/H in TOKYO #2 VB Festival
self introduction
VB 使い
WF メイニア
CLR/H スタッフ
てすとぶろぐ
http://blogahf.blogspot.jp/
@twit_ahf
Tomoyuki.Obi
@IT
エンジニアライフ
地方からの戯言
プロレス好き
DDT / BJW / K-DOJO
みちのくプロレス
二度も言わせんな
はずかしい(
2014/05/10 CLR/H in TOKYO #2 VB Festival
agenda
1. 業務アプリとは
2. Windows Forms による実装
2014/05/10 CLR/H in TOKYO #2 VB Festival
業務アプリケーション
• 業務で利用するアプリケーション
• 基幹システムだけではなく近年は
情報参照系でモバイル利用も増加
• 近年は何をもって業務システムと言うか
の境界が曖昧に
2014/05/10 CLR/H in TOKYO #2 VB Festival
特徴
• キー入力の効率化
– Enterキーで次項目へ移動
• 前項目へ移動は何故か多種多様
– ファンクションメニュー
– マウス操作は控えめ
• 帳票出力
– 伝票などの定型帳票出力
– 帳票の種類により電子帳簿保存法の対象
2014/05/10 CLR/H in TOKYO #2 VB Festival
システムの形態
• クライアント/サーバ型が多い
– ブラウザ依存が大きい配布が楽なWeb型
– 配布制約がある何でもできるデスクトップ型
• システム規模は大小様々
2014/05/10 CLR/H in TOKYO #2 VB Festival
アプリの形式種別
入力系
検索系
メンテナンス系 エントリ系
リスト系
照会系
更新系
バッチ系
その他
2014/05/10 CLR/H in TOKYO #2 VB Festival
伝票入力形式
• 業務アプリではかなり必要性が高い
• 明細形式の行を一覧で表示した状態で
データ入力を行う
– ベースは財務システムでの伝票入力
• 入力する項目が伝票に合わせて
表示されるので利用者が理解しやすい
2014/05/10 CLR/H in TOKYO #2 VB Festival
伝票入力のコントロール
• Spread や MultiRow(GrapeCity 製品)と
いった 3rd パーティー製品の利用が吉
• 予算はないけど時間があるならば
DataGridView をカスタマイズで対応可能
2014/05/10 CLR/H in TOKYO #2 VB Festival
Windows Forms
• Visual Studio による GUI アプリ基本形
– VB2 のころから続くスタイル
• イベントドリブン形式での実装が基本
– コントロールごとに用意されたイベントに
対して処理を記述する
• .NET Framework 4.5.2 で HighDPI 対応
– 今でも密かな改善が続いていた
2014/05/10 CLR/H in TOKYO #2 VB Festival
画面のデザイン
• フォームサイズ変更に対応するかどうか
• 変更を許可する場合
配置カテゴリに分類される
プロパティの設定を利用す
ることで、ロジックによる
対応は殆ど不要
2014/05/10 CLR/H in TOKYO #2 VB Festival
キー入力
• KeyPress イベント
• KeyDown / KeyUp イベント
– キーを押した/離した際のイベント
– KeyPress と KeyDown/Up では
処理できるキーが一部異なる
– Enter キー押下でフォーカス遷移とか
• Click イベント
– PerfomeClick メソッドでClickイベントを
呼び出せる
2014/05/10 CLR/H in TOKYO #2 VB Festival
フォーカス遷移時
• Enter イベント
– コントロールがフォーカスを取得
• Leave イベント
– コントロールがフォーカスを喪失
2014/05/10 CLR/H in TOKYO #2 VB Festival
フォーカス取得時の基本
• テキストをハイライト表示
• 上書き状態で入力するケースが多い
• TextBox.SelectAll メソッド
2014/05/10 CLR/H in TOKYO #2 VB Festival
フォーム上のTabIndexの走査
• コンテナが関連するので再帰的に
走査する必要がある
Dim result = New List(Of Control)
sender.Controls.Cast(Of Control).Where(Function(ct) Not ct.IsDisposed) _
.ToList() _
.ForEach(Sub(ct)
'TabStop = True のコントロールを追加
If ct.TabStop Then result.Add(ct)
'子供コントロールがあればその内部を走査
Dim child = GetFoucusableControls(ct)
If Not IsNothing(child) AndAlso child.Count > 0 Then
result.AddRange(child)
End If
End Sub)
Return result
2014/05/10 CLR/H in TOKYO #2 VB Festival
フォーカス遷移順
• コントロールのTabIndex値に基づく
• 親となるコンテナのTabIndexも影響
– 一つのフォーム上に同一のTabIndex値を持つ
コントロールが存在する
– Control.SelectNextControl メソッドや
SendKeys.Send(“{TAB}”) では TabIndex が影響
2014/05/10 CLR/H in TOKYO #2 VB Festival
値の検証
• Validating イベント
– フォーカスが遷移した後で発生
– 検証結果によって遷移を取り消す
– 引数 e.Cancel = True で遷移取り消し
2014/05/10 CLR/H in TOKYO #2 VB Festival
イベントの順序
ActiveControl の変更
コントロールの Leave
コントロールの Enter
コントロールの Validating Validating で値の検証結果が
False となった場合は
ActiveControl 設定前へ戻る
2014/05/10 CLR/H in TOKYO #2 VB Festival
データベース操作
• 業務システムではほぼ必須
• 入力したデータを保持するために必要
• 依存性を低めるために、できるだけ
データを直接操作する部分は独立した
クラスに記載するのがメンテしやすい
– Windows Forms に限らない話
2014/05/10 CLR/H in TOKYO #2 VB Festival
データバインディング
• WPF ほど万能ではないが表形式のデータ
出力などでは有用
• 主に利用するのは DataSet(DataTable)
– 個人的には利用しなくてもよいと…
2014/05/10 CLR/H in TOKYO #2 VB Festival
DataSet の操作
• DataSet.Tables(x).Rows(y).Item形式は
DataRowの部分が特に内部処理が重いので
今は利用しない
• LINQ to DataSet を用いるだけで
体感レベルで速度が改善される
2014/05/10 CLR/H in TOKYO #2 VB Festival
LINQ
• 今の時代では必須技術
• 業務アプリでは特に要素をループして
処理するシーンが多いので効果は高い
– LINQ to Object
– LINQ to XML
– LINQ to Dataset
• SQL 構文は使わなくても良い気がする
2014/05/10 CLR/H in TOKYO #2 VB Festival
帳票の作成
• 業務アプリで求められる帳票の要件
• 自由形式
– プリンタを問わないので比較的自由
• 固定形式
– インパクト式/ライン式のプリンタ利用が多い
– 枠線などが印刷済みな用紙を利用
– 細かい位置調整が必要
2014/05/10 CLR/H in TOKYO #2 VB Festival
帳票ツール
• ツールを利用しない実装も可能だが
非常に時間がかかる
• 帳票ツールは要件に合わせて選択が必要
– ActiveReport(GrapeCity)
– ReportViewerテクノロジ(Microsoft)
– Excel
2014/05/10 CLR/H in TOKYO #2 VB Festival
外部連携
• 1システムだけで終わるケースは少ない
• 別システムとの連携は必要
– 販売管理から財務へ
– 自社から他社へ
– 連携方法も多様
• 直接DB連携
• ファイル形式でのやり取り
• 相手側システムAPIの呼び出し
2014/05/10 CLR/H in TOKYO #2 VB Festival
アプリの配布
• Windows Installer
• ClickOnce
• XCOPY 等でのファイルコピー
– 利用するツールによっては単純にいかない
• 初回配布よりもアップデート方法を
考慮して決める必要がある
– 初回配布と別の形式を採用するのもあり
2014/05/10 CLR/H in TOKYO #2 VB Festival
配布形式を見据えた構成
• 単一Exe形式
– 起動~終了までを制御するメインアプリ
– メインアプリより各機能を呼び出す
– Dllを機能単位で作成
• 複数Exe形式
– 機能単位でExeファイルを作成
– XCOPY方式が行いやすい
2014/05/10 CLR/H in TOKYO #2 VB Festival
まとめ
• Windows Forms はまだまだ現役
• 表現力をあまり求めない場面では最適解
• 求める場合は WPF
• LINQ 必須。ラムダ必須。
– 社内で反発があったら LINQ to Dataset の
場合のように体感レベルで違いが出るのは
説得材料として有効

More Related Content

Similar to Clrh 20140510 2

Clrh 20140906 lt
Clrh 20140906 ltClrh 20140906 lt
Clrh 20140906 lt
Tomoyuki Obi
 
Web area-phone-home
Web area-phone-homeWeb area-phone-home
Web area-phone-home
kmiyako
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
 
Clovaにおける機械学習モジュールの配信&運用基盤の紹介
Clovaにおける機械学習モジュールの配信&運用基盤の紹介Clovaにおける機械学習モジュールの配信&運用基盤の紹介
Clovaにおける機械学習モジュールの配信&運用基盤の紹介
LINE Corporation
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
 
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハックjQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
Jun-ichi Sakamoto
 
Draft: Observability, Service Mesh and Microservices
Draft: Observability, Service Mesh and MicroservicesDraft: Observability, Service Mesh and Microservices
Draft: Observability, Service Mesh and Microservices
Taiki
 
111008 silverlight square_datavalidation
111008 silverlight square_datavalidation111008 silverlight square_datavalidation
111008 silverlight square_datavalidationTakayoshi Tanaka
 
徹底サーベイ : デジタル通貨の15年
徹底サーベイ : デジタル通貨の15年徹底サーベイ : デジタル通貨の15年
徹底サーベイ : デジタル通貨の15年
Kenji Saito
 
WebRTC Summit 2014 NewYork 参加報告
WebRTC Summit 2014 NewYork 参加報告WebRTC Summit 2014 NewYork 参加報告
WebRTC Summit 2014 NewYork 参加報告
mganeko
 
EC-CUBEユーザカンファレンス2016
EC-CUBEユーザカンファレンス2016EC-CUBEユーザカンファレンス2016
EC-CUBEユーザカンファレンス2016
Chihiro Adachi
 
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
Masaya Aoyama
 
改めて C# でできることを振り返る
改めて C# でできることを振り返る改めて C# でできることを振り返る
改めて C# でできることを振り返る
Yuta Matsumura
 

Similar to Clrh 20140510 2 (13)

Clrh 20140906 lt
Clrh 20140906 ltClrh 20140906 lt
Clrh 20140906 lt
 
Web area-phone-home
Web area-phone-homeWeb area-phone-home
Web area-phone-home
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
 
Clovaにおける機械学習モジュールの配信&運用基盤の紹介
Clovaにおける機械学習モジュールの配信&運用基盤の紹介Clovaにおける機械学習モジュールの配信&運用基盤の紹介
Clovaにおける機械学習モジュールの配信&運用基盤の紹介
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハックjQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
 
Draft: Observability, Service Mesh and Microservices
Draft: Observability, Service Mesh and MicroservicesDraft: Observability, Service Mesh and Microservices
Draft: Observability, Service Mesh and Microservices
 
111008 silverlight square_datavalidation
111008 silverlight square_datavalidation111008 silverlight square_datavalidation
111008 silverlight square_datavalidation
 
徹底サーベイ : デジタル通貨の15年
徹底サーベイ : デジタル通貨の15年徹底サーベイ : デジタル通貨の15年
徹底サーベイ : デジタル通貨の15年
 
WebRTC Summit 2014 NewYork 参加報告
WebRTC Summit 2014 NewYork 参加報告WebRTC Summit 2014 NewYork 参加報告
WebRTC Summit 2014 NewYork 参加報告
 
EC-CUBEユーザカンファレンス2016
EC-CUBEユーザカンファレンス2016EC-CUBEユーザカンファレンス2016
EC-CUBEユーザカンファレンス2016
 
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
ServiceMesh と仲間たち 〜Istio & Conduit & Linkerd〜 @Cloud Native Meetup Tokyo #1
 
改めて C# でできることを振り返る
改めて C# でできることを振り返る改めて C# でできることを振り返る
改めて C# でできることを振り返る
 

More from Tomoyuki Obi

それは本当にAutomate? 改めて考えるPower Automate
それは本当にAutomate? 改めて考えるPower Automateそれは本当にAutomate? 改めて考えるPower Automate
それは本当にAutomate? 改めて考えるPower Automate
Tomoyuki Obi
 
Only Logic Apps
Only Logic AppsOnly Logic Apps
Only Logic Apps
Tomoyuki Obi
 
This is iPaas
This is iPaasThis is iPaas
This is iPaas
Tomoyuki Obi
 
Miniacs Power Automate
Miniacs Power AutomateMiniacs Power Automate
Miniacs Power Automate
Tomoyuki Obi
 
Work Automate with Power Automate
Work Automate with Power AutomateWork Automate with Power Automate
Work Automate with Power Automate
Tomoyuki Obi
 
JSON Value into Power Automate
JSON Value into Power AutomateJSON Value into Power Automate
JSON Value into Power Automate
Tomoyuki Obi
 
CodelessDevelop using iPaas
CodelessDevelop using iPaasCodelessDevelop using iPaas
CodelessDevelop using iPaas
Tomoyuki Obi
 
20190727_DevelopUseiPaas
20190727_DevelopUseiPaas20190727_DevelopUseiPaas
20190727_DevelopUseiPaas
Tomoyuki Obi
 
Logic Apps/Flow Update Summary
Logic Apps/Flow Update SummaryLogic Apps/Flow Update Summary
Logic Apps/Flow Update Summary
Tomoyuki Obi
 
decode2019_HandsOn_Flow_04
decode2019_HandsOn_Flow_04decode2019_HandsOn_Flow_04
decode2019_HandsOn_Flow_04
Tomoyuki Obi
 
decode2019_HandsOn_Flow_03
decode2019_HandsOn_Flow_03decode2019_HandsOn_Flow_03
decode2019_HandsOn_Flow_03
Tomoyuki Obi
 
decode2019_HandsOn_Flow_02
decode2019_HandsOn_Flow_02decode2019_HandsOn_Flow_02
decode2019_HandsOn_Flow_02
Tomoyuki Obi
 
decode2019_HandsOn_Flow_01
decode2019_HandsOn_Flow_01decode2019_HandsOn_Flow_01
decode2019_HandsOn_Flow_01
Tomoyuki Obi
 
20190427 global azurebootcamp
20190427 global azurebootcamp20190427 global azurebootcamp
20190427 global azurebootcamp
Tomoyuki Obi
 
20181215 PowerApps + Flow Handson
20181215 PowerApps + Flow Handson20181215 PowerApps + Flow Handson
20181215 PowerApps + Flow Handson
Tomoyuki Obi
 
20181120 HowtoFlow
20181120 HowtoFlow20181120 HowtoFlow
20181120 HowtoFlow
Tomoyuki Obi
 
20180929 lowcode developlogicflow
20180929 lowcode developlogicflow20180929 lowcode developlogicflow
20180929 lowcode developlogicflow
Tomoyuki Obi
 
20180721 First Challenge Logicflow
20180721 First Challenge Logicflow20180721 First Challenge Logicflow
20180721 First Challenge Logicflow
Tomoyuki Obi
 
20180630 data transformationusinglogicflow
20180630 data transformationusinglogicflow20180630 data transformationusinglogicflow
20180630 data transformationusinglogicflow
Tomoyuki Obi
 
Create Bot using LogicApps
Create Bot using LogicAppsCreate Bot using LogicApps
Create Bot using LogicApps
Tomoyuki Obi
 

More from Tomoyuki Obi (20)

それは本当にAutomate? 改めて考えるPower Automate
それは本当にAutomate? 改めて考えるPower Automateそれは本当にAutomate? 改めて考えるPower Automate
それは本当にAutomate? 改めて考えるPower Automate
 
Only Logic Apps
Only Logic AppsOnly Logic Apps
Only Logic Apps
 
This is iPaas
This is iPaasThis is iPaas
This is iPaas
 
Miniacs Power Automate
Miniacs Power AutomateMiniacs Power Automate
Miniacs Power Automate
 
Work Automate with Power Automate
Work Automate with Power AutomateWork Automate with Power Automate
Work Automate with Power Automate
 
JSON Value into Power Automate
JSON Value into Power AutomateJSON Value into Power Automate
JSON Value into Power Automate
 
CodelessDevelop using iPaas
CodelessDevelop using iPaasCodelessDevelop using iPaas
CodelessDevelop using iPaas
 
20190727_DevelopUseiPaas
20190727_DevelopUseiPaas20190727_DevelopUseiPaas
20190727_DevelopUseiPaas
 
Logic Apps/Flow Update Summary
Logic Apps/Flow Update SummaryLogic Apps/Flow Update Summary
Logic Apps/Flow Update Summary
 
decode2019_HandsOn_Flow_04
decode2019_HandsOn_Flow_04decode2019_HandsOn_Flow_04
decode2019_HandsOn_Flow_04
 
decode2019_HandsOn_Flow_03
decode2019_HandsOn_Flow_03decode2019_HandsOn_Flow_03
decode2019_HandsOn_Flow_03
 
decode2019_HandsOn_Flow_02
decode2019_HandsOn_Flow_02decode2019_HandsOn_Flow_02
decode2019_HandsOn_Flow_02
 
decode2019_HandsOn_Flow_01
decode2019_HandsOn_Flow_01decode2019_HandsOn_Flow_01
decode2019_HandsOn_Flow_01
 
20190427 global azurebootcamp
20190427 global azurebootcamp20190427 global azurebootcamp
20190427 global azurebootcamp
 
20181215 PowerApps + Flow Handson
20181215 PowerApps + Flow Handson20181215 PowerApps + Flow Handson
20181215 PowerApps + Flow Handson
 
20181120 HowtoFlow
20181120 HowtoFlow20181120 HowtoFlow
20181120 HowtoFlow
 
20180929 lowcode developlogicflow
20180929 lowcode developlogicflow20180929 lowcode developlogicflow
20180929 lowcode developlogicflow
 
20180721 First Challenge Logicflow
20180721 First Challenge Logicflow20180721 First Challenge Logicflow
20180721 First Challenge Logicflow
 
20180630 data transformationusinglogicflow
20180630 data transformationusinglogicflow20180630 data transformationusinglogicflow
20180630 data transformationusinglogicflow
 
Create Bot using LogicApps
Create Bot using LogicAppsCreate Bot using LogicApps
Create Bot using LogicApps
 

Recently uploaded

FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
CRI Japan, Inc.
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 

Recently uploaded (15)

FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 

Clrh 20140510 2

  • 1. 2014/05/10 CLR/H in TOKYO #2 VB Festival VB.NET による業務アプリ Ahf(小尾 智之)
  • 2. 2014/05/10 CLR/H in TOKYO #2 VB Festival self introduction VB 使い WF メイニア CLR/H スタッフ てすとぶろぐ http://blogahf.blogspot.jp/ @twit_ahf Tomoyuki.Obi @IT エンジニアライフ 地方からの戯言 プロレス好き DDT / BJW / K-DOJO みちのくプロレス 二度も言わせんな はずかしい(
  • 3. 2014/05/10 CLR/H in TOKYO #2 VB Festival agenda 1. 業務アプリとは 2. Windows Forms による実装
  • 4. 2014/05/10 CLR/H in TOKYO #2 VB Festival 業務アプリケーション • 業務で利用するアプリケーション • 基幹システムだけではなく近年は 情報参照系でモバイル利用も増加 • 近年は何をもって業務システムと言うか の境界が曖昧に
  • 5. 2014/05/10 CLR/H in TOKYO #2 VB Festival 特徴 • キー入力の効率化 – Enterキーで次項目へ移動 • 前項目へ移動は何故か多種多様 – ファンクションメニュー – マウス操作は控えめ • 帳票出力 – 伝票などの定型帳票出力 – 帳票の種類により電子帳簿保存法の対象
  • 6. 2014/05/10 CLR/H in TOKYO #2 VB Festival システムの形態 • クライアント/サーバ型が多い – ブラウザ依存が大きい配布が楽なWeb型 – 配布制約がある何でもできるデスクトップ型 • システム規模は大小様々
  • 7. 2014/05/10 CLR/H in TOKYO #2 VB Festival アプリの形式種別 入力系 検索系 メンテナンス系 エントリ系 リスト系 照会系 更新系 バッチ系 その他
  • 8. 2014/05/10 CLR/H in TOKYO #2 VB Festival 伝票入力形式 • 業務アプリではかなり必要性が高い • 明細形式の行を一覧で表示した状態で データ入力を行う – ベースは財務システムでの伝票入力 • 入力する項目が伝票に合わせて 表示されるので利用者が理解しやすい
  • 9. 2014/05/10 CLR/H in TOKYO #2 VB Festival 伝票入力のコントロール • Spread や MultiRow(GrapeCity 製品)と いった 3rd パーティー製品の利用が吉 • 予算はないけど時間があるならば DataGridView をカスタマイズで対応可能
  • 10. 2014/05/10 CLR/H in TOKYO #2 VB Festival Windows Forms • Visual Studio による GUI アプリ基本形 – VB2 のころから続くスタイル • イベントドリブン形式での実装が基本 – コントロールごとに用意されたイベントに 対して処理を記述する • .NET Framework 4.5.2 で HighDPI 対応 – 今でも密かな改善が続いていた
  • 11. 2014/05/10 CLR/H in TOKYO #2 VB Festival 画面のデザイン • フォームサイズ変更に対応するかどうか • 変更を許可する場合 配置カテゴリに分類される プロパティの設定を利用す ることで、ロジックによる 対応は殆ど不要
  • 12. 2014/05/10 CLR/H in TOKYO #2 VB Festival キー入力 • KeyPress イベント • KeyDown / KeyUp イベント – キーを押した/離した際のイベント – KeyPress と KeyDown/Up では 処理できるキーが一部異なる – Enter キー押下でフォーカス遷移とか • Click イベント – PerfomeClick メソッドでClickイベントを 呼び出せる
  • 13. 2014/05/10 CLR/H in TOKYO #2 VB Festival フォーカス遷移時 • Enter イベント – コントロールがフォーカスを取得 • Leave イベント – コントロールがフォーカスを喪失
  • 14. 2014/05/10 CLR/H in TOKYO #2 VB Festival フォーカス取得時の基本 • テキストをハイライト表示 • 上書き状態で入力するケースが多い • TextBox.SelectAll メソッド
  • 15. 2014/05/10 CLR/H in TOKYO #2 VB Festival フォーム上のTabIndexの走査 • コンテナが関連するので再帰的に 走査する必要がある Dim result = New List(Of Control) sender.Controls.Cast(Of Control).Where(Function(ct) Not ct.IsDisposed) _ .ToList() _ .ForEach(Sub(ct) 'TabStop = True のコントロールを追加 If ct.TabStop Then result.Add(ct) '子供コントロールがあればその内部を走査 Dim child = GetFoucusableControls(ct) If Not IsNothing(child) AndAlso child.Count > 0 Then result.AddRange(child) End If End Sub) Return result
  • 16. 2014/05/10 CLR/H in TOKYO #2 VB Festival フォーカス遷移順 • コントロールのTabIndex値に基づく • 親となるコンテナのTabIndexも影響 – 一つのフォーム上に同一のTabIndex値を持つ コントロールが存在する – Control.SelectNextControl メソッドや SendKeys.Send(“{TAB}”) では TabIndex が影響
  • 17. 2014/05/10 CLR/H in TOKYO #2 VB Festival 値の検証 • Validating イベント – フォーカスが遷移した後で発生 – 検証結果によって遷移を取り消す – 引数 e.Cancel = True で遷移取り消し
  • 18. 2014/05/10 CLR/H in TOKYO #2 VB Festival イベントの順序 ActiveControl の変更 コントロールの Leave コントロールの Enter コントロールの Validating Validating で値の検証結果が False となった場合は ActiveControl 設定前へ戻る
  • 19. 2014/05/10 CLR/H in TOKYO #2 VB Festival データベース操作 • 業務システムではほぼ必須 • 入力したデータを保持するために必要 • 依存性を低めるために、できるだけ データを直接操作する部分は独立した クラスに記載するのがメンテしやすい – Windows Forms に限らない話
  • 20. 2014/05/10 CLR/H in TOKYO #2 VB Festival データバインディング • WPF ほど万能ではないが表形式のデータ 出力などでは有用 • 主に利用するのは DataSet(DataTable) – 個人的には利用しなくてもよいと…
  • 21. 2014/05/10 CLR/H in TOKYO #2 VB Festival DataSet の操作 • DataSet.Tables(x).Rows(y).Item形式は DataRowの部分が特に内部処理が重いので 今は利用しない • LINQ to DataSet を用いるだけで 体感レベルで速度が改善される
  • 22. 2014/05/10 CLR/H in TOKYO #2 VB Festival LINQ • 今の時代では必須技術 • 業務アプリでは特に要素をループして 処理するシーンが多いので効果は高い – LINQ to Object – LINQ to XML – LINQ to Dataset • SQL 構文は使わなくても良い気がする
  • 23. 2014/05/10 CLR/H in TOKYO #2 VB Festival 帳票の作成 • 業務アプリで求められる帳票の要件 • 自由形式 – プリンタを問わないので比較的自由 • 固定形式 – インパクト式/ライン式のプリンタ利用が多い – 枠線などが印刷済みな用紙を利用 – 細かい位置調整が必要
  • 24. 2014/05/10 CLR/H in TOKYO #2 VB Festival 帳票ツール • ツールを利用しない実装も可能だが 非常に時間がかかる • 帳票ツールは要件に合わせて選択が必要 – ActiveReport(GrapeCity) – ReportViewerテクノロジ(Microsoft) – Excel
  • 25. 2014/05/10 CLR/H in TOKYO #2 VB Festival 外部連携 • 1システムだけで終わるケースは少ない • 別システムとの連携は必要 – 販売管理から財務へ – 自社から他社へ – 連携方法も多様 • 直接DB連携 • ファイル形式でのやり取り • 相手側システムAPIの呼び出し
  • 26. 2014/05/10 CLR/H in TOKYO #2 VB Festival アプリの配布 • Windows Installer • ClickOnce • XCOPY 等でのファイルコピー – 利用するツールによっては単純にいかない • 初回配布よりもアップデート方法を 考慮して決める必要がある – 初回配布と別の形式を採用するのもあり
  • 27. 2014/05/10 CLR/H in TOKYO #2 VB Festival 配布形式を見据えた構成 • 単一Exe形式 – 起動~終了までを制御するメインアプリ – メインアプリより各機能を呼び出す – Dllを機能単位で作成 • 複数Exe形式 – 機能単位でExeファイルを作成 – XCOPY方式が行いやすい
  • 28. 2014/05/10 CLR/H in TOKYO #2 VB Festival まとめ • Windows Forms はまだまだ現役 • 表現力をあまり求めない場面では最適解 • 求める場合は WPF • LINQ 必須。ラムダ必須。 – 社内で反発があったら LINQ to Dataset の 場合のように体感レベルで違いが出るのは 説得材料として有効