トップページ⇒tech
1001コメント310KB

ふらっとC#,C♯,C#(初心者用) Part67

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/12/16(木) 18:23:33
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっとC#,C♯,C#(初心者用) Part66
http://hibari.2ch.net/test/read.cgi/tech/1290854247/

■関連スレ
C#, C♯, C#相談室 Part63
http://hibari.2ch.net/test/read.cgi/tech/1289733048/
VB.NET質問スレ(Part35)
http://hibari.2ch.net/test/read.cgi/tech/1284423653/
くだすれC++/CLI(初心者用)part2
http://pc12.2ch.net/test/read.cgi/tech/1268613679/

■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://ideone.com/
コードを貼り付けてRun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます。

直接貼る場合は下記サイトなどを利用してhtmlエンコードした方が
インデントも残って見やすいです
http://kawama.jp/php/encode_html.php
0053デフォルトの名無しさん2010/12/18(土) 21:14:17
>>49
お前アホか。GUIコンポーネントがサーバで使えるわけねーだろ。
WebとHTMLを基礎から勉強してこい。
0054デフォルトの名無しさん2010/12/18(土) 21:22:33
>>50
silverlightググってみた、やりたかった事全部行けそうです!
マジで感謝!MS最高だわwww

>>51
PictureBox使わないと背景画像に透明の画像かぶせて、
その上に点とか線描画できないと思ってたんだ

>>52
そりゃ.NETって言うぐらいだから、Webアプリ用のフレームワークでしょ?
俺バカだけどそんぐらい理解してるっつーの!
0055デフォルトの名無しさん2010/12/18(土) 21:31:52
今度はXAMLわからないから画像処理できないとか言い出しそうだな
SilverlightはWinFormsとは比べ物にならない表現力があるけど
ASP.NET以上にWinFormsの知識が役に立たない
0056デフォルトの名無しさん2010/12/18(土) 23:28:46
これからSilverlightの時代だよ
0057デフォルトの名無しさん2010/12/19(日) 00:06:09
いや、どう考えてもHTML5だろ
Flashが辛うじて残るかどうかだ
0058デフォルトの名無しさん2010/12/19(日) 00:10:17
>>57
HTML5は軸が違うから比べても意味ない。
Windows 系の GUI が Silverlight になってく。
ただ、置き換わるのは数年後かねぇ。
「Silverlight の時代」って言うにはちょっと早い。
0059デフォルトの名無しさん2010/12/19(日) 00:12:24
あのー・・・WPFは・・・?
0060デフォルトの名無しさん2010/12/19(日) 00:12:36
そういうのとは勝負やめて、
簡単にビジネスアプリケーションを配布するための仕組みになった
ClickOnceに近い位置づけ
0061デフォルトの名無しさん2010/12/19(日) 00:19:46
Silverlight5はpinvokeがサポートされるから
極端な話だけどやろうと思えはWinFormsやWPFもSilverlightの上で動かせるね
単にクライアント専用の簡易版.NETを目指してるんだよ
0062デフォルトの名無しさん2010/12/19(日) 00:20:54
MSはもうWPFよりSilverlightのほうに力入れてるじゃん
0063デフォルトの名無しさん2010/12/19(日) 01:01:05
まあでも、WPFが消えるのは、Silverlightの機能がWPF相当になった時よ。
それがたぶん、数年後。
0064sage2010/12/19(日) 01:08:11
>>62
開発環境のWebDeveloperはベータ以前の品質じゃね? ドキュメントも英語しかないし。
0065デフォルトの名無しさん2010/12/19(日) 01:14:34
毎度の事ながらMS新技術出しすぎわろすw
0066デフォルトの名無しさん2010/12/19(日) 01:18:13
カバーしてる範囲が広いだけ。
0067デフォルトの名無しさん2010/12/19(日) 01:33:50
>>64
WP7かなんかと勘違いしてるだろ
SilverlightはVS2008や2010で正式にサポートされてるし
Express版のWebDeveloperもVC#と同時にリリースされてる
0068デフォルトの名無しさん2010/12/19(日) 01:39:40
>>59
49ですが、時代はWPFだと思うよ!!

試しにWPFでプロジェクト作成したら
普通にIEから、Windowsフォーム呼び出せたwww
Win32も使えるみたいだし、既存のWindowsアプリをWeb化するならWPF最強じゃん!!
おかげで1人月の案件が3日で終わりそうwww
0069デフォルトの名無しさん2010/12/19(日) 01:44:21
>>68
それ、対応してるブラウザー少ないよ。
それでいいって言われる案件なら、普通にデスクトップ版の WPF でいいと思うんだけど。
ClickOnce 配布いいよ。
0070デフォルトの名無しさん2010/12/19(日) 02:34:46
wpfなくなるつってもふつうに流用できそうだしな。
安心してwpf勉強するわ。
0071デフォルトの名無しさん2010/12/19(日) 10:27:01
萌えキャラのあるSilverlight一択だし。
0072デフォルトの名無しさん2010/12/19(日) 12:13:39
何をもってweb化と言ってるんだろうな
XBAPなんてウインドウ枠がIEになっただけ
0073デフォルトの名無しさん2010/12/19(日) 12:21:36
web化っていうと仕事は基本的にwebサービスにやらせるもんだと思うが
silverlightにしろwpfにしろ、クライアントだけで完結するものをwebアプリと呼ぶのかどうか
0074デフォルトの名無しさん2010/12/19(日) 12:30:18
wpfはしらんけどsilverlightはビジネスロジックは
webサービスじゃなイカ
0075デフォルトの名無しさん2010/12/19(日) 12:31:18
>>73
いや、WCF サービスとかでサーバーサイド作っておけば、
例えクライアント側がデスクトップアプリであっても Web 化と呼べるとは思うが。
0076デフォルトの名無しさん2010/12/19(日) 13:29:56
顧客にとって大事なのはブラウザの画面の中に表示されること。
処理がサーバなのかクライアントなのかなんて関係ない。
0077デフォルトの名無しさん2010/12/19(日) 13:40:13
>>75
俺らから見たらそうでも一般の利用者からしたらWeb化=ブラウザ上で使えるって思うかと
0078デフォルトの名無しさん2010/12/19(日) 13:41:40
断定すんなw
0079デフォルトの名無しさん2010/12/19(日) 13:54:15
>>76
あほな顧客が多くて困るって奴ですね。
いや、困らないのか、むしろその方がぼったくれて。
0080デフォルトの名無しさん2010/12/19(日) 13:58:21
Webが何かぐぐった方がよいと思うよwww
0081デフォルトの名無しさん2010/12/19(日) 15:15:45
Silverlightはともかく、XBAPなんて普通のデスクトップアプリとしてWPFを動かすことも
可能な環境がないと動かせないからなw
何の意味もありません
0082デフォルトの名無しさん2010/12/19(日) 15:36:31
ただねぇ、真の意味でクロスプラットフォームなのは、HTML5+Ajaxアプリですらなく、
サービス化してデータだけプログラム的に取れるようにしとくことだと思う。

正直、HTML5が理念通りに完全に互換性保てるとは思えないし、
UI 技術はすぐに入れ替わるし、プラットフォームごとに変わる。

で、そのサービスを受け取る側のクライアントアプリは、
もうクロスとか気にせず、WPF とかで作ればいいと思う。
凝ったUI作るなら、多重開発した方がマシ。
0083デフォルトの名無しさん2010/12/19(日) 15:49:37
まあWebを好む人の大半はソフトをインストールするのが面倒くさいからだから
>>76-77みたいなのはそんなにおかしくないな
0084デフォルトの名無しさん2010/12/19(日) 15:52:06
コンシューマー向けだとそりゃ、ブラウザー内実行必須だと思うけども、
業務系だとあれよ、Webですキリッって言いつつ、
帳票印刷の部分はClickOnceでデスクトップアプリ起動とかが普通よ。
0085デフォルトの名無しさん2010/12/19(日) 16:00:44
>>84
うるせえ
0086デフォルトの名無しさん2010/12/19(日) 16:11:02
>>84
まさにそういうニーズに応えるのがSilverlightでしょ
妙なイメージが付いちゃってるから名前変えればいいのに
0087デフォルトの名無しさん2010/12/19(日) 16:16:16
普通だけどそれでいいかどうかは客に説明して確認してからじゃないと

1人月が3日でできたとか言ってたらダメってことだ。
0088デフォルトの名無しさん2010/12/19(日) 17:21:06
>>87
は?残りの時間、自分の好きな事できるんだぜ
全然ダメじゃ無いじゃんwww
0089デフォルトの名無しさん2010/12/19(日) 17:33:40
まあ、客に説明してからにしろってのは正論として、
「1人月が3日になります」なら普通納得してもらえるけどもね。
0090デフォルトの名無しさん2010/12/19(日) 17:45:37
でも説明して三日でできるっていったら普通客は
じゃあ安くしてって言うでしょ。
それでも1人月払うよっていうならすごいいい客だな。
しっかり捕まえておかないと。
0091デフォルトの名無しさん2010/12/19(日) 18:27:03
せんせー、ここ初心者スレ
0092デフォルトの名無しさん2010/12/19(日) 18:44:33
10年プログラミングしているけど
未だにLinq、ADO.Net,SQLがさっぱりわからないし
必要と思ったこともない
ラムダ式は一応やるけど
0093デフォルトの名無しさん2010/12/19(日) 18:50:23
使いどころを知ってれば問題ないのでは?
存在すら知らないとそれは選択肢を減らすことになるからどうかと思うけど。
0094デフォルトの名無しさん2010/12/19(日) 18:51:06
>>92
DBを使う必要がなければとことん必要無い
0095デフォルトの名無しさん2010/12/19(日) 18:51:40
使っている人はどんなソフトを作っているのですか?
0096デフォルトの名無しさん2010/12/19(日) 18:53:07
データベースってどんなアプリにもありませんか?
リストを保存したりするのはよくあることだと思うんだけど
そういうときに使うと便利なの?
0097デフォルトの名無しさん2010/12/19(日) 19:15:31
だけどfirefoxですらsqliteを使っているという
0098デフォルトの名無しさん2010/12/19(日) 19:19:36
Janeもsqlite使ってなかったっけ?
そこまでのデータ扱うか?ってあるけどなw
肥大化してもっさりとか言われながらw
0099デフォルトの名無しさん2010/12/19(日) 19:21:39
LINQをそこに混ぜるなよ
0100デフォルトの名無しさん2010/12/19(日) 19:37:41
10年プログラムしてSQL触らないとかあるんだな
0101デフォルトの名無しさん2010/12/19(日) 19:40:33
元々DB使いだし、素でSQL書いたほうがいいじゃん、と最初LINQは毛嫌いしてたが
DBと関係なくLINQ便利だよな
0102デフォルトの名無しさん2010/12/19(日) 19:44:12
データベースというものがそもそもない
0103デフォルトの名無しさん2010/12/19(日) 20:17:06
え?
0104デフォルトの名無しさん2010/12/19(日) 20:26:39
ちょっとしたListから絞込みとかちょー便利
0105デフォルトの名無しさん2010/12/19(日) 20:46:37
俺は30年以上プログラム組んでいるし、
プログラミングの専門書も書いている
しかし、SQLは知らん
0106デフォルトの名無しさん2010/12/19(日) 20:52:59
最近でこそHTML5.01でSQLiteが標準になったりしてるけど
ちょっとしたことなら一々DBなんて使わない、めんどくさい
SQL触らないヤツは触らない
0107デフォルトの名無しさん2010/12/19(日) 20:55:44
汎用リスト処理を"統一された方法"で簡潔に記述するのがLINQの役割。
操作対象がDBのテーブルだろうが、コレクションだろうが関係ない。
0108デフォルトの名無しさん2010/12/19(日) 21:00:27
SQLiteならiniファイル作る並に簡単じゃね
0109デフォルトの名無しさん2010/12/19(日) 21:00:41
HTML5のSQLは消えたよ
0110デフォルトの名無しさん2010/12/19(日) 21:05:27
>>108
めっちゃ簡単。サーバーいらんし。

>>109
そうなの?
0111デフォルトの名無しさん2010/12/19(日) 21:11:04
データベースを管理するということ自体しない
0112デフォルトの名無しさん2010/12/19(日) 21:43:09
DBを使えないことがステータス
0113デフォルトの名無しさん2010/12/19(日) 21:51:08
会社のシステム開発とかWEB開発とか
個人でDBが必要なことなんてないだろ
0114デフォルトの名無しさん2010/12/19(日) 22:24:05
インストールが必要な大がかりなやつが個人で必要になることは少ないけど
組み込みの軽量データベースは使うだろ。
0115デフォルトの名無しさん2010/12/19(日) 22:37:20
(DB使わないでトラブルが起きたときデータの解析とかどうやるんだろう・・・自前でコードかくのかな・・・詳細設計もレビューもしてない上に実績のないコードいきなり使うとか怖いよな・・・)
0116デフォルトの名無しさん2010/12/19(日) 23:26:13
WinFormについて質問です。
InitializeComponetで各コントロールのサイズを設定した後
this.ResumeLayout(false);this.PerformLayout();すると解像度に合わせてサイズが
変更されます。その時、ビルドした環境の解像度がどこかに記憶されているように
見えるのですが、一体どういう仕組みになっているんでしょうか?
0117デフォルトの名無しさん2010/12/19(日) 23:30:12
>>116
なんでそう思ったの
0118デフォルトの名無しさん2010/12/19(日) 23:31:30
this.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font;

これかえ?
01191162010/12/19(日) 23:45:53
自己解決しました。FormのAutoScaleDimensionsでした。デザイン修正時に更新されるようです。
>>117
 140dpiでビルドした時、140dpi以外で実行するとスケーリングされて、
 96dpiでビルドした時、140dpi以外で実行するとスケーリングされるからです。
01201162010/12/19(日) 23:46:52
すみません書き間違えました。
140dpiでビルドした時、140dpi以外で実行するとスケーリングされて、
96dpiでビルドした時、96dpi以外で実行するとスケーリングされるからです。
01211162010/12/20(月) 01:47:57
すみません書き間違えました。
140dpiでビルドした時、140dpi以外で実行するとスケーリングされて、
96dpiでビルドした時、96dpi以外で実行するとスケーリングされるからです。
0122デフォルトの名無しさん2010/12/20(月) 09:35:59
デバッグ時に「InvalidOperationExceptionはハンドルされませんでした。」って警告が出ます。
EXEの実行時にエラーはは出ません。
いろいろ調べたのですが、「BackgroundWorker を使用してスレッド セーフな呼び出しを行うには」
というのを試したのですが、うまくいきませんでした。
いまいち警告の内容もわからないのですが、MSDNの表現が解りにくくて・・・
どこか解り易い解説かサンプル知りませんか?
警告の出るコントロールの処理をBackgroundWorkerのイベントハンドラで実行するようにするだけじゃ駄目なんですかね?
0123デフォルトの名無しさん2010/12/20(月) 09:37:39
コンボボックスを継承して、コンストラクタでアイテムを追加したところ、実行するとアイテムが重複して追加されました。
デザイン時と実行時にコンストラクタが動いているためだと思いますが、これを回避するにはどうしたら良いでしょうか?
現在は初期化用メソッドを用意して、外部から呼び出してもらうことで回避しています。
0124デフォルトの名無しさん2010/12/20(月) 10:00:39
Component.DesignModeでデザイン時か判断できる
フォーム.Designer.csに以前追加した際のデータが残っているのであわせて削除する
01251232010/12/20(月) 10:22:11
>>124
ありがとうございます。
ただDesignModeは、コンストラクタでは常にfalseを返すようです。
とりあえず、コンストラクタでアイテムをクリアして追加するようにして対処します。ありがとうございました。
0126デフォルトの名無しさん2010/12/20(月) 10:30:52
>>125
http://stackoverflow.com/questions/282014/net-winforms-design-time-rules
01271232010/12/20(月) 10:51:41
>>126
以下のようにして対処できました。ありがとうございます!

if (System.Diagnostics.Process.GetCurrentProcess().ProcessName.Equals("VCSExpress")) {
//デバッグ時
} else {
//実行時
}
0128デフォルトの名無しさん2010/12/20(月) 12:57:18
>>122
まずは例外がどこから発生してるのか確かめる。
BackgroundWorkerのDoWorkのイベントハンドラは別のスレッドで実行されるからコントロールを触ってはいけない。
コントロールを触るにはControl.Invokeを使ってもいいけど、BackgroundWorkerならReportProgressメソッドを呼んで
ProgressChangedイベントでコントロールを触る方がいい。
ProgressChangedとRunWorkerCompletedイベントはUIスレッドで実行されるのでコントロールを直接触っていい。
0129デフォルトの名無しさん2010/12/20(月) 23:15:43
配列Aの各要素を2乗した新しい配列Bを作成」って1行で書けるのか?
0130デフォルトの名無しさん2010/12/20(月) 23:16:40
B = A.Select(a => a * a).ToArray();
0131デフォルトの名無しさん2010/12/20(月) 23:18:59
B = Array.ConvertAll(A, a => a * a);
0132デフォルトの名無しさん2010/12/20(月) 23:23:35
やるじゃん
0133デフォルトの名無しさん2010/12/20(月) 23:24:02
これがLinqってやつ?
はじめて便利そうに思えた
0134デフォルトの名無しさん2010/12/20(月) 23:29:09
何が何やらサッパリだけど凄いな
0135デフォルトの名無しさん2010/12/20(月) 23:36:59
こういう身近に使えそうな例が沢山ほしいよな
とあるサイトは学生名簿とか作るわけねーよってつっこみたくなる
0136デフォルトの名無しさん2010/12/20(月) 23:39:16
あれ理解するには
SQL構文、匿名メソッド、デリゲート、ラムダ式を知らないと理解はできないよな
でも、最初は丸暗記でいいんじゃね?
0137デフォルトの名無しさん2010/12/21(火) 00:08:21
各要素を2乗した新しい配列の方が作らんわw
0138デフォルトの名無しさん2010/12/21(火) 00:10:03
確かに
0139デフォルトの名無しさん2010/12/21(火) 00:13:35
でもこういう単純な例の方が応用が利くじゃない

実用的な例

B= A.Select(a => "[AV]"+a);
0140デフォルトの名無しさん2010/12/21(火) 00:15:19
LINQ使うとき、なぜか foreach を使わないことが多いのはおれだけだろうか。
0141デフォルトの名無しさん2010/12/21(火) 00:17:54
ToList().ForEach は痛い
0142デフォルトの名無しさん2010/12/21(火) 01:08:05
最後のToArray()で評価した段階で必要なコレクションが完成する。
その後でfor/foreach使うのって、副作用がある処理をしたいとか、LINQで書くには複雑になる場合。

foreachの使用頻度が減るのは当然じゃないか?
0143デフォルトの名無しさん2010/12/21(火) 01:21:45
>>140
最後が Aggregate系で終わる場合も多いしね。
ただ、結局最後が foreach なんなら、 .ForEach() とかは使わず普通に foreach したい。
0144デフォルトの名無しさん2010/12/21(火) 01:25:48
>>130を丁寧に解説しようとすると結構大変で、 Arrayは int[] だとして

定義済みデリゲート Func<T,TResult> で
Func<int,int> func = (int a) => { return a*a; }

ラムダ式ルール
・引数が1つなら()省略可
・引数の型の推論でint省略可
・単文なら式形式で戻り値おk
って感じで下のように書ける。
Func<int,int> func = a => a*a;

これをSelect()の引数に渡す。
var A2 = A.Select(func);

デリゲートを作らず、その場で匿名メソッドで書いたのが
var A2 = A.Select(a => a*a);

A2はIEnumerableなので、更にToArray()してArray化するとint[]のBになる。
(ちなみにvarにカーソル合わせるとちゃんと型が表示される。)


と、頑張って理解しながらMDSNや解説サイトをじっくり読めば目の前がパァっと輝くさ
http://msdn.microsoft.com/ja-jp/library/bb548891.aspx
http://msdn.microsoft.com/ja-jp/library/bb549151.aspx
0145デフォルトの名無しさん2010/12/21(火) 01:34:31
>>144
これはわかりやすい。感謝。
0146デフォルトの名無しさん2010/12/21(火) 01:42:23
間違えた。はずかちい (/ω\)

× MDSN
○ MSDN
0147デフォルトの名無しさん2010/12/21(火) 01:51:09
書かなきゃ気づかないのにw
0148デフォルトの名無しさん2010/12/21(火) 01:58:25
なんで=>なんだろ
比較と混ざるからアローでいいのに
0149デフォルトの名無しさん2010/12/21(火) 02:06:25
デリゲートを作らずに直接メソッドを入れられるのはなんで?
自動でデリゲートに入れてくれるの?
0150デフォルトの名無しさん2010/12/21(火) 02:06:36
>>127
仕様に合うか分かんないしあんま自信ないけど。。。
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new ObjectCollection Items { get { return base.Items; }}
デザイナではItemsのコードが生成されないからコンストラクタで追加してても記録されない。
newはあまり使いたくないけど。
0151デフォルトの名無しさん2010/12/21(火) 02:10:08
他人が作ったプラグインを利用できる本体はどうやって作ればいいですか?
自分でdllは作ったことがあるけど
それはメソッド名を知っているから利用できるわけで
どんなメソッド名を作られるかもわからない他人のdllのメソッドを
既に完成した実行ファイルから呼び出すのがどうやってるのかわかりません

上手く説明できないので意味が伝わっているか心配です
0152デフォルトの名無しさん2010/12/21(火) 02:18:06
プラグインが
・どうやって作った本体を
・どう参照しているのか
によるので一概には言えない
■ このスレッドは過去ログ倉庫に格納されています