2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

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

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

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

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

■関連スレ
C#, C♯, C#相談室 Part62
http://hibari.2ch.net/test/read.cgi/tech/1284775031/
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

2 :デフォルトの名無しさん:2010/11/09(火) 21:59:55
>>1


1000げとずさー

3 :デフォルトの名無しさん:2010/11/09(火) 22:02:44
立てて直ぐになんですが前スレにあったラムダ式の習得法がわかりません
どういう時に必要なのかがイマイチ想像できないといいますか……
@ITなんか読んで概念と構文はわかるんですけど実際に自分で書いているときに使う機会が無い

4 :デフォルトの名無しさん:2010/11/09(火) 22:14:15
あなたWPFスレで305名乗ってる人?

5 :デフォルトの名無しさん:2010/11/09(火) 22:18:20
この板は初心者用のこのスレしか見てません……

6 :デフォルトの名無しさん:2010/11/09(火) 22:22:10
>>3
Linq使えばすぐ分かる。

7 :デフォルトの名無しさん:2010/11/09(火) 22:25:39
とりあえず単純なループ処理の代わりにWhere、Select、FirstOrDefaultを意識して使ってみればいいんじゃね

8 :デフォルトの名無しさん:2010/11/09(火) 22:32:51
>>6-7
ちょっと意識してみます
ありがとう

9 :デフォルトの名無しさん:2010/11/09(火) 22:36:58
Form1,Form2,Form3と3つフォームがある中で、それぞれがそれぞれに(それぞれのコンポーネントに)アクセスできるようにしたいのですが、
フォーム1に
public partial class Form1 : Form
{
Form2 form2 = new Form2();
Form3 form3 = new Form3();
    ・・・

と記述しました。
するとform2.textBox1.text=・・・と操作することができました。

しかし、フォーム2に
public partial class Form2 : Form
{
Form1 form1 = new Form1();
Form3 form3 = new Form3();
    ・・・

と記述しました。
するとForm1 form1 = new Form1();の行でSystem.StackOverflowExceptionの例外が発生します。
どうすればフォーム2から同じようにform1.textBox1.text=・・・などと操作できるようにすればいいのでしょうか?


10 :デフォルトの名無しさん:2010/11/09(火) 22:42:53
まず
public partial class Form1 : Form
{
public Form2 form2 = new Form2(this);
public Form3 form3 = new Form3(this);

としてForm2Form3をそれぞれ

public partial class Form2 : Form
{
Form1 form1;
public Form2(Form1 f1){
form1 = f1;
}

とすればいい
Form2からForm1を参照する場合は単純に
form1;
Form2からForm3を参照する場合は
form1.form3;



11 :デフォルトの名無しさん:2010/11/09(火) 22:45:01
そりゃー当然だわな。
参照渡すようにしなよ。

12 :デフォルトの名無しさん:2010/11/09(火) 22:46:12
>>9
どっちみちそういう設計だと破綻するぞ

13 :デフォルトの名無しさん:2010/11/09(火) 22:47:28
>>9
Form1を生成する
Form2が生成される
Form1を生成する
以下繰り返し

無限ループって怖くね?



14 :デフォルトの名無しさん:2010/11/09(火) 22:56:57
でもコントロール作りすぎでWindowsのエラーとかじゃなくてスタックオーバーフローのほうが先なんだな
意外

15 :デフォルトの名無しさん:2010/11/09(火) 22:57:57
>>14
そりゃそうじゃね?

16 :デフォルトの名無しさん:2010/11/09(火) 22:59:18
そりやまそうだろう

17 :デフォルトの名無しさん:2010/11/09(火) 23:01:46
そりゃそうだな

18 :17:2010/11/09(火) 23:04:04
リロードしてなかったよ・・・。

           ,,,_  _ァュ,,..__
        ィチュ::ミミ:.:三彡:.:: :.:.:ヽ
        /::彡'':.: :.::/:.:{{.::r‐‐ ::_:.: :.:..、
      ,ィ/:.: /:..: ::{{:..川||::!     ヾ::;;:、
     ,ィ:.: ::.: /:. ::川:.:ヾ:.:.!{::      ヽ::!
   ///:.: :.:.:||ll: :.: .::.:.:ヾ::.::.i       ':!
   !:|:.:::ミ:: :.;;;川:.: :.:巛、ヾ::! 、       l
   ゙::ミミh::. :;:.::||l|:.:: :.}}::!l {{ ヾ  _,,...ィ r'' 、
     ゙::ミミ:.: ::.;:.:ミミヾ:.: :.:| ヾ、  '´  ,  マ
     ヾ:: .:.:ミミ三 :.:州リリ    _,,..rテ'  ヽ
      ヾ::;ィ'´ ̄`''ヾ州!         ,.  ヽ
        ゙レ'⌒r ィ ,;;. ..        .:' ,rィ ’
         ヽ し  :.: ..         、  ヽ
       ,,ハ`ー- ..ィ            _,.. ィ
      ィ:::! \   ヽ.          ィ{:::...
       /:::::!   \    ` - ..__       丿::::::ヽ
    /:::::::ヘ    \      ` ーァ-一'::::.:::.:::.::.!ヽ
   /:::::.:..:::::::::ヽ    \      リ::. :::.:.:.:.:::.:.:.:.::::!:::.::!

      轌山相太郎 [そりやまそうだろう]
     (群馬.明治一九年〜昭和一七年)

19 :デフォルトの名無しさん:2010/11/09(火) 23:05:37
>>10
ありがとうございます
public partial class Form1 : Form
{
public Form2 form2 = new Form2(this);
public Form3 form3 = new Form3(this);

のthisを消したらコンパイラを通って例外も起こりませんでした


実際動くようになったのですが、いまいち仕組みがよくわからないのです
できれば解説していただけないでしょうか?

20 :デフォルトの名無しさん:2010/11/09(火) 23:09:40
こんないろはのいみたいな質問する前に入門サイトでも読んでこいよ

21 :デフォルトの名無しさん:2010/11/09(火) 23:09:49
>>19
ほかの言語の経験は?
オブジェクト指向がよく分かってないような

22 :デフォルトの名無しさん:2010/11/09(火) 23:11:39
>>19
そんなはずはない
Form2でform1.textBox1.text=・・・ってやると例外発生するはずだぞ

23 :デフォルトの名無しさん:2010/11/09(火) 23:25:13
>>21
Delphiを少々やっていました
オブジェクト指向については参考書を読んでもよくわからず、「Aの中にB,C,D・・・と項目があってそれぞれを設定できる(A.B=○○・・・のような)」というような感じに受け止めていたのですが・・・

>>22
うわ確認不足でしたすいません
でもthis入れるとコンパイラ通らないんです

24 :デフォルトの名無しさん:2010/11/09(火) 23:29:59
>>23
ていうかどうしてあんなことをしたいのかが問題だと思う
どうせ初心者にありがちな、面倒だからってことなんだろうけど
楽してコードを書けば書くほど複雑になるのがプログラムの難しいところ

25 :デフォルトの名無しさん:2010/11/09(火) 23:34:06
>>23
ああすまん、適当に書きすぎた
http://ideone.com/PHWfp
こういう書き方がいいか悪いかは別にしてこれで動くはず

26 :デフォルトの名無しさん:2010/11/09(火) 23:34:57
>>25
Form2に若干ごみが混じってるwサーセン

27 :デフォルトの名無しさん:2010/11/10(水) 00:03:05
>>25
動きました
ありがとうございます

とりあえず参考サイトや参考書を読み直してきます
すいませんでした

28 :デフォルトの名無しさん:2010/11/10(水) 07:30:02
そもそもクラスの概念が分かってないような

29 :デフォルトの名無しさん:2010/11/10(水) 10:06:47
C#で質問、ほかのアプリが最小化されているかどうか調べるためにはどうしたらいいでしょうか?

IsIconicにハンドル渡して調べる以外ではないのでしょうか?よろしくおねがいいたします

30 :デフォルトの名無しさん:2010/11/10(水) 12:40:41
その辺はwin32APIの話じゃないの?

31 :デフォルトの名無しさん:2010/11/10(水) 15:58:48
flowLayoutPanel1.Controls.Add(pictureBox1);
の後にflowLayoutPanel1からpictureBox1.Imageを変えることはできますか?

32 :デフォルトの名無しさん:2010/11/10(水) 16:01:45
意味が不明・・・

パネルのイベントか何かでImageを変更するってことかな?


33 :デフォルトの名無しさん:2010/11/10(水) 16:03:06
pictureBox1のインスタンスがわかれば問題ないよ

34 :デフォルトの名無しさん:2010/11/10(水) 16:21:26
うまく説明しようと考えてたら自己解決しました
flowLayoutPanel1にPictureBoxを入れていって後からflowLayoutPanel1の任意の場所にあるPictureBoxのImageを取得したり設定したくて
flowLayoutPanel1.Controls[n].Image = img; こんな感じでやってたのですが
PictureBox pb = (PictureBox)flowLayoutPanel1.Controls[n];
とキャストして取り出したらできました…すみません

35 :デフォルトの名無しさん:2010/11/10(水) 16:25:06
FlowLayoutPanelを継承したクラスを作ってPictureBoxを
追加管理するメンバ関数を用意

それ経由でアクセスするようにすればいいんじゃね?
で継承したクラスないでList<PictureBox>としてインスタンス管理とかさ

36 :デフォルトの名無しさん:2010/11/10(水) 20:33:14
フォームのshow()、Hide()を使うのとVisible=true、Visible=false使うのって何か違いとかあるんですか?

37 :デフォルトの名無しさん:2010/11/10(水) 20:37:18
ない
Visibleプロパティにtrueとfalseを代入するだけのメソッド

38 :デフォルトの名無しさん:2010/11/10(水) 20:49:53
そこでUIスレッド以外からの呼び出しですよ
関係ないか

39 :デフォルトの名無しさん:2010/11/10(水) 21:38:14
>>37
ありがとうございました

40 :デフォルトの名無しさん:2010/11/11(木) 02:47:40
WPFむずすぎワロタ
Windows Formなら簡単にできることもWPFだとなにやっていいかわからんwww

Windowsアプリの一番上のメニューバー追加しようと思ってもできねーし
「ファイル」「編集」「表示」「ヘルプ」とかのやつねwwww

すべてのコモンWPFコントロールとかいうのからMENUはりつけてもできないしなにこれwwwwwwww

41 :デフォルトの名無しさん:2010/11/11(木) 02:57:11
WinFormのときも最初はそんな感じのわけワカメだったはず

42 :デフォルトの名無しさん:2010/11/11(木) 03:25:32
WPFは手間がかかるだけ
コントロールの挙動も違うし、いらない機能もあるからそれを潰していかないといけない
バインディングも面倒でプロパティで指定すればいいだけなのにものすごく手間
それでいて重いしメリットは1つもない

オシャレなGUIを誰かに見せるわけでもなければ
やる価値はまったくないと断言できる

43 :デフォルトの名無しさん:2010/11/11(木) 03:32:49
まだWPFが「オシャレなGUI」とか言ってる人いるんだなw

44 :デフォルトの名無しさん:2010/11/11(木) 03:46:34
public class Person
{
   public string 名前{get;set;}
   public double 身長{get;set;}
   public string 好きな食べ物{get;set;}
}


public class Form1:Form
{
   public ??? Persons=new ???();

   //データグリッドに名前と身長を表示

   //選択されたDataGridViewのセルの人物のtextBoxに好きな食べ物を表示

   public void PersonsSave()
   {
      //Personsをセーブ
   }

   public void PersonsLoad()
   {
      //Personsにデータを読み込む
   }
}

この場合どんな型のPersonsにすればいいでしょうか?
Personはユーザーの入力で増えたり減ったりします
よろしくおねがいします

45 :デフォルトの名無しさん:2010/11/11(木) 03:48:38
List<Person>でいいんじゃね?

46 :デフォルトの名無しさん:2010/11/11(木) 03:48:46
List<Person>

47 :デフォルトの名無しさん:2010/11/11(木) 03:58:19
foreach (Person p in Persons)
{
  moviesDataGridView.Rows.Add(new string[]{p.名前,p.身長});
}
その場合こういう感じで追加していくのでしょうか?
実はPersonクラス内のプロパティはもっと多いのですが・・・。

それと、DataGridViewの項目をユーザーに編集されたのを
Personsに反映するにはどうすればいいですか?
変更されるたびに、新しくPersonsを作ってDataGridViewのデータを書き込むのでしょうか?

48 :デフォルトの名無しさん:2010/11/11(木) 04:22:19
>>42
バインディングの素晴らしさを何一つ理解できていないようだw
>オシャレなGUI
ワロタ

49 :デフォルトの名無しさん:2010/11/11(木) 04:39:39
47
初心者の質問のフリをしてBindingを啓蒙する作戦に見えてきた

50 :デフォルトの名無しさん:2010/11/11(木) 05:12:17
ていうかWinFormsでも普通にBinding使ってただろ。Binding無しなんてやってらんない。

>Bindingを啓蒙
サンプル向きの題材(人物一覧)を選んでるあたりが、ホントに初心者?って思えてくるね。
さらにMSDNにそのものズバリの回答があるわけでw
http://msdn.microsoft.com/ja-jp/library/system.componentmodel.inotifypropertychanged.aspx

51 :デフォルトの名無しさん:2010/11/11(木) 05:20:21
>>50
それ見ましたけど、難しくて私には理解できませんでした
DataGridView.DataSourceにそのままPersonsを放り込んだら
簡単に表示してくれました。
しかも、DataGridViewでの編集がちゃんとソースにも反映された
これでできるのにINotifyPropertyChangedを使う理由はなんですか?

それとXmlSerializerでもそのままPersonsのデータを出力できました
Loadのやり方は今調べているところです

http://msdn.microsoft.com/ja-jp/library/swxzdhc0.aspx

ここではList<T>型はXmlSerializerでは扱えませんと書いているのにどうして?

52 :デフォルトの名無しさん:2010/11/11(木) 05:31:44
ソース → ターゲット
ソースの変更をターゲットに更新させるにはソース側のOnPropertyChangedが必要。

ターゲット → ソース (TwoWay, OneWayToSource)
ターゲットの変更をソースに更新させるのは気にしなくていい。

53 :デフォルトの名無しさん:2010/11/11(木) 05:41:37
なるほど逆は試していませんでした
うーん、データバインドに関してはWPFの方が楽そうですね

DataSouceにそのまま放り込むとプロパティ全部リストアップされる
例えば、>>44の好きな食べ物プロパティも項目に追加される
一部だけをバインドするようにできるのかもしれないけど・・・やり方がわからない

でもWPFはスクロールが遅いらしいからなー
まだ試してないけど1万行ぐらいのデータ扱いたいんだけど無理かな

54 :デフォルトの名無しさん:2010/11/11(木) 05:53:58
>>51
> ここではList<T>型はXmlSerializerでは扱えませんと書いているのにどうして?
そんなこと書いてない
List<T>の配列って書いてるだろう

55 :デフォルトの名無しさん:2010/11/11(木) 05:58:36
object[] obj=new object[]{ List<T>,List<T>,List<T>,List<T>}

こういうこと?

56 :831:2010/11/11(木) 06:42:08
>>53
デザイナーでdataGridViewのDataSourceプロパティをPerson型に指定してやるとカラムが自動定義される
あとはColmunsプロパティから表示したくないやつを非表示にすればいい


57 :デフォルトの名無しさん:2010/11/11(木) 06:45:09
名前が残ってたw

58 :デフォルトの名無しさん:2010/11/11(木) 09:17:06
>>53
WPFのDataGridが糞だからやめた方が良い、らしい。
WPF慣れると快適だよ。いまいち重いのが難だけど。

因みに一部だけというのはAutoGenerateColumns (だったかな)をfalseにして自分でカラムを定義すれば行けるはず

59 :デフォルトの名無しさん:2010/11/11(木) 17:44:23
で?

60 :デフォルトの名無しさん:2010/11/11(木) 17:46:47
こういうメソッドを作って、Do(FuncAなど)とすると、
FuncAが実行されるのですが、

static void Do(System.Threading.ThreadStart func) {
  func();
}

System.Threading.ThreadStartはどういう意味があるんでしょうか?

ThreadStart threadDelegate = new ThreadStart(Work.DoWork);
Thread newThread = new Thread(threadDelegate);
newThread.Start();
とは根本的に関係無いですよね?

61 :デフォルトの名無しさん:2010/11/11(木) 17:49:54
>>58
AutoGenerateColumnsをnoneにしても
DataSourceに放り込むと
自分が作ったカラムの後ろに新しく作られてしまう

みなさんList<Person>みたいなものどうやっていれているんですか?

>>56
それで一応いけました

列幅自動調整にしていると、ユーザーからの列サイズ変更ができなくなるって
WPFのDataGridと比べて微妙に使いづらい

62 :60:2010/11/11(木) 17:59:29
>>60
static void Do(System.Threading.ThreadStart func)
のところを
static void Do(Action func)
にしても結果は同じです。

この場合は、delegate System.Actionの説明は、
パラメータを受け取らず、戻り値を持たないメソッドをカプセル化します。
になっていて、まぁ、納得できます。

何でも良いんでしょうか?

63 :デフォルトの名無しさん:2010/11/11(木) 18:00:02
System.Threading.ThreadStartはデリゲート
デリゲートが何かはまずはググッてくれ

64 :デフォルトの名無しさん:2010/11/11(木) 18:15:37
そんなのでググらせても全く意味ないだろ

Actionでデリゲートするのが普通のやり方。
スレッドを作るわけでもないのにThreadStartを使うのは変わったやり方。

65 :デフォルトの名無しさん:2010/11/11(木) 18:20:36
Action使うと、.NET3.5以降じゃないと動かない。

66 :デフォルトの名無しさん:2010/11/11(木) 19:24:13
同じの自分で定義すればいいじゃん

67 :デフォルトの名無しさん:2010/11/11(木) 19:30:13
ActionとかFuncとか使い出して以来Delegateの宣言をほとんどしなくなったなあ

68 :デフォルトの名無しさん:2010/11/11(木) 20:30:40
引数1つのActionは実は.NET1.0からあった。

69 :デフォルトの名無しさん:2010/11/11(木) 20:41:14
違うよ
ジェネリックだから2.0から

70 :デフォルトの名無しさん:2010/11/11(木) 21:14:00
卒業しろし

71 :デフォルトの名無しさん:2010/11/11(木) 21:17:04
MethodInvokerが代用に出来そうなのだけど、
System.Windows.Formsなのはなぜだ。

72 :デフォルトの名無しさん:2010/11/11(木) 21:41:30
おしえないよ

73 :デフォルトの名無しさん:2010/11/11(木) 21:50:39
FuncとActionとEventHandler<T>以外のデリゲートは爆発しろ

74 :デフォルトの名無しさん:2010/11/11(木) 21:57:03
ラムダ式厨と同じ臭いがする。

75 :デフォルトの名無しさん:2010/11/11(木) 22:05:18
>>73
PredicateとAsyncCallbackは許して

76 :デフォルトの名無しさん:2010/11/11(木) 22:09:17
どう考えてもSystem.ComponentModelだよな。


77 :デフォルトの名無しさん:2010/11/11(木) 22:11:16
最近入社した会社はラムダとかLinqとか使うと「保守性が下がる」という理由で禁止です
意味が分からない

78 :デフォルトの名無しさん:2010/11/11(木) 22:17:42
非同期にRxはおろかTaskを使ったりしたら首になりそうな勢いだな

79 :デフォルトの名無しさん:2010/11/11(木) 22:24:59
NEなんて無知ばっかだからな

80 :デフォルトの名無しさん:2010/11/11(木) 23:02:19
>>77-78
俺実装でやる方がよっぽど保守性下がるのにな

81 :デフォルトの名無しさん:2010/11/11(木) 23:20:32
「コマンド」と「MVVMパターン」を理解する − @IT
http://www.atmarkit.co.jp/fdotnet/chushin/introwpf_06/introwpf_06_03.html

これのList7で
((DelegateCommand)OkCommand).RaiseCanExecuteChanged();
これがある意味がわからないんですが、どうしてですか?
これがなくてもコマンドが実行されます
よろしくおねがいしまーす

82 :デフォルトの名無しさん:2010/11/11(木) 23:23:01
騙りか

83 :デフォルトの名無しさん:2010/11/11(木) 23:41:02
アルファ付き32bitRGBのビットマップを簡単に
アルファ付き32bitRGBのアイコンに変換するには
どういう風にコーディングすればいいですか?
アイコンからビットマップにはToBitmapメソッドで簡単にできるようですが
逆が用意されてないみたいです

84 :デフォルトの名無しさん:2010/11/11(木) 23:43:22
>>61

85 :デフォルトの名無しさん:2010/11/12(金) 00:59:33
>>81
X をバインドしてるテキストボックスに負の数入れてみて。

86 :デフォルトの名無しさん:2010/11/12(金) 01:03:37
>>85
なるほど、変更されるような場所に
CanExecuteChanged()を配置しろってことですか
多分理解できました
ありがとう

87 :デフォルトの名無しさん:2010/11/12(金) 01:32:00
>>86
解決したなら相談室の方にも書いとけよ

88 :デフォルトの名無しさん:2010/11/12(金) 01:51:45
いやでもちょっとおかしいですね
Executeでファイルの読み込み
CanExecuteの中でファイルが存在するかどうかのチェックをする場合

((DelegateCommand)OkCommand).RaiseCanExecuteChanged();

のコードを書かなくても、ファイルが無い場合エラーがでない
つまり、コード実行時にCanExecuteの処理がされているということですよね?
やっぱり無くてもいいんじゃないですか?

89 :デフォルトの名無しさん:2010/11/12(金) 02:07:54
Execute実行前にはCanExecuteが呼び出されるから不思議じゃない
RaiseCanExecuteChangedを使うのはファイルが削除された瞬間にボタンが押せなくなるような処理を組んだ場合


90 :デフォルトの名無しさん:2010/11/12(金) 02:08:29
>>88
Changed イベント出す理由は、実行可否が変わった瞬間にコントロールの IsEnabled を切り替えて欲しい場合。

そのファイルの存在可否で切り替える場合だと、即時性求めるなら、
FileSystemWatcher で監視して、その中で Raise する。
そこまでしないんなら確かに Raise の部分要らない。

91 :デフォルトの名無しさん:2010/11/12(金) 02:39:08
>>89
>>90
なるほどなるほど、ようやくわかりました
変更された瞬間に何かの処理をさせたいとき以外は
別にやらなくてもいいってことですね。
つまりこれだけは、ほかのメソッドと違う動きなんですね
ありがとうございました

こういうのって普通はすぐわかることなのかな?
MSDN見てスイスイわかるひとが羨ましい

92 :デフォルトの名無しさん:2010/11/12(金) 02:42:04
>>91
そのメソッドの中で event を呼んでるってのがポイント。
event が何してるか(外部に通知)を知ってれば、大体見て意図とれるはず。
C# はそういう意図で event って仕組み持ってる。

93 :デフォルトの名無しさん:2010/11/12(金) 03:58:25
>>92
普通のeventを書く場合ならどのメソッドを呼び出しているか、コードみたらわかるけど
CanExecuteChangedがCanExecuteを呼び出しているかは見ただけでは
判断つかないですよね?
var d = CanExecuteChanged;
if (d != null)
d(this, null);
一応これをみてDelegateCommandとnullの値を使って何かしてるんだろうなとまでしかわからない
ViewがDelegateCommandを参照して一体何をしているかも
この見えない部分の動作説明が少なくていつも躓くんだけど
いろいろ試していくしかないのかな?

94 :デフォルトの名無しさん:2010/11/12(金) 04:39:25
イベントを発生させる側と受け取る側を混同していないかい?

>どのメソッドを呼び出しているか、コードみただけでわかる
それはイベントを受け取る側の話
今回のようにイベントを発生させる側では、普通どんなコードが呼び出されるかは関知しない

じゃあなんでCanExcetuteが呼び出されているかっていうと
CanExcetuteChangedイベントを受け取って呼び出されたメソッドの中でCanExcetuteが呼び出されているから
もちろん呼び出すかどうかは受け取った側の自由だけど、イベントの意味を考えればCanExcetuteが呼び出されるのは誰にでも推測できる

そしてそのイベントの意味やらを定義しているのがICommandインターフェース
実際ICommandのイベントの説明には
"通常、このイベントが発生すると、コマンド ソースからコマンドの CanExecute が呼び出されます。"って書いてある
http://msdn.microsoft.com/ja-jp/library/system.windows.input.icommand.canexecutechanged.aspx

95 :デフォルトの名無しさん:2010/11/12(金) 04:56:50
>それはイベントを受け取る側の話
+=Button_Click(obj,e)と混同してた

>イベントの意味を考えればCanExcetuteが呼び出されるのは誰にでも推測できる
そんなもんですか

var d = CanExecuteChanged;//ここで呼びだしているんですよね?
if (d != null)
d(this, null);
ブレークポイント作ってdの値を見ると
CanExecuteがtrueの時はOnCanExecute・・・って長いのが入ってて
そうでない場合はnull

で、この結果がOkCommandをバインドしているコントロールすべてに影響するように
ICommandインターフェース内で何か処理しているんですよね

むずかしーなー
もしかしてプログラミングって習得するまで何年もかかるの?

96 :デフォルトの名無しさん:2010/11/12(金) 05:47:36
残念だけど全然違います。
var d = CanExecuteChanged;は呼出じゃなくて単純な代入。
呼び出しならCanExecuteChanged(this, null);だけでいいんだけど、
CanExecuteChangedがnullじゃない時だけという条件を確実に満たすためにこういう書き方をしている。

順を追って説明する

まずコマンドをボタンにバインドするとボタンの中で
OkCommand.CanExecuteChanged += OnCanExecuteChanged; // >>95でいうところの+=Button_Click(obj,e)
みたいな感じでイベントを登録する。

そしてファイルが削除されてRaiseCanExecuteChangedが実行されると
d(this, null); によってCanExecuteChangedイベントに結び付けられたOnCanExecuteChangedが実行される。

OnCanExecuteChangedメソッドは

if(command.CanExecute()){
  this.Enable = true;
} else ・・・

みたいな感じになっててめでたくCanExecuteが実行されるってわけ。

難しく感じるのはデリゲートやイベント、インターフェースなどの基礎知識が不足しているから
それさえ身につければ今回の話もすんなり理解できるし、インターフェース内で何か処理するなんていう発想には至らない。
基礎の習得はやる気さえあれば1週間でなんとかなるからまずはそっちを頑張ってください。

97 :デフォルトの名無しさん:2010/11/12(金) 06:28:59
これ、例のあいつだろ

98 :デフォルトの名無しさん:2010/11/12(金) 06:43:55
例ってWPFとかデリゲートが分からんとかいってたあの人?
まさかmvvmについてカッコよく語っちゃう人がこんな質問するわけがない

99 :デフォルトの名無しさん:2010/11/12(金) 10:07:25
>>93
考え方が違う。

CanExecute … 実行可否を調べる
CanExecuteChanged … 実行可否が変化したことを通知してもらうためのイベント

とドキュメントにあるはず。
別に、「変化が発生した」ってことだけ知った(event 受け取った)上で、
実際に true か false か調べなおす(CanExecute を呼ぶ)かどうかは利用側の勝手。

100 :デフォルトの名無しさん:2010/11/12(金) 10:10:33
Raise... が中でイベント呼んでる = 変化を通知してるだけ。
その先 CanExecute が呼ばれてるかどうかとか知ったこっちゃない。
そこから先はドキュメント読むしかない。

http://msdn.microsoft.com/ja-jp/library/ms752308.aspx
ここ見ると、
「、CanExecuteChanged イベントにサブスクライブし、CanExecute が false を返す場合に無効にし」
って書かれてて、
この文章読んで初めて挙動分かる。

101 :デフォルトの名無しさん:2010/11/12(金) 11:26:32
LINQの勉強中ですが、scala の map に相当するものってありますか?
とりあえず以下のように考えてみましたが、他のやり方ありますよね?

array.Count((item) =>
{
Console.WriteLine(item); //実行したい処理
return true;
});

102 :デフォルトの名無しさん:2010/11/12(金) 11:34:13
>>101
is 演算子が void も受け付けるという裏ワザもあるけども。
Count(x => Console.WriteLine(x) is int)

LINQ の設計思想的には、そういう最後に副作用起こす部分は普通に foreach で書こうよって感じになってる。

ただ、それだと、Reactive Extensions みたいな push 通知に対応できないので、
Rx には Run か何かそんな名前の拡張メソッドあったはず。

103 :101:2010/11/12(金) 11:53:13
>>102
なるほど。そう言う書き方もできるのですね。勉強になりました。

やっぱり Count は気持ち悪いので、foreach の方が良さそうですね。

104 :デフォルトの名無しさん:2010/11/12(金) 12:17:59
>>101
selectでいいんでないの

105 :デフォルトの名無しさん:2010/11/12(金) 12:20:49
>>104
Selectも遅延実行

106 :デフォルトの名無しさん:2010/11/12(金) 12:25:52
ToList(), ToArray()とかToXX系が即時実行。
結局foreachだけど、こんなのがあればいいのかな。
public static void ToVoid<T>(this IEnumerable<T> src) { foreach (var s in src) {}; }

107 :デフォルトの名無しさん:2010/11/12(金) 12:27:44
関数型言語は大抵遅延評価じゃないの?
挙動似てるなーと思ってるよ
(map (+ 1) (1 2 3 4)) は (new int[] {1,2,3,4}).select(x=>x+1) と同じみたいな

ところで map って第一引数の関数をリストに順次適用していったリストを返す関数だよ・・・ね

108 :デフォルトの名無しさん:2010/11/12(金) 12:29:49
>>107
.NET は void の扱いが特別だから、Console.Write みたいなのは Select できないのよね。
しょうがないから is int(黒魔術)。

まあ、mixed なパラダイムの言語でなんでもかんでもメソッドチェーンにする意味ないんだけども。
普通に foreach で回せば。

109 :デフォルトの名無しさん:2010/11/12(金) 12:32:46
mapは本当に写像って意味なんでは・・・
となると元の質問者がmapを勘違いしてる気がする

110 :デフォルトの名無しさん:2010/11/12(金) 12:37:28
数学では、空集合に対する写像もあるからね。
全部 void 返す = 集合→空集合 の写像。

それを Run 的に扱っちゃうのってどうなの?とは思うけど。

111 :デフォルトの名無しさん:2010/11/12(金) 12:45:20
こんなのもあると便利。
public static IEnumerable<T> Pipe<T>(this IEnumerable<T> src, Action<T> act) {
 foreach (var s in src) {
  act(s);
  yield return s;
 }
}


112 :デフォルトの名無しさん:2010/11/12(金) 12:46:33
>>110
最初はForEachにしてたのだけど、IList.ForEachとかぶってしまうのでそういう名前にした。

113 :デフォルトの名無しさん:2010/11/12(金) 12:52:10
ListならForEachメソッドもあるよ
http://msdn.microsoft.com/ja-jp/library/bwabdf9z.aspx

114 :デフォルトの名無しさん:2010/11/12(金) 13:19:40
>110
一回scalaのmapの定義をggrばいいと思うよ
俺はselectが一番妥当だと思う

115 :デフォルトの名無しさん:2010/11/12(金) 15:18:55
(´・ω・`)…

116 :95:2010/11/12(金) 17:08:14
>>96
>>99
>>100

もう一回、デリゲート、イベント、インターフェースについて勉強し直してみる
ありがとう

117 :デフォルトの名無しさん:2010/11/12(金) 19:02:08
ForEachは副作用が目的だからLINQには入ってないんだよ
C#は関数型言語じゃないから副作用があっても構わないとかいう突っ込みは勘弁
少なくともEnumerableに入ってないのは実際にMSの中の人が副作用を嫌った結果

118 :デフォルトの名無しさん:2010/11/12(金) 19:55:24
>>117
またお前か

119 :デフォルトの名無しさん:2010/11/12(金) 20:12:21
ArrayList使いたがる人はどぼん見ているひと
あそこ更新するか閉鎖しないと勘違いが増えるだけだよな

120 :デフォルトの名無しさん:2010/11/12(金) 20:20:00
副作用起こして死ねよ

121 :デフォルトの名無しさん:2010/11/12(金) 20:29:36
しかしFunctionalな塊のReactive ExtensionsにはEnumerable用に
Run(ForEach、>>106のと同じ)とかDo(>>111のものと同じ)とか
副作用全開のものもかなり入っているのであった。

122 :デフォルトの名無しさん:2010/11/12(金) 20:38:27
Reactive Extensionsは全然functionalじゃないどころか
functionalなものを手続き的に使うためのライブラリでしょ

123 :デフォルトの名無しさん:2010/11/12(金) 20:43:45
手続きというよりも流れを持たせることだと思うのよ。
それをモナドっていうといやらしいんだけどさ、
Functional Reactive Programming自体はHaskellが一番活況だし。

124 :デフォルトの名無しさん:2010/11/12(金) 20:45:40
>>121
それでも、アセンブリ的には Interactive でしょ。
Reactive の部分は正式に採用されそうな勢いだけど、Interactive 微妙臭い。
(Run とかは Observable 用は入るけど、Enumerable 用は別)

125 :デフォルトの名無しさん:2010/11/12(金) 20:46:56
Rxって非同期プログラミングで状態変数使いまくるのが嫌だからDSL使って順番に書けるようにしましょうってことで
本質的には副作用を嫌ってるんだわ

126 :デフォルトの名無しさん:2010/11/12(金) 21:27:13
2chってなんでこういう、本当は実戦ではむしろどうでもいいトリビアルな知識ばっかり
豊富な奴に偏ってるんだろう。

そのくせ実践的な話になると打っても響かないんだよなこの手の人は。

127 :デフォルトの名無しさん:2010/11/12(金) 21:27:36
これ初心者向けのネタか?

128 :デフォルトの名無しさん:2010/11/12(金) 21:32:06
「オブジェクト指向とは」と大差ないレベルだし初心者向けだろ

129 :デフォルトの名無しさん:2010/11/12(金) 21:34:12
ttp://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_013/cs2_013_01.html

はは、ここ恐ろしくわかりにくいね
デリゲートの使い方はわかるけど、だから何?って感じ

Sample sample = new Sample(instance.method);

ここまでするぐらいなら、instance.method(2,3)て書いた方が早いでしょ

デリゲートってつまり、呼び出し側があって、呼び出される側に処理してもらうわけで
どんなメソッドが呼び出すのか呼び出し側で把握するのっておかしくない?
どのクラスのどのメソッドを使うか呼び出し側が決めるならデリゲートいらないでしょ・・・

例えば、ボタンクリックイベントでも、どのイベントハンドラが呼び出されるか事前にわかっているなら
マイクロソフトもデリゲート作らなくていいでしょって話

130 :デフォルトの名無しさん:2010/11/12(金) 21:38:54
大丈夫
みんなそうやって大人になるんだ

131 :デフォルトの名無しさん:2010/11/12(金) 21:40:16
川俣の文章は全体的にアレだから。

132 :デフォルトの名無しさん:2010/11/12(金) 21:43:47
>>129
呼び出し側とか呼び出される側とか何のこと言ってるんだ。
言っちゃ悪いけどアンタのレスの方が分かりにくいぞ

133 :デフォルトの名無しさん:2010/11/12(金) 22:34:59
>クラスAのメソッドaは常にクラスBのメソッドbに処理を委ねるとしよう。
>このような場合、メソッドaの中にメソッドbを呼び出すコードを書けばよいので、
>特別な機能は何も必要がない。
>しかし、常に委ねる相手が決まっているとは限らないし、
>委ねる相手が常に1つとも限らない。このような状況に対処するために、C#のデリゲート機能が存在する


なるほどなるほど、ここまではよくわかる
で、サンプルコードみたら、class1から既に決まっている相手class2のメソッド呼び出すコードだしw
なんで上記のようなことを想定したコードを書いてくれないのかと

134 :デフォルトの名無しさん:2010/11/12(金) 22:41:11
>>133
あんた馬鹿だろ

135 :デフォルトの名無しさん:2010/11/12(金) 22:41:22
川俣だからな
実際にどういうときに使うか〜みたいな話をしだしたらオナニーに走って
もっとわけのわからない説明になるよ

136 :135:2010/11/12(金) 22:44:21
記事ちゃんと読んでなかったけどこれは>>133が間違ってる
記事のList 13-2はデリゲートの利用例としては適切

137 :135:2010/11/12(金) 22:48:56
>>133ウザいよ

138 :デフォルトの名無しさん:2010/11/12(金) 22:51:19
class Class3 {
 public int method( int x, int y ){
  return x+y;
 }
}

if(〜){
 sample = new Sample(class2.method);
}else{
 sample = new Sample(class3.method);
}
int result = sample( 2, 3 );

ここまで書かないとわかんないの?

139 :デフォルトの名無しさん:2010/11/12(金) 22:54:31
if(〜){
(new Class2).method(2,3);
}else{
(new Class3).method(2,3);
}

これでいいじゃん?

140 :デフォルトの名無しさん:2010/11/12(金) 22:58:35
>>139
そんなこといいだしたら最終的に
if(〜){
 Console.WriteLine( "6" );
}else{
 Console.WriteLine( "5" );
}
になっちまうぞ

141 :デフォルトの名無しさん:2010/11/12(金) 22:59:38
>>140
それでいいんじゃないの?
何が不都合なの?
デリゲートって便利だなーって思わせてよ

142 :デフォルトの名無しさん:2010/11/12(金) 23:02:50
お前は使わなくていいよ。

143 :デフォルトの名無しさん:2010/11/12(金) 23:24:39
例えばさ>>129のList 13-1の例がデリゲートの便利な使い方というなら

Console.WriteLine()
Console.ReadLine()

これらもデリゲートにすればいいんじゃないの?

handler=.WriteLine()
handler("デリゲートって便利だなー");

144 :135:2010/11/12(金) 23:27:31
>List 13-1を見ても、デリゲートの利用価値はいま1つ分からないかもしれない。
>そこで、デリゲートを使って異なる処理を一元化する例をList 13-2に示そう。
と書いてあるだろ
13-2のcalcはClass2に依存していない

145 :デフォルトの名無しさん:2010/11/12(金) 23:31:47
そうか、List 13-1見た時点でこいつやばいんじゃないかって臭いがしたので
とりあえず、続き読んでみるわ

146 :デフォルトの名無しさん:2010/11/12(金) 23:33:26
デリゲートの用途、↓こんな絵あってもわからない?
http://ufcpp.net/study/csharp/misc_delegate.html

147 :デフォルトの名無しさん:2010/11/12(金) 23:39:16
>>143
List 13-1はデリゲートの便利な使い方じゃないよ
デリゲートの使い方のサンプルだよ

148 :デフォルトの名無しさん:2010/11/12(金) 23:44:06
>>129 見た時点でこいつやばいんじゃないかって臭いがした

149 :デフォルトの名無しさん:2010/11/12(金) 23:46:56
calc( 2, 3, new Sample( instance.methodPlus ) );
これも
int result=(new Class2).methodPlus(2,3)
Console.WriteLine(result);
でいいよね

記述が長くなり、わかりにくくなっただけで利点がわからない

>>146
そこもずっと前にみたけどさ。スレッドとかわかりにくいことしているのがなぁ。

委譲するのはなぜか?という一番の疑問に答えてくれるサイトがない
デリゲートの記述の仕方ばかり解説しているだけで
記述の仕方も使い方もわかる。でも、これを今やっているプログラムにいれると
便利だな、コード短くなってわかりやすくなるなと思わせてくれない

イベントは便利だなと思う
イベントの宣言だけしておけば、あとはどんなメソッドが呼び出されて
どんな処理をされようが、呼び出す側は気にしなくてもいいし
第一依存してないから、仮に呼び出される側のメソッドが無くてもいいし。
でも、デリゲートは直接メソッド呼べばいいだけのをわざわざ仲介しているのがよくわからない

150 :デフォルトの名無しさん:2010/11/12(金) 23:49:22
いやいや、イベントってまさにデリゲートだぞ

151 :デフォルトの名無しさん:2010/11/12(金) 23:54:00
List<T>のソートにT比較用のデリゲートを渡せる
これでもデリゲートのありがたみがわからんかい

152 :デフォルトの名無しさん:2010/11/12(金) 23:56:25
おれがほしいのは、デリゲートがもしなかったら
どういう場面で面倒になったりするのかを書いてくれるとうれしい

たとえば、JAVAではデリゲートがなくてイベントを処理する場合
クラスを大量に作らなくてはいけないらしい

そういうのを書いてくれたらいいのにな
イベントもデリゲートの機能を使っているようだけど、
デリゲートだけだと使い道あるの?って感じがする

てか、みんなデリゲート使ってる?

153 :デフォルトの名無しさん:2010/11/12(金) 23:57:56
ようるすに、

AがBから呼ばれたいのだけどBはA専用には設計できない(設計したくない)、というとき
デリゲートかイベントを使う(と良い)
(さもなくば呼び出される側の詳細を隠蔽するためだけに継承と多態を使う、みたいなアホらしい設計になる)

で、BからAを呼び出すにあたり、呼び出し先がA一つで良いときはデリゲート、
Aだけとは限らず、Aがあずかり知らない不特定多数(CやDやE)も同じタイミングでの
Bからの呼び出しを必要としているかもしれない(Aにはわからない or わからせたくない)場合はイベントを使う

前者は昔はコールバックと呼ばれていたしくみ


154 :デフォルトの名無しさん:2010/11/12(金) 23:58:15
>>152
つLINQ

155 :デフォルトの名無しさん:2010/11/13(土) 00:01:06
>>152
class Form1 : Form {
 // ...

 void Foo() {
  if (InvokeRequired) {
    Invoke(new Action(Foo));
  } else {
    label1.Text = "Hello World!";
  }
}


156 :デフォルトの名無しさん:2010/11/13(土) 00:01:33
>>152
Cで関数ポインタを使うぐらいの頻度。
要するに使う分野では使うけど、必用ない分野では殆ど使わない。

川俣はC#2.0の連載で匿名メソッドを「デザートじゃなくご飯」って書いてたけど、
あれは誇大広告もいいところでむしろデザートそのもの。

川俣はデタラメを言う「トンデモさん」ではないと俺は思うけど、
大げさで偏ってるのは確か。

157 :デフォルトの名無しさん:2010/11/13(土) 00:01:51
非同期関係はデリゲート必須だよな

158 :デフォルトの名無しさん:2010/11/13(土) 00:05:14
>>152
List<int> list = new List<int>();
list.Add(10);
list.Add(20);
list.ForEach(Console.WriteLine);

159 :デフォルトの名無しさん:2010/11/13(土) 00:05:27
非同期では必須なのに、
「スレッドとかわかりにくい」と言われた・・・

そりゃ、「わからないからスレッド使わない、だからデリゲートも使わない」
と言われれば、「うん、使う必要ないね」としか言いようがなく。

160 :デフォルトの名無しさん:2010/11/13(土) 00:07:27
あとデリゲートをクロージャとして使う手がある。
非同期局面でシグナルでなくデリゲートじゃなきゃヤダ、というのは大概このケース
つまんり、
  int[] result = new int[10];
  for (int i = 0; i < 10; ++i) {
    Action<int> act = new Action<int>((x) => { result[i] = x; })
    B.LetsCallback(act);
  }
みたいな、


161 :デフォルトの名無しさん:2010/11/13(土) 00:08:21
スマンスresultのlock忘れたorz


162 :デフォルトの名無しさん:2010/11/13(土) 00:10:46
>>152
デリゲートというか、ラムダ式はC#3.0以降は必須。
Linqの使い方を学べばデリゲートの有効な使い方ってのがよくわかる。
2.0以下だったらピンと来ないのも当然かもしれない。

163 :デフォルトの名無しさん:2010/11/13(土) 00:15:41
>>152
正直、デリゲートの概念なかった頃は冗談抜きで面倒よ。
簡単に説明してくれといわれて簡単に書く気になれないレベル。
だから例が出てこないのよ。

164 :デフォルトの名無しさん:2010/11/13(土) 00:16:00
>>159
たしかにw

165 :デフォルトの名無しさん:2010/11/13(土) 00:17:56
さらにいうと、デリゲートはC#テンプレートの機能不足を補うのにも使わざるおえない
すわなち、引数付きコンストラクタしかないクラスTを型引数とし、内部でnewするテンプレートは
Tのファクトリをデリゲートで渡すようなテンプレートにするしか手がない、
ハズ…!
(引数なしのコンストラクタで生成するならnew()制約で良いが、引数付きを扱う構文が無い)


166 :デフォルトの名無しさん:2010/11/13(土) 00:18:30
>>163
仮にデリゲートがなかったとしたら
全部インターフェースとクラスで代用?

167 :デフォルトの名無しさん:2010/11/13(土) 00:22:32
>>151
そういう言い方されても俺には理解できない
>>151
List<T>もソートの意味もそれぞれわかるけど「List<T>のソート」とはどういうことかわからない
T比較用もよくわからない
よくある解説で、条件式のところにデリゲートを入れると便利的なことを書いているが
どうもピンと来ないんだよね
>>153
ちょっとまって、List 13-1でいうと呼び出し側はclass1で呼び出される側はclass2ですよね?
なんで「class1(classA)がclass2(classB)から呼ばれたい」という書き方しているの?
classABがどういうのか書いてくれないとわからない
ていうか、呼び出し側と呼び出され側の区別ってどうやってするの?もうわけわかんないよ。
>>156
その使う場面がわからない
>>157
それはわかりますよ
デリゲート使わないと無理だから
でも、そうでない場合の使い方がわからない
>>158
ForEachno定義が無いとしてエラーがでますが?なんですかそれは。
>>159
てことは、非同期以外では使わないというご意見ですね?
>>162
それって匿名メソッドとかそういうことなんでしょ
やっぱり2.0じゃ有用性説明できないってことですか

なんだろな、解説サイトあらゆるところみて一通り読んだのに
使われる場面が違うとさっぱりわからないな
頭がプログラマ向きじゃないのかなー

168 :デフォルトの名無しさん:2010/11/13(土) 00:22:44
>>165
ありがとう、いままでその方法に気づかなかった

169 :デフォルトの名無しさん:2010/11/13(土) 00:23:50
>>166
Java の場合は匿名クラスってのが実質的にデリゲートの役目担ってて、まだマシ。
ものすっごいコード量増えるけど。

C++ とかだと悲惨。
インスタンスメソッドでなければ、関数ポインターっての使えば簡単っちゃ簡単なんだけど、
インスタンス持たせようとした瞬間酷いことに。
あと、循環参照つきものだからメモリ管理がすごく面倒になる。

170 :デフォルトの名無しさん:2010/11/13(土) 00:25:40
>>167
>>146 に書かれてる例、ものすごい頻出パターンよ。
それみて、使いどころ分からないとなると、頻出パターンすらわかってないことになる。

171 :デフォルトの名無しさん:2010/11/13(土) 00:25:53
今更気づいたけど、こいつは、いつかのWPFがどうのこうのとか言ってた奴か?
「解説サイトあらゆるところみて一通り読んだ」のに「何一つ頭に入ってない」ね。

172 :デフォルトの名無しさん:2010/11/13(土) 00:27:55
>>169
C#選んでよかった

ところでWPFのコンバーターなんかもクラスじゃなくてデリゲート渡せたらなあって思うんだよね

173 :デフォルトの名無しさん:2010/11/13(土) 00:28:09
>>171
多分そうじゃないかな。
WPFの時もデリゲートわかんないって言ってて、
周りから「デリゲートもわからないってやばい」って言われて、
それで今に至ってるっぽい?

普通にやってたら頻出するはずのパターン見て「何が便利かわからない」って言ってる辺りもそっくり。

174 :デフォルトの名無しさん:2010/11/13(土) 00:29:03
>>167はもうコテ半つけてもいいレベルの名物キャラクターです

175 :デフォルトの名無しさん:2010/11/13(土) 00:30:16
>「List<T>のソート」とはどういうことかわからない
マジでいってんの?

176 :デフォルトの名無しさん:2010/11/13(土) 00:31:41
>>172
XAML って仕組み的に、シリアライズ可能なものでないと書けないからね。
デリゲートは相性よろしくない。

177 :デフォルトの名無しさん:2010/11/13(土) 00:33:21
>>174
WPFスレではコテハンになったぞw

178 :デフォルトの名無しさん:2010/11/13(土) 00:36:48
例えばさ、DelegateCommandがなぜ必要かといったら
これがなかったら、ICommandインターフェースを使った
クラスをそれぞれのコマンドごとに作らなくてはいけなくなる

だから、ICommandインターフェースを実装したDelegateCommandクラスを作って
デリゲートを通して、実処理部分のVMのメソッドはここですとDelegateCommandクラスに渡して
DelegateCommandクラスから、VMのメソッドを呼びなおしてもらうと
そのことによって、イベントハンドラごとにクラスを作らなくても良いようにしている

つまり、共通的な処理部分をデリゲートで呼び出したほかのクラスのメソッドに処理させて
相違部分は呼び出し元で処理する場合に便利ってことなんだろうけど
これも、インターフェースが必要としない場合だと、ただ共通機能をまとめた
メソッドを作って直接呼び出せばいいだけだし

179 :デフォルトの名無しさん:2010/11/13(土) 00:40:53
>>176
それはわかってるんだけどコンバータクラスが大量に増えてしまう現状は何とかしてほしい
なんかうまい方法とかないかな

180 :305 ◆Jzt/EX0TGY8T :2010/11/13(土) 00:50:19
>>179
それこそDelegateCommandと同じ要領でいけるでしょ
コンバータークラスを1つ作っておいて
デリゲートでVMなどの実処理するメソッドを呼び出してもらう

181 :153:2010/11/13(土) 00:53:32
>>167
言った手前返事しとこうとぞ思う、
>153は、List 13-1(>129のさらにリンク先)と異なる記号を使って無用の混乱を招いた点はお詫びしとく

List 13-1は非常に単純化されたサンプルなので、>153に当てはめて解釈するのは無理がある
Class2のインスタンスinstanceはClass1から呼び出されてはいるものの、instanceが特にそういう要求を持っているわけではない。
すなわち、instanceはClass1から呼ばれようが呼ばれまいが自己不整合を起こして破綻したりしない。
このような、Class2を知っているClass1が一方的にClass2を呼び出す場合はデリゲートを使うまでもない。
実際、List 13-1の19〜20行目はただ単に instance.method(2, 3); と1行書けば済む

だがそうは済まないケースがあり、それが>153だったり>157だったりするというしくみ
わからないのは必要に迫られていないからかもしれない、


182 :デフォルトの名無しさん:2010/11/13(土) 00:55:05
>>180
なんだ、わかってるじゃないか

183 : ◆Jzt/EX0TGY8T :2010/11/13(土) 01:04:50
ttp://ufcpp.net/study/csharp/misc_delegate.html
ここ見ても、イベントと非同期はわかりますよ
デリゲートなければできないですから。
イベントの場合、ボタンクリックで例えると
イベントハンドラを作る我々開発者はクリックイベントが起きた場合に
このメソッドを呼び出してほしいとイベントハンドラを代入して呼び出してもらう
でも、イベントハンドラを書かないでクリックされても無反応であってもいい構わないわけで
こちら側にすべての処理を委ねられているって感じがします。

でも、List 13-2にしても、上記のURLの図2にしても
普通に処理するメソッドを直接書けばいいだけなのを
わざわざデリゲートで呼び出している理由がわからない
>>181さんの言うとおり「必要に迫られていないからかもしれない」ってことなんだろうけど

>>181
その説明はすごくわかりやすかったです。
で、その説明で>>153を説明するとどうなりますか?

184 : ◆Jzt/EX0TGY8T :2010/11/13(土) 01:09:18
>>182
いやでも、それはインターフェースを実装しなければいけないという
制約があるから、デリゲートするしかないってのはわかるけど
例えば、インターフェースなくてもいいってのなら・・・
あれ?やっぱりクラスが増えることになるか・・・

いやいや、違うな
この場合は、呼び出し側がマイクロスフトの設計によるものだから
つまり、ボタンを設計したマイクロソフトであり、コンバーターやコマンドを作ったマイクロソフトが呼び出し側

呼び出し側も呼び出される側も自分で設計する場合は
やっぱり普通に直接メソッド呼び出すよね
だからデリゲートの有用性がわからないんです

185 :デフォルトの名無しさん:2010/11/13(土) 01:18:40
http://ideone.com/yQFdh
これならデリゲートのありがたみがわかるんじゃないか?

わざわざ自分で実行しなくても下のほうに結果も表示されるようになってるからね

186 :デフォルトの名無しさん:2010/11/13(土) 01:18:44
なんかウダウダ雑談がしたいだけなのか、本当にアタマ悪いのかどっちなんだろ....

187 :デフォルトの名無しさん:2010/11/13(土) 01:22:09
両方じゃない?

188 :デフォルトの名無しさん:2010/11/13(土) 01:24:38
それが必要な場面に直面しないと、本当の意味で必要性を感じない。
必要性を感じない人に理解させるのは難しい。

189 :デフォルトの名無しさん:2010/11/13(土) 01:25:56
そうそう
無理して教える必要はないw
どうせ聞く方も身に付かないだろうし
教える方も疲れるだけw

会社の後輩だったら業務命令等あるだろうけどw

190 :デフォルトの名無しさん:2010/11/13(土) 01:27:45
なんだかんだいってみんな暇なんだよ

191 :デフォルトの名無しさん:2010/11/13(土) 01:47:19
>>183
>イベントハンドラを作る我々開発者はクリックイベントが起きた場合に
>このメソッドを呼び出してほしいとイベントハンドラを代入して呼び出してもらう
これは、「開発者のコード」が、ボタンクリック時の処理を、我=「開発者のコード」に属するイベントハンドラに委譲せよ、と「ボタン」迫るケース。
しかし「ボタン」を実装したコード自体はマイクロソフト謹製でかつビルド済みだから、開発者側はそれを改変できない。
だから「「ボタン」が「開発者のコードを直接呼び出せばいいのに!」という系の願いは叶えられようがない。
こういうとき、イベントハンドラのコードをデータのごとく「ボタン」に渡せて初めて解決する。デリゲートはその入れ物。

なお、「ボタン」を作るのがマイクロソフトでなくて今日の漏れで、「開発者のコード」を書くのが3000年後の漏れだとしても約同じ事
これが>153の説明。「ボタン」は「開発者のコード」専用には設計できない。

>>184
>呼び出し側も呼び出される側も自分で設計する場合は
>やっぱり普通に直接メソッド呼び出すよね
例えばだが、switch文x=1,2,3,...,10000に応じて自作関数1万個のどれかに分岐する1万行のコードのかわりにデリゲート1万個の配列をつくっておけば
呼び出しは1行で済むし、
一方、デリゲートに収容するコードはデータとして生成もできる(>160)から、初期化には1万行要らない(かもしれない)


192 :デフォルトの名無しさん:2010/11/13(土) 01:52:49
いやいや、説明がなんか哲学じみてきたね^^
(デリゲートは使ってる立場ですけど)

193 : ◆Jzt/EX0TGY8T :2010/11/13(土) 01:57:08
>>185
これはデリゲート使ってないやり方ですよね?
このままでいいと思いますけど、何がだめなんでしょうか?
persons.Sort(compareAge).Select(s=>Console.WriteLine(s));

DelegateCommandに習うとするなら
実装を変えたくないClassAがあるという大前提で
ClassAのプロパティであるClassBの処理で計算結果が出される場合
ClassBの処理をいくつか変更したくなった場合に
ClassBにデリゲートを設けて、C,D,Eを呼び出して処理を変更するために
デリゲートを使うというのならわかる
でも、これはあくまで一部の使い方なんだよね

ラムダとかでデリゲート使ってるのみると、上記のようなことを
頭に浮かべながら考えるなんて大変すぎる

194 :デフォルトの名無しさん:2010/11/13(土) 01:57:18
みんなデリゲートが大好きなのさ

195 :デフォルトの名無しさん:2010/11/13(土) 01:58:08
>>193
いやいやいやいや
デリゲートつかってますよ?

196 :デフォルトの名無しさん:2010/11/13(土) 02:00:10
哲学じみてるんじゃなくて説明下手なだけ。

デリゲートなんて一次接近としてはただの関数ポインタだと理解すればいいわけで、
そんな難しい概念じゃないんだけどね。

機械語だったら今まで
CALL #label
と即値のアドレスしかコールできなかったのが、
CALL funcPtr
と、メモリーのどこかに入ってるアドレス値を参照してコールできるようになりましたよ、
とそれだけの話。

実行時に呼び出しアドレスを動的に変えたい場合があるって、そんな高尚な話か?

197 :デフォルトの名無しさん:2010/11/13(土) 02:05:25
俺のデリゲートに対する最初の理解は
「関数ポインタが安全に使えるようになりました」だった。

198 :デフォルトの名無しさん:2010/11/13(土) 02:05:54
それはデリゲートの本来の使い方とは違う。
アプリケーションに取っては、スレッド間通信が本来の使い方でしょ。
参照コールの機能もあるけどね。

199 : ◆Jzt/EX0TGY8T :2010/11/13(土) 02:07:09
>>191
>例えばだが、switch文x=1,2,3,...,10000に応じて自作関数1万個のどれかに分岐する1万行のコードのかわりにデリゲ>ート1万個の配列をつくっておけば
>呼び出しは1行で済むし

1行で済みますか?
デリゲートは
Sample sample = new Sample(instance.method);
こんな風に直接メソッドを指定してデリゲートに登録するんですよね?
つまり、分岐の数だけ、別クラスの特定のメソッドをデリゲートに登録する記述を書かなくてはいけないですよね?

例えばDelegateCommandのようにプロパティとして渡して置くというのなら
1行で済むでしょうけど

200 :デフォルトの名無しさん:2010/11/13(土) 02:07:20
C++/CLIでdelegateを使うと関数ポインタとの違いというかデリゲートの正体が理解できるかも。

201 :デフォルトの名無しさん:2010/11/13(土) 02:07:39
>>196
デリゲートは関数ポインタよりも高尚な概念なんですよ^^
クロージャでもあるっていうのがその証拠

デリゲート=関数ポインタ、は正しくない
デリゲート=関数ポインタ+無名関数、は冗長


202 :デフォルトの名無しさん:2010/11/13(土) 02:08:03
>>193
persons.Sort(new Comparison<Person>(compareAge));
こう書けばわかる?
Comparison<T>はデリゲートね

ちなみにSortの返り値はVoidだし
Selectも遅延実行だから何も表示されない

203 : ◆Jzt/EX0TGY8T :2010/11/13(土) 02:13:38
>>196
>>197
こういう説明の仕方が一番嫌いです。
わざとなんでしょうけど。

ある未知の機能を説明するのに、未知の機能を例にする説明ってよくないと思うの
読んでる側は0の知識の可能性があるのに。

>>195
デリゲートの宣言ないですけど

204 :デフォルトの名無しさん:2010/11/13(土) 02:15:05
例えば
Select(x => x * x) ってのは
Select(new Func<int,int>(x => x * x) であり

static int Hoge(int x) { return x * x; } // というメソッドが外に定義してあって
Select(Hoge) とも同じであり
Select(new Func<int, int>(Hoge)) でもあり

var delg = new Func<int, int>(Hoge); // 代入して
Select(delg); // こう使ってもいい

になる。
匿名関数じゃないデリゲートがビミョーって主張なら、まあ分かる。

205 :デフォルトの名無しさん:2010/11/13(土) 02:15:22
デリゲート=関数ポインタ+オブジェクトへの参照 // static関数の場合参照はnull

クロージャになったのは.NET2.0から。


206 :デフォルトの名無しさん:2010/11/13(土) 02:18:05
>>203
未知って、だから関数ポインタがどういうものかもちゃんと説明してるじゃん。

デリゲートより関数ポインタの方が具体的だから、そっちをまず理解するんだよ。
関数ポインタがわからないのにより抽象度が高いデリゲートが分かるわけないだろう。

207 :デフォルトの名無しさん:2010/11/13(土) 02:18:13
>>203
一番単純な概念から説明しようとしてるだけだろ。
>こういう説明の仕方が一番嫌いです。
なんて言い訳して逃げるからいつまで経っても理解できないんだろうがw

208 :デフォルトの名無しさん:2010/11/13(土) 02:19:47
>>203
ごめんね、そこまで書かないとわかんないとは思わなかったんだよ
>>202にも書いてあるけど
public delegate int Comparison<T>(T x, T y);
っていうデリゲートがSystem名前空間に定義されてるんですよ

で、SortはこのComparison<T>を引数にとる。
persons.Sort(new Comparison<Person>(compareAge));

で2.0からはわざわざnewする必要がなくなったから
persons.Sort(compareAge);
って書き方になるわけです。

209 :デフォルトの名無しさん:2010/11/13(土) 02:23:58
◆Jzt/EX0TGY8T にわかるように説明できたら勝ち
そんなゲームに思えてきた

210 : ◆Jzt/EX0TGY8T :2010/11/13(土) 02:24:36
>>202
うーんわからないです

Sort()メソッドの実態は
Array.Sortを使ってある条件に基づいてソートすると
そのソート条件をcompareAge(Person a, Person b)で示していると

で、デリゲートがなければ、Array.Sortを直接呼び出してソートすればいいだけですよね?

211 :デフォルトの名無しさん:2010/11/13(土) 02:26:17
まだやってるのかw

212 :デフォルトの名無しさん:2010/11/13(土) 02:27:23
>>210
「直接呼び出してソートすればいい」
どうやって条件を指定するの?
デリゲート使ったのは
「そのソート条件をcompareAge(Person a, Person b)で示している」
ためなのに。

213 :デフォルトの名無しさん:2010/11/13(土) 02:35:10
>>210
じゃあ仮にデリゲートを使わないとしたら
Persons.Sort()の実行結果はどんな並び方になると思う?

214 : ◆Jzt/EX0TGY8T :2010/11/13(土) 02:43:13
>>206
関数ポインタって関数が書かれているメモリアドレスじゃないんですか?
よくわかりません。

>>204
なんとなくわかるんですが、
それなら、Hogeを改名してSelectにして直接使えばよかったのでは?と思うのです

つまり、Selectメソッドの実態には、hoge(int x)を呼ぶかhoge(int y)を呼ぶかの選択肢があるってこと?
でも、それはオーバーロードでいいですよね?

>>207
いやでも、自分で調べろよじゃ解説になってないってことを宣言していることだと思いますよ

>>208
ってーことは
内部がList 13-2みたいなことになっているってことですよね?
calcがSortみたいな感じですか?
つまりSortを利用する側は記述が少なくて済むと・・・
sortを利用する側は呼び出し側ということでいいですか?

215 : ◆Jzt/EX0TGY8T :2010/11/13(土) 02:45:13
>>213

デリゲート使う使わないに関係なく
Sortメソッドが利用しているアルゴリズムを直接使えば同じことでは?

216 :デフォルトの名無しさん:2010/11/13(土) 02:46:16
>>214
掲示板の少ない分量で、知識0で理解する気のない奴に解説しろ って無理ゲーにもほどがあるだろ。

217 : ◆Jzt/EX0TGY8T :2010/11/13(土) 02:46:33
つまりこれですよ

>>139

218 :デフォルトの名無しさん:2010/11/13(土) 02:48:07
まあ今日は一旦置いて落ち着いて勉強しろ

219 : ◆Jzt/EX0TGY8T :2010/11/13(土) 02:50:03
頭が回らなくなってきたしそうします

220 :デフォルトの名無しさん:2010/11/13(土) 02:51:23
イーノック「一番良いデリケートを頼む」

221 : ◆Jzt/EX0TGY8T :2010/11/13(土) 02:52:42
さっきつい、ポロっとすごいアイデア言っちゃった
おれもDelegateConverterクラス作ってみよ

222 :デフォルトの名無しさん:2010/11/13(土) 02:52:54
>>215を見る限り、デリゲートの前にソートについて考えたほうがいいかも。
根本的に何もかも分かってないのに、あれこれ調べたお陰なのか、
ご立派な言葉だけは並べられるみたいでよくないね。

223 :デフォルトの名無しさん:2010/11/13(土) 02:53:50
あと、というか考える前にとりあえず手を動かせよって感じでもある。
少しでも実行してみれば自分がどれだけ変なこと言ってるか気づくと思うのだけど。

224 :デフォルトの名無しさん:2010/11/13(土) 02:56:06
>>214
そうですSortはcalcに相当しています
ソート用のアルゴリズムと、要素の比較方法が分離可能なら
いろいろなところで使いまわせるでしょ?

225 :デフォルトの名無しさん:2010/11/13(土) 02:57:12
>>203
>>210
やっぱあほ杉わろた


226 :デフォルトの名無しさん:2010/11/13(土) 03:04:54
◆Jzt/EX0TGY8T は間違いなくナルシスト系
自分は頭いいのに理解できないのは説明がよくないからって考えてる。
だからここに書かれた説明にちょっとでもわからない部分があるとすぐ攻撃的になって、
あらさがしや、わからないのはお前の説明が悪いからという態度になる。
そうやって自分の無能さから目をそらしているだけ。

227 :デフォルトの名無しさん:2010/11/13(土) 03:07:19
Sortの例で理解できないのはおかしい


228 :デフォルトの名無しさん:2010/11/13(土) 03:08:10
分かった上で暇な俺らにネタ供給してたんじゃなかったの?

229 :デフォルトの名無しさん:2010/11/13(土) 03:11:04
>>228
それなら◆Jzt/EX0TGY8T は天才的な才能の持ち主だな

230 :デフォルトの名無しさん:2010/11/13(土) 03:14:53
◆Jzt/EX0TGY8Tは無事チューリングテストにパスしたようで何より

231 :デフォルトの名無しさん:2010/11/13(土) 03:18:39
◆Jzt/EX0TGY8Tって人工知能だったの!?
まじかー、そりゃいっぱいやられたな
開発者マジすげー、尊敬するよ

232 :デフォルトの名無しさん:2010/11/13(土) 03:23:24
そこで式ツリーですね

233 :デフォルトの名無しさん:2010/11/13(土) 03:25:28
式ツリーって使ったことないんだけど、
ユーザーに簡単な数式みたいなやつを入力させて、
プログラムの動作を変更するみたいなことできる?

234 :デフォルトの名無しさん:2010/11/13(土) 03:28:47
http://msdn.microsoft.com/ja-jp/library/bb397951.aspx
式ツリーをビルトできるんだから出来る

235 :デフォルトの名無しさん:2010/11/13(土) 03:29:12
デリゲートに好きして

236 :デフォルトの名無しさん:2010/11/13(土) 03:39:11
>>234
ありがと、ちょっと調べてみるよ

しかし何でこの記事真っ白なんだ?
http://msdn.microsoft.com/ja-jp/library/bb882637.aspx

237 : ◆Jzt/EX0TGY8T :2010/11/13(土) 03:58:05
くっそ、DelegateConverterをやっと作ったのに
ConverterはBindingできませんとかww
どうすりゃいいんだよー

238 : ◆Jzt/EX0TGY8T :2010/11/13(土) 04:05:05
あ、イベントでやればいいのか

239 :デフォルトの名無しさん:2010/11/13(土) 04:53:29
ちょっと質問
イベントを発生させるメソッドの命名規則としてOn〜ってするのは割とよくあると思うんだけど
(protected virtual OnLoaded(){ this.Loaded(〜); })
イベントを受け取る側のメソッドの名前ってどんなふうにつけてる?
標準ライブラリ見ると受け取る側もOn〜って名前になってたりするんだけど
なんか一緒っていうのも気持ち悪いし


240 : ◆Jzt/EX0TGY8T :2010/11/13(土) 05:01:14
>>239
CallBackとかじゃないのHandlerとか


寝ようとしたが閃いた
例えば、サイトから画像をダウンロードするソフトを作る場合
サイトによってダウンロードの仕方が違う
その相違部分をダウンロードするクラスに教えてやるためにデリゲートを使うって感じかな
でも、多態性でもできそうだよね・・・・うーん

241 :デフォルトの名無しさん:2010/11/13(土) 06:00:57
ページ内の画像を一括保存するようなのだと
不要な画像(広告とか)のURLをフィルタリングするデリゲートを後から注入できるように設計しとくと便利かもね。

外から後で実装を注入できるのはデリゲートの重要な使い方の一つ。
例えばコレクションのソートでは、並び順を中身のクラスや状況によって変えたいケースは多いと思う。
そんな時にデリゲートが使えないとIComparerを実装したクラスを何度も作る羽目になっちゃうでしょ

>多態性でもできそう
単純な処理を各クラスに割り振ると数が増えすぎて複雑になってしまう。
でも複雑な処理ならクラスにする方が見通しがいい。
その辺のさじ加減はやっぱり経験になるけど、目安としては多態性で抽象化されるメソッドが複数ならインターフェイス、単一ならデリゲート

242 :デフォルトの名無しさん:2010/11/13(土) 06:11:40
コテハンつけてくれたので嬉しい

243 : ◆Jzt/EX0TGY8T :2010/11/13(土) 06:46:24
>>241
その説明すごくわかりやすい
要は汎用的に使えるクラスがあるという大前提に基づいて
話を進めていかないとだめなんですよ
汎用的なクラスに固有の機能をつけて利用するためにデリゲートを使うと
クラスライブラリを作るとかさ、そういう前提の話じゃないこれって
それを@ITはMAINクラスを汎用クラス的な扱いにしているからわかりにくかったんだよ
それに、calcメソッドをclass1に入れているのもよくないね
あれはclass2にするべき、そしてclass2のメソッドをclass1でやらないとだめでしょ
例えるとclass2を電卓として、class1が入力する側という感じでコードを書けばわかりやすい

説明するのに専門用語でずらずらっと並べられてもわからないんですよね
初心者はすべてのライブラリや文法を理解しているわけじゃないんだから
できるだけ日常使うような言葉だけで説明してほしい

244 :デフォルトの名無しさん:2010/11/13(土) 06:49:33
ごめんちょっと何言ってるのかわからない

245 : ◆Jzt/EX0TGY8T :2010/11/13(土) 06:58:03
ちょっとレベルが高すぎたかな?
もっと簡潔にいうと

@ITのサンプルコードは
IDEやアドオン、プラグイン対応のアプリを開発するための雛形なんだよ
初心者がそんなこと想定して作るかっつーの

246 :デフォルトの名無しさん:2010/11/13(土) 07:02:31
@ITの記事にはIDEやアドオンっていう単語は書かれて無いケド・・・
やっぱり何考えてるのか分からない

247 :デフォルトの名無しさん:2010/11/13(土) 07:07:53
>>209の勝者は>>241かw

248 :デフォルトの名無しさん:2010/11/13(土) 07:14:58
>>240
Callbackとイベントは混同したくない
Handlerはデリゲートの名前に使うからかぶらせたくない
何かほかにありませんか?

249 :デフォルトの名無しさん:2010/11/13(土) 07:31:20
わざわざそこまで説明されなくても
>>146の「述語: 条件式を外から挿す」を読んだだけで
汎用的なものに具体的な処理を注入するって発想にいたると思うんだけどなぁ

250 :デフォルトの名無しさん:2010/11/13(土) 07:38:24
サイト紹介しても
「そこ読んだけどわかりづらい、解説されてない、例えが悪い」
ばっかりだもん。説明してる人、お疲れさまです。

251 : ◆Jzt/EX0TGY8T :2010/11/13(土) 07:54:04
>>249
その考え方が既にプログラミングがわかる人のものの考え方であって

例えば、全く知らない分野について、汎用的なものって言われてもわからないでしょ?
汎用的という言葉の意味はわかっていても、分野によってまったく内容が違う
CAD設計において汎用的なやり方って言われてイメージできますか?
汎用的なものすらプログラミングしたことのな初心者にとっては理解できないんですよ

今で作ったソフトは、ソートも必要ないし、イベントに対して直接動作を書き込んで
できちゃうようなプログラミングばかりだったので、デリゲートの概念なんて意識しないで使っていた

252 :デフォルトの名無しさん:2010/11/13(土) 08:01:10
>>251
汎用的って表現はあなたの>>243から借りて使ってるんだよ

253 :デフォルトの名無しさん:2010/11/13(土) 08:03:56
なに?プログラミングを全く知らない人にデリゲートを説明しなきゃいけないの?そりゃ至難の業だな

254 :デフォルトの名無しさん:2010/11/13(土) 08:06:22
>>251
誰もあんたの想像してる脳内人物を理解できていないってことをそろそろ学べよ
口だけだぞ

255 :デフォルトの名無しさん:2010/11/13(土) 08:09:03
いつまでも俺は初心者だからお前らのわかりにくい説明が悪いんだってスタンスやめてくれよ。
そんなに初心者でいたかったらもうプログラミングなんてやめちゃえよ。

256 : ◆Jzt/EX0TGY8T :2010/11/13(土) 08:12:07
>>252
>>249の発言は、俺がまだ理解できていなかったときに対しての発言でしょ?
その時はプログラミングにおける汎用的なイメージがつかめていなかったんだから
>汎用的なものに具体的〜なんて言ったところで無意味なのはわかるよね?

>>243の時点で理解できたから汎用的と使ったまでで
そのイメージを理解できていなかったときの俺が共有しているというわけではない

つまり、ただの煽りなんだよね

257 :デフォルトの名無しさん:2010/11/13(土) 08:25:07
>>236
VS2008用には記事があるのにね。
http://msdn.microsoft.com/ja-jp/library/bb882637%28v=VS.90%29.aspx

258 :デフォルトの名無しさん:2010/11/13(土) 08:26:13
>>249は今のあなたに向けての言葉ですよ
何で過去のあなたに説明しなきゃいけないの

だいたい>>146の記事には汎用的なんて難しい(笑)言葉でてこないし
汎用的なものに相当する部分は誰でもわかるSum(合計)っていう日常的なものに置き換えられてるだろ

259 :デフォルトの名無しさん:2010/11/13(土) 09:01:42
◆Jzt/EX0TGY8Tまだ生きてたんだ
そろそろSelect拡張メソッドの使い方ぐらいは暗記できた?

260 :デフォルトの名無しさん:2010/11/13(土) 09:04:54
>>257
ありがとう、助かります。

261 :デフォルトの名無しさん:2010/11/13(土) 10:46:47
>>239
いつも
 OnClick += OnClickHandler; // (1)
みたいな名前付けにしてるが、むしろ
 OnClickHandlers += OnClick; // (2)
の方が意味的に自然鴨、

ただソースコードに現れる回数という点では左辺の方が多いから
左辺と右辺を区別するならタイプ量が(左辺)<(右辺)となる(1)の書き方が正義と信ずる、
(実際のところあまり気にしてない)


262 :デフォルトの名無しさん:2010/11/13(土) 11:15:54
>>239
原則privateだしコードから直接呼ぶことはまずないからどうでもいいです
MSのコードだとAcceptButtonClickみたいなのが多い気がする

263 :デフォルトの名無しさん:2010/11/13(土) 11:53:18
>実際のところあまり気にしてない
>どうでもいいです
仰る通りなんですが、せめて自分の中だけでも統一したいなと思いまして。
イベント用のデリゲート、イベント、イベントの発生用メソッドに関しては
.NETのクラスライブラリに習って、〜EventHandler、過去分詞形(Clicked)、On〜としてあるんですが、
これにかぶらない形の受け取り用メソッドの規則が思いつかなかったんですよ。
他にないようなら、>>262のAcceptがよさそうなんでこれを使っていくことにします。



264 :262:2010/11/13(土) 12:08:22
違う違う
AcceptButtonのClickイベントね
もしくはOn(コントロール名)Click

265 :デフォルトの名無しさん:2010/11/13(土) 12:30:53
>>264
なんという恥さらし状態 orz

やはりクラス名(or変数名) + イベント名あたりが妥当なところでしょうか
でもOn + クラス名 + イベント名にしておけば
Onがつくのはイベントを扱うメソッドという括りもできるしこっちもいいな



266 :257:2010/11/13(土) 15:06:49
>>260
本当にそれでいいの?

267 :デフォルトの名無しさん:2010/11/13(土) 15:28:38
>>265

Handle + (イベント名)とかでどう?


268 :262:2010/11/13(土) 15:38:19
>>263
ガイドライン的にはClickedじゃなくてClickだよ
過去形を使うのは、Closing→Closedと対になっている場合

269 :デフォルトの名無しさん:2010/11/13(土) 16:15:58
>>268
ごめんなさい、その部分だけ別のところの規約を間違って書いてしまいました><
標準ライブラリのコード規約だと>>268が正しいです


270 :デフォルトの名無しさん:2010/11/13(土) 18:18:45
ネットワーク越しにファイルコピーをするにはどうすればよいのでしょうか
System.IO.File.Copyだと出来なかったです

271 :デフォルトの名無しさん:2010/11/13(土) 18:20:57
File.CopyってUNC使えるんだっけ

272 :デフォルトの名無しさん:2010/11/13(土) 18:54:10
File.Copyでコピーできるけどねぇ。

273 :デフォルトの名無しさん:2010/11/13(土) 19:06:30
>>270
コンピュータ名 PC01 のC:\Hoge\hoge.txtからローカルC:\Piyo\piyo.txtにコピーなら
File.Copy(@"\\PC01\C\Hoge\hoge.txt", @"C:\Piyo\piyo.txt");
でいけるはずずず

274 :デフォルトの名無しさん:2010/11/13(土) 19:10:57
C:\ を C って名前で共有しとく必要があるな。

275 :デフォルトの名無しさん:2010/11/13(土) 19:12:17
実はネットワークとはインターネットのことだった!とか

276 :273:2010/11/13(土) 19:19:37
>>274
ですです
指摘ありがとう

277 :デフォルトの名無しさん:2010/11/13(土) 20:10:21
どういたしまして

278 :デフォルトの名無しさん:2010/11/13(土) 20:12:05
MessageBox.Showが貧弱なので
Console.WriteLineみたいに何でも表示できるようにしたいです
どのようにすればいいですか?

279 :デフォルトの名無しさん:2010/11/13(土) 20:16:05
#AARRGGBB の色形式に、「なんとか表記」みたいな何か名前ついてますか?
または、何と呼ばれることが多いとかありますか?

280 :デフォルトの名無しさん:2010/11/13(土) 20:16:47
>>278
string.Format

281 :デフォルトの名無しさん:2010/11/13(土) 20:17:23
APIの質問なのか?

282 :デフォルトの名無しさん:2010/11/13(土) 20:19:02
>>280
別の関数使うのじゃなくて

int x=5;
MessageBox.Show(x);
で表示されるようにしたいのです
そうすれば、他のプロジェクトでも使いまわしができると思うので

283 :デフォルトの名無しさん:2010/11/13(土) 20:20:59
C#の質問ならしかるべきところでやれよ糞ハゲ

284 :デフォルトの名無しさん:2010/11/13(土) 20:22:19
>>282
意味不明過ぎる

285 :デフォルトの名無しさん:2010/11/13(土) 20:24:07
>>283
APIスレと同時に開いてるからだぞ♪

286 :デフォルトの名無しさん:2010/11/13(土) 20:26:01
>>284
MessageBox.Show(x.ToString());
とするのは面倒じゃないですか?
場合によったらすごく長いコードになるし

287 :デフォルトの名無しさん:2010/11/13(土) 20:27:02
ToStringでいいなら""+で行けるでしょう

288 :デフォルトの名無しさん:2010/11/13(土) 20:30:40
MessageBoxを継承したMyMessageBox作って
Show2()作って引数.ToString()をShow()に渡せば

289 :デフォルトの名無しさん:2010/11/13(土) 20:32:40
継承するのならオーバーロードしろよ

290 :デフォルトの名無しさん:2010/11/13(土) 20:33:49
>>288
それだとConsol.Writeと同じ機能にならないですね

291 :デフォルトの名無しさん:2010/11/13(土) 20:35:22
「同じ機能」って具体的にはどういう動きを期待してんの?

292 :デフォルトの名無しさん:2010/11/13(土) 20:36:00
>>291
Console.WriteLineと同じ動きです

293 :デフォルトの名無しさん:2010/11/13(土) 20:37:51
Console.WriteLineは使えないの?

294 :デフォルトの名無しさん:2010/11/13(土) 20:38:03
地道にオーバーロード書きまくればいいだろ

295 :デフォルトの名無しさん:2010/11/13(土) 20:38:07
かえればか

296 :デフォルトの名無しさん:2010/11/13(土) 20:51:16
http://ideone.com/2GX4L

public PropatyChanged Propaty_Changed;

//public event PropatyChanged Propaty_Changed;

この部分だけが違うだけで動作はまったく同じになるのですが
何が違うのでしょうか?

297 :デフォルトの名無しさん:2010/11/13(土) 20:53:25
eventを使うと外部からは+=と-=しか使えなくなります

298 :デフォルトの名無しさん:2010/11/13(土) 21:01:20
問題はMessageBox.Show自体に既に複数のオーバーライドが存在していることだな。
Showには21個、WriteLineには19個。まあ全部必要になるわけじゃないにしても400個近くはオーバーロード書かなきゃいかんな

299 :298:2010/11/13(土) 21:02:33
最初のもオーバーロードな

300 :デフォルトの名無しさん:2010/11/13(土) 21:05:07
>>297
それだけの違いだとデリゲートだけで良さそうですね
他に何かあるんでしょうか?

301 :デフォルトの名無しさん:2010/11/13(土) 21:09:57
eventはプロパティの一種なのでインターフェイスに含むことが出来たり、
独自のアクセサを書くことが出来る。

302 :デフォルトの名無しさん:2010/11/13(土) 21:18:47
プロパティの一種ではないと思うけどw
イベントの存在意義は、それがイベントであることでしょ。
謎掛けでもなんでもなくマジでそうだよ。

303 :デフォルトの名無しさん:2010/11/13(土) 21:23:42
>>297を言い換えると
ただのデリゲートだとMainWindow側からPropaty_Changedを発生させたり、MainWindow以外から登録されたメソッドをcp.Propaty_Changed = null;で消せてしまうということ。


304 :デフォルトの名無しさん:2010/11/13(土) 21:23:53
イベントのadd/removeアクセサの例。
private List<EventHandler<MessengerEventArgs>> publish3 =
  new List<EventHandler<MessengerEventArgs>>();
public event EventHandler<MessengerEventArgs> Publish3 {
  add { publish3.Add(value); }
  remove { publish3.Remove(value); }}

イベントハンドラごとに異なる情報を渡したり、呼び出す順番をコントロールしたり、
例外が起きた場合の処理を特別にやりたいとかそういったケースで使う。

305 :デフォルトの名無しさん:2010/11/13(土) 21:30:56
>>302
プロパティに非常に近い概念だよ
実際VBではadd/removeアクセサを定義したイベントをイベントプロパティと呼ぶ
プロパティはgetとsetのメソッドを一括りにしたものであるのに対して
イベントはadd/removeメソッドを一括りにしたもの

306 :デフォルトの名無しさん:2010/11/13(土) 21:34:09
決定的なのは>>304だよねえ
何個も入るってこと

307 :デフォルトの名無しさん:2010/11/13(土) 21:35:05
>>303
イベントでもアクセサ使えば、別のクラスでイベント発生させられる

308 :デフォルトの名無しさん:2010/11/13(土) 21:38:10
デリゲートのすごい機能また発見した

Form2からForm1のメソッドを利用したい場合
Form1のインスタンスをForm2に渡して利用させたりするけど
デリゲート使えばそんなことせずにあらゆるクラスからそのメソッドを利用できる

なんでこんな重要なこと教えてくれないんだよ

309 :デフォルトの名無しさん:2010/11/13(土) 21:39:12
え、え、あ、いや、あの、ごめんなさい

310 :デフォルトの名無しさん:2010/11/13(土) 21:45:24
条件をクラスに挿入できるとか、
非同期プログラミングとか
イベント処理とか・・
そんな難しいことばっかり言って

初心者が最初に一番悩むのが、
「Form2からForm1のメソッドを利用したい」
ここじゃないか

よく質問でもあるじゃない、 from2.Form1=this;
みたいなの・・・・

解説サイトもこういうこと言ってくれれば
初心者もデリゲートにすぐ食いつくのに

311 :デフォルトの名無しさん:2010/11/13(土) 21:45:53
>>304
こんな書き方もあるのか
普段アクセサなんて使ってなかったから全然知らんかった
でもpublish3に入ったそれぞれの値って区別できるの?
追加された逆順で呼び出すぐらいの操作しか思いつかない

312 :デフォルトの名無しさん:2010/11/13(土) 21:46:32
プロパティ公開しておけばいいだけなのに
わざわざそんなことする方が理解に苦しむよ

313 :デフォルトの名無しさん:2010/11/13(土) 21:47:11
またキチガイか。

314 :デフォルトの名無しさん:2010/11/13(土) 21:47:52
>>311
List<T>.Removeの説明をよく見ろ

315 :デフォルトの名無しさん:2010/11/13(土) 21:53:02
>>306
何個もってハンドラを?
デリゲートにもメソッドを何個も入れられるよ。マルチキャストってやつ。

316 :デフォルトの名無しさん:2010/11/13(土) 21:57:36
>>315
でもデリゲートだと特定のものを削除できない

317 :デフォルトの名無しさん:2010/11/13(土) 21:58:28
キチガイは書くときは必ずトリップ付けて出てきてくれよ

318 :デフォルトの名無しさん:2010/11/13(土) 22:00:26
>>314
いや、Removeは比較対象のvalueがあるから取り除けるのはわかる。
protected virtual void OnPublish3(){
  foreach (var item in publish3) {
    try {
      item(...);
    } catch {
}}}
って書けば例外を個別に処理できるのもわかる。
だけど追加されるデリゲートは内部からは他のものと区別できないから(できる?)
並び替えも、ハンドラごとに違う情報を渡すってのも良く解らんなぁと思って。


319 :デフォルトの名無しさん:2010/11/13(土) 22:03:24
できるぞ


320 :デフォルトの名無しさん:2010/11/13(土) 22:03:44
>>316
特定のデリゲートを削除できるよ。
dele -= new TestDelegate(hoge);
てな感じで。

321 :デフォルトの名無しさん:2010/11/13(土) 22:09:39
おそらくForm.Closingイベントで使ってる。
CancelEventArgsをチェックしてCancel=Trueになったら処理を中断している。


322 :デフォルトの名無しさん:2010/11/13(土) 22:10:05
そろそろ結論お願いします

323 :デフォルトの名無しさん:2010/11/13(土) 22:11:23
結局デリゲートというものがありながら、なぜイベントなんて構文を用意したかというと、
外部からデリゲートを実行してほしくない、nullとか入れられたくない、
使用者はデリゲートの追加と削除だけ行えばいいんだ。
という理由によりわざわざ用意したんだね。
他になにか理由ある?

324 :デフォルトの名無しさん:2010/11/13(土) 22:14:21
ないよ

325 :318:2010/11/13(土) 22:14:31
デリゲートのTargetプロパティから普通にオブジェクトの情報参照できるから区別できるのね


326 :デフォルトの名無しさん:2010/11/13(土) 22:21:12
>>321
リフレクタで覗いてみたがListじゃなくて単純なマルチキャストだったよ


327 :デフォルトの名無しさん:2010/11/13(土) 22:37:32
>>307
どうやって?

328 :デフォルトの名無しさん:2010/11/13(土) 22:43:55
C#では定義できないけどイベントアクセサにはaddとremoveの他にraiseというのがある

329 :デフォルトの名無しさん:2010/11/13(土) 22:44:38
>>327
add
{
class2.class2Event+=value;
}

330 :デフォルトの名無しさん:2010/11/13(土) 22:47:54
>>328
そんなのあるんだ

331 :デフォルトの名無しさん:2010/11/13(土) 22:48:33
jpgをgifにしたいのですが、綺麗に減色する方法はありますか?

332 :デフォルトの名無しさん:2010/11/13(土) 22:49:30
あります。

333 :デフォルトの名無しさん:2010/11/13(土) 22:50:31
ILにはraiseアクセサがある。
VBのイベントにはRaiseがあるが、なぜかIL上のraiseアクセサは使っていない。

334 :デフォルトの名無しさん:2010/11/13(土) 22:53:14
WebBrowserでページを読み込む→読み込まれたページにある画像を保存、という作業って何通りくらいのやり方がありますかね
自分だとソースから画像のアドレスを分析して直ダウンロード、くらいしか思いつかないのですが・・・

他に方法ってあるのでしょうか
ちょっと気になったので



335 :デフォルトの名無しさん:2010/11/13(土) 22:53:22
わざわざRaise使わなくても
public void Raise〜(e){ this.handler(this, e ) }
でできるような希ガス

336 :デフォルトの名無しさん:2010/11/13(土) 22:57:31
DocumentにImagesぷろぱちーなかったっけ

337 :デフォルトの名無しさん:2010/11/13(土) 23:25:18
>>336
ありました!
ありがとうございます

・・・そしてすいません
どうすればImage型の変数に入れられるんでしょうか?
どうも変換の仕方がわからなくて;

338 :デフォルトの名無しさん:2010/11/13(土) 23:30:49
そろそろ眠くなってきたお

339 :デフォルトの名無しさん:2010/11/13(土) 23:44:41
338.Sleep(new TimeSpan(7, 0, 0));

340 :デフォルトの名無しさん:2010/11/13(土) 23:50:38
338.Exit();

341 :デフォルトの名無しさん:2010/11/13(土) 23:51:29
>>337
src使って画像ファイルをダウンロード、でいいんじゃね?
キャッシュ効きそうな気するし。

IHTMLElementRender.DrawToDC()とかでなんとかできんのかなと思うけど。

342 :デフォルトの名無しさん:2010/11/13(土) 23:53:55
WebClient の DownloadData のち ImageConverter

343 :デフォルトの名無しさん:2010/11/14(日) 00:06:02
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\ja
の中にあるxmlの英語版が欲しいです。
英語版をインストールしたらenディレクトリが出来たりするのでしょうか?
どなたか、英語版をインストールしている方、調べてみて下さいませんでしょうか?

344 :デフォルトの名無しさん:2010/11/14(日) 00:10:19
自分でやれ

345 :デフォルトの名無しさん:2010/11/14(日) 00:26:11
>>343
DLLのXMLドキュメントならv4.0フォルダに入ってない?

346 :デフォルトの名無しさん:2010/11/14(日) 00:37:28
>>345
どうもです。
どうやら、3.0と3.5とSilverlightの3.0と4.0は英語と日本語の両方が入っているけれど、
4.0だけ、jaしか入らないようです……
なるほど……

347 :デフォルトの名無しさん:2010/11/14(日) 08:29:16
勉強のため、
NetworkStream、TcpClient を使って、HTTP通信を試してますが、
HTMLが全て受信できなくて困っています。
いつも同じ場所で受信できなくなり、
それ以降は無限ループさせて Read させても、受信できません。

そもそも、レスポンスの Content-Length: が想定よりも、短く返ってきているため、
apache の問題のような気もします。
(ブラウザでアクセスした場合は、正常に動作しています)

また、NetworkStream は、ブラウザでアクセスするよりも4倍近く遅いのですが、
そう言うものなのでしょうか?

348 :デフォルトの名無しさん:2010/11/14(日) 08:32:20
chunkedに対応していないとみた

349 :デフォルトの名無しさん:2010/11/14(日) 09:28:34
>>341
ありがとうございます
ちょっと調べてみますね

350 :347:2010/11/14(日) 09:33:56
>>348
特にそう言った指定はしていないのですが、
NetworkStream と言うよりも、HTTP の話と言うことですかね。
ちょっとそっち方面で再度調べてみます。ありがとうございました。

351 :デフォルトの名無しさん:2010/11/14(日) 12:53:56
C#のチャートコントロールについて質問です。

エリアチャートを使用し、塗りつぶしを行いたいのですが
マイナスの値をとった場合、色塗りの基準点が自動的に0からになってしまいます。

Y軸の最小から塗りつぶしを行いたいのですが、どのような方法があるでしょうか。

また、空の値を入れる方法と、空の値の間を線グラフに表示しない方法もありましたら
ご教授いただければ幸いです。

値はDBからの取得ではなく、算出して設定しています。
よろしくお願いいたします。

352 :デフォルトの名無しさん:2010/11/14(日) 13:56:59
うん


353 :デフォルトの名無しさん:2010/11/14(日) 17:02:18
へえ

354 :デフォルトの名無しさん:2010/11/14(日) 18:19:18
WPF遅いよ

355 :デフォルトの名無しさん:2010/11/14(日) 20:25:34
WPFってGUIが複雑になるほど
どこでどんなデータを必要としているのかわかりにくくないですか?
こういう場合簡単にわかる方法は用意されてないの?

356 :デフォルトの名無しさん:2010/11/14(日) 20:39:34
またおまえか

357 :デフォルトの名無しさん:2010/11/14(日) 20:40:01
そんなもんWPFとか関係ないだろ
ちゃんと仕様書を書け

358 :デフォルトの名無しさん:2010/11/14(日) 20:40:49
仕様書?本職でもないのにそんな面倒なことしてられるかよw

359 :デフォルトの名無しさん:2010/11/14(日) 20:45:00
面倒とか言ってて破綻したら世話無いわ
UMLでも描いとけ

360 :デフォルトの名無しさん:2010/11/14(日) 20:46:52
UMLなんて面倒すぎるだろ
GUIが必要としているプロパティがパっとわかるような機能ないの?

361 :デフォルトの名無しさん:2010/11/14(日) 20:47:58
無いよ。帰れ。

362 :デフォルトの名無しさん:2010/11/14(日) 20:55:24
こんな簡単なことすらできないのか
なんのために分離したんだよ

GUIと分離コードの連結部分がどのようになっているか
視覚的に見れないなんて、把握しづらいじゃないか

363 :デフォルトの名無しさん:2010/11/14(日) 20:58:42
そんなことはあらかじめ決めているべきことであって
後でわからなくなること自体がおかしい

364 :デフォルトの名無しさん:2010/11/14(日) 21:39:44
>>363
ここは初心者スレ
大抵は作りながらあれこれ機能を足していくもの

それに、全体把握して作れるにしても
あって悪い機能ではないだろ
何でマイクロソフトに媚びた発言してるの?

365 :デフォルトの名無しさん:2010/11/14(日) 21:40:44
またお前か。

366 :デフォルトの名無しさん:2010/11/14(日) 21:41:40
トリップつけとけよ。

367 :デフォルトの名無しさん:2010/11/14(日) 21:50:17
きちんと拡張性を意識した設計ならあとで分からなくなるとかないと思うんだ

368 :デフォルトの名無しさん:2010/11/14(日) 21:52:36
>>367
それを初心者に求めるなよ

369 :デフォルトの名無しさん:2010/11/14(日) 21:53:16
わかんなくなって困る、ってんなら、GUIとコードを視覚化する
ツールでも作れば? せっかく開発ツール使ってんだしさ。

370 :デフォルトの名無しさん:2010/11/14(日) 21:55:07
とりあえずオブジェクト指向に即したコード書いてれば
拡張性を意識しなくてすむんじゃね?

371 :デフォルトの名無しさん:2010/11/14(日) 21:56:53
拡張性を意識した設計のための勉強ってどうすればいいのだろう

372 :デフォルトの名無しさん:2010/11/14(日) 21:57:34
VとVMのバインドなんて単純作業だから構造把握できない理由になんてならんだろ
自分の能力不足をMVVMのせいにするなよ

373 :デフォルトの名無しさん:2010/11/14(日) 21:57:56
>>370
そんなことはない
拡張性考えないで素直に作ったらクラス間が依存しまくりで拡張性なんか無くなる

374 :デフォルトの名無しさん:2010/11/14(日) 21:59:18
>>373
クラス間が依存しまくるコードってオブジェクト指向の方向性として正しいか?

375 :デフォルトの名無しさん:2010/11/14(日) 21:59:19
例えば2chブラウザのような複雑なものを作ろうとした場合
大量にbindingするじゃない
xamlのプロパティから分離コードに、又はその逆に飛べたりすりゃまだいいが
それができないからもう、どこがどこバインドしててどうなってるか
わからなくなるんじゃない?

376 :デフォルトの名無しさん:2010/11/14(日) 22:02:59
わからなくならないように作りましょう

377 :デフォルトの名無しさん:2010/11/14(日) 22:03:18
>>374
たとえば、オブジェクトAでイベントが発生したことをオブジェクトBが受け取りたいとすると
素直に考えりゃAがBにメッセージを送る、つまりAのクラスでBのメソッドを呼ぶのが一番自然なわけだけど
そうしないでObserverパターンやデリゲートを使うのは、やっぱり拡張性を意識してるわけだ。

378 :デフォルトの名無しさん:2010/11/14(日) 22:03:46
EEしか使ったことないけどProだとUML生成してくれるんだろ?
活用しようぜ

379 :デフォルトの名無しさん:2010/11/14(日) 22:04:58
>>376
できるわけないだろ
2chブラウザなんて大量のコントロール配置するんだぞ
それをxamlでズラーっと並べられているのを読めって言われてもな
昔のBasicインタプリタじゃないんだからさ
どうにかしてほしいわ

380 :デフォルトの名無しさん:2010/11/14(日) 22:08:09
え?2chブラウザのUIってそんな複雑か?

381 :デフォルトの名無しさん:2010/11/14(日) 22:09:47
うーん、Jane見る限り以前作ったショッピングサイト管理ツールの方が
コントロール10倍くらい多いが

382 :デフォルトの名無しさん:2010/11/14(日) 22:10:52
WPFならツールボタンやメニューアイテム一つ一つがViewModelを持つようにするんだろうから
そんなに複雑にはならんでしょ

383 :デフォルトの名無しさん:2010/11/14(日) 22:11:16
ショッピングサイト管理ツールって
サイト自体の管理ツール?
想像しただけで恐ろしい

384 :デフォルトの名無しさん:2010/11/14(日) 22:12:27
お前らは楽できる機能が要らないということか?
だったらアセンブラで書けよ
なんとために、B,C,C#ができたんだよ
できればいいだけなら、C#いらないだろ

385 :デフォルトの名無しさん:2010/11/14(日) 22:13:37
>>382
だからさ、XamlからすぐVMのコードに飛べないだろ?
XamlでVMのプロパティが候補に出ないだろ?

こういうのが面倒なんだよ

386 :デフォルトの名無しさん:2010/11/14(日) 22:14:21
無い物ねだりしてもしゃーないし、
3つTreeView・ListViewがあるだけのビューで困るのはスキル不足としか

387 :デフォルトの名無しさん:2010/11/14(日) 22:14:47
>>385
無いものはしょうがないんだからMSに要望でも出しとけば?

388 :デフォルトの名無しさん:2010/11/14(日) 22:16:51
>>385
それかそう言うのができるもっと素晴らしい言語を探すたびに出てください。

389 :デフォルトの名無しさん:2010/11/14(日) 22:16:58
>>386
そんな単純なもの作っているんじゃない

390 :デフォルトの名無しさん:2010/11/14(日) 22:18:16
「例えば2chブラウザのような複雑なもの」はどこいった

391 :デフォルトの名無しさん:2010/11/14(日) 22:18:51
C#++はまだですか

392 :デフォルトの名無しさん:2010/11/14(日) 22:21:19
どんな2ちゃんねるブラウザを使ってるのか興味あるわ
それらがC#よりも便利な言語で開発されているなら考え改めるけど

393 :デフォルトの名無しさん:2010/11/14(日) 22:21:59
日本人はこういう発想だから、snoopやXAML Power Toysみたいなのが作れないんだろうな
現状で甘んじてるてて向上心がない

394 :デフォルトの名無しさん:2010/11/14(日) 22:23:25
>>390
3つTreeView・ListViewがあるだけの2chブラウザしかお前は見たことがないの?

>>392
ツインテールも重いだけだろ

395 :デフォルトの名無しさん:2010/11/14(日) 22:24:32
ここは初心者向けのスレじゃなかったのかよ

396 :デフォルトの名無しさん:2010/11/14(日) 22:25:14
C#5.0で何の機能がつくのかな

C#4.0だとダイナミックとか
なんか関数のオーバーロードみたいなやつ(引数なしの関数使えるやつ)

とか出てきて、クソ楽になったんだが。
いちいち型とか決めるのめんどくさいから全部ダイナミックでいいじゃん、みたいな。

397 :デフォルトの名無しさん:2010/11/14(日) 22:25:52
うわ、ひょっとしてtwintailスレのキチガイか

398 :デフォルトの名無しさん:2010/11/14(日) 22:27:20
文法覚えるより、膨大なライブラリから目的の機能を見つけるのが非常に面倒

399 :デフォルトの名無しさん:2010/11/14(日) 22:27:35
>>395
初心者スレだけどすさまじい向上心を持った初心者が現れたのです
自分の必要な開発補助が存在しないことにご立腹みたいです

400 :デフォルトの名無しさん:2010/11/14(日) 22:29:27
とりあえず相談室かVisualStudioスレ行って。
ここは

Q これどうやるんですか
A こう
Q できた、ありがとー♪

こういうレベルのスレだから。

401 :デフォルトの名無しさん:2010/11/14(日) 22:38:22
@ITのWPF解説はほんと糞だったわ
あそこみてもWPFの概要がまったく理解できてなかったらしく
パネルにボタン配置する方法すらわからなかったわ
たかがこの程度の機能をつけるのに何時間もかけさせやがって

ItemsControlというのがあり
これがコレクションデータを表示ために必要
これに対して、どのようにボタンを配置するか、
パネルはないを使うかをテンプレートで設定しなければいけない

こういう根本的なことをなぜ解説しないんだよ
どっかまともなWPFを解説するサイトないのかねー

402 :デフォルトの名無しさん:2010/11/14(日) 22:40:32
頼むからトリップ付けてくれ

403 :デフォルトの名無しさん:2010/11/14(日) 22:42:57
>>401
それはお前が悪い
@ITのドトネト記事は
インサイダーNET
NET開発者中心
っていう二種類があるが
インサイダーNETは初心者中心
NET開発者中心はある程度の知識や経験がある人向け

WPF入門はNET開発者中心だから、おまえみたいな初心者が見るものじゃない

404 :デフォルトの名無しさん:2010/11/14(日) 22:43:41
なんでもタダでもらえると思い込んでる、クレクレ君か・・・。

405 :デフォルトの名無しさん:2010/11/14(日) 22:43:44
もうほっとけって

406 :デフォルトの名無しさん:2010/11/14(日) 22:44:44
データの表示と入力に必要な知識 − @IT
http://www.atmarkit.co.jp/fdotnet/vblab/uiframework_02/uiframework_02_05.html

ここだよここ
ItemsControlと言って置きながらListBox使ってテンプレート作ってるし
どうしてこんなややこしくするのかねー
ここでItemsControlを使ってコード書いてくれればすぐわかったのに

407 :デフォルトの名無しさん:2010/11/14(日) 22:45:30
>>401
> あそこみてもWPFの概要がまったく理解できてなかったらしく
ごめん日本語で

408 :デフォルトの名無しさん:2010/11/14(日) 22:46:31
日記が書きたいなら別にスレ立ててやれ

409 :デフォルトの名無しさん:2010/11/14(日) 23:05:04
>>407
自分自身を客観的に見ることはできるんです
あなたとは違うんです

410 :デフォルトの名無しさん:2010/11/14(日) 23:08:12
>>401 のセリフが客観的とか、それこそ日本語でOK

411 :デフォルトの名無しさん:2010/11/14(日) 23:09:04
>なんか関数のオーバーロードみたいなやつ(引数なしの関数使えるやつ)
ってなに?

412 :デフォルトの名無しさん:2010/11/14(日) 23:11:40
4.0じゃないけど拡張メソッドか?

413 :デフォルトの名無しさん:2010/11/14(日) 23:11:51
4.0 の話してるし、エスパーするとデフォルト引数のことかね?

414 :デフォルトの名無しさん:2010/11/14(日) 23:12:18
オプション引数でしょ
バージョニングの問題があるからアセンブリの外から見えるメンバには使えないよ
FxCopで警告が出る

415 :デフォルトの名無しさん:2010/11/14(日) 23:14:51
XAMLで登録した、<Window.Resources><BitmapImage>ってCS側で利用するのどうすんの?

416 :デフォルトの名無しさん:2010/11/14(日) 23:19:52
>>413-414
static int Sum(int x = 0, int y = 0, int z = 0){ return x + y + z; }
これのことか
確かにこれは便利だね


417 :デフォルトの名無しさん:2010/11/14(日) 23:25:55
>>415
this.Resourcesからx:Keyでつけたキー名で取得

418 :デフォルトの名無しさん:2010/11/14(日) 23:27:19
>>415
FindResource

419 :デフォルトの名無しさん:2010/11/14(日) 23:35:30
>>417 >>418
thx たすかった。

420 :デフォルトの名無しさん:2010/11/15(月) 00:42:28
よくWPFのDataGridは重たいって聞くけど
リアルタイムで項目が追加されるデータソースを表形式で表示するような場合
WinFormsのDataGridView(仮想モード)と比べて体感できるほど違いはある?
データ多くて10万件くらいまで、速い時で秒間30項目くらい追加されます。

421 :デフォルトの名無しさん:2010/11/15(月) 00:46:59
試せばいいじゃん

422 :デフォルトの名無しさん:2010/11/15(月) 00:49:32
>>421
WPF初心者がよくわからないままDataGrid使っても
本来のパフォーマンスを出せないんじゃないかという心配が。
それはいいわけかwとりあえず試してみる

423 :デフォルトの名無しさん:2010/11/15(月) 00:56:32
WPFのDataGridはスクロールが重すぎて実用にならん、という話は聞いたことがあるな
しかし10万行をユーザにどうしろってんだ…

424 :デフォルトの名無しさん:2010/11/15(月) 00:57:51
>>423
Wireshark(パケットキャプチャソフト)みたいなイメージです
項目がどんどん追加されて流れていくみたいな感じ

425 :デフォルトの名無しさん:2010/11/15(月) 00:59:06
VisualStudioの2011はでそうなのかな。
今更2010Pro買うか迷うわぁ・・・。

426 :デフォルトの名無しさん:2010/11/15(月) 01:04:17
>>420
比べると3倍ぐらい重い
ソートも遅い
スクロールのfpsは1桁以下
通常表示でも30fps程度

これで3Dやろうなんてのは無能

427 :デフォルトの名無しさん:2010/11/15(月) 01:05:16
>>423
1000行程度で十分重いです^^

428 :デフォルトの名無しさん:2010/11/15(月) 01:08:45
そもそも表示するだけならListViewでよくね?

429 :デフォルトの名無しさん:2010/11/15(月) 01:09:06
とりあえず自分でも作って試しますが、
>>426-427を読む限り、DataGridはむりそうですね
WPF化自体を諦めるべき?


430 :デフォルトの名無しさん:2010/11/15(月) 01:13:01
>>429
個人で使うだけで、尚且つハイスペックマシン(GTA4を3つ同時起動できるぐらい)
ならやってもいいんじゃない?

431 :デフォルトの名無しさん:2010/11/15(月) 01:17:01
>>428
よくわかってないんですが、ListView + データ編集機能 = DataGridってことですか?
ListViewならパフォーマンスも期待できる?

>>430
そんな灰スペPC持ってないです><

432 :デフォルトの名無しさん:2010/11/15(月) 01:26:21
>>431
とにかくどんなアルゴリズムでやろうとも
WindowsフォームやC++MFCで作られたものと
比べて体感できるほど重い、もっさりだよ

20行程度でソートするのに0.5秒かかるからなww
どこでスペック食ってるんだよとw

433 :デフォルトの名無しさん:2010/11/15(月) 01:29:38
>>431
VSのIDEみてみろ。あのもっさり感
超エリート集団が作ったのでさえ、あのもっさりだよ?
パフォーマンス気になるならC++がオススメ
手間が多少かかるが、速度的に不満が出ることはない
もちろん、クライアントもランタイムや速度で不満が出ない

434 :デフォルトの名無しさん:2010/11/15(月) 01:34:43
>>432-433
まじですか。上司からは、スムーズな動作(見た目的に)を要求されてるんでWPFはダメそうですね。
DirectX使ってるからこういうのは有利なのかなと思ったんですが勘違いでしたか。

やはりC++ですか。
C#以外でGUI作ったことないんですがMFCなんかを勉強すればいいんですかね

435 :デフォルトの名無しさん:2010/11/15(月) 01:36:12
失礼、>>432にC++MFCって書いてありますね。
ちょっとMFC勉強してきます。

436 :デフォルトの名無しさん:2010/11/15(月) 01:40:14
いまからMFC勧めるとか・・・

有料IDEじゃないと開発環境そろわないのに・・・

437 :デフォルトの名無しさん:2010/11/15(月) 01:41:40
シリアルあればだれでもUltimate体験版を製品版にできるし

438 :デフォルトの名無しさん:2010/11/15(月) 01:43:37
>シリアルあれば
なにそれ怖い。犯罪?

439 :デフォルトの名無しさん:2010/11/15(月) 01:51:54
こうして多少どころじゃない茨の道を進むことになったものがまた一人

440 :デフォルトの名無しさん:2010/11/15(月) 01:55:08
>>437
2010は封じられたんじゃないの?

441 :デフォルトの名無しさん:2010/11/15(月) 01:56:37
封じるとか犯罪とかなによw
ちゃんと購入してシリアル入れれば製品版になるよ

442 :デフォルトの名無しさん:2010/11/15(月) 01:59:01
まあシリアルなんかいれなくても評価版をインストールしてしまえば
展開されるATL+MFCのフォルダをピーコしてExpress環境で
使えるようにしちゃえばいいだけなんだけどねw

443 :デフォルトの名無しさん:2010/11/15(月) 02:06:40
そんな面倒なことするより、あるファイルにシリアル入れてインスコすればだれでもUltimate体験版を製品・・・

444 :デフォルトの名無しさん:2010/11/15(月) 02:10:23
>>422
>WPF初心者がよくわからないままDataGrid使っても本来のパフォーマンスを出せない
スクロールする度にサイズ調節が走ってレイアウト変更するようなやつ作っておいて、遅いとDataGridのせいにしてる人はよく居る。
余計なサイズ調節が入らないようにして仮想化(EnableRowVirtualization/EnableColumnVirtualization)しとけばだいぶマシになる。それでも他に比べりゃ遅いけど

WPFのDataGridは色々入っててオーバースペックなので、軽い機能制限版がいいならListViewで作っちゃってもいい。WPFでは(ListViewを含む)あらゆるコントロールでデータ編集機能を実装できる。
WinFormsのDetaGridで十分ならそれでもいい。WPFに組み込みたいならWindowsFormsHost。

>C++(略
C++とMFCでDataGrid?w まぁいいけど

445 :デフォルトの名無しさん:2010/11/15(月) 02:16:53
どうやったらこんなに重いソフトが作れるんだろうな
3Dゲームがあれだがグリグリ動くのに
どうしてこれはこんなに重いのか

446 :デフォルトの名無しさん:2010/11/15(月) 02:22:00
コントロール名で検索してもWPFの記事ばっかり見つかる
もうだれもwinフォームで作ってないのか?

447 :デフォルトの名無しさん:2010/11/15(月) 02:21:59
つーかMVVMを実現するためにテキストを使ってるんでしょ?

448 :デフォルトの名無しさん:2010/11/15(月) 02:45:32
DataGridもさることながら、.NETとMFCのPropertyGridの使い勝手の差はひどい。

449 :420:2010/11/15(月) 02:50:14
とりあえずWPFのDataGridとWindowsのDataGirdViewで試してみましたが、
WPFのほうがスムーズでCPU使用率も低くなりました。
DataGirdViewの仮想モードの使い方が間違ってるのかな。

そして時間がががががが

450 :420:2010/11/15(月) 03:07:48
>>449が言葉足らずなので補足しておきます
データの追加がない時の手動スクロールに関しては
みなさんの仰る通りWindowsFormの方が圧倒的に優れていましたが、
30msごとにデータを追加してその項目を表示するという動作に関しては
WPFのほうがカクツキが少なく、CPU使用率も半分程度でした。

451 :デフォルトの名無しさん:2010/11/15(月) 03:11:39
>>450
それWinFormで自動ソートとかにしてるんじゃないの?

452 :デフォルトの名無しさん:2010/11/15(月) 03:36:51
頻繁に追加・変更・削除するならWPFでいいんじゃないか?

453 :デフォルトの名無しさん:2010/11/15(月) 03:54:23
オサレなGUIを作りたいならWPFでいいんじゃないか?

454 :デフォルトの名無しさん:2010/11/15(月) 06:11:39
ブラシ使ったらすんごいオサレなGUIができちゃった
これは友達に自慢できるよ

結局、WPF学ぶにはここから順にやってったほうが身に付くな
@ITはだめだ、簡潔過ぎて頭に入らない

Windows Presentation Foundation
http://msdn.microsoft.com/ja-jp/netframework/aa663326.aspx

455 :デフォルトの名無しさん:2010/11/15(月) 06:41:10
>>450
.NET Framework 4のWPFに追加されるDataGridの縦スクロールの動画(凄く・・・遅いです・・・) - かずきのBlog@Hatena
http://d.hatena.ne.jp/okazuki/20100225/1267070169

456 :420:2010/11/15(月) 06:57:22
>>444
なるほど参考になります。

>>451
そんな機能ありましたっけ?

>>455
なるほど、列数が増えると遅くなるのか。
あとで試してみます。

457 : ◆Jzt/EX0TGY8T :2010/11/15(月) 08:30:57
ふー

・今日はブラシでオサレGUI
・DataGridよりListViewの方が軽いとのことでxaml大幅に改良
でも、分離コードは全然弄らなくてよかった。すげーw
・WindowsフォームでもそうだったがWPFのListViewにソートついてないんだなこれが、ソートはまた明日だな
・ListViewで一部の列の右揃えで苦戦したわwwなんなんだこれは

着実に進んではいるが2週間でまだGUIができてないってwwwいつになったら完成だよ

458 :デフォルトの名無しさん:2010/11/15(月) 08:40:09
君の個人的な進捗なんてだれも興味ないんだけどやめてくれない?

459 :デフォルトの名無しさん:2010/11/15(月) 09:12:12
つ チラシの裏

460 :420:2010/11/15(月) 09:22:52
>>455
列数を3から実際に使う予定の8に増やしたところ劇的にパフォーマンスが落ちました。
やっぱDataGrid使えないです。
DataGridViewの方はRowCountを設定している部分がボトルネックのようです。回避不可能?
とりあえず、ListViewは列が増えてもそれなりに動いてくれたのでこれで行きます。
いろいろなご意見ありがとうございました。

461 :デフォルトの名無しさん:2010/11/15(月) 09:25:45
リストビューでJpeg画像をImageListで表示してます。
でもパレットが256色以下に劣化してしまいます。
フルカラーの画像はリストビューでは表示出来ない仕様でしょうか?

462 :デフォルトの名無しさん:2010/11/15(月) 09:33:00
ImageListにbitなんちゃらみたいなプロパティがあるはず。
なんちゃら32bitにしとけばおk。

463 :デフォルトの名無しさん:2010/11/15(月) 09:47:27
みんなエディタのフォント何を使ってるの?

464 :デフォルトの名無しさん:2010/11/15(月) 09:53:23
>>460
WPFのDataGridはSilverlightからの移植だから
もともとそんなに多量のデータを表示するようにはできてない

465 :461:2010/11/15(月) 10:02:39
>>462
ありがとう、うまくいきました!!!!
imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit;
これで一発でした、PictureBoxに表示してTableLayoutPanelに乗っけてとか
やってたら何かややこしい事になってたよ


466 :デフォルトの名無しさん:2010/11/15(月) 10:17:32
>>463
めいりお

467 :デフォルトの名無しさん:2010/11/15(月) 10:31:14
>>463
Consolas一択
等幅は必須条件

468 :デフォルトの名無しさん:2010/11/15(月) 10:42:28
>>466
メイリオすごく綺麗・・・
今までゴクックにしてたのが馬鹿みたいだ

469 :デフォルトの名無しさん:2010/11/15(月) 10:56:52
>>468
重要なのは
l | ! i 1 0 O o : ;
が簡単に見分けられるか
メイリオだとちょっと怪しい

470 :デフォルトの名無しさん:2010/11/15(月) 11:08:18
>>469
Consolasは2008までと書いてたけどインスコしたら使えた
プログラミング用にはこっちのがいいですね

471 :デフォルトの名無しさん:2010/11/15(月) 11:10:36
Consolas以外ありえん

472 :デフォルトの名無しさん:2010/11/15(月) 12:05:39
ListViewに2列のColumnがあって、常にその2列の幅の合計がListViewの幅と同じになるようにしたいのですが、

private void listView1_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
{

int idx = e.ColumnIndex;
int nw = e.NewWidth;

if (idx == 0) { listView1.Columns[1].Width = listView1.Width - nw; }
if (idx == 1) { }

}

ユーザーが0列目の幅を変えた時はこれで1列目が自動的に変化してくれるのですが、
逆の条件if(idx==1)を書くと無限ループになってしまうのでできません。
if(idx==1){ e.cancel=true;}ではダメなようです。
とにかく列の無い空白部分が表示されなければいいのですが、なにか方法はありませんか?


473 :デフォルトの名無しさん:2010/11/15(月) 12:26:39
int w = listView1.Columns[1 - e.ColumnIndex].Width;
int nw = listView1.ClientSize.Width - e.NewWidth;
if (w != nw)
listView1.Columns[1 - e.ColumnIndex].Width = nw;
これでうまくいったが

474 :デフォルトの名無しさん:2010/11/15(月) 12:46:41
ChangingじゃなくてChangedイベントに書いたらできました。
お騒がせしました。

475 :デフォルトの名無しさん:2010/11/15(月) 13:06:48
フォントをCourier Newに変えたらJavaのソースみたいに見える

476 :デフォルトの名無しさん:2010/11/15(月) 13:28:47
Bitstream Vera Sans Mono一択

477 :デフォルトの名無しさん:2010/11/15(月) 13:57:41
ListViewのColumnのWidthは、-1と-2がColumnの幅を整える特別な数字。
ちょっと調べてみ。

478 :デフォルトの名無しさん:2010/11/15(月) 16:46:58
(´・ω・`)…

479 :デフォルトの名無しさん:2010/11/15(月) 17:04:23
・ω・`)…

480 :デフォルトの名無しさん:2010/11/15(月) 20:07:55
ω・`)…

481 :デフォルトの名無しさん:2010/11/15(月) 21:04:59
C#は先行宣言できない、でおk?

// 修正不可のコード
public enum Hoge
{
foo1
}

Hogeにfoo2を追加したいが、方法はあるでせうか?



482 :デフォルトの名無しさん:2010/11/15(月) 21:49:21
新しい列挙体を作るとか

483 :デフォルトの名無しさん:2010/11/15(月) 22:07:17
>>480
・`)…



484 :デフォルトの名無しさん:2010/11/15(月) 22:31:31
>>481
`)…  できない。どうしてもというならもう少し詳しい状況説明を

485 :デフォルトの名無しさん:2010/11/15(月) 23:10:21
>>481
というかなんでロジックじゃないのに修正不可なの?
影響範囲とか簡単に調べれそうだけどw

486 :デフォルトの名無しさん:2010/11/15(月) 23:30:09
>>485
ソースが手元にないとかじゃない?

487 :481:2010/11/15(月) 23:50:37
VC++だと元のソースに手を入れなくてもenumにメンバー追加が可能(らしい)
で、C#も何かうまい方法あるの?という質問だった

C#はenumにメンバー追加するとき、元のソース修正は必須
であれば、受け入れるしかないか…


代替としてクラスで定義しておけば、MyHogeからfoo1が参照できるか
と考えています(型がenumかintの違いはあるが)

// 修正不可
public class Hoge
{
public const int foo1 = 0;
}

// 追加のソース
public class MyHoge : Hoge
{
public const int foo2 = 1;
}


488 :デフォルトの名無しさん:2010/11/16(火) 00:11:48
>>487
すごく疑問なんですけど、それってどういう状況で必要なの?>>481の例だと
public enum Hoge2
{
foo1,
foo2
}
みたいにもう一個作ればいいんじゃないの?

>>487のMyHogeみたいに定数として使うだけなら、
public enum Hoge { foo1 } // 変更不可
public enum Hoge2 { foo2 = 1 } //つくる
でもいいと思うんだけど。

489 :デフォルトの名無しさん:2010/11/16(火) 00:20:52
public enum hoge {
  foo
}
public enum piyo {
  foo = hoge.foo,
  bar
}

piyo p = (piyo)hoge.foo;
こう書いとけば少しは安全かな?

490 :デフォルトの名無しさん:2010/11/16(火) 00:29:16
安全重視なら普通に新規作成がいいかと

491 :デフォルトの名無しさん:2010/11/16(火) 00:31:18
C,C++,C#の違いを分かりやすく教えてください。ググったけどよく分からなくて。。。

492 :デフォルトの名無しさん:2010/11/16(火) 00:37:30
本に例えると
C 古典
C++ 専門書
C# ラノベ

493 :デフォルトの名無しさん:2010/11/16(火) 00:40:49
三国人は空気を吐くがごとく嘘を吐く

494 :デフォルトの名無しさん:2010/11/16(火) 00:41:06
ぜんぜんワカンネーし

495 :デフォルトの名無しさん:2010/11/16(火) 00:41:15
C++たん、C#たんは見つかったけどCたんはググったけど見つからなかった

496 :デフォルトの名無しさん:2010/11/16(火) 00:45:12
>>491
違いを知ってどうるすの?

497 :デフォルトの名無しさん:2010/11/16(火) 00:52:15
>>495
Cたん知らないとか
http://vision.ameba.jp/watch.do?movie=190596

498 :デフォルトの名無しさん:2010/11/16(火) 01:31:46
じゃあガンダムで言うと各言語ってどんな感じ?
C言語を初代ガンダムとして。

499 :デフォルトの名無しさん:2010/11/16(火) 01:34:16
うるせえよクズ
何にたとえたってお前には関係ねえよ

500 :デフォルトの名無しさん:2010/11/16(火) 01:35:46
そのたとえ系はニュー速とかでやれよ

501 :デフォルトの名無しさん:2010/11/16(火) 01:51:01
うめぇうめぇ

502 :デフォルトの名無しさん:2010/11/16(火) 08:39:14
なんとなくぐぐってみたら
C言語をガンダムに例えてる記事見つけちまった

C言語 ガンダム(RX-78)
C++ Zガンダム(MSZシリーズ)
Objective-C デンドロビウム(RX-78GP03)
C#,Java ∀ガンダム

http://gihyo.jp/book/pickup/2009/0049

503 :デフォルトの名無しさん:2010/11/16(火) 08:39:50
どうでもいいから

504 :デフォルトの名無しさん:2010/11/16(火) 10:00:44
なんで誰も具倉ないの?
http://www.google.com/search?num=50&hl=ja&lr=&safe=off&&sa=X&ei=nNfhTL36NMnJcbqMpe0L&ved=0CBUQBSgA&q=programmers+hierarchy&spell=1

505 :デフォルトの名無しさん:2010/11/16(火) 10:09:10
partial構文はenumには使えなくしてあるな。

>>502
ttp://www.upload.ee/image/360460/lisp-programmers.jpg


506 :デフォルトの名無しさん:2010/11/16(火) 10:12:15
こういうのもあった。言語の評価は相対的なものらしい。
ttp://adam.pra.to/public/pics/lisp-table2.jpg


507 :デフォルトの名無しさん:2010/11/16(火) 10:38:00
textBox1からtextBox10まで連続で名前をつけているコントロールがあるのですが、
これらをforを使って利用することはできませんか?

508 :デフォルトの名無しさん:2010/11/16(火) 10:50:39
TextBox[]という配列でもいいし
List<TextBox>というリストでもいいので作る

0始まりから9でもいいし0はダミーにして1始まりでもいいし
お好きなように

509 :デフォルトの名無しさん:2010/11/16(火) 10:57:07
(TextBox)this.Controls["textBox" + index.ToString()]とか?

510 :デフォルトの名無しさん:2010/11/16(火) 11:02:35
中華PGはそういう書き方を当たり前にしてくるから怖い

511 :デフォルトの名無しさん:2010/11/16(火) 11:05:47
>>509
Controlsが全部TextBoxである保証があるんだったらそれでもいいけどさ

512 :デフォルトの名無しさん:2010/11/16(火) 11:06:26
指定されたパスにファイルが作成可能かどうか調べる方法はないしょうか?
今は実際に作ってみて、例外出たら無理みたいな処理なんですが。

513 :デフォルトの名無しさん:2010/11/16(火) 11:13:55
それが一番確実でアトミックでもあるので問題ない
フォルダーの書込み権限をチェックしたいとかなら
System.IO.DirectoryInfo.GetAccessControlあたりとか

514 :デフォルトの名無しさん:2010/11/16(火) 11:14:16
>>507
若干大げさだけど、自作のライブラリから

http://ideone.com/qwGAv

515 :デフォルトの名無しさん:2010/11/16(火) 11:41:42
>>507
1.
TextBox[] itr = {textBox1, textBox2, ...};

2.
private IEnumerable<TextBox> itr() {
  foreach (var c in this.Controls) {
    if (c is TextBox)
      yield return c;
}

で foreach (var c in x) ..;
回せればいいなら1.でいいんでないの

516 :デフォルトの名無しさん:2010/11/16(火) 11:56:51
教えてください。2010Expressを使ってますが、ヘルプが表示されません。
何処かのサイトの記事に「解らないキーワードの上にマウスを置きF1」と書いてあったのですが、
うちのはヘルプが表示されません。そのとき表示される指示通り、
コンテンツもダウンロード更新しましたが、やはり表示されません。
どうすればヘルプが使用できるようになりますか?

517 :デフォルトの名無しさん:2010/11/16(火) 12:02:23
>>516
ヘルプなんて入れなくてもここで検索したらいいよ
http://msdn.microsoft.com/ja-jp/library/default.aspx

518 :481:2010/11/16(火) 12:23:29
質問は純粋にC#の文法に関する問題で、

1行目に書いてある
>C#は先行宣言できない、でおk?
です

enumは元のソースを変更するとこなしに、メンバー追加できるか?で、
>>484
できない、が答えのようです d

>>485,488
今回はどういう状況で必要か、という問題には踏み込んでいません

どうしてもと言うなら、
・派生バージョンを作りたくない
・元のコードがおぞましいので見たくない
など何でもどうぞ

>>489
パーシャルでクラスを定義しておけば、目的のことができそう
ということに気づきました

みんな d


519 :デフォルトの名無しさん:2010/11/16(火) 12:28:01
他のソフトに不正に割り込んで処理したいんじゃない?

520 :デフォルトの名無しさん:2010/11/16(火) 12:52:34
>>518
>>487ではint型使ってるけどenumみたいにしたいならこういう書き方のほうがいいかもね
public class Hoge {
  public static readonly Hoge foo = new Hoge();
  public static readonly Hoge bar = new Hoge();
}



521 :デフォルトの名無しさん:2010/11/16(火) 15:14:47
かもね

522 :デフォルトの名無しさん:2010/11/16(火) 17:40:17
ファイルの操作で教えてほしいのですが。
テキストファイルを読み込んだ後、当該ファイルを別フォルダに移動したいのですが、
テキストファイルを読み込むところから排他ロックを掛けて移動終了後に排他ロック
を外したいです。

using(FileStream(...)){}を使用してファイルをロックして読みこんで処理と考えたのですが
IOException例外が発生します。読込んだ後(using終了後)直ちにFile.Moveをしたとしても
他プロセスがロック待ちだと割り込まれそうで・・・

ロックを解除せずファイルの読み込み→移動にはどのような方法があるのでしょうか?


523 :デフォルトの名無しさん:2010/11/16(火) 18:01:36
コピーすれば

524 :デフォルトの名無しさん:2010/11/16(火) 18:10:14
よくわからんけど
監視対象となるフォルダXにぼこぼこファイルが出来て、
そこを見張ってる複数のプロセスがあって、
読んだプロセスが、読み終わったらフォルダYに移動する(=監視対象から外れる)
ってことでいいの?

まず別のフォルダ(Zとする)に移動してから読めばロック要らないんじゃないの?
そんな単純な話じゃないのか

525 :522:2010/11/16(火) 18:27:50
んと、>>524さんのおっしゃるとおり、大体の流れはそうです。詳しくは

Xフォルダに別アプリケーションがTxtファイルを次々作成していきます。
(※その際に同ファイル名を作成(上書き)することもあります)

当該アプリは作成されたファイル名、ファイル内容、を確認したのちデータベース
に問い合わせて既に登録されているならUpdata、異なるならInsert処理を行います。

成功したならDoneエラーならError、それ以外だとそのままフォルダに残しておくようになります。

>>523
 コピーだとファイル作成(更新日時)が変更されるためMoveを使用したく考えております。
 (FileInfoから更新日時も変更できますが・・・当面は考えておりません)

526 :522:2010/11/16(火) 18:29:34
追加:

 既に走っているソフトを1から作成し直すので大きい処理の流れは変更したくありません。
 よろしくおねがいします。(C++ →C#)

527 :デフォルトの名無しさん:2010/11/16(火) 18:35:02
>>525
よくわからんが、そのTxtファイルを作る側の(既存の)アプリとの
レースコンディションを考えてるわけか?
処理中に上書きされたくない、と

>成功したならDoneエラーならError、それ以外だとそのままフォルダに残して
>おくようになります。

イマイチ何を言ってるんだかわからんのだが、まずどっかに移動して処理、
残すべきときは単に戻す、ではダメなのか


528 :デフォルトの名無しさん:2010/11/16(火) 18:39:15
JavaかC#をやろうと思ってるんですけど
なんかSunがオラクルに買収されてからJavaコミュニティが元気ないように見えます
今からならC#のほうがいいですかね?

529 :522:2010/11/16(火) 18:43:50
現在の処理の流れを変えないように、、と上からのお達しがあるので
ロックをかける処理を行いたいです。

>>527
 ちゃんと説明できていませんでしたね><
 
成功したらDoneフォルダ、失敗したらErrorフォルダ、サーバー接続エラーはフォルダ移動しない
と、したいです。


530 :デフォルトの名無しさん:2010/11/16(火) 18:47:33
俺ならまずファイル名をに.tempとか付けて
上書きされないように(上書きする側の処理がWAITしないように)してから読むかなぁ。
別フォルダーに移動させるのと同じようなもんだけど。

531 :デフォルトの名無しさん:2010/11/16(火) 18:52:27
う〜〜〜む、、、方法がなさそうかなぁ・・・・orz

こうなったら上司に中間フォルダ作っていいか相談しようかな@w@

532 :デフォルトの名無しさん:2010/11/16(火) 18:55:57
俺もよく分からなくなってきた。以前はちゃんと動いてたの?
できるか知らないけど、usingじゃなくてAPIを使って昔ながらのロックを掛けたりできないのかな。

533 :デフォルトの名無しさん:2010/11/16(火) 19:04:39
以前のプログラムはちゃんと動いていました・・・と、言いたいところですが
作成者も退職し残ったのはコードのみでそのコードもコンパイルできない
(C++Builderのバージョン相違のため)という状況です。

なので、1から作り直すのにソースコードみて作成しています。また、
WinAPIはC#なら可能な限り使わず.NETに提供されているのを使ってくれ
と言われているので、今回は,NETオンリー(できれば)で作成したいと思っています

534 :デフォルトの名無しさん:2010/11/16(火) 19:11:03
なんか矛盾した要求だなぁ
(なるべく変えるな⇔.NETを使え)

535 :デフォルトの名無しさん:2010/11/16(火) 19:12:26
処理の流れは変えるな、使用する道具は.NETで統一しろっていうことですね

536 :デフォルトの名無しさん:2010/11/16(火) 19:43:27
まあその上司と相談して決めればいいんじゃね

537 :デフォルトの名無しさん:2010/11/16(火) 20:30:54
3年前にガソリンスタンドへ行った時の話。あの痛ましい事故は今でも鮮明に覚えている。
俺がガソリンを入れている最中、隣に空気が全然入ってないタイヤを履いた
トラックが止まった。どうやら空気圧の点検を怠っていた為に減っている様だった。
俺は車が汚れていたので、洗車を頼みつつ店内に入って暫く外を眺めてた。
店内からはピット作業をしている所が見れたので、俺はさっきのトラックが
ピットに入って来たので、ぼんやりと作業を見てた。
で、新しいバイトだと思われる可愛い茶髪の女の子が、先輩の指導を仰ぎながら黙々と
作業の手伝いをしていた。作業員が空気の入っていないタイヤを外し、
女の子が空気圧を入れる様に頼まれた所で痛ましい事故は起こった。
女の子が5分経ってもずっと空気を入れつづけているので、俺は「トラックのタイヤは
空気を入れるのは大変なんだろうな〜。女の子なのに大変だな。」と思った瞬間、
「ズドン!!」と言う爆音と共に女の子の頭が弾けて赤い血の霧が舞い上がった。
同時に店内の窓ガラスをブチ破って何か光る物が突っ込んできた。
店長が、「救急車呼べ!!一旦店閉めろ!!誰かタオルもってこい!!、〇〇(女の子の名前)
の体を抑えてろ!!(激しく痙攣してのた打ち回ってた)」と動転し、
俺は何が起こったのか確かめようと、店内に飛び込んできた物を探し出した。
それはトラックのホイールだった。大きさは直径1メートルはあったと思う。
女の子は頭が半分吹っ飛んでいて、ピクピク痙攣しながら「うぅ〜、ふぅ〜」と
細い息をしていたが、俺は彼女がもう死ぬだろうと分かった。
何故なら血にまみれた脳が見えていたのだ。彼女が自分の手で脳みそを抑えていた光景は今でも
忘れられない。救急車が到着する間もなく、白目を剥いたまま彼女は死んでしまった。


538 :デフォルトの名無しさん:2010/11/16(火) 20:35:35
                  _,. -‐ '' " ",. ̄'' ̄` ''‐、
                ,.-'      ,r''  _,,.. - 、  ` 、
               ,.r'/// /   ,.-'      `' 、. \
             /       ,r'  ,r'       ,rfn、 \ '、
               / /////  ,'   ,'  ,rffn.   '"     ヽ ',
            i     ,.ァ   .i  '"     ,riiニヽ.   ',. ',
                |  ,.r '"  |.   {  ,riiニヽ      _.    ', ',
            | .,.r'    |   !   ,..  _,,.. -‐' _,..r'  i .i
            |,'      ',   ',   '、., __ ,.. -‐''"゙  }  | .|
            |       ',    `、  ヽ        !   } .}
                ',         ',    '、  ヽ      ./   ! .|
            '、       `、   \  `ヽ==='゙    ,' !
             `、        '、     ' 、        / .,'
                '、'-..,,_____ ___`、    `''‐- ..,, ,,.. r'  /
               \ ヾヾヾヾヾ \          /
                ` 、  、、、、、、、、 ` - ..,,, _ _,.r'゙
                  `' - .,,_       _,. - ''"
                      `"'' '' '' ""

539 :デフォルトの名無しさん:2010/11/16(火) 22:27:20
なんぞ

540 :デフォルトの名無しさん:2010/11/16(火) 23:59:30
static classについて、インスタンス1個しか作んないから使うってのは動機として正しいのでしょうか
あと、private staticなメンバを含むことはできるのでしょうか

541 :デフォルトの名無しさん:2010/11/17(水) 00:02:44
static class があればシングルトンそんなにいる?ってのは思う。
= じゃなくて、static class 使う ⊃ インスタンス1個しか作らないから ならいいんじゃないかと。
そりゃ、private メンバーも