5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 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 メンバーも持てる。

542 :デフォルトの名無しさん:2010/11/17(水) 00:16:04
>>541
回答あざっす
使用例ggってもpublicしか出てこなくて、ひょっとしたらだめなのかしらと思いまして

543 :デフォルトの名無しさん:2010/11/17(水) 01:04:49
シングルトンはあとでインスタンス化するときに少し楽…になる
場合がある。

ちゃんとするとき、static に要求されるものって結構厳しいんだ。
すべてスレッドセーフ必須とか。状態なければいいんだけど
シングルトンと比較するような用件は持ってたりするでしょ状態。

544 :デフォルトの名無しさん:2010/11/17(水) 01:17:45
むしろ静的クラスはシングルトンを言語機能として実装したものと言っても過言ではない。

545 :デフォルトの名無しさん:2010/11/17(水) 01:30:45
静的クラスが、というより、静的コンストラクターの仕組みかな<シングルトンを言語機能として。

546 :デフォルトの名無しさん:2010/11/17(水) 10:44:22
WebBrowserを使用してますが、毎回Flashがあるサイトに行くと、アドオンのインストールがはじまります。
これを回避するにはどうしたら良いでしょうか?
環境はVS2008、OSはVistaです。

547 :デフォルトの名無しさん:2010/11/17(水) 10:46:23
静的クラスは一度ロードするとメモリにずっと残る?けど、
シングルトンなら、不要になったらGCで削除されるとかの違いってありますかね?

548 :デフォルトの名無しさん:2010/11/17(水) 10:50:47
えっ

549 :デフォルトの名無しさん:2010/11/17(水) 11:06:45
。。。。。はい?

550 :デフォルトの名無しさん:2010/11/17(水) 11:12:25
>>547
シングルトンをグローバル変数の代わりに使いそう

551 :デフォルトの名無しさん:2010/11/17(水) 12:44:03
むしろシングルトンの9割はグローバル変数です

552 :デフォルトの名無しさん:2010/11/17(水) 12:52:34
Settings.csに自分で設定保存をかいたものがあります。、
これは特に指定がないとLocalに保存されるみたいなのですが、
Roamingに保存するにはどう書けばいいのでしょうか?

553 :デフォルトの名無しさん:2010/11/17(水) 13:04:36
>>551
使い方の問題

554 :552:2010/11/17(水) 13:23:16
自己解決しました。

555 :547:2010/11/17(水) 13:32:42
事故解決しました。

556 :デフォルトの名無しさん:2010/11/17(水) 14:36:30
>>553
グローバル変数じゃない正しいシングルトンの使い方の例を挙げてみてよ
つまり、アプリケーション全体でインスタンスが一つしか要らないんじゃなくて
そのクラス自身の仕様上、複数作られたら正しく動作しない場合ね
とっても少ないと思うよ

557 :デフォルトの名無しさん:2010/11/17(水) 15:06:42
はぁ?シングルトンにグローバル変数としての性質があるのは常識だろ。
なんでわざわざ当たり前のこと書いてるのさ

グローバル変数の代用としてシングルトンを多用するのは誤った使い方。
突然、むしろシングルトンの9割はグローバル変数です(キリッ)なんて言われても困惑するだけなんだが

558 :デフォルトの名無しさん:2010/11/17(水) 15:12:40
まぁ本質的なことからすればグローバル変数は副作用みたいなもんだよな

559 :デフォルトの名無しさん:2010/11/17(水) 15:22:56


560 :デフォルトの名無しさん:2010/11/17(水) 15:23:57


561 :デフォルトの名無しさん:2010/11/17(水) 15:47:36


562 :デフォルトの名無しさん:2010/11/17(水) 16:15:39
アリガdって書く割りには、シングルdって書かないんだな。

563 :デフォルトの名無しさん:2010/11/17(水) 17:17:17
グローバルに開放しないシングルトンも記述可能だが?

564 :デフォルトの名無しさん:2010/11/17(水) 17:17:22


565 :デフォルトの名無しさん:2010/11/17(水) 18:04:28


566 :デフォルトの名無しさん:2010/11/17(水) 18:41:54
(/ω\)

567 :デフォルトの名無しさん:2010/11/17(水) 18:50:54
え?

568 :デフォルトの名無しさん:2010/11/17(水) 19:57:29
グローバル変数だってグローバルに開放しなくてもいいんだけど。

569 :デフォルトの名無しさん:2010/11/17(水) 20:09:55
1分かける1年分の時系列データがあるんだけど、メモリ多かったらデータ全部メモリに載せる?
それとも小分けする?
教えて。

570 :デフォルトの名無しさん:2010/11/17(水) 20:12:54
そのデータの容量による

571 :デフォルトの名無しさん:2010/11/17(水) 20:16:39
ありがとう。

572 :デフォルトの名無しさん:2010/11/17(水) 20:21:38
>>569
件数にして約513Kか。1レコードあたり1KB程度なら余裕でオンメモリだな。

573 :デフォルトの名無しさん:2010/11/17(水) 21:13:16
>>568
そういう話じゃねーよ馬鹿w

574 :デフォルトの名無しさん:2010/11/17(水) 21:53:31
>>569
今後数年とか数十年のデータ増える予定があるなら逐次処理。

575 :デフォルトの名無しさん:2010/11/17(水) 22:50:35
>>569
小分け。
どうやって表示したりするのかわからないけど、そんなに細かいデータなら、日時指定は普通だと思うから。

576 :デフォルトの名無しさん:2010/11/18(木) 02:19:44
プロパティのget setの後にセミコロンがつかないのがきも

public int X{get; set;} //この}の後ろにセミコロンつけるとエラー

}がセミコロンの代用なのかと思ったら、
int[] a={1,2,3,4,5}
みたいなのだとセミコロン必要みたいだし

どういうこっちゃ?

577 :デフォルトの名無しさん:2010/11/18(木) 02:54:26
式の終わりは常にセミコロン
だからオブジェクト初期化子もコレクション初期化子の終わりにもセミコロンが入る。

578 :デフォルトの名無しさん:2010/11/18(木) 02:57:31
モダンな言語でスコープは名前空間と関数のローカルに区切られる
グローバルなんつースコープは古代遺跡にしか存在しない

579 :デフォルトの名無しさん:2010/11/18(木) 03:00:41
アプリの機能が、アプリの目的が達成されるなら何でもよい

580 :デフォルトの名無しさん:2010/11/18(木) 03:12:59
public class x{
 public int X {get; set;};
 public void Y(bool z){
  if(z){
  };
 };
};
こっちのほうがよっぽどきもい

581 :デフォルトの名無しさん:2010/11/18(木) 03:16:55
>むしろシングルトンの9割はグローバル変数です
>>578 グローバル変数なんて存在しません

えっ

582 :デフォルトの名無しさん:2010/11/18(木) 03:26:30
>>579
つくって終わりならそれでいいんだけどねぇ

583 :デフォルトの名無しさん:2010/11/18(木) 04:30:31
>>581
グローバルとローカルしかない世界からようこそ

584 :デフォルトの名無しさん:2010/11/18(木) 05:12:03
>むしろシングルトンの9割はグローバル変数です
スタティックでパブリックなフィールドをグローバル変数と同列に扱うなら分かるけど、
静的クラスやシングルトンをグローバル変数っていうのは違う気がする。
グローバル変数が嫌われるのはどこで変更されるか管理できない点なわけだし。

あと、静的クラスはシングルトンのように唯一のインスタンスを保証するために使われているというより
System.IO.Fileみたいなショートカット置き場、System.Environmentみたいな定数置き場みたいな使い方が多い気がする。

585 :デフォルトの名無しさん:2010/11/18(木) 08:29:27
別のスレッドからフォームを操作したい場合、
Invokeメソッド
SynchronizationContextクラス
AsyncOperationクラス
を使えば実現できることはわかったんだけど
どんな感じで使い分ければいいの?


586 :デフォルトの名無しさん:2010/11/18(木) 08:44:58
>>585
ユーザープログラムではControl.InvokeかBackgroundWorkerを使う。

あとの2つは直接使うことはまずない。
AsyncOperationはBackgroundWorkerが内部的に使っている。


587 :デフォルトの名無しさん:2010/11/18(木) 08:51:53
普通のアプリならInvoke/BeginInvokeとかBackgroundWorkerで十分
AsyncOperationとかはBackgroundWorkerそのものとかを作るためのライブラリ作成者向け

588 :デフォルトの名無しさん:2010/11/18(木) 09:15:23
>>586-587
実はライブラリを作っているのです。
利用者側で同期をとるならInvoke、
ライブラリ内で同期をとるならSynchronizationContextかAsyncOperationというわけですね。



589 :デフォルトの名無しさん:2010/11/18(木) 09:47:52
>>576
それは、if(){} の後ろのセミコロンが付かないのキモいって言ってるようなもの。

590 :デフォルトの名無しさん:2010/11/18(木) 09:49:33
>>588
C# 5.0 の async の実装では SynchronizationContext 使ってた。

591 :デフォルトの名無しさん:2010/11/18(木) 10:24:25
すみません質問させてください。
今カレンダーを作ってるんですが、
日付部分をlblDay0〜lblDay41というラベルにしてます。

このラベルの.Textを変更する際にたとえば

|int i = 0;
|("lblDay" + i).Text = "31"

のようにオブジェクト名の一部を変数で指定することはできませんか?

592 :デフォルトの名無しさん:2010/11/18(木) 10:26:50
リフレクション使うか、
コントロールを配列しにして管理するか、
WPFに乗り換えてItemsControl.ItemTemplateに頼るか。

593 :デフォルトの名無しさん:2010/11/18(木) 10:31:56
wpfアプリケーションを開発してるんですが、textboxに入力したstring型の文字列(数字)をdouble型に変換したいのですが、どのような手法を用いたらよいのでしょうか?ご教授お願いします。

594 :デフォルトの名無しさん:2010/11/18(木) 10:32:50
>>592
回答ありがとうございます!!
その3つぐぐってみます。

WPFってよく知らないですけど新しくて描画とかがすごいらしいですね
勉強するのに予備知識要りますか?
自分プログラム歴3日なのですorz

595 :デフォルトの名無しさん:2010/11/18(木) 10:43:58
>>593
とりあえず、WPFと関係なく、
Double.Parse()
Double.TryParse()

596 :デフォルトの名無しさん:2010/11/18(木) 10:44:31
C#自体の理解が不十分なうちはWPF難しいんじゃないかな
(前例がいるし・・・)
とりあえずはWindowsFormやっとけ、サンプルもいっぱいあるし
あと>>591>>507あたりに似たような質問あるから見とけ

597 :デフォルトの名無しさん:2010/11/18(木) 11:01:35
>>596
はい、>>507みてました。
あまり理解できなかったんですが回答の中の>>515
>>592さんが仰ってる「コントロールを配列にして管理」
にあたるって認識でいいんでしょうか?

ひとまず「リフレクションを使う」で1日目を適正な位置におくことはできました。
でも配列にして管理しちゃったほうが楽そうな気がしてきました。

598 :デフォルトの名無しさん:2010/11/18(木) 11:12:05
>>595
private double SetNum(string str)
{
bool XX;
double num = 0;
XX = double.TryParse(str, out num);
System.Console.WriteLine(XX);
return num;
}

で構文書いたんですけど、出力がFalse返ってくるんですよね。
どこが間違ってるんでしょう。。。

599 :デフォルトの名無しさん:2010/11/18(木) 11:12:14
配列のほうが楽だろうね
それにカレンダーだったら
二次元の配列をつかえば見通しも良くなる

600 :デフォルトの名無しさん:2010/11/18(木) 11:14:44
>>598
トライパースの使い方
double num;
if(double.TryParse(str, out num)){
  System.Console.WriteLine(num);
}else{
  System.Console.WriteLine(str + " は数字ではありません");
}

601 :デフォルトの名無しさん:2010/11/18(木) 11:18:34
>>600
とりあえず試してみます(^p^)

602 :デフォルトの名無しさん:2010/11/18(木) 11:34:34
今までConvert.ToDoubleを使っていた俺
tryParseのほうが早いのね

603 :デフォルトの名無しさん:2010/11/18(木) 11:42:49
Convert.ToDoubleは中でdouble.Parseよんでるだけ
ParseとTryParseのどっちが早いかっていうと
例外が発生しない分TryParseのほうが優勢


604 :デフォルトの名無しさん:2010/11/18(木) 11:46:29
WPF ならデータバインディングしとけば勝手に文字列から値への変換してくれるのに。

605 :デフォルトの名無しさん:2010/11/18(木) 11:52:13
>>600
>>602-604
できませんでした。
数字を打ち込んだのに数字ではありませんの出力。。

とりあえず>>604を試してみます。

606 :デフォルトの名無しさん:2010/11/18(木) 12:01:17
>>605
出力された文字列ここに貼りつけてみ


607 :デフォルトの名無しさん:2010/11/18(木) 12:13:41
>>605
ひょっとして、全角数字?

608 :デフォルトの名無しさん:2010/11/18(木) 12:29:52
>>606
System.Windows.Controls.TextBox: 4 は数字ではありません
System.Windows.Controls.TextBox: 4
0

>>607
半角です。

609 :デフォルトの名無しさん:2010/11/18(木) 12:32:40
4じゃなてく、「System.Windows.Controls.TextBox: 4」が入力とかじゃないよね、まさか?

610 :デフォルトの名無しさん:2010/11/18(木) 12:35:18
System.Windows.Controls.TextBox: 4

WPFでTextBoxが丸ごと文字列になって、それがTryParseされてる。
TextBoxのTextを取り出せ。

611 :デフォルトの名無しさん:2010/11/18(木) 12:36:48
TextBox.ToString() してるヨカン

612 :デフォルトの名無しさん:2010/11/18(木) 13:02:03
WPFからC#使い始める世代が出てくるのか

613 :デフォルトの名無しさん:2010/11/18(木) 13:15:27
◆Jzt/EX0TGY8Tとかまさにそれだな

614 :デフォルトの名無しさん:2010/11/18(木) 13:20:17
>>609
入力は4です。
>>610
頑張って…みます。
>>611
大正解です。これらを修正したらいいんでしょうか?
x = textBox1.ToString();
//System.Console.WriteLine(x);
X_point = SetNum(x);
//System.Console.WriteLine(X_point);

C#独学でやってるからもうわけがわかんない

615 :デフォルトの名無しさん:2010/11/18(木) 13:23:15
>>609-611
できました!
感動しました。
下の階層にTextがあることに気が付きませんでした。

616 :デフォルトの名無しさん:2010/11/18(木) 13:23:48
C#なんてみんな独学だろ

617 :デフォルトの名無しさん:2010/11/18(木) 13:24:08
x = textBox1.Text;

でおk。
でも、せっかくWPFならBindingとConverter勉強するよろし。

618 :デフォルトの名無しさん:2010/11/18(木) 13:27:26
あえてConvertで
double x = Convert.ToDouble(textBox1.Text);

ToStringは文字列に変換する時に使う
textBox1.Text = x.ToString();

619 :デフォルトの名無しさん:2010/11/18(木) 14:37:21
バインディングは便利だな

複数のオブジェクトで同期するのが
OnChangeイベント等でごちゃごちゃ書いてたのが
超簡単にかけるようになった

620 :デフォルトの名無しさん:2010/11/18(木) 17:19:44
class Person{
public int age;
public string name;
}

なクラスがあったとして

Person taro = new Person();
taro.age=20;
taro.name="山田太郎";

みたいに書くのを
taro=20;
って書いたら、ageに20が代入され
taro="山田太郎";
って書いたら、nameに山田太郎が代入される

みたいなことってできる?
演算子のオーバーロード利用すればできるかなと思ったんだけど
=はオーバーロードできないみたいなんだけど、どうやればいいだろう

621 :デフォルトの名無しさん:2010/11/18(木) 17:24:20
Person taro = new Person(){ 20, "山田太郎"};
こんな感じのことはできなかったっけ?

622 :デフォルトの名無しさん:2010/11/18(木) 17:26:03
>>620
出来たらまずいと思う。

623 :デフォルトの名無しさん:2010/11/18(木) 17:26:56
そんなことして何になると思うが
taro.set(20)
taro.set("山田太郎")
ではいかんのか?

624 :デフォルトの名無しさん:2010/11/18(木) 17:30:20
>>620
それをどこで実現するかだな
スクリプト組んだりやINIに書いて、それを評価してって話ならわかる
C#の中だとコンパイラにタコ呼ばわりされるだけだが

625 :デフォルトの名無しさん:2010/11/18(木) 17:30:50
一つのクラスにint型が複数あったらごっちゃになるし、どこで使うんだそれ

626 :デフォルトの名無しさん:2010/11/18(木) 17:31:44
ヒント
class Person{
public string name;
public int age;
public int height;
public int weight;
}

627 :デフォルトの名無しさん:2010/11/18(木) 17:35:37
VB〜6のwith構文はよかった
with hoge_struct
  .name = "abc"
  .age = 15
end with

628 :デフォルトの名無しさん:2010/11/18(木) 17:36:58
>>627
C#もにたようなことできなかったっけ?

629 :デフォルトの名無しさん:2010/11/18(木) 17:40:18
どうしてもって言うならtryParseやParse(VBならIsNumeric)使って数値に変換出来るかチェックして、
数値に変換出来るならageに入れる

630 :デフォルトの名無しさん:2010/11/18(木) 17:41:48
with文イラネ

631 :デフォルトの名無しさん:2010/11/18(木) 17:42:59
>>626
>>625 は、person = 5; とかできるとした場合、age、height、weight のどれに入れて良いかわからないってことが言いたいんだと思うよ。

632 :デフォルトの名無しさん:2010/11/18(木) 17:44:06
初期化するときに
Person taro = new Person { age=20, Name="たろー" };
ならできる。

633 :デフォルトの名無しさん:2010/11/18(木) 17:44:22
演算子のオーバーロードを使ってこんなことも出来るが
きもいのでやめたほうがいい
http://ideone.com/ZifLI

634 :デフォルトの名無しさん:2010/11/18(木) 17:45:06
>>628
>>621にもあるけどオブジェクト初期化子のこといってるならこんな感じ
var p = new Person() { age = 20, name = "山田君" };

635 :デフォルトの名無しさん:2010/11/18(木) 17:47:08
>>631
625と626は同じこと同時に書き込んだだけ

636 :デフォルトの名無しさん:2010/11/18(木) 17:48:36
改めてここの応答性の良さには驚かされる

637 :デフォルトの名無しさん:2010/11/18(木) 17:48:56
620が言ってるのは初期化時の話じゃないだろ?

638 :デフォルトの名無しさん:2010/11/18(木) 17:50:28
もう
object age
object name
とかでいいや

639 :デフォルトの名無しさん:2010/11/18(木) 17:57:01
いいやね

640 :デフォルトの名無しさん:2010/11/18(木) 18:01:27
>>633
キモすぎるw
そんなコードに出会ったら前任者の嫌がらせとしか思えんわw

641 :デフォルトの名無しさん:2010/11/18(木) 18:18:19
逆向きなら簡単なんだけどね
string name = taro;
みたいな

642 :デフォルトの名無しさん:2010/11/18(木) 18:21:34
パブリックフィールドとプロパティって
アクセサが付かないだけで同じだと思ってたのに
WPFだとプロパティとして宣言しておかないと機能しないんだな
どうやってVはプロパティではないと判断しているんだろう

643 :デフォルトの名無しさん:2010/11/18(木) 18:25:36
プロパティってメソッドじゃなかったっけ

644 :デフォルトの名無しさん:2010/11/18(木) 18:37:14
メソッドの扱いならメソッド自体もそのまま扱えるはずだけど、
実際はObjectDataProviderなんかを使う必要があるので、
プロパティだけ特別な扱いなんだろう。

645 :デフォルトの名無しさん:2010/11/18(木) 20:27:47
.NET 1.0のはじめからプロパティとフィールドは別扱い
WinFormのPropertyGridだってフィールドは表示しない

646 :デフォルトの名無しさん:2010/11/18(木) 20:45:12
>>642
WPF のあれはリフレクションでやってるからねぇ。
Type.GetProperty 使うとプロパティしか返ってこない。

実装上、プロパティとフィールドはまるで別物。
区別しない方がむしろ難しい。

647 :デフォルトの名無しさん:2010/11/18(木) 22:37:58
ProcessStartInfoで外部のコンソールアプリを実行させた後、
DOS窓を閉じないようにするにはどうしたらいいですか?

648 :デフォルトの名無しさん:2010/11/18(木) 22:39:13
cmd /k

649 :デフォルトの名無しさん:2010/11/19(金) 03:05:44
ListBoxで選択してある項目を全部削除したいのですが

Lbox.SelectedItems.Clear();

としても,

foreach(int x in Lbox.SelectedIndices){
  Lbox.Items.RemoveAt(x);
}

としても期待通りに動いてくれません。
何か方法があればよろしくお願いします。

650 :デフォルトの名無しさん:2010/11/19(金) 03:35:29
まず、ListBox.SelectedItemsで取得したコレクションをClear()しても、
ListBox.Itemsには何の影響ももたらさないことは当然ということを理解しよう。

651 :デフォルトの名無しさん:2010/11/19(金) 03:46:11
なんらかのテキストファイルに

日本 13 40
中国 140 420
アメリカ 25 280
ロシア 10 500




みたいに
国名 数字1 数字2が書いてるとします
このテキストファイルを読みとってCountryクラスの配列を自動的に作りたい。

class Country{
public string name;
public int data1
public int data2
}

country[0].nameが日本,data1が13,data2が40で
country[1]が中国 140,420で・・・

こんな風にするにはどうしたらいい?

652 :デフォルトの名無しさん:2010/11/19(金) 03:50:20
テキストファイルを読みとってCountryクラスの配列を作ればいいだけじゃ

653 :デフォルトの名無しさん:2010/11/19(金) 04:46:45
>>649
List<object> sv = new List<object>();
foreach (var item in listBox1.Items)
{
sv.Add(item);
}
foreach (var item in listBox1.SelectedItems)
{
sv.Remove(item);
}
listBox1.Items.Clear();
listBox1.Items.AddRange(sv.ToArray());

654 :デフォルトの名無しさん:2010/11/19(金) 05:44:34
>>651
public static Country[] LoadCountries(string path) {
  var list = new List<Country>();
  using (var sr = new System.IO.StreamReader(path)) {
    while (!sr.EndOfStream) {
      var line = sr.ReadLine();
      var strs = line.Split(' ');
      var d1 = int.Parse(strs[1]);
      int d2 = int.Parse(strs[2]);
      list.Add(new Country() { name = strs[0], data1 = d1, data2 = d2 });
    }
  }
  return list.ToArray();
}

ファイルがない場合や書式が違っていた場合の例外処理は自分で作ってくれ

655 :デフォルトの名無しさん:2010/11/19(金) 09:03:41
APIスレかこちらか迷ったのですが・・・
midiOutOpen()をC#で呼び出したときについて教えてください。
以下はPINVOKEより、C#のサンプルコーディングですが、
[DllImport("winmm.dll")]
static extern uint midiOutOpen(ref IntPtr lphMidiOut, uint uDeviceID, IntPtr dwCallback, IntPtr dwInstance, uint dwFlags);

IntPtr hmidi = IntPtr.Zero;
midiOutOpen(ref hmidi, 0, IntPtr.Zero, IntPtr.Zero, 0);

Q1:IntPtr.Zeroフィールドって何ですか?hmidiも、第3・第4引数も全部IntPtr.Zeroってのは、これは何をやっているのですか?hmidiは開きたいmidiデバイスのハンドルですが、そこにCALLBACK(?)を代入してるのですか?
Q2:上とも関連しますが、第5引数が0ということは、これはCALLBACK_EVENTってことですか?この場合のCALLBACKがどういう機能なのかイマイチわからないです。

解らない事だらけでスミマセンorz。部分的でも結構です。よろしくお願いします。
C#上でのCALLBACKの挙動を理解しないと、次のmidi受信系の段階に進めそうにないので・・・

656 :デフォルトの名無しさん:2010/11/19(金) 09:07:32
いわゆるぬるぽだね
Cで開発する際にポインタに何も設定されてませんよっていうヌル(NULLだっけ?)と同等

657 :656:2010/11/19(金) 09:10:36
使ったこと無いのでここの説明を読んだだけだが
http://yokohama.cool.ne.jp/chokuto/urawaza/api/midiOutOpen.html

>midiOutOpen(ref hmidi, 0, IntPtr.Zero, IntPtr.Zero, 0);
つまりオープンはするけどコールバックは使わないってことだね

658 :656:2010/11/19(金) 09:13:44
コールバックでぐぐって勉強してください。
非同期で何かの処理をやってもらう際に別のスレッドもしくはタスクから
特定条件で呼び出して欲しい場合に使ったりする

659 :デフォルトの名無しさん:2010/11/19(金) 09:54:54
>>656
レスありがとうございます。
プログラミング始めて2ヶ月なので、いまいち内容がわかりませんが、勉強してきます。
お蔭様で、紹介してもらったページで初めてフラグやリザルトが数値で対応してる表に出会いました。
MSDNではテキストしか載ってないので、どこかに対応表は無いのかと探していました。
コールバックフラグ=0はCALLBACK_NULLだったんですね。


660 :655:2010/11/19(金) 11:55:56
>>657
すみません。紹介していただいたページの記述に関して質問なのですが、
第5引数のuint dwFlagsに入れる数値なのですが、
CALLBACK_WINDOW(表の2段目)を指定したいとき、フラグは「0x00010000」と表記してますが、
「0x」とは16進数を表す記号だと理解してるのですが、
その後ろの「00010000」というのは8bitの文字列表記(?)なんですかね?
ということは16進数の通常表記だと「0x10」とか「10H」ってことですか?
これを第5引数のuint dwFlagsに入れるには、10進整数に直して
dwFlags = 16 ですか?
なんか色んな表記や型が出てきてこんがらがってしまって。


661 :デフォルトの名無しさん:2010/11/19(金) 12:01:52
0xFFFFFFFF

662 :デフォルトの名無しさん:2010/11/19(金) 12:03:56
プログラム始めて2ヶ月の初心者が、マーシャリングが必要な
「C#でmidi」に挑戦するのは難しいよ 不可能とは言わんが
素直にC・C++で始めた方がいい


663 :デフォルトの名無しさん:2010/11/19(金) 12:26:22
>>660
0x0001000は65536の16進数表記ですよ
ちなみに1を引くと0x0000FFFFになります

664 :デフォルトの名無しさん:2010/11/19(金) 12:31:41
PInvoke 回りがネックになるのは悲しいなぁ。
そのためだけにC/C++に移ると、それはそれでネック以外のところで苦労するし。
特に GUI アプリにするなら。

665 :655:2010/11/19(金) 13:28:10
>>663
ありがとうございます!0x10000(または10000H)と同じ意味なんですね。
使っていない上の桁まで0で埋めるのは、そういう慣習なんですかね?
初めて見る表記で、意味不明です・・・

>>664
そうなんですよね。C++2010ExpressのWindowsフォームアプリケーションは、
ちょっとGUI楽みたいだけど、CRLだから普通のC++とは違う物らしいですし・・・
一応、平行してC++勉強もしてるんですけど、混乱してます。

666 :デフォルトの名無しさん:2010/11/19(金) 13:59:51
あっそ

667 :デフォルトの名無しさん:2010/11/19(金) 14:17:33
「標準講座C#」とかの本を一読してみた方が良いよ>655

668 :デフォルトの名無しさん:2010/11/19(金) 15:34:05
>>665
>使っていない上の桁まで0で埋めるのは
好みの問題
変数の大きさで勝手にやってくれるし
なるべく変数のサイズで書いた方が分かりやすいのも事実

669 :デフォルトの名無しさん:2010/11/19(金) 15:50:43
>>653
どうもありがとうございます!
一旦全部消してから追加するってのは思いつかなかったです。
あれこれ何時間もハマってたので助かりました><

670 :デフォルトの名無しさん:2010/11/19(金) 17:36:25
>>669
わざわざ全部消さなくてもこれで十分
var arr = new System.Collections.ArrayList(listBox1.SelectedItems);
foreach (var item in arr) {
  listBox1.Items.Remove(item);
}

671 :デフォルトの名無しさん:2010/11/19(金) 17:37:39
>>670
あれこれ何時間もハマってたので助かりました><

672 :デフォルトの名無しさん:2010/11/19(金) 18:00:34
>>649の下は何でダメ?
消してる最中にindexずれちゃう?

673 :デフォルトの名無しさん:2010/11/19(金) 18:21:37
List<T>でnewしたlistlinkに、ちゃんとリストが出来てるか内容を確認したくて、
一時的にリストボックスに表示させようと
listBox1.Items.Add(listlink);
としたのですが、リストボックスには「(コレクション)」としか表示されません。
リストボックスに項目を表示させるには、またはlistlinkの内容を確かめるにはどうすればいいですか?

674 :デフォルトの名無しさん:2010/11/19(金) 18:25:46
>>672
SelectedIndicesのEnumeratorは"内部的"にSelectedItemsを保持してる。
Itemsから項目を削除するとSelectedItemsも更新されるのでItemsに対するindexがずれることはない。
ただしSelectedItemsの項目数は減るので、Enumeratorのindexがずれてしまう。
結果1つ飛ばしで選択された項目が消えることになる。

675 :デフォルトの名無しさん:2010/11/19(金) 18:27:41
>>673
listBox1.Items.AddRange(listlink.ToArray());

676 :デフォルトの名無しさん:2010/11/19(金) 18:58:32
>>674
なるほど、面白いね

677 :デフォルトの名無しさん:2010/11/19(金) 19:03:05
>>675
無効な引数が含まれると、int[]をobject[]に変換できないと叱られました。
List<T>はList<int>です。

678 :デフォルトの名無しさん:2010/11/19(金) 19:17:03
じゃあこっちで
foreach (var item in listlink) {
  listBox1.Items.Add(item);
}

679 :デフォルトの名無しさん:2010/11/19(金) 19:47:59
>>678
できました。ありがとうございます。
Addメソッドは逐次追加にしないと駄目なんですね。

680 :デフォルトの名無しさん:2010/11/20(土) 02:32:14
VC#でC#4.0のコードを書いた場合、.NETframework4.0がインストールされたマシンしかそのプログラムは実行できないんですか?

681 :デフォルトの名無しさん:2010/11/20(土) 06:41:00
言語のバージョンと.NETのバージョンは基本的に関係ないぞ
VS2010使えばC# 4.0だがターゲットは.NET 2.0〜.NET 4まで選べる
まあ.NETのライブラリに依存する言語機能もあるけどな

682 :デフォルトの名無しさん:2010/11/20(土) 11:35:51
c#ってなんでconstメソッドがないの?

683 :デフォルトの名無しさん:2010/11/20(土) 12:20:56
C++でもまともに使えてるやつはあんまいないのに旧VBの惨状を考えれば.NETに導入できるわけないだろう?

684 :デフォルトの名無しさん:2010/11/20(土) 13:16:56
http://www.forest.impress.co.jp/docs/news/20101119_408076.html

685 :デフォルトの名無しさん:2010/11/20(土) 15:58:52
無料厨の変遷

Delphi6→C#

686 :デフォルトの名無しさん:2010/11/20(土) 16:58:40
無料のくせにVC# Expressが便利すぎるから仕方ない

687 :デフォルトの名無しさん:2010/11/20(土) 19:29:00
でもVS2010から完全なフリーではないんでしょ?

688 :デフォルトの名無しさん:2010/11/20(土) 19:30:45
え、何が?

689 :デフォルトの名無しさん:2010/11/20(土) 19:31:25
>>687
完全なフリーって何?
無料で手に入って、仕事で使って成果物を販売するのだって一切制限されてないけど

690 :デフォルトの名無しさん:2010/11/20(土) 20:45:42
シリアルの取得をしないといけないだけ

691 :デフォルトの名無しさん:2010/11/20(土) 22:11:03
スレタイに“ふらっと”を入れているあたり、音楽とかけているのか

692 :デフォルトの名無しさん:2010/11/20(土) 23:29:35
はじめのころはC#と全角で書いてたからな
プログラマが立てたスレタイとは思えなかった

693 :デフォルトの名無しさん:2010/11/20(土) 23:35:59
windowの形を○や△などに変えたいのですが
windowの外枠(最大化ボタンなどがあるフレーム))を消す方法ってありますか?

694 :デフォルトの名無しさん:2010/11/20(土) 23:37:42
FormBorderStyle

695 :デフォルトの名無しさん:2010/11/20(土) 23:39:32
>>693
リージョンで検索

696 :デフォルトの名無しさん:2010/11/21(日) 01:02:55
>>682
正しく使わないとうざいだけ、
あるいは、「面倒だから」を理由に利用の徹底が無理そうだから。

697 :デフォルトの名無しさん:2010/11/21(日) 04:46:28
c++ってなんでconstメソッドがあるの?

698 :デフォルトの名無しさん:2010/11/21(日) 06:27:24
>>692
スレタイに#を使わせなかった運営に言えよ

699 :デフォルトの名無しさん:2010/11/21(日) 06:31:11
運・・・営・・・?

700 :デフォルトの名無しさん:2010/11/21(日) 08:01:15
半角の#をスレタイに入れようとすると弾かれたって意味でしょ
当時のこと知らないから本当かどうかわからないけど

701 :デフォルトの名無しさん:2010/11/21(日) 08:29:42
Part1 2002/06/11 くだスレC#
Part4 2003/07/24 ふらっとC♯
Part6 2005/07/22 ふらっとC♯(初心者用)
Part9 2006/09/10 ふらっとC♯, C#(初心者用)
Part15 2007/04/12 ふらっとC#, C♯, C#(初心者用)
Part16 2007/05/16 ふらっとC♯, C#(初心者用)
Part21 2007/11/18 ふらっとC#,C♯,C#(初心者用)

半角#が定着したのはPart21から。
ちなみに相談室のPart1は2000/12/18から。もうすぐ10周年。

702 :デフォルトの名無しさん:2010/11/21(日) 09:10:58
昔はGoogleで"C#"って単語だと認識されずにCと記号だとしか解釈されなかったから
"C#"でググっても探せなかったって問題も関係あるのかも

703 :デフォルトの名無しさん:2010/11/21(日) 09:39:01
>>700
弾かれるどころか、#だけ無視してスレが作られる巧妙なトラップ
http://piza2.2ch.net/tech/kako/1002/10024/1002460602.html

704 :デフォルトの名無しさん:2010/11/21(日) 09:58:23
>>703
C相談室www

705 :デフォルトの名無しさん:2010/11/21(日) 16:25:59
思ったより伝統あるスレなんだな
9年前とは

706 :デフォルトの名無しさん:2010/11/21(日) 17:35:14
ふーん
あっそう
で?

707 :デフォルトの名無しさん:2010/11/21(日) 17:37:21
>>706
興味ないなら反応しなければいいのに

708 :デフォルトの名無しさん:2010/11/21(日) 18:21:37
ふーん
あっそう
で?

709 :デフォルトの名無しさん:2010/11/21(日) 18:53:37
ふーん
あっそう
で?

710 :デフォルトの名無しさん:2010/11/21(日) 19:46:29
麻生がどうかしたか

711 :デフォルトの名無しさん:2010/11/21(日) 22:34:23
cscって勝手に文字コード変えちゃうの?
eucがsjisに変わっちゃうんだけど

712 :デフォルトの名無しさん:2010/11/21(日) 22:36:11
ソースの話?

713 :デフォルトの名無しさん:2010/11/21(日) 22:40:59
Console.Write("さしみ");

、オ、キ、゚
になっちゃう
エディタと出力はどっちもeucに設定してあるんだけどな

714 :デフォルトの名無しさん:2010/11/21(日) 22:44:48

>Console.Write("さしみ");
これを実行した結果の話をしてるの?

715 :デフォルトの名無しさん:2010/11/21(日) 22:46:05
そうです

716 :デフォルトの名無しさん:2010/11/21(日) 22:49:38
コマンドプロンプトの文字コードがcp932になってるからじゃないの?

717 :デフォルトの名無しさん:2010/11/21(日) 22:49:48
そんなバナナ

718 :デフォルトの名無しさん:2010/11/21(日) 22:52:02
まさか

719 :デフォルトの名無しさん:2010/11/21(日) 22:53:24
Console.Write(@"さしみ");
これだと関係なかったっけ?
\が入ってるパスのようなのを入れるときは@つけるんだっけ?

720 :デフォルトの名無しさん:2010/11/21(日) 22:55:46
まったく無関係。

721 :デフォルトの名無しさん:2010/11/21(日) 22:58:35
まあ、部分的にだされてもなあ・・・
OSとか環境とかIDEの設定とかも影響するかもしれないし
文字化けするとか言われても・・・

722 :デフォルトの名無しさん:2010/11/21(日) 22:59:26
c言語ではエディタがeucでもできたんですよね


723 :デフォルトの名無しさん:2010/11/21(日) 22:59:59
ソースコードのコードページがなんであっても内部コードはUnicode固定で、
Console.Writeでは出力時にコンソールのコードページに変換される。

/codepage:<n> でeucも通るのか。

724 :デフォルトの名無しさん:2010/11/21(日) 23:03:51
>711
cscでコンパイルされると文字コードはUTF-16になる。

EUCで書いてEUCで出力してみたが、何も問題無いぞ。
using System;
using System.Text;

public static class Test
{
 private static void Main()
 {
  Console.OutputEncoding = Encoding.GetEncoding(20932);
  Console.WriteLine("マンコ");
 }
}
// csc.exe /codepage:20932 Test.cs
// Test > out.txt

725 :デフォルトの名無しさん:2010/11/21(日) 23:10:54
>>724の通りやったらなんか画面の文字が変わったりフォントが変わったりしたから
なんか根本的におかしいのかな


726 :724:2010/11/21(日) 23:14:43
>>725
コンソールにEUCのデータ出力したら、そりゃおかしくなる。
ちゃんとリダイレクトで画面に(シフトJISとして)不正ななデータ出さないようにすんだよ。
というか、出力をどうしたかったの?

727 :デフォルトの名無しさん:2010/11/21(日) 23:16:51
eucのソースコードをms932としてコンパイルしてないか?
環境が分からんが直接cscをコンソールで入力しているなら
csc /codepage:20932 xxxxx.cs
としないとcscはeucとして識別しない。


728 :デフォルトの名無しさん:2010/11/21(日) 23:19:48
>>726
ただ普通に表示させたかったです
いつもLINUXでやってるからeucでやれたらいいなと思って

>>727
コマンドプロンプトっていうかcygwinでやってます
csc.exe test.csでコンパイルしてました
そうやらなきゃいけないのか、どうもー

729 :デフォルトの名無しさん:2010/11/21(日) 23:21:02
UTF8で保存して、そのファイルEnc設定ちゃんとしないで文字列読み込んだんだろ

730 :デフォルトの名無しさん:2010/11/21(日) 23:26:51
今時LINUX(笑)でEUC使ってる奴って何なの?
コンパイラにソースの文字コード指定せずに自動認識されると思ってる奴って どれだけゆとり?

731 :デフォルトの名無しさん:2010/11/22(月) 00:57:56
プログラム→http://ideone.com/rJDVL
@button1をクリック→panel1の左上に画像(ABC.GIF)を表示
A画像をドラッグ&ドロップで任意の位置に移動
↑をしたいのですが上手くいきません…
実行すると,1回目はできますが,2回目以降にpanel1内から消えます

どうしたら良いのでしょうか?教えていただけると嬉しいです


732 :デフォルトの名無しさん:2010/11/22(月) 01:01:05
((Label)sender).Dispose();
これが原因じゃね?

733 :デフォルトの名無しさん:2010/11/22(月) 01:03:43
ああ、書き方悪かった

((Label)sender).Dispose();

をelseじゃなくてif文で処理してみ

734 :デフォルトの名無しさん:2010/11/22(月) 01:18:56
>>732さん
((Label)sender).Dispose();とelseをコメントに変えて実行したけどダメでした…
>>733さん
if文で処理する?

735 :デフォルトの名無しさん:2010/11/22(月) 01:24:58
>>733さん
731です こう?
if (e.Button == MouseButtons.Left)  //左クリックのとき
{
    if (Smove == false)             //今まで固定モードなら
    {
        msym_s = new Point(e.X, e.Y);       //移動前座標を取得
        Symbol = sender;            //選択されているlabel
        Smove = true;                       //移動モード
    }
    else
    {
        Smove = false;              //固定モード
        ((Label)sender).Dispose();
    }
}
                



736 :デフォルトの名無しさん:2010/11/22(月) 01:39:57
違った
どこが悪いかみてないが確実なのは消えたんじゃなくて
座標計算がおかしいのか2回目は変なところに飛ぶ

なので見えてないところに移動しただけだよ

737 :デフォルトの名無しさん:2010/11/22(月) 06:35:12
private void newLabel_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) {
 if (Smove == true) {
 msym_e = new Point(e.X, e.Y);//マウスアップしたときの相対座標の取得
 Point p = (sender as Label).Location; //ラベルの現在位置を取得
 p.Offset(msym_e.X - msym_s.X, msym_e.Y - msym_s.Y); //ラベルの移動後座標を求める
 (sender as Label).Location = p; //ラベルを移動する
 
 Smove = false;//固定モード
 }
}

コントロール移動時にのみ必要であるならば、Symbolという変数は要らないと思う。

738 :737:2010/11/22(月) 06:58:55
ああでも最後にクリックしたラベルをアクティブにして画像変えたりするために
アクセスしたいのならばSymbolは必要になるかも。
それよりもSmoveという変数は間違いなくいらないな。
以下スッキリしたコードにしてみた

private void newLabel_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
 if (e.Button != MouseButtons.Left){
 //右クリックでオブジェクトの開放
 (sender as Label).Dispose();
 return;
 }
 msym_s = new Point(e.X, e.Y);//マウスクリックしたときの相対座標を取得
 //Symbol = sender; 必要なければ削除
}

private void newLabel_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
 msym_e = new Point(e.X, e.Y);//マウスアップしたときの相対座標の取得
 Point p = (sender as Label).Location; //ラベルの現在位置を取得
 p.Offset(msym_e.X - msym_s.X, msym_e.Y - msym_s.Y); //ラベルの移動後座標を求める
 (sender as Label).Location = p; //ラベルを移動する
}



739 :デフォルトの名無しさん:2010/11/22(月) 07:10:59
俺ならこうする
やっぱドラッグ&ドロップは動きがないと
http://ideone.com/nZmm5

740 :737:2010/11/22(月) 09:32:14
>>739
だったらこうしようぜ!

void l_MouseMove(object sender, MouseEventArgs e)
{
 Label l = sender as Label;
 Size p = (Size)l.Tag;
 Point movingOffset = e.Location - p; //マウス移動量の計算
 Point endLocation = l.Location + (Size)movingOffset;//移動後の座標を求める
 Rectangle r = l.Bounds;//ラベルの範囲を表すRectangle構造体
 r.Offset(movingOffset);//ラベル移動後の範囲を求める
 
 //Panel1の範囲外に出ている場合、範囲内に戻す
 int diffX = panel1.Size.Width - r.Right;
 int diffY = panel1.Size.Height - r.Bottom;
 if (endLocation.X < 0) endLocation.X = 0;
 if (endLocation.Y < 0) endLocation.Y = 0;
 if (diffX < 0) endLocation.X += diffX - 2;//2pixelは左右のボーダーライン分
 if (diffY < 0) endLocation.Y += diffY - 2;//2pixelは上下のボーダーライン分

 l.Location = endLocation;//検証後の位置に移動する
}

これでぴたっと止まるぜ!
範囲の検証にRectangle.Contains()を使うとスムーズに動かんので、
XとYは別々に検証したほうがいいみたい。



741 :デフォルトの名無しさん:2010/11/22(月) 10:13:55
Panel.ClientSize使えよ

742 :デフォルトの名無しさん:2010/11/22(月) 11:12:31
>>740
無駄が多いよ´・ω・`)

Label l = (Label)sender;
Point p = l.Location + (Size)(e.Location - (Size)l.Tag);
p.X = Math.Max(0, Math.Min(panel1.Width - l.Width - 2, p.X));
p.Y = Math.Max(0, Math.Min(panel1.Height - l.Height - 2, p.Y));
l.Location = p;

743 :デフォルトの名無しさん:2010/11/22(月) 13:30:10
>>736さん
そうだったんですか!消えている訳ではないのですね>>737〜742さん
どうもありがとうございます!

実行するとどれも、l_MouseMove内の、

Label l = (Label)sender;
でエラーが発生するのですが、なぜなんでしょうか?
エラーメッセージ↓
型 'System.Windows.Forms.Panel' のオブジェクトを型 'System.Windows.Forms.Label' にキャストできません。

744 :デフォルトの名無しさん:2010/11/22(月) 14:23:01
PanelのMouseMoveイベントにl_MouseMoveアタッチしてるからだろ
l_MouseMove付けるのはLabelのMouseMoveイベントだぞ

745 :デフォルトの名無しさん:2010/11/22(月) 16:36:55
複数のスレッドからひとつの変数iに対して++iという処理を行う場合,
CやC++だとアセンブリコードでワンステップなので特別な排他制御を行わなくてもOKですが
C#の場合はどうなんでしょうか?

746 :デフォルトの名無しさん:2010/11/22(月) 16:59:19
どうなんでしょうかね

747 :デフォルトの名無しさん:2010/11/22(月) 17:27:43
>>745
CやC++でも排他制御必要です。

748 :デフォルトの名無しさん:2010/11/22(月) 17:28:20
Interlocked.Incrementとか

749 :デフォルトの名無しさん:2010/11/22(月) 17:28:41
クラス変数(static)、インスタンス変数のインクリメントにはInterlocked.Incrementを使う。
Interlockedはlockより低コストの排他制御。

750 :デフォルトの名無しさん:2010/11/22(月) 17:57:30
低コストの排他制御ですね

751 :デフォルトの名無しさん:2010/11/22(月) 18:10:51
2010Expressで、あるプロジェクトを開き、修正して、元のプロジェクトは元のまま残して、
修正したものを別名で「新プロジェクトとして」保存したいときどうすればいいのですか?
「名前をつけてform1.csを保存」だと、同じフォルダ(プロジェクト)内に保存されてしまい、そのほかのファイルも共有になってしまいます。
C#は「名前をつけて新プロジェクトで保存」は出来ないのでしょうか?

752 :デフォルトの名無しさん:2010/11/22(月) 18:12:08
開く前のプロジェクト一式をフォルダごとコピー

753 :デフォルトの名無しさん:2010/11/22(月) 18:12:32
先にフォルダをコピーしろ

754 :デフォルトの名無しさん:2010/11/22(月) 18:25:04
>>752>>753
えーと、それやるとプロジェクト開くんですかね?
やったことないんだけど。
フォルダの名前だけが違う同じ名前のプロジェクトとして作業するんですか?


755 :デフォルトの名無しさん:2010/11/22(月) 18:26:57
>>754
そんな感じですな
まあ所詮はファイル群に過ぎないからw

コピーしろ

756 :デフォルトの名無しさん:2010/11/22(月) 18:32:04
そうですか・・・じゃあ、途中でプロジェクト名を変えて、
別のプログラムにしたいなーなんてことができないんですか。


757 :デフォルトの名無しさん:2010/11/22(月) 18:33:44
その辺はプロジェクトのプロパティで変更できなかったけ?
まあ最悪の場合リリースビルドのexeの名前を変えればw

758 :デフォルトの名無しさん:2010/11/22(月) 18:39:49
なんか沢山、関連ファイルがあるから、勝手にファイル名やフォルダー名を変えるのは危険そうだから、
自動でやってくれるもんだと思ってたのですが、、、

759 :デフォルトの名無しさん:2010/11/22(月) 18:42:17
>>758
手動であれこれやらなければ大丈夫
IDE上で作業すればOK

760 :デフォルトの名無しさん:2010/11/22(月) 18:51:21
なるほど!ソリューションエクスプローラ上で変更すれば、
他の関連付けもやってくれるんですかね?
試してみます。ありがとうございました。

761 :デフォルトの名無しさん:2010/11/22(月) 18:52:11
まあとにかく実験して覚えろw

コピーした方なら最悪壊れてもいいんだしw

762 :デフォルトの名無しさん:2010/11/22(月) 22:21:23
MDIで子フォームを最大化している時の切り替えのチラツキを
防止する方法を教えてほしいでやんす。
あと、子フォームを連続で生成した場合にも同様のチラツキが出ますが
これは防げないでありんすか?





763 :デフォルトの名無しさん:2010/11/22(月) 22:26:56
え?


764 :デフォルトの名無しさん:2010/11/22(月) 22:39:48
分からないでゲソ

765 :デフォルトの名無しさん:2010/11/23(火) 00:06:51
zip、rarをメモリに解凍して加工するソフトを作りたいのですが
フリーで使える解凍用のライブラリはどういうのを使っていますか?

766 :デフォルトの名無しさん:2010/11/23(火) 00:20:15
>>765
http://www.madobe.net/archiver/index.html

rarはやったこと無いけど、zipやlhaは、ここのライブラリで遊んだことあるよ
一応rarの解凍ライブラリもあるみたいだ

767 :デフォルトの名無しさん:2010/11/23(火) 00:23:09
さあ

768 :デフォルトの名無しさん:2010/11/23(火) 00:33:19
始まるザマスよ

769 :デフォルトの名無しさん:2010/11/23(火) 00:44:09
>>744さん
panel1のイベントにl_MouesMoveをつけていました

わぁぁ!画像がドラッグ&ドロップできる
みなさん本当にありがとうございました!

770 :デフォルトの名無しさん:2010/11/23(火) 01:09:27
VSはPropって入力して
TABを押せば、自動的に
public なんちゃら{get;set;}
を書いてくれるんだな。

なんでこんな便利な機能があったのに気がつかなかった俺だお

771 :デフォルトの名無しさん:2010/11/23(火) 01:10:30
>>770
イベントハンドラーだってtabtabで保管してくれるじゃん
細かい表示を見ないからだよ

772 :デフォルトの名無しさん:2010/11/23(火) 01:26:47
>>770
コードスニペットはDependencyPropertyとかで無いと発狂する

773 :デフォルトの名無しさん:2010/11/23(火) 01:43:03
enum作って

switch タブタブ でそのenumを指定すると

すげーぞ。感動するぞ。

774 :デフォルトの名無しさん:2010/11/23(火) 01:47:19
>>766
だからー、HDDに解凍するのを探しているんじゃないんだよ
解凍したデータをそのままメモリ上で扱いたいんだよ
ちゃんと文章嫁よ

775 :デフォルトの名無しさん:2010/11/23(火) 01:55:37
あるけどお前の態度が気に入らない

776 :デフォルトの名無しさん:2010/11/23(火) 01:56:10
>>774
君はスレの人間を敵に回したいのか?

圧縮ファイルを扱うってのはフリーじゃああまりいいのはないよ
あとライブラリ次第だがc#はメモリをストレージぽく使えるので
指定できれば問題ないだろうけどね

なんていうか詳しくないので黙ってようと思ったけどさすがに
突っ込みさせてもらうわ

777 :デフォルトの名無しさん:2010/11/23(火) 01:57:52
あいつだろ

778 :デフォルトの名無しさん:2010/11/23(火) 02:06:21
>>775
あるなら既に答えているはず
おまえはどっちみち答えない

>>776
わからないなら黙っとけよ


加工するって言っているんだから
いちいちHDDに展開するわけないだろアホか
解凍したいだけなら、わざわざ質問するかよ

779 :775:2010/11/23(火) 02:15:09
>>778
>>766に先を越されて回答されたから反応待ちしてたわけだが

780 :デフォルトの名無しさん:2010/11/23(火) 02:48:36
アホ
あんな発言する奴で答えた試しないし
大抵単発ID
つまり、煽りたいだけの無知のバカ

781 :デフォルトの名無しさん:2010/11/23(火) 02:56:58
煽ってるだけ>>774>>780の無知のバカ>>765が何言っても説得力ない。
単発IDと言う割には>>775>>779で少なくとも2レスあるように思えるのだが、無知のバカは単発IDで煽られていると錯覚するようだ。

782 :デフォルトの名無しさん:2010/11/23(火) 03:06:19
>>777
うん、あいつだね。

783 :デフォルトの名無しさん:2010/11/23(火) 03:08:27
ちゃんとトリップ付けてくんなきゃ困るわ

784 :デフォルトの名無しさん:2010/11/23(火) 09:29:47
ここってID見れるの?

785 :デフォルトの名無しさん:2010/11/23(火) 10:16:29
>>765
解凍してからメモリに読み込んで加工すればいいだけの話だろ。
どうせ裏では勝手にファイル出力されてるんだし。

786 :デフォルトの名無しさん:2010/11/23(火) 10:20:55
もちろんページファイルも禁止ね

787 :デフォルトの名無しさん:2010/11/23(火) 10:25:51
>>785
書庫を直接配列に解凍したほうが早いだろ
そういうライブラリ探しているんだよ
何度も言わせるなアホ

788 :デフォルトの名無しさん:2010/11/23(火) 10:27:19
何度も言わせるぞアフォ

789 :デフォルトの名無しさん:2010/11/23(火) 11:00:13
http://www.madobe.net/archiver/index.html
にあるライブラリで書庫のメモリ展開ができる件について

790 :デフォルトの名無しさん:2010/11/23(火) 11:11:42
配列()笑

791 :デフォルトの名無しさん:2010/11/23(火) 11:12:05
UnXXXExtractMem系の関数はメモリへの解凍だね
さあ次は「ラッパー書かなくてすむ奴の方がいいだろそのほうが早いだろ」って来るぜ

提示された物のドキュメントにすら目を通さないメクラの癖にな

792 :デフォルトの名無しさん:2010/11/23(火) 11:19:41
何マジになってんだよ。
こういう奴には適当に教えておけばいいの。

793 :デフォルトの名無しさん:2010/11/23(火) 11:21:49
そうそう。煽って回答を得ようって意地汚いやり方。

794 :デフォルトの名無しさん:2010/11/23(火) 11:30:02
煽ったら回答減る気がするんだがw
789書いたの俺だが、普段ならideoneにサンプル貼っつけて解説まで入れてる。

795 :デフォルトの名無しさん:2010/11/23(火) 11:30:56
VC#2010 Expressを使用しています。
System.Web.HttpUtilityを使おうと思って、参照設定にSystem.Webを追加しようと思ったんですが、
「参照の追加」ダイアログの.NETタブの一覧にそれがなく、
仕方なく、System.Web.dllを指定して追加したところ、
追加したSystem.Webのところに!マークのアイコンが表示されて、利用できません。
どういった問題が考えるでしょうか。助言をお願いします。

796 :デフォルトの名無しさん:2010/11/23(火) 11:36:21
.NET 4 ClientProfileをターゲットにしてんじゃね

797 :デフォルトの名無しさん:2010/11/23(火) 11:38:38
対象フレームワークが Client Profile になってるんじゃないかな。
HttpUtility.UrlEncode/Decode 使うためだけに
Client Profile からフルインストール版の .NET になるのが納得いかないけども、よくある。


798 :795:2010/11/23(火) 11:42:28
ありがとうございます。おっしゃる通りでした。
対象のフレームワークを.Net Framework 4に変更したところ、うまくいきました。


799 :デフォルトの名無しさん:2010/11/23(火) 11:43:36
だれかHttpUtility.UrlEncode/Decodeだけ分離したライブラリ作ってくれ(´・ω・`)

800 :デフォルトの名無しさん:2010/11/23(火) 11:57:32
リフレクタで逆汗して抜き出せよ。

801 :デフォルトの名無しさん:2010/11/23(火) 12:00:36
そんなに難しくないから作ってみれば?

802 :デフォルトの名無しさん:2010/11/23(火) 12:08:04
RFC39...39...なんだけ

803 :デフォルトの名無しさん:2010/11/23(火) 12:17:23
URIはRFC3986だな。

804 :デフォルトの名無しさん:2010/11/23(火) 12:34:57
>>800,801
思ったより簡単にできて拍子抜けした
ありがとう

805 :デフォルトの名無しさん:2010/11/23(火) 13:56:45
ロリポップのレンタルサーバに、FtpWebRequestを使って、
SSLで接続したいのですが、
URIはどのように指定すれば良いのでしょうか?

"ftps://*****.lolipop.jp/" にすると、「URI プレフィックスが認識されません。」と言うエラーが発生します。
SSLを使わない場合は、接続できました。

806 :デフォルトの名無しさん:2010/11/23(火) 14:01:07
ftpsは非対応だった気が。ライブラリ探してこい。

807 :805:2010/11/23(火) 14:06:38
>>806
FtpWebRequest に EnableSsl と言うプロパティがあるので、できそうな気はします。

808 :デフォルトの名無しさん:2010/11/23(火) 14:09:31
できるみたいね。プレフィックスはftpでいいらしい。
http://www.gine.jp/blog/taka/post/C-e381a6-FTPSe382b5e383bce3838fe383bce381abe68ea5e7b69ae38199e3828b.aspx

809 :デフォルトの名無しさん:2010/11/23(火) 14:18:08
>>808
ftps C#でぐぐったんですね、わかります。

810 :デフォルトの名無しさん:2010/11/23(火) 14:21:44
ググって当然のキーワードだな。

811 :デフォルトの名無しさん:2010/11/23(火) 14:22:27
いや、ちょうど同じURLを貼ろうとしていたもんで

812 :デフォルトの名無しさん:2010/11/23(火) 14:25:36
ここで質問するより、その辺のキーワードでググった方がよっぽど速い。

813 :デフォルトの名無しさん:2010/11/23(火) 14:26:26
なんか、名前を付けるときに
英文字、数字、アンダーバー(_)は使用できるけど
名前の一番最初には数字は使えない(123abcみたいな)
っていうのにはなんか理由あるの?

814 :805:2010/11/23(火) 14:27:39
>>808
ありがとうございます。
ftp:// にすると少し先にすすめましたが、GetResponse()で接続エラーが発生しました。
FileZilla でFTPESでの接続確認ができているので、設定値は問題ないと思うのですが、
他に確認すべきことはありますでしょうか?それとも、レンタルサーバがはじいているのか。

815 :805:2010/11/23(火) 14:33:43
すみません。
UsePassive = true にしたところ、無事SSLで接続できました。
レンタルサーバの設定と言うことですかね。
ありがとうございました。

816 :デフォルトの名無しさん:2010/11/23(火) 14:36:12
つーか、クライアント側の問題だわな。

817 :デフォルトの名無しさん:2010/11/23(火) 14:41:25
>>813
コンパイラたんの解析が大変になるから

818 :デフォルトの名無しさん:2010/11/23(火) 14:50:34
0x11とか 55L とか 50e10とか 変数かもしれんぞって言われたらコンパイラ泣いちゃう。

819 :デフォルトの名無しさん:2010/11/23(火) 14:52:34
if(2oo < 3oo){

}

プログラマも泣いちゃう

820 :デフォルトの名無しさん:2010/11/23(火) 14:54:58
ToT って変数を見て、泣いたこともあったっけ。

821 :デフォルトの名無しさん:2010/11/23(火) 14:56:38
知人が頓挫したプロジェクトのソースからdesumaって変数名を発見したっていってた

822 :デフォルトの名無しさん:2010/11/23(火) 15:18:06
発見したっていってたね

823 :デフォルトの名無しさん:2010/11/23(火) 15:36:38
.NET Framework Client Profileは積極的に選択するべき物ですか?
それともユーザーのニーズが高そうなときのみ選択するものですか?

824 :デフォルトの名無しさん:2010/11/23(火) 15:46:15
Windows Updateで提供されてるのはClient Profileのはずだから
それで制作に困らないならClient Profileの方が配布は楽だろうな

825 :デフォルトの名無しさん:2010/11/23(火) 15:58:35
>>824
こちらの記事でも確認できました。
http://msdn.microsoft.com/ja-jp/netframework/ff687188.aspx#02

Vista以降ならインストール無しで.NET Framework 4 Client Profileを利用出来るということですね

826 :デフォルトの名無しさん:2010/11/23(火) 20:02:32
利用出来るということですね

827 :デフォルトの名無しさん:2010/11/23(火) 20:06:58
そーですね

828 :デフォルトの名無しさん:2010/11/23(火) 21:48:46
>>789
C#のソースが公開されているものがいいんだけど

829 :デフォルトの名無しさん:2010/11/23(火) 22:07:11
CodePlexでプロジェクト立ち上げてろクソカス

830 :デフォルトの名無しさん:2010/11/24(水) 00:28:17
Visual C#のコード作成が融通きかなくて困る

int x;//コメントです

ここで、デザイナのほうでボタンにイベントとか追加すると

int x;

public void button1_click(sender,e){
}//コメントです

みたいにコメントが後ろに書かれてしまう。

831 :デフォルトの名無しさん:2010/11/24(水) 01:02:55
C# の場合、コメント、あんまり後ろに入れるもんじゃないからねぇ。

int x; だけ打ったあと、その前の行で /// って打って doc コメント生成するものだし。

832 :デフォルトの名無しさん:2010/11/24(水) 01:52:30
docコメントって引数変えたら自動で整形してくれよな
あれが面倒で///する気しない

833 :デフォルトの名無しさん:2010/11/24(水) 03:05:12
C#やった後C++とかC言語やったらなんかつまらないエラー出すぎワロタ

main()関数の後ろに構造体や関数とか作って
main関数でその構造体や関数を使おうとすると、「定義されてません」みたいな英語でてきやがった。
うぜぇ
C#は後ろでも前でもどこでもクラスを宣言してもエラーでないで実行できるから最高すぎるな。

834 :デフォルトの名無しさん:2010/11/24(水) 03:48:51
C言語は30年以上前の言語だからなぁ。
それをいまだに引きずってるってのがすごいところだけども。

835 :デフォルトの名無しさん:2010/11/24(水) 08:28:21
汎用関数をDLL化して、これを難読化した場合、誰も使えないDLLになってしまいますが、どうしたら良いでしょうか?
今は、汎用関数のI/Fを作成して、汎用関数群をオブジェクトとして使用することを考えてます。

836 :デフォルトの名無しさん:2010/11/24(水) 09:02:43
部分的に難読化すれば?

837 :デフォルトの名無しさん:2010/11/24(水) 09:54:50
匿名メソッド・ラムダ式のいい使い所が思い浮かばない・・・
なんか業務的に使用する部分でいいサンプルってないですか?


838 :835:2010/11/24(水) 10:00:56
>>837
ループ使っているところは、全てラムダで置き換えられる可能性がある。と、適当なことを言ってみる。

839 :デフォルトの名無しさん:2010/11/24(水) 10:13:34
>>837
http://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_07/extremecs_07_01.html

840 :デフォルトの名無しさん:2010/11/24(水) 11:02:55
foreach(var i in collection)
{
イベント += (sender, e) => { iを使った処理 };
}

841 :デフォルトの名無しさん:2010/11/24(水) 11:30:58
>>838-840
サンクスです
何となく判ってきた気がする


842 :デフォルトの名無しさん:2010/11/24(水) 11:39:30
上位スコープの変数の寿命延長は面白い

843 :デフォルトの名無しさん:2010/11/24(水) 16:39:43

環境は
C# 2.0以降
WindowsXP〜Windows7までのOSです。

文字の中で第一水準と第二水準の文字だというのを判別したいんですが
どのようにやればよいかわかりません。

Shift-Jisでは
第1水準=&h889F〜&h9872
第2水準=&h989F〜&hEAA4

となっているようなので

Encodingを使用してShiftJisエンコードに変換してやれば第一段階はいけるのかな?
と言うところまでは判るのですが、この先が判りません。

お分かりになる方がいらっしゃるようでしたらよろしくお願いいたします。


844 :デフォルトの名無しさん:2010/11/24(水) 16:50:04
範囲わかってて、文字のコードがわかるなら比べるだけじゃん。

845 :デフォルトの名無しさん:2010/11/24(水) 17:15:28
>>844

例えば1文字をバイト配列に展開して
それをShiftJisのコードに展開する方法でいけるのかな?
と思うんですが、その実現方法が・・・


846 :デフォルトの名無しさん:2010/11/24(水) 17:30:57
何で悩んでるのかさっぱりわからんなあ・・・
判定したテキストデータの塊はファイルか何かになってるんでしょ?
それはS-JISなの?

あとマルチバイトコードが面倒っていうのならC#のエンコード機能を使って
使いやすいコードにすればいいのとちゃうの?

847 :デフォルトの名無しさん:2010/11/24(水) 17:45:14
完全独学の俺涙目・・・(´・ω・`)

848 :デフォルトの名無しさん:2010/11/24(水) 18:07:17
Encoding.GetEncoding("Shift_JIS")  の GetBytes のち
調べたい文字の2バイト分を、上下気にしつつ BitConverter.ToUInt16

849 :デフォルトの名無しさん:2010/11/24(水) 19:28:07
先日、既存プロジェクトを変更して別のプロジェクト・プログラム名をつける方法を訪ねたものですが、
色々実験してやっと出来るようになったのですが・・・
ここに書くのを憚るくらい、めっちゃ煩雑なんですけど、こんな方法しか無いのですか?
2010Expressだと仕方ないのでしょうか?
以下、私の方法は、
@一番外側のソリューションフォルダは関連付けの必要がないようなので自由に変えて、
(変えるとIDEのスタートページ「最近使ったプロジェクト」からは開けなくなるけど、「既存のプロジェクト」から開く)
Aソリューション名の変更(ソリューションエクスプローラ、右クリック)
Bプロジェクト名の変更(ソリューションエクスプローラ、右クリック)
Cnamespaceの変更(コードエディタ、右クリック、リファクタ→名前の変更)
Dアセンブリ名の変更(プロジェクトのプロパティ)
Eこれでもプロジェクトフォルダの名前が変わらないので、一旦IDEを閉じ、エクスプローラから手動でフォルダ名を変更。
FIDEを起動。この段階でソリューションファイルからは関連付けが切れてるので、さらに下のプロジェクトファイルから開き、
ソリューションエクスプローラのソリューション名にカーソルを置き、全てを保存。
Gするとプロジェクトフォルダ内にソリューションファイルを作ろうとするから、ひとつ上のソリューションフォルダに上がり上書き保存。以上

これでもデバッグ関係のフォルダに旧プロジェクト名のファイルが残るのですが、まあデバッグだからいいか・・・
みなさんはアセンブリ名だけ変えれば、フォルダ名やnamespaceに旧プロジェクト名が残ってても気にしませんか?
長文失礼しました。


850 :デフォルトの名無しさん:2010/11/24(水) 19:39:20
>>849
そういうことをするプログラムを書け

851 :デフォルトの名無しさん:2010/11/24(水) 20:07:29
プロジェクト名変更すること自体が異例だろ
実行ファイル名だけ変えとけばええがな

852 :デフォルトの名無しさん:2010/11/24(水) 20:48:00
>>851
え?

853 :デフォルトの名無しさん:2010/11/24(水) 21:00:40
今日いつも通りに出社したらプロジェクト無くなっててワロタw

ってことになるだろ

854 :デフォルトの名無しさん:2010/11/24(水) 22:10:41
>>849
app.configとSettings.Designer.csとSettings.settingsの修正も必要だよ!

855 :デフォルトの名無しさん:2010/11/24(水) 22:14:17
いらんだろ。

856 :デフォルトの名無しさん:2010/11/24(水) 22:16:32
>>854
VS2005のVBだと.vbproj内のXML名を外部エディタで変えないといけなかった
C#4.0で必要なのかは分からんけど

857 :856:2010/11/24(水) 22:33:05
確認したが、VS2010ならプロジェクトのプロパティでファイル名が指定できた
VS2005にファイル名のテキストボックスはないけど、
「XMLドキュメントファイルを生成する」のチェックを外せば値は消えるみたい

858 :デフォルトの名無しさん:2010/11/25(木) 02:17:07
ぼーっとしてた

859 :デフォルトの名無しさん:2010/11/25(木) 04:04:17
エクスプローラへのドラッグドロップを実装しているのですが、エクスプローラからエクスプローラへのドロップやFireFoxから
エクスプローラへのドロップなどに比べ、明らかに動作が遅いです(例えば、挿入マークの移動が遅いです)。
どうすれば軽くなりますか?

ちなみに、こちらの記事のコードでも同様の問題が起こってます。
http://www.atmarkit.co.jp/fdotnet/dotnettips/384expdragdrop/expdragdrop.html

よろしくお願いします。

860 :デフォルトの名無しさん:2010/11/25(木) 07:10:47
え?

861 :849:2010/11/25(木) 10:30:31
CDはプロジェクトのプロパティ画面で同時に出来るから、ちょっとだけ簡略できるみたい。
E以降は、プロジェクトフォルダの名前を統一したいためだけの作業なので、
プログラミング上、表面には出てこないので気にしない人は放置でも問題ない。
>>856
VC#2010Express以外使ったこと無いので分かりません。
でもE以降を放置すれば、全部IDE上での作業なので問題なく、
デバッグもエラーは出ないようです。

862 :デフォルトの名無しさん:2010/11/25(木) 10:55:41
フォルダを別名に変更、ソリューションファイルダブルクリック
あとは、IDEでプロジェクト名など変更するだけでいける

863 :デフォルトの名無しさん:2010/11/25(木) 15:53:04
小規模なら新しいプロジェクト作って既存の項目の追加で
前のプロジェクトからファイル一式持ってくるのが楽そう

864 :859:2010/11/25(木) 18:28:47
自己解決しました。
重いのはIDEでデバッグ中のみで、binフォルダ内の実行ファイルを直接実行した場合は問題なしでした。
スレ汚し失礼しました><

865 :デフォルトの名無しさん:2010/11/25(木) 18:29:43
手軽に変更できないことからみて、みんな途中で変更しないのか。
初めのプロジェクト名の命名は大事だな。

866 :デフォルトの名無しさん:2010/11/25(木) 18:55:11
Project1のままだわw

867 :デフォルトの名無しさん:2010/11/25(木) 20:13:59
Project1かw
社運をかけた巨大プロジェクトとかスパイの秘密プロジェクトみたいでかっこいいじゃないか

868 :デフォルトの名無しさん:2010/11/25(木) 20:20:53
せやろ?wかっこええやろ?w

869 :デフォルトの名無しさん:2010/11/25(木) 20:36:17
じゃあおれはProjectAで

870 :デフォルトの名無しさん:2010/11/25(木) 21:27:41
ジャッキー乙

871 :デフォルトの名無しさん:2010/11/25(木) 21:28:19
じゃあ俺はProjectA子で

872 :デフォルトの名無しさん:2010/11/25(木) 21:55:52
うん

873 :デフォルトの名無しさん:2010/11/25(木) 23:10:51
EXcelで直線を引くと両端に小さい円がありますよね
その円で自由に直線の長さや角度を変更できますが
あれは、なんという機能なんでしょうか?

C#で実装しようとすると、どんな単語をwwwを検索すればいいですか?

874 :デフォルトの名無しさん:2010/11/25(木) 23:15:08
そんなのあったっけ?
スクリーンショットくれ

875 :デフォルトの名無しさん:2010/11/25(木) 23:20:41
>>873
グリップじゃないか。あれ。

876 :デフォルトの名無しさん:2010/11/25(木) 23:22:28
world wide webなんだろうけど藁ってるように見えるわ
末期だな

877 :デフォルトの名無しさん:2010/11/25(木) 23:35:09
ラバーバンドとかグラブハンドル?

878 :デフォルトの名無しさん:2010/11/25(木) 23:36:05
コントロールハンドルとか?
というか『実装』って初心者に人気の言葉だよな

879 :デフォルトの名無しさん:2010/11/25(木) 23:44:21
プロに人気なのは仮装だからな

880 :デフォルトの名無しさん:2010/11/25(木) 23:45:17
適当なレスも初心者特有だなw

881 :デフォルトの名無しさん:2010/11/26(金) 00:42:13
>>873
たしかChartオブジェクトじゃなかったっけ

C#で「excelで引いた直線に小さい円が付いていて、それを掴んで移動させると自由に直線の長さや角度を変更」できる機能
なんて作ったらexcelクローンできちゃう
もっと色んなソフト試して本当に必要な項目洗い出せるようになったほうがいいんでは

882 :デフォルトの名無しさん:2010/11/26(金) 07:09:30
Chartはグラフだろ。バカ?

883 :デフォルトの名無しさん:2010/11/26(金) 08:10:36
http://office.microsoft.com/ja-jp/visio-help/HP001025478.aspx?CTT=1
Officeのヘルプサイトによれば、頂点(Vertices)だな

C#で実装するにはドラッグできるコントロールを2つ作って、
その間に直線がひかれるようにすればいい


884 :デフォルトの名無しさん:2010/11/26(金) 09:03:23
>>882
バカだけ余分だろ

885 :デフォルトの名無しさん:2010/11/26(金) 11:52:56
いや、881は馬鹿。
例に出しただけでexcelクローンとか。
馬鹿。

886 :デフォルトの名無しさん:2010/11/26(金) 13:03:05
>>861
IDE上で書き換えた結果と書き換え前で差分取って
IDE使わず書き換えるツール作ってみたら?

887 :デフォルトの名無しさん:2010/11/26(金) 13:12:35
何で簡単に変更できないようになっているんだろうな
あることを試したくてコードを大幅に変更するときがすごく面倒

888 :デフォルトの名無しさん:2010/11/26(金) 13:20:30
>あることを試したくてコードを大幅に変更するときがすごく面倒
バージョン管理ツール使え
tortoisesvnならフリーだしVisualStudioとの連携もある

889 :デフォルトの名無しさん:2010/11/26(金) 13:29:19
>>885
いい加減チラシの裏使おうか

890 :デフォルトの名無しさん:2010/11/26(金) 13:30:18
>883
ごめんなさい、それExcELじゃないのでだめです

891 :デフォルトの名無しさん:2010/11/26(金) 13:50:35
>>890
ネタのつもりならもう少し面白いこと書いてくれ
そうじゃないならほとんどExcelと同じものの説明なのにどうだめなのか詳しく書いてくれ

892 :デフォルトの名無しさん:2010/11/26(金) 16:21:03
refキーワードって
関数の引数で値を変えたいときだけにしかつかわない?

int x;
func(ref x);//xが変わっちゃう

こんな感じの用途だけ?

893 :デフォルトの名無しさん:2010/11/26(金) 17:21:52
>>892
その場合はrefじゃなくてoutを使うのが適切
refは引数として意味がないといけない

894 :デフォルトの名無しさん:2010/11/26(金) 17:51:42
refもoutも使いそうになったら仕様を一回考えたほうがいいな

895 :デフォルトの名無しさん:2010/11/26(金) 18:28:50
outはint.TryParseの例があるからいいとして、
refの使いどころはいまいちわからん

896 :デフォルトの名無しさん:2010/11/26(金) 18:35:13
>>894
2つ以上の値を返したい場合はoutかrefが必要だよね.

Private Boolean GetXXX(ref int X)とか.

おれの場合
outはいったん受け取った後に中身を判断して何かするときに使ってる.
refは直接更新して欲しい変数のとき使ってる.

897 :デフォルトの名無しさん:2010/11/26(金) 18:45:34
>>896
それ、outとref逆じゃない?
outは未割り当ての変数として処理されるから中身の判断なんてできない。
例に挙げたのも
bool GetXXX(out int x)
にするのが適切だと思う。
ついでに単純に2つ以上の値を返すだけなら
構造体やクラスを使用することが推奨されてたはず。

898 :デフォルトの名無しさん:2010/11/26(金) 19:29:03
表現が分かりずらかったかな?
受け取った後にとは,関数を呼んだ側の処理.
int i = 0;
if (GetXXX(out i))
{
if (i == 0)
{
・・・
}
}

2つ値を返すのにclassやstructにする意味が分からん.

899 :デフォルトの名無しさん:2010/11/26(金) 19:42:53
そんなのわざわざ書かなくてもわかってるよ
そういうことじゃなくてX座標とY座標の値を返すときは
Point型を使いましょうって話

900 :デフォルトの名無しさん:2010/11/26(金) 19:51:30
outがあるから関数の戻り値は全部voidでいいんです派

901 :デフォルトの名無しさん:2010/11/26(金) 20:10:16
>>900
部下ならクビにする
上司なら会社辞める

902 :デフォルトの名無しさん:2010/11/26(金) 20:18:01
>>898
どっちでもいいけど、outだからiは初期化しなくてもいい
この辺りはmsdnにガイドがあったはず

903 :デフォルトの名無しさん:2010/11/26(金) 20:18:38
out があるから関数の戻り値は関数の成功失敗をかえせばいいんですWinAPI派

904 :デフォルトの名無しさん:2010/11/26(金) 20:21:10
色んなやり方があるんだなあ

>>901
デメリット教えてよ。皆が慣れてないから?

905 :デフォルトの名無しさん:2010/11/26(金) 20:32:12
逆にメリットを聞きたい

906 :デフォルトの名無しさん:2010/11/26(金) 20:49:20
デメリット
・結果を参照するために必ず変数を宣言しなくてはいけない
・結果を無視してもいい場合でも変数を宣言しなくてはいけない
・戻り値なら1行ですむところが2行になる

メリット
・なし

こんなの好き好んで使うやつは死んだほうがいい

907 :デフォルトの名無しさん:2010/11/26(金) 20:52:20
>>904
.Where(…).OrderBy(…).ToList(…)とか出来なくなって俺のモチベーションが下がる

908 :デフォルトの名無しさん:2010/11/26(金) 20:54:47
string[] strArray = { "1", "2", "3", "4", "5" };
int length;
bool b;
iArray.GetArrayLength(iArray, out length, out b);
if (!b) return;
for (int i = 0; i < length; i++)
{
int n;
bool b;
int.GetTryParse(strArray[i], out n, out b);
if (!b) continue;
foo(i, n);
}

こんなコーディングするメンバーと開発なんてしたくねえよw

909 :デフォルトの名無しさん:2010/11/26(金) 20:57:39
>>907
LINQつかわんかいw

910 :デフォルトの名無しさん:2010/11/26(金) 21:16:51
メソッドの成功失敗は例外で報告するべき
→でもtryで囲むの面倒だし、頻繁に例外が発生してしまう
→Tester-Doerパターンで事前にチェックできるようにする
→でもDoerでやってることは元のメソッドでもやってるので二度手間
→結局Try-Parseパターンしか実装しない
皆さんはどうしてます?

911 :デフォルトの名無しさん:2010/11/26(金) 21:19:40
>>909
クエリ構文だとfrom a in bとかselect aとか記述量多くなるから滅多に使わないなあ

912 :デフォルトの名無しさん:2010/11/26(金) 21:38:12
クエリわかんねw
メソッドばっかりだわー

913 :デフォルトの名無しさん:2010/11/26(金) 21:42:41
クエリ構文の名誉のために
SelectManyが必要になるような場合はクエリ構文のほうがわかりやすいと書いておく

Enumerable.Range(0, 10).SelectMany(_ => Enumerable.Range(0, 10), (a, b) => a * b);

from a in Enumerable.Range(0, 10)
from b in Enumerable.Range(0, 10)
select a * b;

914 :デフォルトの名無しさん:2010/11/26(金) 22:14:05
関数の成功失敗は戻り値としてboolで返す
例外投げるのはコストとか見やすさとか考えるとどうなのってなる
きっとWinAPIに浸かってたせい

WinAPIでいうGetAsyncKeyState的なものって.NETにある?

915 :デフォルトの名無しさん:2010/11/26(金) 22:20:31
WinAPIでいうGetAsyncKeyState的なものが.NETにあるといいですね


916 :デフォルトの名無しさん:2010/11/26(金) 22:27:55
エラーは何が何でも例外で報告しろってどんな教条主義だ

917 :デフォルトの名無しさん:2010/11/26(金) 22:32:56
>>916
.netの標準ライブラリってそんな感じじゃない?

918 :デフォルトの名無しさん:2010/11/26(金) 22:44:15
とはいっても例外以外で「これはエラーです」って確かに伝える方法ないよね
ライブラリ側で「負の数値は検索結果が無いときの戻り値です」って言われても、
何らかの都合でマニュアル紛失したらスルーされちゃうだろうし

919 :デフォルトの名無しさん:2010/11/26(金) 23:01:10
HRESULTディスってんの?

920 :デフォルトの名無しさん:2010/11/26(金) 23:21:29
>>915
BOTの方ですか?

921 :デフォルトの名無しさん:2010/11/26(金) 23:24:57
WPFってパッド認識できる?

922 :デフォルトの名無しさん:2010/11/26(金) 23:33:46
boolでエラー返るようにしてるとif文ばっかりになる

923 :デフォルトの名無しさん:2010/11/26(金) 23:50:48
>>921
パッドはDirectXの領域でしょうな。

924 :デフォルトの名無しさん:2010/11/27(土) 00:27:30
WPFってDirectXをラップしてるだけじゃないの?
パッドも使えないのかよ

925 :デフォルトの名無しさん:2010/11/27(土) 00:31:49
C#プログラマの皆さんは、今どきリスト内包表現のすら無い言語を使って恥ずかしくなったりしませんか?

926 :デフォルトの名無しさん:2010/11/27(土) 00:34:15
生まれてきてすみません///

927 :デフォルトの名無しさん:2010/11/27(土) 00:37:34
音楽性の違いで…

928 :デフォルトの名無しさん:2010/11/27(土) 00:38:32
弘法だから道具は選びませんの

929 :デフォルトの名無しさん:2010/11/27(土) 00:39:14
実際の弘法は道具ヲタだったけどな

930 :デフォルトの名無しさん:2010/11/27(土) 00:39:18
>>925
何を言っているのか分からない。例えば
foreach(var item in from x in array where x % 2 == 0 select x * x)
{
//
}
という記述は内包表記と表現力は全く変わらないわけだが。

931 :デフォルトの名無しさん:2010/11/27(土) 00:43:57
>>930みたいなコード書く奴がいたらいじめたくなるな

932 :デフォルトの名無しさん:2010/11/27(土) 00:45:42
AC版買ったけど、なんの認証もないんだなw


933 :デフォルトの名無しさん:2010/11/27(土) 00:47:41
てか、シリアルあればUltimate使えるし

934 :デフォルトの名無しさん:2010/11/27(土) 00:49:28
>>925
>のすら
やだ、恥ずかしい

935 :デフォルトの名無しさん:2010/11/27(土) 00:50:15
in...in...とかやってらんない感じだな。

936 :デフォルトの名無しさん:2010/11/27(土) 00:58:38
ふ〜ん

937 :デフォルトの名無しさん:2010/11/27(土) 01:00:48
女教師in...

938 :デフォルトの名無しさん:2010/11/27(土) 01:06:36
>>925
ここではともかくC++スレでそういう挑発はやめてくれな。
メタプログラミングを駆使して実現しようとする変態が現れる。

939 :デフォルトの名無しさん:2010/11/27(土) 01:09:22
hahaha

940 :デフォルトの名無しさん:2010/11/27(土) 01:38:13
>>910
例外握り潰していいならTry-Parseパターン
例外が必要ならtry-catch

941 :デフォルトの名無しさん:2010/11/27(土) 07:23:46
>>930
やっぱりクエリ構文って冗長だわ

942 :デフォルトの名無しさん:2010/11/27(土) 07:33:08
リスト内包表現調べてみたらLINQとほぼ一緒でわろた
>>925さんは、今どきLINQのすら知らずにそんな書き込みして恥ずかしくなったりしませんか?

943 :デフォルトの名無しさん:2010/11/27(土) 07:41:53
[x*x for x in array if x % 2 == 0]
from x in array where x % 2 == 0 select x * x
array.Where(x => x % 2 == 0).Select(x => x * x)
リスト内包表現が一番すっきりしてるな

944 :デフォルトの名無しさん:2010/11/27(土) 08:06:23
>>943に.OrderBy().ThenBy().Skip().Take()を追加したらどうなる?
それでもリスト内包表現とやらの方が簡潔なの?

945 :デフォルトの名無しさん:2010/11/27(土) 09:10:40
ある程度エラーがあるのが分かっている場合
try〜catch使うとifより遅くなるの?

try
{
 x = int.Parse(y);
}
catch
{
  // φ
}

if (y.Length > 0) x = int.Parse(y);

例なのでTryPaese使えって言うのはなしで。

946 :デフォルトの名無しさん:2010/11/27(土) 09:14:32
>>944
リスト内包表現に.OrderBy().ThenBy().Skip().Take()に相当するものはないよ
それ以外の機能を使えば簡単に実現は可能だけどね
Pythonの場合、OrderByとThenByはsortedで代用
SkipとTakeはスライスで代用ってところかな
ソートに関してはOrderByのほうが簡潔にかけるけど
SkipとTakeはスライスのほうが記述量が少ない
arr.Take(5)
arr[:5]
まあこんな比較まったく価値がないことだけど

947 :デフォルトの名無しさん:2010/11/27(土) 09:22:13
>>945
試せばいいじゃない
http://ideone.com/47NBm

948 :デフォルトの名無しさん:2010/11/27(土) 09:33:57
>>945
速度気にするのなんて10年速いわ

949 :デフォルトの名無しさん:2010/11/27(土) 11:08:16
>>945
つ ttp://msdn.microsoft.com/ja-jp/library/x4764854(v=VS.90).aspx

950 :デフォルトの名無しさん:2010/11/27(土) 11:26:07
>>943
タイピング量だけで見ちゃだめよ。
何気に、select が後ろなのって大事。
補完的な意味で。

951 :デフォルトの名無しさん:2010/11/27(土) 11:27:59
例外ってちゃんと処理してもめちゃくちゃ重いんだね
こりゃ頻繁に例外が発生するようなプログラムは書いちゃいかんわ

952 :デフォルトの名無しさん:2010/11/27(土) 11:32:57
文字列を数値にするのって
入力側で気をつけて数字以外受け付けないようにするか(例:年齢の入力)、
それを使う段階で内部エラーにするか(例:ポート番号の入力)だな
(前者の制限を付けるのはかったるいけど)

結局ほとんどの例外がtry-catchベースで例外処理するのに、
「数値のときだけ if で tryparse して時間稼ぎます(キリュッ」ってのは場合わけの方が面倒じゃないのか?

953 :デフォルトの名無しさん:2010/11/27(土) 11:35:11
例外は、

・try するだけならノーコスト
・例外が throw されたら正常フローの2〜3ケタくらい遅い

で、大体、利用指針としては、

・メソッド呼ぶ前のチェックで回避できるものは回避(tester-doer)
 ・テストの段階で全部取る
・チェック用のコードが元のコードと同じような処理になっちゃう場合は TryParse
・ファイル競合みたいに事前チェックしてもタイミング次第で絶対起きるものだけをcatchで対処


954 :デフォルトの名無しさん:2010/11/27(土) 11:37:38
>>952
数値の Parse だけじゃないよ。
Dictionary の TryGetValue とか、
DynamicObject.TryGetMember とか、
2度同じ処理書くことになるものには Try 版がある。

955 :910 :2010/11/27(土) 11:43:42
>>953
なるほど、すっきりしました。
ところでTry 版には接頭辞としてTryをつけるべき?

956 :デフォルトの名無しさん:2010/11/27(土) 11:48:09
リターンが分かりやすいからつけた方がいいんじゃないの
Tryじゃない版も作るならの話だけど

957 :デフォルトの名無しさん:2010/11/27(土) 12:03:06
ですね、そうします

958 :デフォルトの名無しさん:2010/11/27(土) 14:08:32

●A    string str = DateTime.Now + "";
●B    string str = DateTime.Now.ToString;


Aだとうまくいくが、Bだとエラー。
エラーメッセージでは、非デリゲートだからとか、
ほんわかとイメージがつくが、ばしっと理由がわからない。
ググり方が下手なせいかよくわかりませんでした。
AとBの具体的な違いがわかる人はわかる人はおられるでしょうか?


959 :デフォルトの名無しさん:2010/11/27(土) 14:10:50
Aはプロパティだよ
Bはプロパティでもメソッドでもないからエラーになって当然

960 :デフォルトの名無しさん:2010/11/27(土) 14:14:35
DateTime.Now.ToString();

961 :デフォルトの名無しさん:2010/11/27(土) 14:20:25
あああ、すごい勘違いでした。
()が無いけどアドレスじゃないから、デリゲートのエラーだったんですね。
単純な記述ミスでした。
959さん 960さん
回答ありがとうございます。

962 :デフォルトの名無しさん:2010/11/27(土) 14:32:24
アドレス?
正しい理解のためにも用語は正しく使おうぜ。
Nowはプロパティだから値の取得に()は必要ない
ToStringはメソッドだから値の取得に()が必要。

963 :デフォルトの名無しさん:2010/11/27(土) 14:58:45
>>961
どこまでわかってるのかすごい心配になるレスだなw

964 :デフォルトの名無しさん:2010/11/27(土) 15:35:52
>>961
心配になるレスですねw

965 :デフォルトの名無しさん:2010/11/27(土) 15:41:43
基礎を学ばずに使い始めるとこうなるんですね

966 :デフォルトの名無しさん:2010/11/27(土) 15:46:15
少なくとも、初心者にとって
関数、メソッドの()をつけないことはよくあるミスかもしれないが
「アドレス」なんていいかたしないからな

中途半端に余計な知識ついてしまってるんだろうな。

967 :デフォルトの名無しさん:2010/11/27(土) 15:47:32
別の言語から入ったとかじゃない?
文字列でアドレスっていうといかにもC言語っぽいが

968 :デフォルトの名無しさん:2010/11/27(土) 16:32:47
VB?

969 :デフォルトの名無しさん:2010/11/27(土) 17:15:21
え?

970 :デフォルトの名無しさん:2010/11/27(土) 17:21:23
VBはメソッドの()が省略可能で、VB6に至っては自動で消えるからなあ

971 :デフォルトの名無しさん:2010/11/27(土) 17:26:29
VBにはAddressOf演算子があるね

972 :デフォルトの名無しさん:2010/11/27(土) 18:10:45
昔の名残が意味を変えて登場するのって
初心者騙し専用だな

973 :デフォルトの名無しさん:2010/11/27(土) 19:00:28
ん?

974 :デフォルトの名無しさん:2010/11/27(土) 19:05:03
デリゲートうんたらってのは
Action a = UnkoMethod;
みたいに()なしで書くから?

975 :デフォルトの名無しさん:2010/11/27(土) 19:14:46
そう
VBと違って引数なしのメソッドでも()付けないと呼べないし
AddressOfみたいなやつを付けなくてもデリゲートだって解釈される

976 :デフォルトの名無しさん:2010/11/27(土) 19:16:10
それは省略形。1.x まではこう書く必要があったな。
MothodInvoker mi = new MethidInvoker( FuncXX );

977 :デフォルトの名無しさん:2010/11/27(土) 19:25:27
あるActiveXを使ってるんですが、そいつの関数 void Foo(string s, ref object o)を呼び出して、
引数のoにデータが格納されてかえってくるんですが、
データのタイプを判別すると、「double[]」となってました。
で、そのdoubleの配列の要素数を知りたいのですが、どのようにすれば知ることができるのでしょうか?

978 :デフォルトの名無しさん:2010/11/27(土) 19:27:41
>>976
それでもメソッド名には()つけてないよね。FuncXX()とは書かないし

979 :デフォルトの名無しさん:2010/11/27(土) 19:28:21
さあ

980 :デフォルトの名無しさん:2010/11/27(土) 19:30:12
>>977
普通にキャストしたんじゃ駄目なんかい

981 :デフォルトの名無しさん:2010/11/27(土) 19:30:39
え?

982 :デフォルトの名無しさん:2010/11/27(土) 19:31:22
(double[])o.Lengthでいいんじゃないの?

983 :デフォルトの名無しさん:2010/11/27(土) 19:32:12
>>980
踏んだね

984 :デフォルトの名無しさん:2010/11/27(土) 19:36:12
>>980
新スレまだー?まだー?

985 :デフォルトの名無しさん:2010/11/27(土) 19:36:41
しまった罠か

986 :デフォルトの名無しさん:2010/11/27(土) 19:37:40
ふらっとC#,C♯,C#(初心者用) Part66
http://hibari.2ch.net/test/read.cgi/tech/1290854247/

987 :デフォルトの名無しさん:2010/11/27(土) 19:42:04
げ,あぶね〜.そんなルールあったのかw

988 :デフォルトの名無しさん:2010/11/27(土) 19:42:20
>>986
C#, C♯, C#相談室は今Part63だよ
あわてんぼさんめ

989 :デフォルトの名無しさん:2010/11/27(土) 19:42:37
なんという狡猾な罠

990 :デフォルトの名無しさん:2010/11/27(土) 19:45:21
ぬるぽ

991 :デフォルトの名無しさん:2010/11/27(土) 19:46:44
>>982
駄目に決まっているだろ

992 :デフォルトの名無しさん:2010/11/27(土) 19:49:53
GC.SuppressFinalize(this)

993 :デフォルトの名無しさん:2010/11/27(土) 19:51:38
>>978
・()あり メソッドコール
・()なし メソッドグループ(デリゲート派生型に変換可能)

994 :978:2010/11/27(土) 19:58:04
double[] dData = (double[])o;
で、ようやくforeachでデータを取り出すことが出来ました。


995 :デフォルトの名無しさん:2010/11/27(土) 19:59:50
null pointer
access violation


996 :デフォルトの名無しさん:2010/11/27(土) 20:03:54
if(o is double[]){
  double[] dData = (double[])o;
}
ってするか
double[] dData = o as double[];
if(o != null) {
  〜
}
ってしとかな危ないぞ

997 :996:2010/11/27(土) 20:04:36
if(dData != null)な すまn

998 :デフォルトの名無しさん:2010/11/27(土) 20:04:47
危ないね

999 :デフォルトの名無しさん:2010/11/27(土) 20:31:46
>>996
ありがとうございます


1000 :デフォルトの名無しさん:2010/11/27(土) 20:33:13
ぬるポ


1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

234 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)