Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

C#アプリの作り方入門

6,309 views

Published on

「わんくま同盟 大阪勉強会 #47」で話した内容です。

Published in: Technology
  • ACCESS that WEBSITE Over for All Ebooks (Unlimited) ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... DOWNLOAD FULL EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M }
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

C#アプリの作り方入門

  1. 1. C#アプリの作り方入門~「きほん」の「ほ」~森理 麟(moririring)
  2. 2. 自己紹介   森理 麟(moriri-ring)● 職業 : ゲームプログラマ● Twitter : @moririring● ブログ : 森理 麟(moririring)のプログラマブログ● 自作アプリ : クッキツイート,HashifyWin
  3. 3. スタートアプリを作り始めたプログラマが、入門書の次に読む本がないと思ったから。
  4. 4. ゴール自分のこだわりを公開。聞いた人のこだわりの発見。皆のこだわりの共有。懇親会・ブログのコメント・Twitter。何でも構いませんのでこだわりを教えてください!
  5. 5. アジェンタ● とりあえずアプリを作ってみる● アプリを効果的に見なおす● アプリをもっと効果的に見なおす
  6. 6. とりあえずアプリを作ってみるI make the application.
  7. 7. それでは細かいことは後にして、早速、簡単なアプリを作ってみます。
  8. 8. レシピ目標ファイルを選択して中身がテキストなら表示をするアプリを作れ材料テキストボックス×2、ボタン、ファイル選択ダイアログ。手順1. ボタンが押されたらファイル選択ダイアログを表示する。2. 選ばれたファイルを一行テキストボックスに表示する。3. 中身を複数行テキストボックスに表示する。
  9. 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. 10. 修正とりあえず問題どおりのアプリは完成しました。それでは、1つずつ見なおしていきましょう。
  11. 11. アプリを効果的に見なおすEffective check for the application
  12. 12. こだわり #1 ボタン他のウィンドウが開くボタンは、表示に三点リーダーを使う。幅は自動に任せる。【 表示 】○ : 「...」←ドット三点× : 「…」←三点リーダー【 パラメータ 】AutoSize = True;AutoSizeMode = GrowAndShrink;
  13. 13. こだわり #2 一行テキストボックス読み取り専用の場合、テキストボックスに限りReadOnlyを使う。普通はEnabled。【 パラメータ 】○ : ReadOnly = false;× : Enabled = false;
  14. 14. こだわり #3 ファイル選択ダイアログファイル選択ダイアログは選択させるファイルの種類が決まっていれば必ずそれを設定しておく。【 パラメータ 】Filter = "txtファイル|*.txt";
  15. 15. こだわり #4 複数行テキストボックス複数行テキストボックスはスクロールバーを両方につける。Bothの場合自動切り返しに注意する。【 パラメータ 】ReadOnly = false;ScrollBars = Both;WordWrap = false;
  16. 16. こだわり #5 文字コードC#でのファイル文字コードのデフォルトはUTF-8。明示的にshift_jisに。Defaultを使うとさらに良し。【 パラメータ 】○ :Text.Encoding.Default△:Text.Encoding.GetEncoding("shift_jis")× :Text.Encoding.UTF-8
  17. 17. こだわり #6 ファイルロードテキスト読み込みは専用関数があるので、そちらを使った方が簡単。エラー処理までやってくれる。【 パラメータ 】○ : System.IO.File.ReadAllText× : System.IO.File.StreamReader
  18. 18. こだわり #7 フォームフォームが可変だとレイアウト的におかしく見えるので、固定に。その際、最大化も忘れずにオフ。【 パラメータ 】FormBorderStyle = FixedSingle;MaxmizeBox = false;
  19. 19. こだわり #8 レイアウトなるべく吸着して補助線が出る所に置く。デザインセンスに自信がないならルールを決めると良い。【色】● ピンク フォントの位置をあわせ● ブルー コントロールの位置をあわせ● グレー 他のコントロールとの再近
  20. 20. レイアウトへのこだわりを教えてくれた人
  21. 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. 22. 完成最初に作った時よりも、見た目も良く、エラーが出にくいアプリになりました。
  23. 23. アプリをもっと効果的に見なおすMore Effective check for the application
  24. 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. 25. こだわり #10 ドラッグアンドドロップ更にテキストボックスへのドラッグ&ドロップにも対応させる。【 パラメータ 】AllDrop = true【 メソッド 】DragEnterDragDrop
  26. 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. 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. 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. 29. こだわり #11 ファイル選択2テキストファイルはtxtだけと限らない。すべてを選べるように。エラー対策はどちらにしろ必要。【 パラメータ 】Filter = "txtファイル|*.txt|すべてのファイル|*.*";【 メソッド 】private void openFileDialog1_FileOk(object sender, CancelEventArgs e){ textBox1.Text = openFileDialog1.FileName;}
  30. 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. 31. こだわり #13 複数行テキストボックス2表示に使う複数行テキストボックスは少しでもマシなものを使う。但し、これも万全ではない。【 コントロール 】× : TextBox△ : RichTextBox
  32. 32. こだわり #14 レイアウト2サイズと位置を可変にしたいコントロールは、Anchorと組み合わせて使う。【コントロール】Anchor:コントロールが固定されるコンテナーの端を定義します。コントロールがいずれかの端に固定されるとその端と、その端に最も近いコントロールの端の間は、一定の距離を保ちます
  33. 33. こだわり #15 フォーム2テキストボックスが可変になったらフォームも可変に。見た目も変更可能に。タイトルもつける。【 パラメータ 】FormBorderStyle = Sizable;MaxmizeBox = true;○ : SizeGripStyle=Show;× : SizeGripStyle=Auto;Name = "C#アプリの作り方入門アプリ";
  34. 34. こだわり #16 アイコン画竜点睛を欠いては台無しです。アイコンを作りましょう。icoファイル作成はIcoFXがオススメです。【 パラメータ 】リソースのアイコンフォームのicon
  35. 35. 一行テキストボックス 手書き対応。ドラッグアンドドロップ対応。ロード処理の集約。ファイル選択ダイアログ すべてのファイルを選べるように。 Filter = "txtファイル|*.txt|すべてのファイル|*.*|";ボタン ボタンを押した時にファイル選択ダイアログにテキストの値が入るように。複数行テキストボックス Textbox→RichTextBoxレイアウト Anchorでサイズ可変フォーム サイズ可変、タイトルアイコン フォームとリソースに登録まとめ
  36. 36. まとめこれで完成です。最初の見直しはエラー処理を重要視しました。今回の見直しは使い勝手を重要視しました。これは森理が作るべきと思っている順番です。
  37. 37. 総評今日は合計で16個のこだわりを説明しました。神は細部に宿ります。こだわる理由はそれが楽しいからです。みなさんも自分のこだわりを見つけて下さい。
  38. 38. 謝辞ご清聴有難うございます。
  39. 39. Kansai Visual Studio Hackathon森理が一番出たい勉強会が関西にありません。それはVisual Studioのハッカソンです。ないので、自分で企画しようと思っています。興味がおありの方はこの後話しかけてください!

×