- ベストアンサー
VisualStudio2010(C#)の学習方法
- VisualStudio2010(C#)の学習方法について知りたいです。
- GUIアプリケーションの開発にはC#そのものの知識だけではなくコンポーネントに関する知識も要求されます。
- MSDNの学習資料は分かりにくく、英語力が不足しているため、手探りで学習しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
一応,「わかっているつもり」ではある身から。 > 特に必要に迫られたことがなかったのでGUIアプリケーションではなくCUIアプリケーションを中心に開発してきました。 > ですがそろそろGUIアプリケーションにも手を出してみたいとの思いもありVisualStudioを導入したのですが、 > 率直に言うと躓いている状態であり、力をお貸しいただけないだろうかと質問させていただいた次第です。 大抵のCUIプログラムはプログラムが能動的に動きますが, GUIプログラムは受け身になるので,そこでつまずいている,ということはないですか。 CUI中心でやってきたプログラマがGUIのプログラムを行う上で昔からある話なのですが……。 なお,この考え方の違いは.NETに限らず,他のプラットフォームでも発生する話です。 > 現在アプリケーション開発にはC#を用いているのですが、 > GUIアプリケーションの開発にはC#そのものの知識だけではなくコンポーネントに関する知識なども要求され、これが躓きの主原因となっています。 > 例えばラベルであったりボタンであったりは、使いこなすことができれば大変便利なものではありますが、 .NET Frameworkが提供するクラスライブラリは多機能です。 ただ,それを全部使うかというと,半分以上知らないのが普通です。 また,概念として難しい場合の代替手段がある場合も多いです。 コンポーネントは,「機能」を単位としてまとめたものです。 コントロールもコンポーネントなわけですが, ・Labelは文字を表示するための物 ・Buttonは押すとClickイベントが発生する物 ・TextBoxはユーザーが文字を入力するための物 程度にとらえて,それ以上を最初はやろうとしない方がよいと思います。 また,GUIを作る時にプログラムでお絵描き(線を引いたり円を描いたり)したくなるとは思いますが, 最初のうちはUIを「既存のコントロールのみでできることで構成する」ことにした方が,挫折することは少ないと思います。 # UI設計というのはそれ自体が難しい物です。 > 最初は市販の「VisualC#によるアプリケーション開発」のような本を読めばいいかと楽観していましたが、 > 探し方が悪いのか、これらの本はほとんどがC#の平易な説明に終始しており、自分の欲しい情報は数点あればラッキーといった具合です。 こればっかりは,大手の書店で立ち読みするのが一番です。 Visual Studio自体の操作やC#言語自体の機能といった面を除くと,.NET出た当初(2002年ころ)でも古本で安く手に入るのであれば買ってみてもよいと思います。 > WPFを学べば解決するかとも思いましたが、残念ながら和書は点数が少ないようで程度のあったものを探すことができませんでした。 WPFはWinForms以上に知識が要ります。 簡単に使うだけであればWinForms的な使い方でもなんとかなりますが, ちゃんとやると,ModelとViewの独立,という入門書ではまず載っていないことをやって, それを結びつけるための技術を使う,という手順を踏む必要があります。 # もちろん,それをするだけの理由もちゃんとあるのですが。 > そのたびそのたびに検索をすることで、なんとかそれらしい物を仕上げてはいますが、 > いかんせん体系的に学習していないために知識が散漫としており、特殊例には対処できず、なんともいえない気持ち悪さが残ります。 例えば,How-toを検索した場合,そこで使っているクラスやメソッドやプロパティなどをMSDNでも検索してみてください。 簡単な例だと,ボタンを押した後再入を防ぐのに private void button1_Click (object sender, EventArgs e) { button1.Enabled = false; backgroundWorker1.RunWorkAsync(); } private void backgroundWorker1_DoWork (object sender, DoWorkEventArgs e) { // 長時間処理 } private void backgroundWorker1_RunWorkCompleted (object sender, RunWorkerCompletedEventArgs e) { button1.Enabled = true; } などと書くのですが,最初のbutton1.Enabled = false;について, MSDN: Button プロパティ (System.Windows.Forms) http://msdn.microsoft.com/ja-jp/library/system.windows.forms.button_properties.aspx からEnabledを探してリンクを辿ると, MSDN: Control.Enabled プロパティ (System.Windows.Forms) http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.enabled.aspx ButtonクラスではなくControlクラスのEnabledプロパティへ行き着きます。 つまり,Controlを継承したクラスはすべてEnabledプロパティを持っていて, Enabled = false; によって,どのコントロールでもユーザーからの入力を禁止できる,ということがわかります。 で,本当に特殊例であるものは,完全に知識量の問題になってきたりします。 .NET FrameworkではなくWin32 APIのレベルの知識を使ったり,COMの知識を使ったりと, 別の世界の知識を持ってきて対応することになりますので……。 > それらの学習資料であるMSDNが読んでいて分かりにくいというか……日本語なのにさっぱり日本語に見えないことが多々あります。 > やはり最終的にはMSDNに挑戦しなければいけないのだなあと思ってはおりますが、そう簡単にはいかないもので、 > 前段階としてある程度の内容をそれなりに突っ込んで学習することができればなあ……と思うかぎりです。 MSDN自体,bingなりgoogleなりからのつまみ食いでいいと思います。 大量に資料はあるものの,やはり初心者向けとは言い難いのも確かなので。
その他の回答 (1)
私もCOBOL専門で、最近というかこの五年くらいVB・C#をやっています。 そもそも最近のプログラム言語は非日常的なオブジェクト指向を元にしていますので、それを完璧に理解していないと、まさにMSDNすら読めないという状態になります。毎年新しいものが出てきて、あっというまに置いて行かれ、いち一般人に完全マスターすることは無理でしょう。 さらにそれが基礎の基礎ですから、特にJAVA・C#あたりは多機能すぎて、そこから派生した様々なものであふれ、まともにテストも行わず、バージョンアップ・アップデート・更新プログラム・パッチ当て、言葉は色々あります。C#でのGUIを含めた開発ははっきり言って無理です。 私もいままで携わってきた仕事で、猿でもできるCOBOLとVBでうまくできているところが多いのですが、CやC#は大概失敗しています。ま、ソースコードが半分になった、すごいでしょうと当事者たちは言いますが、そこまでの技術者を育てるのに、なんぼ金をつぎ込んでるだろうね。 個人的意見として、GUIの扱いはやはり、隠蔽と継承、難しいことは本体からいかに隔離するかですね。私は日付専用のテキストボックス、用途ごとのデータグリッドビュー、簡単なものは自作しますが、難しいものは専門家に任せています。20種類くらい揃えたところで、今のところ困ることもないですし、むしろ数をこなせば自分でも作れるようになってきました。 ようは作ってみることです。
お礼
なんでお礼じゃなくて補則してるんでしょう……。 すみません。風邪をひいているということで見逃してください。
補足
折角素早い回答しただきましたのに、お礼遅くなって申し訳ありません。 > そもそも最近のプログラム言語は非日常的なオブジェクト指向を元にしていますので、 > それを完璧に理解していないと、まさにMSDNすら読めないという状態になります。 ここらは理解できていると信じたいのですが……、 なんというかMSDNの日本語はそれ以前の問題のような気はしませんか? 自分程度の英語力で「原文を読んだ方が分かりやすい」というのは異常だと思うのです。 > 私もいままで携わってきた仕事で、猿でもできるCOBOLとVBでうまくできているところが多いのですが、 > CやC#は大概失敗しています。ま、ソースコードが半分になった、 > すごいでしょうと当事者たちは言いますが、そこまでの技術者を育てるのに、 > なんぼ金をつぎ込んでるだろうね。 特にVBを利用したことはありませんが、新しい言語を習得するコストなどはあまり気にしませんので、 業務であれば自分もそこらへんのルートを選択するんじゃないかなあと思います。 ただことが趣味なので「C#で書きたい」というのが大前提となってしまうのです……。 > 私は日付専用のテキストボックス、用途ごとのデータグリッドビュー、 > 簡単なものは自作しますが、難しいものは専門家に任せています。 これは「コンポーネントを自作する」という解釈で構いませんか? そこらへんも弄くってみてよく理解できなかった箇所なんですが、 もし分かりやすい資料などご存じでしたら教えていただけるとありがたいです。 > ようは作ってみることです。 頑張ります……。
お礼
お礼遅くなってしまい申し訳ありません。 わざわざ例示までいただきまして、詳細な説明ありがとうございます。 > GUIプログラムは受け身になるので,そこでつまずいている,ということはないですか。 > CUI中心でやってきたプログラマがGUIのプログラムを行う上で昔からある話なのですが……。 これは質問の仕方が悪かったですね。このあたりに関しては最低限の理解はあります。 経験豊富とはとても言えませんが、他言語でそれなりにステップは踏んできているはずです。 > ただ,それを全部使うかというと,半分以上知らないのが普通です。 > また,概念として難しい場合の代替手段がある場合も多いです。 全部を理解しようとは思っていませんが、学ぶべきか判断がつかないことも多いです。 説明を読んで「これは明らかに自分には不要だ」と理解できる程度に高度なものなら無視もできますが。 > それ以上を最初はやろうとしない方がよいと思います。 特にコンポーネントの機能以上のものを求めようとはしていないと思います。 知識不足なので適切な例示ではないかもしれませんが、たとえば エクスプローラもどきを作ろうとしたので、ツリーのコンポーネントが適切かと思ったが、 それをどのように活用すれば適切に機能してくれるのかがどうも理解できない。 ラベルなどを活用することで「ツリーもどき」を作る手段が別にあるかもしれないが、 明らかに適切と思われるコンポーネントがあるのに、それを避けて通る気になれない。 みたいな具合ですかね。実例ではありませんが、こんな感じの躓きが多いような感じです。 > 最初のうちはUIを「既存のコントロールのみでできることで構成する」ことにした方が, そういうのはゲームでも作りたくなるまでは無縁かもしれませんね。 知識として、何をどうすれば文字が書けたりBMPを張れたり……とかは存じていますが。 > こればっかりは,大手の書店で立ち読みするのが一番です。 > Visual Studio自体の操作やC#言語自体の機能といった面を除くと, > .NET出た当初(2002年ころ)でも古本で安く手に入るのであれば買ってみてもよいと思います。 田舎なので、大手の書店に行くコストで評判のいい本が何冊も手に入りますね……。 上京する機会があれば積極的に利用したりもしていますが、欲しい情報はそれだけではないですからね。 > WPFはWinForms以上に知識が要ります。 了解しました。単純に代替手段と考えるわけにはいかなそうですね。 > 例えば,How-toを検索した場合, > そこで使っているクラスやメソッドやプロパティなどをMSDNでも検索してみてください。 出来る限りそのようにはしているのですが、飛躍しすぎることも多いですしね。 簡単にでもいいので、まずは鳥瞰的に学習できれば深みにもはまりにくいと思うのですが、 その鳥瞰的に学習するために必要なものが手に入らないのでにっちもさっちも……。 > で,本当に特殊例であるものは,完全に知識量の問題になってきたりします。 このあたりは素直に諦めることにしています。 > MSDN自体,bingなりgoogleなりからのつまみ食いでいいと思います。 > 大量に資料はあるものの,やはり初心者向けとは言い難いのも確かなので。 よそではどうにも「MSDN読めば書いてない?」で質問が片付けられることが多くてきついです……。 読んでもどうせ分からない!と投げ出してしまうのは学習態度として避けたいとは思いますが、 本気で理解できないことも多く、自分の未熟さを思い知らされます……。