Submit Search
Upload
C#アプリの作り方入門
•
3 likes
•
5,017 views
森理 麟
Follow
「わんくま同盟 大阪勉強会 #47」で話した内容です。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 39
Download now
Download to read offline
Recommended
Go静的解析ハンズオン
Go静的解析ハンズオン
Takuya Ueda
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しい
Shigeru UCHIYAMA
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
Tetsuya Morimoto
マスター・オブ・goパッケージ
マスター・オブ・goパッケージ
Takuya Ueda
Python02
Python02
XMLProJ2014
設計してますか?
設計してますか?
ke-m kamekoopa
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
ke-m kamekoopa
Cしゃーぷができるまで
Cしゃーぷができるまで
信之 岩永
Recommended
Go静的解析ハンズオン
Go静的解析ハンズオン
Takuya Ueda
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しい
Shigeru UCHIYAMA
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
Tetsuya Morimoto
マスター・オブ・goパッケージ
マスター・オブ・goパッケージ
Takuya Ueda
Python02
Python02
XMLProJ2014
設計してますか?
設計してますか?
ke-m kamekoopa
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
ke-m kamekoopa
Cしゃーぷができるまで
Cしゃーぷができるまで
信之 岩永
コードレビューのススメ
コードレビューのススメ
kawahira kazuto
オブジェクト指向やめましょう
オブジェクト指向やめましょう
なおき きしだ
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
Shunji Konishi
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
ぶっとびケータイ+Firefox OS Apps
ぶっとびケータイ+Firefox OS Apps
EnsekiTT
TwitterToDayOne
TwitterToDayOne
Alex Onsager
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
kimukou_26 Kimukou
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
Miyoshi Kosuke
Using the Fragments(Android)
Using the Fragments(Android)
Teruaki Kinoshita
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Shoot Morii
TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?
Mr. Vengineer
Ajax 応用
Ajax 応用
Katsuyuki Seino
Teclab3
Teclab3
Eikichi Yamaguchi
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open Social
ngi group.
C# ドラッグ&ドロップ処理の実装
C# ドラッグ&ドロップ処理の実装
Hiroki Takahashi
Jetpack Library 事始め
Jetpack Library 事始め
Tomohiro Kaizu
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
聡 中川
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Takuya Ueda
More Related Content
Viewers also liked
コードレビューのススメ
コードレビューのススメ
kawahira kazuto
オブジェクト指向やめましょう
オブジェクト指向やめましょう
なおき きしだ
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
Shunji Konishi
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
Viewers also liked
(6)
コードレビューのススメ
コードレビューのススメ
オブジェクト指向やめましょう
オブジェクト指向やめましょう
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Similar to C#アプリの作り方入門
ぶっとびケータイ+Firefox OS Apps
ぶっとびケータイ+Firefox OS Apps
EnsekiTT
TwitterToDayOne
TwitterToDayOne
Alex Onsager
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
kimukou_26 Kimukou
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
Miyoshi Kosuke
Using the Fragments(Android)
Using the Fragments(Android)
Teruaki Kinoshita
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Shoot Morii
TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?
Mr. Vengineer
Ajax 応用
Ajax 応用
Katsuyuki Seino
Teclab3
Teclab3
Eikichi Yamaguchi
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open Social
ngi group.
C# ドラッグ&ドロップ処理の実装
C# ドラッグ&ドロップ処理の実装
Hiroki Takahashi
Jetpack Library 事始め
Jetpack Library 事始め
Tomohiro Kaizu
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
聡 中川
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Takuya Ueda
Java x Groovy: improve your java development life
Java x Groovy: improve your java development life
Uehara Junji
Marionettejs getting started
Marionettejs getting started
Kyohei Morimoto
Android道第1回公開用
Android道第1回公開用
Takaya Funabiki
【プログラミング教室】テキスト
【プログラミング教室】テキスト
Manabu Ikarashi
Similar to C#アプリの作り方入門
(20)
ぶっとびケータイ+Firefox OS Apps
ぶっとびケータイ+Firefox OS Apps
TwitterToDayOne
TwitterToDayOne
Djangoフレームワークの紹介
Djangoフレームワークの紹介
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
Using the Fragments(Android)
Using the Fragments(Android)
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?
Ajax 応用
Ajax 応用
Teclab3
Teclab3
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open Social
C# ドラッグ&ドロップ処理の実装
C# ドラッグ&ドロップ処理の実装
Jetpack Library 事始め
Jetpack Library 事始め
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Java x Groovy: improve your java development life
Java x Groovy: improve your java development life
Marionettejs getting started
Marionettejs getting started
Android道第1回公開用
Android道第1回公開用
【プログラミング教室】テキスト
【プログラミング教室】テキスト
Recently uploaded
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
Recently uploaded
(10)
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
C#アプリの作り方入門
1.
C#アプリの作り方入門 ~「きほん」の「ほ」~ 森理 麟(moririring)
2.
自己紹介 森理 麟(moriri-ring) ●
職業 : ゲームプログラマ ● Twitter : @moririring ● ブログ : 森理 麟(moririring)のプログラマブログ ● 自作アプリ : クッキツイート,HashifyWin
3.
スタート アプリを作り始めたプログラマが、 入門書の次に読む本がないと思ったから。
4.
ゴール 自分のこだわりを公開。 聞いた人のこだわりの発見。 皆のこだわりの共有。 懇親会・ブログのコメント・Twitter。何でも構いませ んのでこだわりを教えてください!
5.
アジェンタ ● とりあえずアプリを作ってみる ● アプリを効果的に見なおす ●
アプリをもっと効果的に見なおす
6.
とりあえずアプリを 作ってみる I make the
application.
7.
それでは 細かいことは後にして、早速、簡単なアプリを作っ てみます。
8.
レシピ 目標 ファイルを選択して中身がテキストなら表示をするアプリを作れ 材料 テキストボックス×2、ボタン、ファイル選択ダイアログ。 手順 1. ボタンが押されたらファイル選択ダイアログを表示する。 2. 選ばれたファイルを一行テキストボックスに表示する。 3.
中身を複数行テキストボックスに表示する。
9.
DEMO ライブコーディングで作っていきます。 private void button1_Click(object
sender, EventArgs e) { openFileDialog1.ShowDialog(); } private void openFileDialog1_FileOk(object sender, CancelEventArgs e) { textBox1.Text = openFileDialog1.FileName; System.IO.StreamReader sr = new System.IO.StreamReader (openFileDialog1.FileName); textBox2.Text = sr.ReadToEnd(); }
10.
修正 とりあえず問題どおりのアプリは完成しました。 それでは、1つずつ見なおしていきましょう。
11.
アプリを効果的に 見なおす Effective check for
the application
12.
こだわり #1 ボタン 他のウィンドウが開くボタンは、表示に三点リー ダーを使う。幅は自動に任せる。 【
表示 】 ○ : 「...」←ドット三点 × : 「…」←三点リーダー 【 パラメータ 】 AutoSize = True; AutoSizeMode = GrowAndShrink;
13.
こだわり #2 一行テキストボックス 読み取り専用の場合、テキストボックスに限り ReadOnlyを使う。普通はEnabled。 【
パラメータ 】 ○ : ReadOnly = false; × : Enabled = false;
14.
こだわり #3 ファイル選択ダイアログ ファイル選択ダイアログは選択させるファイルの種 類が決まっていれば必ずそれを設定しておく。 【
パラメータ 】 Filter = "txtファイル|*.txt";
15.
こだわり #4 複数行テキストボックス 複数行テキストボックスはスクロールバーを両方に つける。Bothの場合自動切り返しに注意する。 【
パラメータ 】 ReadOnly = false; ScrollBars = Both; WordWrap = false;
16.
こだわり #5 文字コード C#でのファイル文字コードのデフォルトはUTF-8。 明示的にshift_jisに。Defaultを使うとさらに良し。 【
パラメータ 】 ○ :Text.Encoding.Default △:Text.Encoding.GetEncoding("shift_jis") × :Text.Encoding.UTF-8
17.
こだわり #6 ファイルロード テキスト読み込みは専用関数があるので、そちら を使った方が簡単。エラー処理までやってくれる。 【
パラメータ 】 ○ : System.IO.File.ReadAllText × : System.IO.File.StreamReader
18.
こだわり #7 フォーム フォームが可変だとレイアウト的におかしく見える ので、固定に。その際、最大化も忘れずにオフ。 【
パラメータ 】 FormBorderStyle = FixedSingle; MaxmizeBox = false;
19.
こだわり #8 レイアウト なるべく吸着して補助線が出る所に置く。デザイン センスに自信がないならルールを決めると良い。 【色】 ●
ピンク フォントの位置をあわせ ● ブルー コントロールの位置をあわせ ● グレー 他のコントロールとの再近
20.
レイアウトへのこだわりを教えてくれた人
21.
ボタン
三点リーダー、AutoSize = True; AutoSizeMode = GrowAndShrink; 一行テキストボックス ReadOnly = true; ファイル選択ダイアログ Filter = "txtファイル|*.txt"; 複数行テキストボックス ReadOnly = true; ScrollBars = Both; WordWrap = false; 文字コード Encoding.Default; ファイルロード関数 System.IO.File.ReadAllText; フォーム FormBorderStyle = FixedSingle; MaxmizeBox = false; レイアウト ピンクかブルーかグレーの補助線が出る所に置く まとめ
22.
完成 最初に作った時よりも、見た目も良く、エラーが出 にくいアプリになりました。
23.
アプリをもっと効果的に 見なおす More Effective check
for the application
24.
こだわり #9 テキストボックス2 ファイルを選択する方法はボタンだけでなく、多い 方が良い。先ず手書きに対応させる。 【
パラメータ 】 ReadOnly = false 【 メソッド 】 private void textBox_TextChanged(object sender, EventArgs e) { if (File.Exists(textBox.Text)) { //ロード処理 textBox2.Text = System.IO.File.ReadAllText(textBox1.Text); } }
25.
こだわり #10 ドラッグアンドドロップ 更にテキストボックスへのドラッグ&ドロップにも対 応させる。 【
パラメータ 】 AllDrop = true 【 メソッド 】 DragEnter DragDrop
26.
こだわり #10 ドラッグアンドドロップ 【ソース】 private
void textBox1_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Copy; } private void textBox1_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { string[] fileName = (string[])e.Data.GetData(DataFormats.FileDrop); if (System.IO.File.Exists(fileName[0]) == true) { textBox1.Text =fileName[0]; } } }
27.
こだわり #10 ドラッグアンドドロップ private
void textBox1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.All; else e.Effect = DragDropEffects.None; } private void textBox1_DragDrop(object sender, DragEventArgs e) { string[] fileName = (string[])e.Data.GetData(DataFormats.FileDrop); if (System.IO.File.Exists(fileName[0]) == true) { textBox1.Text = fileName[0]; } }
28.
こだわり #10 ドラッグアンドドロップ string
dropFileName = ""; private void textBox1_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.None; if (e.Data.GetDataPresent(DataFormats.FileDrop)) { var fileName = (string[])e.Data.GetData(DataFormats.FileDrop); if (System.IO.File.Exists(fileName[0]) == true) { dropFileName = fileName[0]; e.Effect = DragDropEffects.All; } } } private void textBox1_DragDrop(object sender, DragEventArgs e) { textBox1.Text = dropFileName; }
29.
こだわり #11 ファイル選択2 テキストファイルはtxtだけと限らない。すべてを選 べるように。エラー対策はどちらにしろ必要。 【
パラメータ 】 Filter = "txtファイル|*.txt|すべてのファイル|*.*"; 【 メソッド 】 private void openFileDialog1_FileOk(object sender, CancelEventArgs e) { textBox1.Text = openFileDialog1.FileName; }
30.
こだわり #12 ボタン2 ボタンを押した場合、テキストボックスにパスがあ るならば、そのパスでダイアログは開いて欲しい。 【
メソッド 】 private void button1_Click(object sender, EventArgs e) { if (System.IO.File.Exists(textBox1.Text)) { openFileDialog1.InitialDirectory = System.IO.Path.GetDirectoryName(textBox1.Text); openFileDialog1.FileName = System.IO.Path.GetFileName(textBox1.Text); } openFileDialog1.ShowDialog(); }
31.
こだわり #13 複数行テキストボックス2 表示に使う複数行テキストボックスは少しでもマシ なものを使う。但し、これも万全ではない。 【
コントロール 】 × : TextBox △ : RichTextBox
32.
こだわり #14 レイアウト2 サイズと位置を可変にしたいコントロールは、 Anchorと組み合わせて使う。 【コントロール】 Anchor: コントロールが固定されるコンテナーの端を定義し ます。コントロールがいずれかの端に固定されると その端と、その端に最も近いコントロールの端の間 は、一定の距離を保ちます
33.
こだわり #15 フォーム2 テキストボックスが可変になったらフォームも可変 に。見た目も変更可能に。タイトルもつける。 【
パラメータ 】 FormBorderStyle = Sizable; MaxmizeBox = true; ○ : SizeGripStyle=Show; × : SizeGripStyle=Auto; Name = "C#アプリの作り方入門アプリ";
34.
こだわり #16 アイコン 画竜点睛を欠いては台無しです。アイコンを作りま しょう。icoファイル作成はIcoFXがオススメです。 【
パラメータ 】 リソースのアイコン フォームのicon
35.
一行テキストボックス
手書き対応。ドラッグアンドドロップ対応。ロード処理の集約。 ファイル選択ダイアログ すべてのファイルを選べるように。 Filter = "txtファイル|*.txt|すべてのファイル|*.*|"; ボタン ボタンを押した時にファイル選択ダイアログにテキストの値が入るように。 複数行テキストボックス Textbox→RichTextBox レイアウト Anchorでサイズ可変 フォーム サイズ可変、タイトル アイコン フォームとリソースに登録 まとめ
36.
まとめ これで完成です。 最初の見直しはエラー処理を重要視しました。 今回の見直しは使い勝手を重要視しました。 これは森理が作るべきと思っている順番です。
37.
総評 今日は合計で16個のこだわりを説明しました。 神は細部に宿ります。 こだわる理由はそれが楽しいからです。 みなさんも自分のこだわりを見つけて下さい。
38.
謝辞 ご清聴有難うございます。
39.
Kansai Visual Studio
Hackathon 森理が一番出たい勉強会が関西にありません。 それはVisual Studioのハッカソンです。 ないので、自分で企画しようと思っています。 興味がおありの方はこの後話しかけてください!
Download now