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

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

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

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

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

■関連スレ
C#, C♯, C#相談室 Part59
http://pc12.2ch.net/test/read.cgi/tech/1274019232/
VB.NET質問スレ(Part34)
http://pc12.2ch.net/test/read.cgi/tech/1270998481/
くだすれ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/05/25(火) 19:02:34
>>993
ありがとうございます。
が。
いまたぶん問題なのはContextmenuのイベントハンドラなのではないかと。
3デフォルトの名無しさん:2010/05/25(火) 19:07:08
>>2
うむ
4デフォルトの名無しさん:2010/05/25(火) 19:08:39
>>2
えw
だからそれを書きなれないxaml上でしないでC#上でやったら?
って提案でしょw
5デフォルトの名無しさん:2010/05/25(火) 19:10:12
>>4
ん?何か違いましたか?
6デフォルトの名無しさん:2010/05/25(火) 19:11:43
え・・・
もしかして>>993の方法教えたけど他のイベントハンドラもかかないとできないってこと?
7デフォルトの名無しさん:2010/05/25(火) 19:24:08
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            ContextMenu cm = new ContextMenu();
            MenuItem mi = new MenuItem();
            mi.Header = "copy";
            mi.MouseDown += new MouseButtonEventHandler(mi_MouseDown);
            cm.Items.Add(mi);
            img.ContextMenu = cm;
        }

        void mi_MouseDown(object sender, MouseButtonEventArgs e)
        {
            throw new NotImplementedException();
        }
こんな感じで書ける
8デフォルトの名無しさん:2010/05/25(火) 20:32:45
ほんとにWPFらしさを求めるならイベントハンドラすら使わない
コマンドバインディングを使う
9デフォルトの名無しさん:2010/05/25(火) 20:45:02
>>7
みなさんありがとうございます。
まずcontextmenuからということで、
<Grid Name="img" MouseRightButtonDown="img_MouseRightButtonDown" MouseRightButtonUp="img_MouseRightButtonUp">
<Grid.ContextMenu>
<ContextMenu Name="contextMenu">
<MenuItem Header="コピー" Name="copy" Click="copy_Click" />
</ContextMenu>
</Grid.ContextMenu>
</Grid>
とあったものを、次のようにしました。
<Grid Name="img" MouseRightButtonDown="img_MouseRightButtonDown" MouseRightButtonUp="img_MouseRightButtonUp">
</Grid>

ContextMenu contextMenu = new ContextMenu();
MenuItem copymi = new MenuItem();
copymi.Header="copy";
copymi.Click += (s,e) => copy_Click(s,e);
contextMenu.Items.Add(copymi);

ところが、contextMenuが表示されません。
10デフォルトの名無しさん:2010/05/25(火) 20:48:44
<Grid Name="img" MouseRightButtonDown="img_MouseRightButtonDown" MouseRightButtonUp="img_MouseRightButtonUp">
<Grid.ContextMenu>
<ContextMenu Name="contextMenu">
</ContextMenu>
</Grid.ContextMenu>
</Grid>

MenuItem copymi = new MenuItem();
copymi.Header="copy";
copymi.Click += (s,e) => copy_Click(s,e);
contextMenu.Items.Add(copymi);

ならメニューが出ます。
Gridのimgに登録するのかと思ったのですが、

img.Add(contextMenu);

としたら、
'System.Windows.Controls.Grid' に 'Add' の定義が含まれておらず、型 'System.Windows.Controls.Grid' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
とエラーです。
11デフォルトの名無しさん:2010/05/25(火) 20:51:27
MouseRightButtonDownとかMouseRightButtonとかいらないから
WPF ContextMenuでググればいくらでも出てくるじゃん
12デフォルトの名無しさん:2010/05/25(火) 21:05:49
>>11
>>10が要求してるのは右クリックをドラッグアンドドロップ動作とContextMenuの表示
の切替をしようとしてるからややこしくなってるだよw
13デフォルトの名無しさん:2010/05/25(火) 21:08:49
>>10
xamlの階層を見ると
Grid.ContextMenu->ContextMenu->MenuItem
って感じじゃないの?

前スレの>>9だとうまくいかないってことはxamlの階層をそのまま解釈したのではだめ
ってことだろうけど
14デフォルトの名無しさん:2010/05/25(火) 21:21:32
>>10
動的に表示したいんだから、特定の要素のContextMenuプロパティに入れちゃダメ
フィールドにContextMenuを持っておく
で、MouseUp系のイベントでIsOpenを設定する
15デフォルトの名無しさん:2010/05/25(火) 21:50:40
こうゆうことを教えてくれる上司がいる会社で働きたい・・・
気合でベタ書き縦横無尽に右往左往でニッチもサッチも。
16デフォルトの名無しさん:2010/05/25(火) 21:55:25
ちゃんと最後まで言い切りなさい

どうにもブルドッグ、わぉ!
17デフォルトの名無しさん:2010/05/25(火) 22:13:19
おいらもひとりでちまちまやってるよ。趣味グラマだけど。
規制よく食らうからここで質問出来ないのはキツイ
18デフォルトの名無しさん:2010/05/25(火) 23:42:55
>>14
フィールドにもつのはどうしたらよいでしょう?
ContextMenu contextMenu = new ContextMenu();
をメソッドの外におけばオーケー?

あと登録がまだできてないです。
FormならControl.Add(this.contextMenu)かと思ったら、これも違うみたいで…。

>>15
ふらっとC#はけっこういいですよね。
19デフォルトの名無しさん:2010/05/25(火) 23:44:53
今は和やかだがたまに時化る
20デフォルトの名無しさん:2010/05/26(水) 02:23:04
>>18
荒らしがいてにぎやかでいいですよね。
21デフォルトの名無しさん:2010/05/26(水) 07:55:51
DataGridViewでクリックしても選択状態が変わらないようにすることはできるでしょうか?
.Enabled = false; で一応なるのですがスクロールもできなくなってしまうので
スクロールはできつつ変わらない状態にしたいのですが
22デフォルトの名無しさん:2010/05/26(水) 09:01:04
選択した時の背景色と通常の背景色を一緒にして急場をしのぐ 
とかw
23デフォルトの名無しさん:2010/05/26(水) 09:30:34
【目標】
マウスの右クリック(コンテキストメニュー)と右ドラッグ(ダウン-移動-アップ)に異なる処理を割り当てたい。

【現在】
やっと.csだけでcontextMenuを表示できるようになりました。

<Grid Name="img" MouseRightButtonDown="img_MouseRightButtonDown" MouseRightButtonUp="img_MouseRightButtonUp">
</Grid>

ContextMenu contextMenu = new ContextMenu();
MenuItem copymi = new MenuItem();
copymi.Header="copy";
copymi.Click += (s,e) => copy_Click(s,e);
contextMenu.Items.Add(copymi);
img.ContextMenu = contextMenu;

24デフォルトの名無しさん:2010/05/26(水) 09:39:35
bool mousemove = false;
int startX;
int startY;
private void img_MouseRightButtonDown(object sender, MouseButtonEventArgs e){
mousemove = true;
//マウス位置取得
startX = e.X;
startY = e.Y;
MessageBox.Show("mousedown" + mousemove);
}

private void img_MouseRightButtonUp(object sender, MouseButtonEventArgs e){
//マウス位置取得。マウス位置計算
//if (移動量 > たとえば20ピクセル)
if ((e.X - startX) * (e.Y - startY) > 20 || (e.X - startX) * (e.Y - startY) < -20 MessageBox.Show("mouseup");
else ContextMenu.Show();
}

現在は、右クリックでは単にコンテキストメニューが開きます。
次になにをしたらよいんでしょう?
あと、
throw new NotImplementedException();
ってなにの意味なんでしょう?
25デフォルトの名無しさん:2010/05/26(水) 10:01:40
>>24

>なにをしたらいいんでしょう
ちょっとは考えたほうがいいと思うぞ
初心者ならなおさら
むしろ目的を達成するためになにがあと足りてないんだ?


>throw new NotImplementedException();
>ってなにの意味なんでしょう?
一回判らない事は全部聞かずにググってみ?
一番最初にすぐ出てくるから 
ヘルプにさらにヘルプが必要な場合もあるからそれから聞いてみるがよろし

http://msdn.microsoft.com/ja-jp/library/system.notimplementedexception(v=VS.80).aspx

throw て書いてる意味が判らないんなら
C# throw でググれば一発目に’throw (C#)’ていうMSDNのサイト出てくるから
26デフォルトの名無しさん:2010/05/26(水) 10:02:05
ドラッグかどうかの判別だろ
NotImplementedExceptionはその名の通り未実装ってことだ
これの代わりに自分で処理を書くんだよ
27デフォルトの名無しさん:2010/05/26(水) 10:30:23
>>26
ドラッグかどうかの判別というのは、具体的にはなにをするんでしょうか?
private void img_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
private void img_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
のところで書いたつもりになっているのです。

NotImplementedExceptionは、未実装。なるほど!

>>25
考えてないとかググってないとかいうのは誤解です。
考えすぎてGoogleで出てきたサイトを見すぎて、何がなんだかわからないというのが正確です。
なにしろまるいちにちずーっとやってるのです。
途方にくれて質問してます。

28デフォルトの名無しさん:2010/05/26(水) 11:07:06
>>26 の解説で分かるならこの画面見ただけでも分かると思うんだが・・・

http://www.google.co.jp/search?hl=&q=NotImplementedException&sourceid=navclient-ff&rlz=1B3GGGL_jaJP338JP339&ie=UTF-8
29デフォルトの名無しさん:2010/05/26(水) 11:07:47
ウィンドウサイズについて質問があります。
最小のウィンドウサイズに制限はありますか?
アイコンサイズ(56×66ピクセル)に設定しようとしましたが実行すると、幅が100ピクセルくらいあります。
FormのSizeプロパティに
Width 56
Hight 66
と設定しています。
FormBoderStyleはNoneです。
アドバイスお願いします。
30デフォルトの名無しさん:2010/05/26(水) 11:09:55
>>考えてないとかググってないとかいうのは誤解です。
>>考えすぎてGoogleで出てきたサイトを見すぎて、何がなんだかわからないというのが正確です。
>>なにしろまるいちにちずーっとやってるのです。

納期に追われて数日徹夜した新人ですか?
とりあえず落ち着いて休憩でもすればいいんじゃないかな
31デフォルトの名無しさん:2010/05/26(水) 11:09:56
>>28
悲しいかな、そこでわからないのが素人なところで、
これを見ても、なんか新しいクラスなのか…、と思っていた次第です。
32デフォルトの名無しさん:2010/05/26(水) 11:11:35
>>29
最小値がないかい?
MinimumSizeとか
そのへんじゃないのかな?
33デフォルトの名無しさん:2010/05/26(水) 11:12:44
>>29
横幅はある程度あったはず
Region使ったら?
34デフォルトの名無しさん:2010/05/26(水) 11:13:11
>>30
ま、素人の趣味なので、別に納期はないですが、まあそんなことはどうでもよく、
ドラッグかどうかの判別についてよろしくお願いします。
35デフォルトの名無しさん:2010/05/26(水) 11:18:15
>>27
WPFよー知らんのだけど
Vectorあるみたいだし、それで移動量調べたら?
36デフォルトの名無しさん:2010/05/26(水) 11:24:16
>>33
ありがとう。
Region
でできました。

>>32
MinimumSizeではないみたい。
37デフォルトの名無しさん:2010/05/26(水) 11:33:50
>>34
知らんまま適当にテストコード書いてみた
こういう感じ?
ドラッグ中の処理入れるなら使えないけどね。

bool mouse = false;
Vector mouseOrg = new Vector(0, 0);
private void Window_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    mouse = CaptureMouse();
    Point p = e.GetPosition(this);
    mouseOrg = new Vector(p.X, p.Y);
}
private void Window_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
    if (mouse)
    {
        ReleaseMouseCapture();
        mouse = false;
        Point p = e.GetPosition(this);
        Vector mouseCur = new Vector(p.X, p.Y);
        if ((mouseOrg - mouseCur).Length > 20.0)
        {
            MessageBox.Show("Drag!");
        }
        else
        {
            MessageBox.Show("Click!");
        }
    }
}
38デフォルトの名無しさん:2010/05/26(水) 11:36:05
>>34
ファイルアイコンのドラッグ&ドロップというのは多分にシステム依存な動作なので、
各コントロールが小ウィンドウ化されておらず、抽象化の著しいWPFでは難易度の高い処理のはず。

少なくともWindows.Forms時代の記事は役に立たないので頑張って資料読みこなして実装してください。
39デフォルトの名無しさん:2010/05/26(水) 12:08:23
>>38
それが回答ですか。
まあありがとうございました。
40デフォルトの名無しさん:2010/05/26(水) 12:09:59
なんでWPFなの?
41デフォルトの名無しさん:2010/05/26(水) 13:45:50
WPFで右ボタンのやつ書いてた人か・・・
なんか煮詰まってるのはわかるが書き込みの内容がスレの人間が悪い
みたいな方向に行ってるから気をつけたほうがいいぞ
荒れる原因になるから

それに勘違いしない方がいいよ
スレの住人はボランティアで協力してるだけで業務上君の面倒を
見るようにボスから命令貰ったわけじゃない人たちばかりだからね
WPFスレ送りにならないだけ不思議に思ってるくらいなんだし
42デフォルトの名無しさん:2010/05/26(水) 13:55:15
WPF特有の問題じゃないから送りにくいんだよねw
43デフォルトの名無しさん:2010/05/26(水) 13:57:32
>>42
WPF特有じゃん
C#コーダーは居てもWPFはまだ勉強中とかも多いはず
44デフォルトの名無しさん:2010/05/26(水) 14:05:10
>>39
というか、検索したらすぐひっかかるじゃねーか。
ggrks
http://d.hatena.ne.jp/superlightbrothers/20090517/1242553619
45デフォルトの名無しさん:2010/05/26(水) 14:06:34
>>43
いやーそれ以前のプログラムの書き方の問題では
46デフォルトの名無しさん:2010/05/26(水) 14:08:30
根気強く自分で調べる力をつける為に皆我慢しているのです。
47デフォルトの名無しさん:2010/05/26(水) 14:24:32
isってコスト高いですか?
48デフォルトの名無しさん:2010/05/26(水) 14:27:26
それほどでもない
値型やsealedな型との比較ならobj.GetType == typeof(Hoge)の方がわずかに速かったりするけど気にするほどでもない
型チェックした後キャストするならasの方が速い
49デフォルトの名無しさん:2010/05/26(水) 19:05:37
自分で定義しているクラスのインスタンスについて、
フィールドの値を文字列ベースで取得することは可能でしょうか?
たぶんリフレクションを使うことになるんでしょうが……。
50デフォルトの名無しさん:2010/05/26(水) 19:17:00
不可能じゃないけど、なんでそんなことやろうってことになったのさ
51デフォルトの名無しさん:2010/05/26(水) 20:54:15
自分のクラスだったら最初からDictionary<string, object>にすれば?
逆にプロパティの方を内部で文字列使って実装する
52デフォルトの名無しさん:2010/05/26(水) 21:25:43
なぜかisが極端にコスト高いと思い込んでいるような記述をよく見るな。
場合にもよるが、単なるインターフェイスへの暗黙のアップキャストの方がコスト高いことだってあるのに。
53デフォルトの名無しさん:2010/05/26(水) 22:28:45
>>50
軽量なO/Rマッパーを実装しているところ。
SQLのフィールド名と実際のclass内のフィールドと対応させるために、
どうしても文字列でフィールドの実体に照合する必要がある。
54デフォルトの名無しさん:2010/05/26(水) 22:37:45
>>51のように内部でテーブルで保持するのが嫌なら
LCGで動的にハードコードしてしまうというとっても大袈裟な最強の方法がある
リフレクションじゃどう頑張ったって軽量にはならん
55デフォルトの名無しさん:2010/05/26(水) 22:42:56
プロパティにしてデリゲートアクセスにする手もあるぜ。
56デフォルトの名無しさん:2010/05/26(水) 22:55:59
軽量というならプロパティ+デリゲートがいいだろうな。コード生成はそれ自体に結構時間がかかる。
デリゲートを使う場合、値の取得設定時のリフレクションを避けようとすると、
プロパティの型の不一致をごまかすのが難しいのでジェネリックを使ったトリッキーなテクニックが必要。
57デフォルトの名無しさん:2010/05/26(水) 23:04:21
それやったわw
58デフォルトの名無しさん:2010/05/26(水) 23:07:27
さらに、プロパティの型の継承関係にも対応するために結構ややこしいことになった。
59デフォルトの名無しさん:2010/05/26(水) 23:09:52
インターフェイス被せたジェネリッククラスをMakeGenericTypeするのは
.NETの変態メタプログラミングには必須
6057:2010/05/26(水) 23:18:18
ずいぶん前に試しで作って、ちゃんと動いたかどうか覚えてないけど
ttp://ideone.com/iPTZe
こんなんなったわ
61デフォルトの名無しさん:2010/05/26(水) 23:32:07
おまえら高度なことやってんな。さっぱりわかんねえよ
62デフォルトの名無しさん:2010/05/26(水) 23:34:16
.NET4ならそれdynamicで普通にデリゲート呼び出せばいいと思うよ
型チェックしてダウンキャストしてデリゲートを実行するコードをLCGで生成してくれるから
結局やってることは変わらないはず
6357:2010/05/26(水) 23:36:15
うん、まあ2.0対象に作ったものだからね。
64デフォルトの名無しさん:2010/05/26(水) 23:57:05
>>61
HSPで遊んでなさい
65デフォルトの名無しさん:2010/05/27(木) 00:00:09
>>49が始まりか
>フィールドの値
これが意味わからん

.ToString()
の話じゃないの?
66デフォルトの名無しさん:2010/05/27(木) 00:14:33
.NET4全開で作ってみた
http://ideone.com/JcSe8
まともに作っても速度はこれと変わらないはず
67デフォルトの名無しさん:2010/05/27(木) 00:17:37
>>66
わーさっぱりわかんないー
まだまだ初心者から入門者への階段は登れません
68デフォルトの名無しさん:2010/05/27(木) 00:24:10
class SomeClass
{
public string name;
}

sc = SomeClass();
type = sc.GetType();
prop = type.GetProperty("name");
prop.SetValue(sc, "lmn", null);

これでいけるらしい。
69デフォルトの名無しさん:2010/05/27(木) 00:28:43
>>68
それ普通に支障が出るくらい遅いよ
70デフォルトの名無しさん:2010/05/27(木) 00:28:49
>>67
C# 4.0 の dynamic 使ったコード書いて、
それを逆コンパイルすればそんな感じのコードが生成されてるんで、
コピって書き換えれば OK。
71デフォルトの名無しさん:2010/05/27(木) 00:30:02
>>69
まあ、使いどころ次第ではあるけども。

確かにリフレクションって普通のプロパティアクセスと比べたら2桁・3桁遅いけど、
そこがめったに呼ばれなければ特に問題にもならず。
72デフォルトの名無しさん:2010/05/27(木) 00:38:58
ORマッピングなら使われまくりだろ
それどころか外部の入出力を除けば最大のボトルネックかも
73デフォルトの名無しさん:2010/05/27(木) 02:06:30
ボトルネックかもな
74デフォルトの名無しさん:2010/05/27(木) 07:43:44
>>66
ってリフレクションじゃないの?

そんなに速度違うのかなぁ
75デフォルトの名無しさん:2010/05/27(木) 08:54:59
64bit版windows7には.net framework 2.0はx64版を
インスコすればいいんでしょうか?
76デフォルトの名無しさん:2010/05/27(木) 08:59:01
Windows 7にはインストールする必要がない
77デフォルトの名無しさん:2010/05/27(木) 09:05:50
!!
そういえばそうでしたorz
78デフォルトの名無しさん:2010/05/27(木) 09:08:28
アップデートは必要だけどね・・・・
79デフォルトの名無しさん:2010/05/27(木) 09:57:23
本読んでデリゲートとイベントの部分を勉強中。
クラスのところまでスムーズに理解できたのに、イベント難しいよぉ><
80デフォルトの名無しさん:2010/05/27(木) 10:05:01
そうかぁ?addかremoveしかできないデリゲートなだけだろ
81デフォルトの名無しさん:2010/05/27(木) 11:01:47
>>79
まず、デリゲートとイベントを普通に自作したらどうなるかを思い浮かべる。
次にそれを言語の機能としてサポートする方法を考えてみる。
82デフォルトの名無しさん:2010/05/27(木) 11:10:43
>>79
イベントは単独で勉強せずに、Forms込みで理解した方が分かりやすいよ。
83デフォルトの名無しさん:2010/05/27(木) 11:41:47
>>80-81
よし、わかった!


  …うそです。。もうちょっと考えてみます。


>>82
本の後ろのほうにフォームアプリケーション作成っていうのが載ってるから
そこを読めばもっとわかるかな。週末に読んでみますぅ。
84デフォルトの名無しさん:2010/05/27(木) 11:46:29
>>83

〜〜すぅ。


すまん、男だと判ってはいたが正直文字だけ見たら・・・・萌えた
85デフォルトの名無しさん:2010/05/27(木) 11:48:05
どんだけ飢えてるんだよ。この童貞が。
86デフォルトの名無しさん:2010/05/27(木) 13:32:49
>>84
「アッー」な素質あるよあなた
87デフォルトの名無しさん:2010/05/27(木) 13:33:56
ソースと同じで脳内変換大得意なんですぅ♪
88デフォルトの名無しさん:2010/05/27(木) 15:26:07
で?
89デフォルトの名無しさん:2010/05/27(木) 16:54:14
イベントとデリゲートが同じっていうのは
プロパティとオブジェクトが同じだと言ってるのと同じだよ
90デフォルトの名無しさん:2010/05/27(木) 17:33:17
デリゲートは型ですぅ
91デフォルトの名無しさん:2010/05/27(木) 17:55:13
真似しないでちょーだぃ。
92デフォルトの名無しさん:2010/05/27(木) 18:39:08
>>90
うぜえ
93デフォルトの名無しさん:2010/05/27(木) 18:55:21
構造体と一緒で、デリゲート型のオブジェクトのことを単に
デリゲートと呼ぶこともあるでしょ
94デフォルトの名無しさん:2010/05/27(木) 19:01:56
けんかはだめですぅ〜(ズサァ
95デフォルトの名無しさん:2010/05/27(木) 19:04:00
そのとおりでちゅわ
96デフォルトの名無しさん:2010/05/27(木) 19:11:27
http://msdn.microsoft.com/en-us/library/ms756489%28VS.90%29.aspx
このサンプルがVS2008でも2010でもビルドできないんだけど、
誰かビルドできた人いない?
97デフォルトの名無しさん:2010/05/27(木) 21:32:04
普通にビルドできたけど?@VS2008
98デフォルトの名無しさん:2010/05/27(木) 21:42:01
msbuildでビルドしたらビルドはできたが実行時例外が出たw
99デフォルトの名無しさん:2010/05/27(木) 21:45:04
リソースの設定がおかしいみたい
VS2005のWPF開発環境って冗談みたいなもんだからなあ
100デフォルトの名無しさん:2010/05/27(木) 22:44:56
>>74

>>60
>>66
>>68
のそれぞれのやり方で、プロパティアクセスの処理部分だけを繰り返す形にして、
つまり余分な処理はなるべく除いた状態でプロパティアクセス部分の速度を計測してみた結果。
かかる時間がおおよそ
9:11:400
となった。
つまりリフレクションだと40倍くらい遅かった。
101デフォルトの名無しさん:2010/05/27(木) 22:52:18
プロパティへの1回アクセスにかかる時間でいうと、
おおよそだが、
24ns
27ns
1100ns
みたいな感じ。

ちなみにx64にするとやや速度比が変わって、
18ns
35ns
800ns
みたいな具合、まあ速度の順位は同じだが。
102デフォルトの名無しさん:2010/05/27(木) 22:56:17
そもそもそんなの作る必要があるのか?
103デフォルトの名無しさん:2010/05/27(木) 23:01:00
興味本位って無駄と浪費の基本だぞ資本主義的には素晴らしい事だぞ
104デフォルトの名無しさん:2010/05/27(木) 23:03:48
データ用の変な基底クラス使ったりしないで普通のオブジェクト使いましょうっていうのは最近の流行りだからな
そうするとどうしてもそんなのが必要
実際.NETは内部でリフレクション使いまくりだよ
XmlSeriarizerなんかパフォーマンスが重要だから、C#のコードを動的に生成してコンパイルしたりするという
常軌を逸した最適化をする
10549:2010/05/27(木) 23:13:06
>>101
ひぇ〜、そんなに違うのか。
あとしばらくは.NET 2.0の範囲で作りたいので、単純な>68の方法で
実装し終わったところなんだけど、
>60でも動くならそっちで試してみようかなぁ……。

ぱっと見じゃあ使い方がよくわからないけど。

>>104
TableBaseを共通既定にして属性を付けたフィールドを
書いてあげることで自動的にテーブルと読み書きする
ActiveRecord的な実装です。
最近の流行りじゃなくてすんません。
106デフォルトの名無しさん:2010/05/27(木) 23:19:32
共通の基底クラスがあるなら無理にフィールドにしなくていいでしょ
フィールドの代わりにテーブル持って、プロパティでラップするだけで済むこと
速い簡単確実分かりやすい
107デフォルトの名無しさん:2010/05/27(木) 23:21:07
>>106
それって型付きDataSetそのもの…
108デフォルトの名無しさん:2010/05/27(木) 23:22:49
>>106
テーブルってったってそれがDictionaryを意味するなら、
ADODB.RecordSetと変りなくない?
109デフォルトの名無しさん:2010/05/27(木) 23:27:04
実装がどうだろうと利用者には関係ないだろ
共通の基底クラスを必要としないのはそれはそれでメリットがある
110デフォルトの名無しさん:2010/05/27(木) 23:37:11
リフレクションで外からメンバ触るような方法って共通の基底クラスとかお約束コードとかで
フレームワークに縛ってしまうのを避けるために採るものなんで
共通の基底クラス持っちゃったら意味ないよ
111デフォルトの名無しさん:2010/05/27(木) 23:58:20
>>105
ちょっとだけ扱いやすくしたぜ。
http://ideone.com/XQRTq
単純な使い方はこんな感じだ。
112デフォルトの名無しさん:2010/05/28(金) 00:08:12
ちなみに、Mainの
PropertyAccessor alpha = PropertyAccessor.Create(typeof(Hoge), "Alpha");
PropertyAccessor beta = PropertyAccessor.Create(typeof(Hoge), "Beta");

PropertyAccessor<Hoge, int> alpha = PropertyAccessor<Hoge, int>.Create(typeof(Hoge), "Alpha");
PropertyAccessor<Hoge, string> beta = PropertyAccessor<Hoge, string>.Create(typeof(Hoge), "Beta");
こんな風にしてやると、完全に型指定状態になって、
1アクセス5nsくらいとか爆速になる。
とはいっても、ORマッパーみたいな用途じゃ結局はobjectで扱うしかないけどな。
113デフォルトの名無しさん:2010/05/28(金) 00:22:09
>>111
すげえ! これで採用できる目処が整った。
今日の範囲だと.NET系の別言語で実装したんだけど
正直C#と比べて利点があまりないので、ORM周りはC#で実装しなおすかもしれない。

こんな感じで使用する。
class Book : TableBase
{
[Field(FieldType.Text)]
public string Name;
[Field(FieldType.Integer)]
public int price;
}

var book = new Book(){Name = "tech", price = 113};
cursor.Save(book); // INSERT TABLE
114デフォルトの名無しさん:2010/05/28(金) 00:26:13
フィールドじゃなくてプロパティでないと使えないよ
>>111のやり方をフィールドに適用するのは原理上無理
115デフォルトの名無しさん:2010/05/28(金) 00:54:58
>>114
問題ない。ちょっといじったらプロパティ、フィールド両対応になったよ。
116デフォルトの名無しさん:2010/05/28(金) 01:23:11
俺には高度過ぎて付いて行けない。結局どこが楽になったの?
なんとなくコード生成マクロみたいなのを作れば済みそうな気がするんですが・・・
117デフォルトの名無しさん:2010/05/28(金) 01:32:34
なにやら面白そうだけど自分がやって来た範囲ではどう使っていいか
わからないのでROMしてたんだが、リフレクションってもしかして
ビューワーなんかのプラグイン認識なんかで使う感じなのかな?
あれってどうやってるんだろうと前から思ってたんだが
118デフォルトの名無しさん:2010/05/28(金) 01:51:40
>>117
動的にアセンブリを読み込んで、
プラグイン用のインターフェース実装してるやつを探して、
インスタンスを作成する。
これ全部リフレクション

.NET4でプラグイン機能実装するならMEFの方が便利だけどね。
119デフォルトの名無しさん:2010/05/28(金) 01:59:27
>>118
なるほど〜
ありがとう
長年の疑問が解けたわw
120デフォルトの名無しさん:2010/05/28(金) 02:59:13
アプリの設定をフォーム上から追加する場合はどうするのがいいんですか?
変更に関しては下記URLを参考に出来そうなのですが、フォーム上から新たな設定項目を追加するにはどうしたらいいのでしょうか?
全く違う方法でも構わないので教えてください
http://dobon.net/vb/dotnet/programing/mysettings.html#section1
121デフォルトの名無しさん:2010/05/28(金) 03:30:33
フォーム上から追加って具体的にどういう操作?
122デフォルトの名無しさん:2010/05/28(金) 03:33:14
>>121
たぶんあれだろ
デザイナーが項目差し込んでるように自分のプログラムでも
項目増やしたいんだろうと思うんだけどさw

実装面倒そうだよね
123デフォルトの名無しさん:2010/05/28(金) 03:34:09
>>121
フォーム上でツリービューにノードを追加してそれを次回起動時にも記憶出来るようにしたいんです
124デフォルトの名無しさん:2010/05/28(金) 08:04:46
>>119
もっと単純に指定したプロパティの値の読み書きをできたりする
フィールド・メソッド・プロパティ・インターフェースとか基本的な部分に動的にアクセスできる
125デフォルトの名無しさん:2010/05/28(金) 11:37:00
>>123
基本的にはそういう機能を実現したフォームを自前で実装するしかないだろうな。
あるいは、流用出来そうなオープンソースのプロダクトを探すか。
126デフォルトの名無しさん:2010/05/28(金) 11:39:47
>>123
適当にXMLででも保存すりゃいいじゃない
127デフォルトの名無しさん:2010/05/28(金) 12:41:22
質問です。
Webブラウザを使って、
<input name="title" id="title" tabindex="1" value="" maxlength="255" mt:watch-change="1" onkeyup="rebasename(this)" />
に「テスト」とかと入れたいです。
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate(URL);
}

private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
HtmlElement HE = webBrowser.Document.GetElementById("title");
HE.InnerText = "テスト";
}
実行すると、
HtmlElement HE = webBrowser1.Document.GetElementById("title");
の行で、HEがnullのままになります。
HtmlElement HE = webBrowser.Document.GetElementById("title");
HE.InnerText = "テスト";
の2行がなければ、ふつうにページを表示できます。

アドバイスお願いします。
128デフォルトの名無しさん:2010/05/28(金) 12:57:47
webBrowser.Document.All.GetElementByID だとどうです?
129デフォルトの名無しさん:2010/05/28(金) 13:02:39
Navigated時点じゃまだDocumentを作り終えてない
DocumentCompletedで
130デフォルトの名無しさん:2010/05/28(金) 13:08:20
ブラウザコンポーネントの質問多すぎ
131デフォルトの名無しさん:2010/05/28(金) 13:26:24
>>128
HtmlElement HE = webBrowser1.Document.All.GetElementByID("title");
としてみたところ、
'System.Windows.Forms.HtmlElementCollection' に
'GetElementByID' の定義が含まれておらず、
型 'System.Windows.Forms.HtmlElementCollection' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。
using ディレクティブまたはアセンブリ参照が不足しています。
とエラーでした。

>>129
なるほど!
しかし、
DocumentCompletedでも症状が変わりませんでした。
132デフォルトの名無しさん:2010/05/28(金) 13:31:00
その前にtitleってやめないか。htmlタグで存在するし
もうちょっと一意性を確保した方がいいぞ
133デフォルトの名無しさん:2010/05/28(金) 13:37:32
>>130
まあ時代的なものでしょ
大体は自動送信とかそんなんだろうけど
134デフォルトの名無しさん:2010/05/28(金) 13:37:56
できたで
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Navigate("https://login.yahoo.co.jp/config/login");
}

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlElement hoge;
hoge = webBrowser1.Document.GetElementById("username");
hoge.SetAttribute("value", "hoge");
}
135デフォルトの名無しさん:2010/05/28(金) 13:41:03
正直、HTTPの自動制御はPerl/Python/Rubyあたりでやった方が遥かに簡単だけどな。
この分野でのC#の利点は、ランタイムが事実上標準で入ってることとGUIが作りやすいことだけ。
136デフォルトの名無しさん:2010/05/28(金) 13:43:19
>>134
DocumentCompletedだと数回呼ばれない?
137デフォルトの名無しさん:2010/05/28(金) 13:44:31
そんなの自分でなんとかしろ
138デフォルトの名無しさん:2010/05/28(金) 13:44:47
https://login.yahoo.co.jp/config/login
はjsのまま埋め込みだな
139136:2010/05/28(金) 13:46:07
>>137
別人だって
DocumentCompletedで処理するのがいいか
Navigatedで処理するのがいいか
140デフォルトの名無しさん:2010/05/28(金) 13:48:16
>>139
動けばよい
141デフォルトの名無しさん:2010/05/28(金) 13:57:08
同じやつが会社で作ってるソフトの部分を質問してそうな気がする
142デフォルトの名無しさん:2010/05/28(金) 14:02:35
そんな馬鹿な…
143デフォルトの名無しさん:2010/05/28(金) 14:03:46
サブミットはこうやで
webBrowser1.Document.Forms[0].InvokeMember("submit");
144デフォルトの名無しさん:2010/05/28(金) 17:02:08
WebBrowserの制御は面倒くさいから
FirefoxでFirebug使ってやりとりしてる内容をトレースして
そのままエミュレートしてやった
Amebaだけど
145デフォルトの名無しさん:2010/05/28(金) 17:19:12
>>115
どうやったの?
デリゲートにバインドするにはメソッドが無いといけないから
フィールドだけでは絶対に無理なわけだが
>>111の方法は値の出し入れ時にリフレクションを使わないのがメリットなんで
フィールドでも同じことがしたいならLINQのExpression TreeかILGeneratorで
アクセサメソッドを動的に生成してやらないとできないはずだけど
そこまでくると「ちょっといじった」とは言わないでしょう
146デフォルトの名無しさん:2010/05/28(金) 17:22:18
>>145
どうって、getter/setterの代わりにラムダ式を指定してあげただけなんだけど。
ちゃんと動作も確認したぞ。
147デフォルトの名無しさん:2010/05/28(金) 17:23:29
>>146
ふーん
148デフォルトの名無しさん:2010/05/28(金) 17:28:47
ちなみに、こんな感じ。
public PropertyAccessor(FieldInfo field)
{
Getter = (TTarget x) => { return (TProperty)field.GetValue(x); };
Setter = (TTarget x, TProperty y) => { field.SetValue(x, y); };
}
149デフォルトの名無しさん:2010/05/28(金) 17:34:08
それ結局常にリフレクション使ってるから意味無いよ
>>111みたいなややこしいことしなくても最初から全部リフレクションでやるのと一緒
> >>111の方法は値の出し入れ時にリフレクションを使わないのがメリット
150デフォルトの名無しさん:2010/05/28(金) 17:51:19
>>149
高速な方法があるならそれを使えばいいし、
内容なら普通にやればいいのさ。
151デフォルトの名無しさん:2010/05/28(金) 17:56:40
高速な方法はあるよ
.NET2.0ターゲットみたいだからDynamicMethod一択
いわゆるLCG
IL書き下してGetterとSetterを動的に生成する
152デフォルトの名無しさん:2010/05/28(金) 18:25:20
理想はメンバ単位じゃなくて型単位でコード生成
問答無用で最速
153デフォルトの名無しさん:2010/05/28(金) 18:47:33
>>150
普通とは?
154デフォルトの名無しさん:2010/05/28(金) 18:53:22
>>153
(ライブラリから見て)外部のオブジェクトに
動的にアクセスするには、リフレクションを使うのが普通。
155デフォルトの名無しさん:2010/05/28(金) 18:59:31
普通っていうかリフレクション使わないと不可能
上の議論はすべてその後のキャッシュ手法の話
156デフォルトの名無しさん:2010/05/29(土) 01:19:23
>>111
今更だけどこのソースのAdaptedAccessorクラスってなんのためにあるの?
Adapterパターンと関係あるの?
157デフォルトの名無しさん:2010/05/29(土) 01:27:56
>>156
サンプル実行してデバッガで追っかけてご覧。
158デフォルトの名無しさん:2010/05/29(土) 02:06:23
>>156
単にobject型として扱うだけならいらない。
普通に型指定されたターゲットやプロパティへのアクセスでもいらない。

必要なのはちょっと特殊なケースなんだよ。
たとえばTableAdapterの基底クラスから利用する場合<わかる人にはわかるかも。
159デフォルトの名無しさん:2010/05/29(土) 02:10:44
TableAdapterの基底クラスから利用する場合の例を挙げると、
SqlTransactionとかOracleTransactionとか、実際の型は実行時まで想定できないけど
とにかくDbTransaction派生の型で定義されてるプロパティに、DbTransaction型としてアクセスしたい場合とか。
まあ限られたケースだよ。

※もっとも>>111の例はpublicなプロパティしか想定してないので、どっちにしてもこのままじゃダメなんだが。
160デフォルトの名無しさん:2010/05/29(土) 02:26:49
あるいは、>>113の例でいうと、
PropertyAccessorクラスとして扱う場合は不要だが、
例えば PropertyAccessor<TableBase, object> クラスとして扱いたい場合なんかに使われる。

>>111
PropertyAccessor alpha = PropertyAccessor.Create(typeof(Hoge), "Alpha");

PropertyAccessor<Hoge, object> alpha = PropertyAccessor<Hoge, object>.Create(typeof(Hoge), "Alpha");
みたいにして試せばどう使われるのか分かる。
161デフォルトの名無しさん:2010/05/29(土) 19:01:38
ListにURLとタイトルを入れて、URLだけを取り出すには、どうしたらいいですか?
List<string> lists = new List<string>();
lists.Add("http://www.***.com" + "\t" + text);
のようにすると、個別にURLとtextを取り出せないでいます。
162デフォルトの名無しさん:2010/05/29(土) 19:09:02
Dictionaryとか使えよ。
163136:2010/05/29(土) 19:11:43
>>161
そりゃ全部繋がってるからねえ
164デフォルトの名無しさん:2010/05/29(土) 19:12:41
Dictionaryどう使うんすか?
165136:2010/05/29(土) 19:14:37
166デフォルトの名無しさん:2010/05/29(土) 19:20:21
>>161
むしろURLとtitleをフィールドに持たせたstructなりclassを用意して、
List<HomePage> lists;
などとする。
167デフォルトの名無しさん:2010/05/29(土) 19:26:22
便乗質問

自作クラスをリストで管理してる場合に自作クラス内の特定項目で
検索かける場合は泥臭く頭からクラスを取り出しては項目をチェックするしかないのかな?
168デフォルトの名無しさん:2010/05/29(土) 19:34:44
>>167
そのためのLINQ。
.NET 2.0時代のコードで頑張りたいなら、
Dictionaryでその特定のフィールドの値で辞書を引けるようにするといい。
169デフォルトの名無しさん:2010/05/29(土) 19:35:10
そういうときのためのLINQ
170デフォルトの名無しさん:2010/05/29(土) 19:38:50
>>168>>169
なるほど
LiNQに置き換えた場合の速度はそんなに差はないですかね?
171デフォルトの名無しさん:2010/05/29(土) 19:39:25
>>167
泥臭いかそれ?こんな感じでいいんだが。
var.found = list.Find((x) => x.Prop == "...");
あるいは
var found = list.FirstOrDefault((x) => x.Prop == "...");

LogO^2 が気になるんなら、List<Item> とは別に
private Dictionary<string, Item> propToItem;
とか用意して
var item = propToItem["..."};
172171:2010/05/29(土) 19:45:00
LogO^2 -> O(n) でしたすいません
173デフォルトの名無しさん:2010/05/29(土) 19:45:23
やべーdynamicってこうやって使うのか。感動した

dynamic doc = webBrowser.Document.DomDocument;
string selectedText = doc.selection.createRange().text;
174デフォルトの名無しさん:2010/05/29(土) 20:41:39
dynamicのおかげでCOMのサーバを使うときに巨大なDLLが生成されることはなくなったけど、
インテリセンスは効かなくなったね。
175デフォルトの名無しさん:2010/05/29(土) 21:27:06
COMの場合は普通にRCW作っておいて開発して、
最後にdynamicに置き換えてDLLサイズ縮めるとかやってもいいかもねぇ。
176デフォルトの名無しさん:2010/05/29(土) 23:16:34
IronRubyで定義したクラスや関数をC#から呼び出すことはできる?
177デフォルトの名無しさん:2010/05/29(土) 23:18:30
>>176
一般的に動的言語で作成したプログラムを静的型付き言語から呼び出すことは非常に難しい。
ただC#にはイベントと言う便利な概念があるので、
C#からIronPython/Rubyへの通知はこれを使うといい。
178デフォルトの名無しさん:2010/05/29(土) 23:51:37
>>177は嘘
dynamic使ってあたかも普通のオブジェクトのように扱える
179デフォルトの名無しさん:2010/05/29(土) 23:59:02
>>178
おお! その手があったか!
ずっと.NET 2.0+DLRで動かしてたから思いつかなかったわ。
どうもありがとう。.NET 4.0すげえ!
180デフォルトの名無しさん:2010/05/29(土) 23:59:11
dynamic使えない.NETのバージョンであっても全然難しくない
scriptEngine.Operations.InvokeMember(hoge, "hogeMethod", a, b)
みたいな感じだったかな
181デフォルトの名無しさん:2010/05/30(日) 00:16:19
どうでもいいけど.NETのバージョンは4.0じゃなくて4と表記するのが正しい
C#やCLRのバージョンは4.0
182デフォルトの名無しさん:2010/05/30(日) 00:34:25
>>180
COMコンポーネントを呼び出して使っているならともかく、
C#側を従、動的言語を主として実装したシステムで
C#側から動的言語側を呼び出そうとしたら
目的のオブジェクトまで階層が深くなっちゃうので大変だし、
決してその呼出は速くない。
(もちろん動的言語側で何がしか必要なオブジェクトを直接返す機構を実装する方法もあるが)

数多く呼び出したいならイベントハンドラ越しに呼び出すのが最も効率がいい。

>>181
いくつか例外はあるが、マイクロソフトとしては.NET Framework 4という呼称に統一してるみたいだね。
外部の記事ではほとんど全く気にされてないみたいだけど、固有名詞だからなぁ。注意します。
例外の例(この記事の一番後ろの章)
http://msdn.microsoft.com/ja-jp/magazine/ee405899.aspx
183デフォルトの名無しさん:2010/05/30(日) 01:01:31
それだと動的言語側がC#側に依存しちゃうよ
余計な相互の取り決めを必要としないのは大きなメリットだと思うよ
184デフォルトの名無しさん:2010/05/30(日) 01:06:26
>>183
単純にパフォーマンス上の問題。
1秒間に60回C#側からDLRをぶん回したら結構来ちゃうのよ。
調べたら境界面をチューンするのが効果的だと分かったのでこんなやり方に。
185デフォルトの名無しさん:2010/05/30(日) 01:46:54
>>184
dynamic使ってもダメ?
C# 4.0のdynamic、っていうか、CallSiteによる動的コード生成結果の
キャッシュ機構って結構賢かったはずだけど。

あと、Python側で.NETのインターフェースを継承とかやれば早くならないかな?
186デフォルトの名無しさん:2010/05/30(日) 01:53:30
>>185
スマン。.NET 4はまだ未検証なんでわからん。
(ランタイムを配ることになるのでめどい)
C#側でインターフェイス書いて動的言語側でそれを継承/実装してあげるのが一番素直かもしれない。
速度的にはイベントハンドラ越しとさほど変わらないと思うが、その方が素直だよな。
今はDLRを捨てて組み直してるところなんだが、
初めからそうしておけば(C#のフレームワーク側にinterfaceを用意)
よかったと思ってるところ。
187デフォルトの名無しさん:2010/05/30(日) 02:01:45
トンクス。
イベントかdynamic経由で呼び出せるのか
188デフォルトの名無しさん:2010/05/30(日) 02:17:43
モバイルの2chブラウザでAA表示とかあるけどどうやって判定してるんだろ
189デフォルトの名無しさん:2010/05/30(日) 03:36:46
各行の頭の文字コードがどこの範疇かみてるんじゃない?
190デフォルトの名無しさん:2010/05/30(日) 04:21:41
うん。そうだよ。
191デフォルトの名無しさん:2010/05/30(日) 08:26:24
文字列への文字の追加は例えば「string a = "a" + "b"」のように演算子+を使うことで出来たんですが、
文字列の最後の文字を削除したい場合などはどうすればいいんですか?
192デフォルトの名無しさん:2010/05/30(日) 08:32:51
こんな感じ?
string a = "b" + "c";
a = a.Remove(a.Length - 1);
193デフォルトの名無しさん:2010/05/30(日) 08:36:35
>>192
なるほど、こんな方法があったのですね
助かりました。ありがとうございます
194デフォルトの名無しさん:2010/05/30(日) 09:51:33
>>193
うむ
195デフォルトの名無しさん:2010/05/30(日) 13:35:01
.NET frameworkのバージョンはどれで作ればいいですか?
4はまだ普及してませんかね?
196デフォルトの名無しさん:2010/05/30(日) 13:40:46
普及云々って、公開するつもりなのけ?
197デフォルトの名無しさん:2010/05/30(日) 13:48:13
そのつもりです
198デフォルトの名無しさん:2010/05/30(日) 13:50:34
>>195
ランタイム入れるの結構簡単だし、
標準インストールにこだわるんでなければ別に4でいいだろ。
4のClient Profileのランタイムサイズ結構小さいよ。

標準インストールにこだわりたいんなら、XPターゲットは2、Vista以降なら3.5。
199デフォルトの名無しさん:2010/05/30(日) 14:23:42
Vistaは3.0だったはずだ
7が3.5SP1
200デフォルトの名無しさん:2010/05/30(日) 15:55:01
>>198
そしてXPはsp3に至っても、標準では.NET入ってない :(
201デフォルトの名無しさん:2010/05/30(日) 18:59:27
3.5のランタイムは死ぬほどでかいけどな。
でも4ってクライアントプロファイルあんま意味ねーだろってくらい差がない。
202デフォルトの名無しさん:2010/05/30(日) 19:38:39
そういや、.NET 4って.NET 2〜3.5は入ってるのこれ?
203デフォルトの名無しさん:2010/05/30(日) 19:51:40
入ってない

というか3.0と3.5は2.0にdll追加しただけのものだから特別だ
204デフォルトの名無しさん:2010/05/30(日) 20:49:24
>>203
\(^o^)/オワタ
205デフォルトの名無しさん:2010/05/30(日) 20:52:13
なんでおわっとるねん
206デフォルトの名無しさん:2010/05/30(日) 20:53:46
似非関西弁でお送りしました
207デフォルトの名無しさん:2010/05/30(日) 21:03:35
めでたしめでたし
208デフォルトの名無しさん:2010/05/30(日) 21:06:51
互換性があるので問題ない。
実際、手元の.NET2.0〜3.5のやつを全部.NET4で動かしてるけどちゃんと動いてる。
209デフォルトの名無しさん:2010/05/30(日) 21:09:47
.NET4だけを入れても2.0や3.5時代のアセンブリを動かせるってこと?
210デフォルトの名無しさん:2010/05/30(日) 21:22:24
実際に確認してないけど
ヘルプの.NET Framework 4 の新機能ってページ
>旧バージョンの .NET Framework でビルドされたアプリケーションを実行するために、
>.NET Framework 4 の共通言語ランタイム バージョンが自動的に使用されることはありません。
>.NET Framework 4 で旧バージョンのアプリケーションを実行するには、
>Visual Studio のプロジェクトのプロパティに指定されたターゲット バージョンの .NET Framework を使用して、
>アプリケーションをコンパイルする必要があります。
>または、アプリケーション構成ファイルの <supportedRuntime> 要素を使用して、サポートするランタイムを指定できます。

さらに<supportedRuntime>のページ
>.NET Framework Version 1.1 または .NET Framework Version 2.0 で作成されたアプリケーションまたはコンポーネントを
>.NET Framework Version 4 で実行するには、サポートされるランタイムのリストで .NET Framework 4 を指定するだけでは不十分です。
>さらに、構成ファイル内の <startup> 要素で、 useLegacyV2RuntimeActivationPolicy 属性を true に設定する必要があります。
>設定しない場合、サポートされるランタイムのリストで、.NET Framework 4 よりも低いバージョンの
>.NET Framework のうち最上位バージョンが検索されます。
>.NET Framework 4 がリストにある唯一のランタイムである場合、読み込みは失敗します。

最低でも*.configを設定してやらないといけないんじゃないの?
211デフォルトの名無しさん:2010/05/30(日) 22:01:59
>>202-204
誤解を招く言い方まずい。

.NET 4、.NET 2.0 からランタイム含め作り直してるって言っても、
表立っての仕様は互換性ある。
パフォーマンス上の観点から内部的に実装しなおしただけ。
4 より前のコードもほとんど動くはず。
212デフォルトの名無しさん:2010/05/30(日) 22:09:43
まあ「ほとんど」が曲者なんだけどな
213デフォルトの名無しさん:2010/05/30(日) 22:17:40
>>210,211
.NET 2〜3.5のアプリを.NET4で動かそうとしたら、
要するに.NET4向けに再ビルドしたあとで、
アプリケーション構成ファイルに設定追加が必要ということなんだな?
214デフォルトの名無しさん:2010/05/30(日) 22:23:00
.NET4向けにビルドしたら.NET4で動くに決まってるだろ
再ビルドせずに.NET4で動かしたい場合の話
215デフォルトの名無しさん:2010/05/30(日) 22:23:28
>>213
違う
再ビルドとsupportedRuntimeはどちらか片方よ
つか
> .NET4向けに再ビルドしたあとで、
これで.NET 4で動かなかったら問題だろw
// 動作が変わってて意図したとおりに動かない可能性はあるけども
216デフォルトの名無しさん:2010/05/30(日) 22:25:49
ソースの上位互換はまだ大丈夫かな
217デフォルトの名無しさん:2010/05/30(日) 22:27:53
一応動くはずだけど保証はできないからテストしろってことだろ
すでに2.0ターゲットでリリースされたアプリケーションをユーザが勝手に4で動かして
不具合が出て開発元に文句付けられたりしたら困るからな
218デフォルトの名無しさん:2010/05/30(日) 22:28:19
>>214-215
なるほど。再ビルドするなら完璧なわけね。
しかし、自分で書いてるコードはともかく、利用してる外部ライブラリ関係も全部.NET 4で再ビルドが必要ってこと?
基本的にオープンソースで固めてるから不可能ではないけど、
かなり面倒だな……。
219デフォルトの名無しさん:2010/05/30(日) 22:30:51
ビルドする時にバージョン記憶してて
そのバージョンの.net使うようになってるはずだから
問題になるとしたら最ビルドした時だけじゃないかな
220デフォルトの名無しさん:2010/05/30(日) 23:10:26
CLR4のアプリケーションからCLR2のdllを参照するとdllはCLR4で動くよ
リビルドはいらない
4と2のCLRを同一プロセスにロードできるようになったというのはライブラリには関係ない
221208:2010/05/30(日) 23:13:56
>>210
動作検証用に最新のCLRを使わせる機能が用意されてる。(.NET2.0の頃からあって1.0/1.1からの過渡期に使ってた)
全部に適用されちゃうので>>210の書いてるようにApp.configで設定する方が望ましいが、数が多くて個別設定が面倒なので…

http://msdn.microsoft.com/ja-jp/library/ms994387.aspx
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"OnlyUseLatestCLR"=dword:00000001
※64bit使ってる人はWow6432Nodeも忘れないように

>>209
2.0〜3.5だけじゃなくて、1.0/1.1でも2.0で動いてたやつなら4でも動く
222デフォルトの名無しさん:2010/05/30(日) 23:17:08
>>217
問題はテストのコストだよな。
まあ、お客さんに.NET2.0をアンインストールしないようにしてもらえばいい、
というか、意味もなくそんなことするお客さんもいないけど。
223デフォルトの名無しさん:2010/05/30(日) 23:30:56
http://msdn.microsoft.com/ja-jp/magazine/ee819091.aspx
これが詳しい
アプリケーションがCLR4ならDLLはそのターゲットバージョンにかかわらずすべてCLR4で動く
C++/CLIは死亡
224デフォルトの名無しさん:2010/05/30(日) 23:48:46
ASP.NET 2.0のサーバサイドで
あるURLにPOSTした結果を取得したいのですが
どのようにすればいいか、そもそも可能かどうかすら見当がつきません。

流れとしては

1.データを入力しポストバック
2.クリックイベントであるURL名にクエリ文字をつけてPOST
3.結果を取得
4.結果をDBに保存
という流れになると思われます。

具体的にいえば
GoogleMapのジオコーディングを行い住所データを軽度・緯度に変換して保存したいのです。
JavaScriptでやればいいのでしょうが出来るだけサーバサイドでやりたいと考えお伺いしてみました。

225デフォルトの名無しさん:2010/05/31(月) 00:03:05
よーわからんけど、HttpWebRequest でPOSTすればいいんじゃね?
226デフォルトの名無しさん:2010/05/31(月) 00:40:03
>>224
HttpWebRequestを使えば、POSTしてその結果を受信できる。
DOBONさんのところを見ろ。
227デフォルトの名無しさん:2010/05/31(月) 07:09:54
APIを直接たたくと早いのでこういう感じにしてみた
http://ideone.com/rGhe5
(コントロール側でダブルバッファリングを有効にし、BeginDraw()を呼び出す段階でOnPaintから渡されたグラフィックスオブジェクトを渡している)
だが、これでも重く感じるときがある
これより早くする方法はない?
228デフォルトの名無しさん:2010/05/31(月) 07:13:23
#追記
呼び出し側は各行ごとにTextSpilitterでトークンごとに分け、GetTokenType()で色付けするべきトークンかどうか調べた後、Graphics.DrawString()に渡しています
http://ideone.com/7rEYY
229デフォルトの名無しさん:2010/05/31(月) 08:18:35
>>224
The Google Geocoding API - Google Maps API Web Services - Google Code
ttp://code.google.com/intl/ja/apis/maps/documentation/geocoding/index.html#ReverseGeocoding

これ使うんならPOSTじゃなくてGETじゃないの?
日本語でしかもAPIキーなしで取れるようになってたんだね
試しに近所の住所でテストしてみたら住所→座標も座標→住所もあっさり取れた
Android用に使いたかった機能だからいいこと知れた

わかってるとは思うけど、HttpUtility.UrlEncodeとかでエンコードだけしてやればあとのurlは簡単
230デフォルトの名無しさん:2010/05/31(月) 08:47:00
これ以上はスレ違いだけどちょっとテストしてみたのでせっかくだから

予想できたことだけど略字だとだめだった
一致したところまでの情報が返るわけでもなく、ZERO_RESULTSとしか返ってこない
番地は半角でも全角でも漢数字でもok
区切りがよければ間に空白が入ってもok
「県」とか「市」っていう文字はそこに空白があればなくてもok
「町」はないとだめみたい
確実に日本語で返して欲しいならlanguage=jaは必要
思ったより柔軟
231デフォルトの名無しさん:2010/05/31(月) 11:40:11
>>225 ,226,229,230
レスが遅くなりました。

ありがとうございます。
皆様のおっしゃるようにやってみたところデータが取得できました。
レスポンスデータを見れば変換ができたかどうかも判別可能っぽいので
やりたいことは出来そうです。

皆様ありがとうございました。
232デフォルトの名無しさん:2010/05/31(月) 15:36:55
>>227 Direct3D
それ以外のどんな努力も無意味になる圧倒的な速度
233デフォルトの名無しさん:2010/05/31(月) 17:10:23
>>232
であるからこそ、WPFはDirect3D(9)を全面的に採用しているわけで。
234デフォルトの名無しさん:2010/05/31(月) 17:48:30
(´・ω・`)…
235デフォルトの名無しさん:2010/05/31(月) 18:00:33
今このスレをふと覗いた初心者だけど、
c#ってmono(?)とかいうやつでwindows以外のプラットフォームでも
同じコードで動く仕組みなんだよね?
direct3dも他のプラットフォームで動くようにできてるの?
236デフォルトの名無しさん:2010/05/31(月) 18:02:15
寝言は寝て言え
237デフォルトの名無しさん:2010/05/31(月) 18:02:29
.NET=Monoではないので利用できない機能はある
Direct3Dもその一つ
238デフォルトの名無しさん:2010/05/31(月) 18:10:50
.NETとDirect3Dも別物だべ
239デフォルトの名無しさん:2010/05/31(月) 18:15:06
>>235
クラスプラットフォームを目指すなら、DirectXではなくOpenGLを使用するとよい。
ライブラリはこの辺のものを使う。
http://www.nbrains.net/php/pukiwiki/index.php?OpenGL%2FLibrary#Base_OSS_DotNET
240デフォルトの名無しさん:2010/05/31(月) 18:19:08
>>237-239
なるほどー。
みんなありがとう。
241デフォルトの名無しさん:2010/05/31(月) 19:03:51
俺一人に対してみんなとは・・・
242デフォルトの名無しさん:2010/05/31(月) 19:09:41
和んだ
243デフォルトの名無しさん:2010/05/31(月) 23:41:07
このスレはジサクジエンでできているというのは本当だったんだな
244デフォルトの名無しさん:2010/06/01(火) 00:05:17
実はおれ>>1-242なんだけど結構疲れるんだぞ
やってみろ
245デフォルトの名無しさん:2010/06/01(火) 00:12:49
>>243-244も俺の自演だけどね
246デフォルトの名無しさん:2010/06/01(火) 00:43:39
俺のスクリプトはうまく動いてるようだな
247:2010/06/01(火) 00:50:20
これも俺の作ったBotが書き込んだ
248デフォルトの名無しさん:2010/06/01(火) 01:09:21
すげー
249デフォルトの名無しさん:2010/06/01(火) 01:50:11
>>232
ありがとう
250デフォルトの名無しさん:2010/06/01(火) 05:46:46
Webブラウザコントロールでテキストを選択したら、その範囲を取得するには、どのイベントフラグを使えばよいですか?
テキストボックスの場合には、selectedtextがありますが。
251デフォルトの名無しさん:2010/06/01(火) 09:34:52
イベントフラグ?
252デフォルトの名無しさん:2010/06/01(火) 10:47:04
>>250
何を聞きたいのかわからないけど、>>173で選択されてるテキストは取れる

253デフォルトの名無しさん:2010/06/01(火) 10:50:27
>>252
dynamicって.netのバージョンいくつからだっけ?
254デフォルトの名無しさん:2010/06/01(火) 10:52:01
4.0からじゃねーのか?
よく知らんが
255デフォルトの名無しさん:2010/06/01(火) 10:56:07
dynamicで選択範囲が取れるなら拡大縮小もできそうだな
256デフォルトの名無しさん:2010/06/01(火) 11:03:34
どーでもいい
257デフォルトの名無しさん:2010/06/01(火) 12:24:11
ListViewをクリックした際、クリックされたのが余白かどうかというのはどのように判断させられるんですか?
258デフォルトの名無しさん:2010/06/01(火) 12:31:05
取り敢えずHitTestしてみれ
259デフォルトの名無しさん:2010/06/01(火) 12:31:46
dynamicを使わなくてもいけるんじゃ
260デフォルトの名無しさん:2010/06/01(火) 12:58:29
>>259
.NET4じゃないなら、COMを参照登録していろんなキャスト入れれば出来るよ
261257:2010/06/01(火) 13:10:33
>>258
レスありがとです
HitTest使ってみたら無事出来ました
262デフォルトの名無しさん:2010/06/01(火) 16:33:39
>>260
COM参照をわざわざ書くのがいやだったので
書かなくて済んだのがいいだよw
263デフォルトの名無しさん:2010/06/01(火) 16:34:26
いいだね
264デフォルトの名無しさん:2010/06/01(火) 16:57:37
んだ
265デフォルトの名無しさん:2010/06/01(火) 17:12:10
一番手軽なのはSilverlightだよ
数十秒でインストール完了する超軽量.NET
266デフォルトの名無しさん:2010/06/01(火) 20:38:24
>>262
だべ
267デフォルトの名無しさん:2010/06/01(火) 22:12:08
Silverlightって.NetFrameworkも内包してるの?
268デフォルトの名無しさん:2010/06/01(火) 22:19:07
>>267
その質問は内容が非常に問題がある。
Silverligthもれっきとした.NET Frameworkファミリーの一つで、
「プリウスはトヨタ車を内包してるの?」というのと同じ。

SilverlightもCLIの一実装だからBase Class Libraryが含まれていることは間違いない。
しかしそれ以外に何が入ってるかは調べる必要がある。
例えばWindows.Formsとかは入ってない。

269デフォルトの名無しさん:2010/06/02(水) 02:42:48
ソースコードが見れない状態で、SDKの標準ツールのみでMSILを直接編集するにはどうしたらいいでしょうか?
270デフォルトの名無しさん:2010/06/02(水) 02:47:12
>>269
ildasm.exeじゃ駄目ですか?直接とは言いがたいけど。
271デフォルトの名無しさん:2010/06/02(水) 04:24:13
編集って既存のものを改造するってこと?
単に作成するだけならEmit使えばいいけど。
272デフォルトの名無しさん:2010/06/02(水) 06:03:56
違います...
273デフォルトの名無しさん:2010/06/02(水) 07:58:57
>>269
意味がわからない。SharpDevelop使えば
フリーソフトの範囲で直接MSILのプロジェクト作れるのに。
274デフォルトの名無しさん:2010/06/02(水) 08:18:55
まあ、意味わからんね。

とりあえず、IL 逆アセンブラー通してアセンブリソースに戻して、編集して IL アセンブラーでできるけども。
275デフォルトの名無しさん:2010/06/02(水) 11:24:59
こういうクラスの配列があった時

class Huga
{
public int ID;
public string Name;
}

クラスの配列からNameを抽出してstringの配列を生成するスマートな方法ないかしら

とりあえず今はHuga[]をforeachで回してList<string>にAddし、ToArrayして取得してます
276デフォルトの名無しさん:2010/06/02(水) 11:34:58
hoge.Select(x => x.Name).ToArray()
Array.ConvertAll(hoge, x => x.Name)
277デフォルトの名無しさん:2010/06/02(水) 11:57:20
Linq便利だなぁ
現状2.0しか使えないけど覚えときますね。ありがとん
278デフォルトの名無しさん:2010/06/02(水) 13:12:06
スレッドプールでキューされている処理をリストボックスなどにリストアップしたいのですが、どんな方法がありますか?
279278:2010/06/02(水) 13:23:16
すみません処理の最初にリストボックスに追加すればいいだけですよね
スレ汚し失礼しました
280デフォルトの名無しさん:2010/06/02(水) 13:33:25
スレッド実行される処理の最初にリストボックスに追加してもキューされてる処理をリストアップしたことにはならないと思うんだが別にいいのか
281デフォルトの名無しさん:2010/06/02(水) 13:37:51
それはタイムカードをチェックしても社員が出勤しているとは限らないのと似ている。
282デフォルトの名無しさん:2010/06/02(水) 19:38:36
>>281
((((;゚Д゚))))ガクガクブルブル
283デフォルトの名無しさん:2010/06/02(水) 19:42:30
似てるけど問題の本質は全然違うだろw
284デフォルトの名無しさん:2010/06/02(水) 20:25:55
>>277
やろうと思えば、.NETだけ2.0で、C# は3.0使えるよ。
LINQ相当の関数自分で用意すれば、だけど。
285デフォルトの名無しさん:2010/06/02(水) 21:08:38
>>284
うん。ありがとん
286デフォルトの名無しさん:2010/06/03(木) 01:06:23
すぐにToArrayするようなのなら、Arrayの静的メソッド+匿名メソッドで同様なのが幾つかある。
276の下のなんかはラムダ式じゃなくて
delegate(Huga x){return huga.Name} というような感じでなら2.0でいけるわけで。
287デフォルトの名無しさん:2010/06/03(木) 04:20:46
いけるわけですね
288デフォルトの名無しさん:2010/06/03(木) 08:37:32
初めWindowsアプリケーションでツリービューとリストボックスを使って
エクスプローラもどきの簡易ファイラーを作ってたんですが、
リストビューのアイコン表示出来るのが魅力的でリストビューに乗り換えてみたら
SelectedItemがなくて色々不便で、今WPFアプリケーションというのを見てたら
リストビューにSelectedItemがあって便利そうだったので乗り換えようかな・・
なんて考えてるんですがこの考えは浅はかですか?
289デフォルトの名無しさん:2010/06/03(木) 08:47:58
>>288
いいんじゃない?勉強はひつようだけど
290デフォルトの名無しさん:2010/06/03(木) 09:43:59
>>289
レスありがとです
とりあえずトライしてみます
291デフォルトの名無しさん:2010/06/03(木) 09:58:34
別にプロパティなくても自分で継承して実装しちゃえばいいのに・・・
292デフォルトの名無しさん:2010/06/03(木) 10:17:26
>>288
全く違う話だけど自分もファイラー作ってて、レスポンスが悪いのに悩んでた
いろいろ調べたらSHGetFileInfoでアイコンを取るのに時間がかかってたことが判明
そこだけ別スレッドで取るようにして後で再描画するようにしたら、もの凄く快適になった
参考までに。常識だったらごめん
293デフォルトの名無しさん:2010/06/03(木) 11:33:04
C#2.0以降のWindowsForm Appで
iTextSharpを使用して帳票を作りたいのですが、フォントをセットするときにフルパスで指定しなければいけないようです。

フォントのパスをC:\…と切ってもいいのですができればもっとスマートな方法を探しています。

APIのSHGetSpecialFolderPathを使用するしか方法はありませんか?
294デフォルトの名無しさん:2010/06/03(木) 11:42:57
こんなのとか
System.Environment.ExpandEnvironmentVariables("%windir%\Fonts")
295デフォルトの名無しさん:2010/06/03(木) 11:46:30
>>294
おぉ!
ドトネト標準系で行けるならこっちのがイイ感じです。
わざわざAPI宣言しなくていいし
ありがとうございました。
296デフォルトの名無しさん:2010/06/03(木) 13:05:27
System.Environment.GetFolderPath( System.Environment.SpecialFolder.Fonts );
ってのも。
297294:2010/06/03(木) 13:14:33
そんなのあったんだ。そっちの方がいいな
298デフォルトの名無しさん:2010/06/03(木) 13:18:56
>>296
Fontsなんてなくね?
299デフォルトの名無しさん:2010/06/03(木) 13:28:32
>>298
.NET4でSystem.Environment.SpecialFolderの定義が増えたから
それより前だとないかも。
300デフォルトの名無しさん:2010/06/03(木) 14:01:12
地味に便利になっていくな
301デフォルトの名無しさん:2010/06/03(木) 15:32:53
>>299
マジか!
3.5捨ててくる
302デフォルトの名無しさん:2010/06/03(木) 16:07:24
それだけのために捨てるのはどうかとw
303デフォルトの名無しさん:2010/06/03(木) 16:15:04
それが301を見た最後の光景だった。
当然タイムカードには記録されていない。
304デフォルトの名無しさん:2010/06/03(木) 16:25:16
>>301
次にお前はVS2010重ぇと言うっ!!
305デフォルトの名無しさん:2010/06/03(木) 16:38:19
>>301
上司でございます。
皆様に部下の>>301が大変なご迷惑をおかけしたようで
本人に代わってお詫び申し上げます。

それでは失礼いたします。
306デフォルトの名無しさん:2010/06/03(木) 16:47:00
新兵の訓練は徹底的にやっておけよ軍曹
307デフォルトの名無しさん:2010/06/03(木) 16:54:50
プログラム業界はどっかの軍隊なみに体育会系が多いのか
308デフォルトの名無しさん:2010/06/03(木) 17:02:15
10年働けるソルジャーを欲してるくらいだ
309デフォルトの名無しさん:2010/06/03(木) 17:25:56
MIAが多発するしな
310デフォルトの名無しさん:2010/06/03(木) 19:54:27
肉体労働だし
体力勝負だし
311デフォルトの名無しさん:2010/06/03(木) 20:33:27
馬鹿で無能な自分の受けてる待遇が世の中の一般だと思うなよまったく
312デフォルトの名無しさん:2010/06/03(木) 20:39:19
もう34になるがプログラマー30歳定年説ってどこいったんだよ……
技術に触れない管理職なんていやだ!と10年前はほざいていたがかったるいな
313デフォルトの名無しさん:2010/06/03(木) 20:51:49
35歳定年説しか知らん
314デフォルトの名無しさん:2010/06/03(木) 21:05:33
シリコンバレーでは日本的なエンジニア定年は無い
という記事を日経BPのPC Onlineで読んだ気がする
315デフォルトの名無しさん:2010/06/03(木) 21:38:16
34歳の俺が一番下っ端(年齢的にも立場的にも)なうちの会社もどうかと思う。
316デフォルトの名無しさん:2010/06/03(木) 21:46:27
>>315
35歳定年説ですね分かります
317デフォルトの名無しさん:2010/06/03(木) 22:14:10
うほっ
318デフォルトの名無しさん:2010/06/03(木) 22:46:45
http://www.geocities.jp/hatanero/mulitithred.html
上記URLを参考に下記URLのように書いて実行してみたんですが、ボタン2を押すと5秒間ボタン1が押せません。
ボタン2は別スレッドで実行されているからボタン1は押せるという認識なんですが、何が間違っているんでしょうか?
http://ideone.com/hUeHH
319デフォルトの名無しさん:2010/06/03(木) 22:57:13
Click2とClick1が同じスレッドで呼ばれるからとまるに決まってる
320デフォルトの名無しさん:2010/06/03(木) 22:58:24
>>318
この短いコードで何か色々と間違っていて
どこから突っ込んでいいのか分からないんだが、
とりあえずInvokeしたらUIスレッドで動くんだからその間UIが止まるのは当たり前だろ?

まず、重い処理があるならBackgroundWorkerを使おうよ。
321318:2010/06/03(木) 23:20:31
>>319-320
レスありがとうございます
BackgroundWorkerを使ったら無事別スレッドで実行することが出来ました
322デフォルトの名無しさん:2010/06/04(金) 01:35:55
>>321
うん
323デフォルトの名無しさん:2010/06/04(金) 20:09:07
m_li.BeginAcceptTcpClient(new AsyncCallback(callback), m_li);

1回目の接続の時は問題なくcallbackが呼ばれるのですが2回目以降は呼ばれません。
どうしたら2回目も呼ばれるようになるでしょうか?。
接続→callback→callback終了で切断→再接続→callback(ここが呼ばれません)
324デフォルトの名無しさん:2010/06/04(金) 20:48:28
(*´ω`*)
325323:2010/06/04(金) 21:18:03
あ、理由がわかった。
ループしているのに理想どおりに動かないと思ったら使い方を間違えてたw。
326デフォルトの名無しさん:2010/06/05(土) 05:21:29
(´・ω・`) …
327デフォルトの名無しさん:2010/06/05(土) 22:38:06
デバッグで実行しているのにTCP周りでこける(たぶん)とデバッグにならずにそのまま全て終了してしまう。
Application.Run(new Form_Base())のフォームから更にshowで呼び出しているフォームなのに全て終了して
しまうのが謎です。

エスパー求む!!。
328デフォルトの名無しさん:2010/06/05(土) 22:40:06
>>327
TCP周りの動作チェックでフォームなんか使うな。コンソールを使え。
329デフォルトの名無しさん:2010/06/05(土) 22:41:43
パフォーマンスカウンタでProcessのInstanceName指定するのって、
プロセス名が被ってるの(svchostとか)だとどうなんの?
コード書いてみたけどよくわからん。
330デフォルトの名無しさん:2010/06/05(土) 22:52:41
何の為のPIDだ
331デフォルトの名無しさん:2010/06/05(土) 23:16:30
PIDから指定ってできたっけ?
とりあえず"svchost""svchost#1""svchost#2"てな感じで区別されてるのはわかった。
332デフォルトの名無しさん:2010/06/05(土) 23:22:49
>>327
デバッガで止める例外を指定してなくて、何か例外が起きてるんじゃねえの
333327:2010/06/06(日) 00:08:19
デバック入れまくっても駄目だったけどソースに賄賂を贈ったら素直になった
ありがとん
334デフォルトの名無しさん:2010/06/06(日) 12:42:40
コンソールアプリで自分がコマンドラインから起動されたかどうかを知る方法はありますか?
335デフォルトの名無しさん:2010/06/06(日) 12:44:05
ない。
336デフォルトの名無しさん:2010/06/06(日) 12:44:22
多様化で引数渡せば?
337デフォルトの名無しさん:2010/06/06(日) 13:24:13
現在C#でミュージックプレイヤーを製作しています
スキンに対応させたいのですが、そういう方法を分かりやすく説明しているサイトもしくは本はありませんか?

やりたいこと(優先度)
1.背景の変更
2.フォントの変更
3.ウィンドウの外見の変更
338デフォルトの名無しさん:2010/06/06(日) 13:28:22
まずは完成させろ
339デフォルトの名無しさん:2010/06/06(日) 13:29:10
WinFormsでやるのは恐ろしく面倒だからわかりやすいサイトがないとできないようなら諦めた方がいい
やるならWPFだな
フレームワークのコンセプトとしてそういうのを重視してるからとっても簡単
340デフォルトの名無しさん:2010/06/06(日) 14:37:33
>>334
環境変数読めば、分かるOSやshellもあるが、
C#関係なさすぎる(.NETすら関係ない)ので、
他所でおねがいします。
341デフォルトの名無しさん:2010/06/06(日) 15:00:25
>>334
MSDNのフォーラムにその話題があるよ。
実はその問題の解決はかなり難しい。
342デフォルトの名無しさん:2010/06/06(日) 15:23:56
>>337
すっごいショボいけどPictureBoxの上にコントロール置きまくる仕様で
Formのサイズが固定なら簡単じゃね?背景だけだが
343デフォルトの名無しさん:2010/06/06(日) 15:31:42
1やるなら3もやらないとダメ
背景付けてしまうと上に乗ってる全てのコントロールの外観を変えないと非常に見栄えが悪い
344デフォルトの名無しさん:2010/06/06(日) 19:30:49
http://dobon.net/vb/dotnet/form/transparencykey.html#shape
この方法ならWinFormsでもいけるかもね。最初っからWPFの方がいいのは確かだけど。
ボタン配置はxmlにでもしてその都度動的に配置して。
345デフォルトの名無しさん:2010/06/06(日) 22:44:19
ミュージックプレイヤーぐらいなら
フォームのマウスアップダウンムーヴのイベントで全部拾って
座標で振り分けるという力業でやってもいい気がする
346デフォルトの名無しさん:2010/06/06(日) 22:51:43
>>345
labelにもクリックイベントは付くのでそこへ画像当てはめればいいんじゃね?
問題はだ・・・
透過情報を持った画像をボタンぽくする場合winformだと面倒じゃなかったっけ?
347デフォルトの名無しさん:2010/06/07(月) 00:24:41
面倒ですね
348デフォルトの名無しさん:2010/06/07(月) 01:26:32
nico動でもかなり苦戦してた輩がいたなwwwそれ。
349デフォルトの名無しさん:2010/06/07(月) 11:49:37
クラスの使い道がいまいちわかんないんだが
350デフォルトの名無しさん:2010/06/07(月) 11:57:01
そのうち分かるよ
351デフォルトの名無しさん:2010/06/07(月) 11:59:29
大丈夫。タイムカードの使い道は分からなくても君は管理されている。
352デフォルトの名無しさん:2010/06/07(月) 12:00:26
俺がお前を管理してやる
353デフォルトの名無しさん:2010/06/07(月) 12:44:35
ニコニコ動画のプレイヤーくらい作ってやんよ
354デフォルトの名無しさん:2010/06/07(月) 14:31:35
名前 ふりがな メールアドレス 電話番号
の4項目をもつListをつくって、そこにそれぞれ項目を追加するには、
List<string> mailaddress = new List<string>();
のあと、どのようにすればよいですか?

SubItems.Add;
を使うのではないかと思うのですが。

たとえば、
hitomi ひとみ [email protected] 03-3333-3333
とかだったら?
355デフォルトの名無しさん:2010/06/07(月) 14:33:40
待て
なんか間違ってるぞ
356デフォルトの名無しさん:2010/06/07(月) 14:41:48
>>354
そういうフィールドを追加したstructを定義する。
それをList<AddressInfo>で管理する。
357デフォルトの名無しさん:2010/06/07(月) 14:45:36
なんだSubItemsって
358デフォルトの名無しさん:2010/06/07(月) 15:24:23
ListViewとごっちゃ?
359デフォルトの名無しさん:2010/06/07(月) 15:49:29
structはないわ
どう考えてもクラスにするべき
360デフォルトの名無しさん:2010/06/07(月) 16:00:56
>>359
4項目を一時的に保持するだけならimmutableなstructでもいいように見えるけど。
361デフォルトの名無しさん:2010/06/07(月) 16:06:34
おそらく359のツッコミに対してその返答はズレてる
でも359も気にする必要のない所を気にして言ってるようなので
同じくズレてる
362デフォルトの名無しさん:2010/06/07(月) 16:14:20
お前のズラもズレている
363デフォルトの名無しさん:2010/06/07(月) 16:19:19
ズラの確認してきました
364デフォルトの名無しさん:2010/06/07(月) 16:24:59
オヅラさん…
365デフォルトの名無しさん:2010/06/07(月) 16:39:57
>>356
354です。

どう定義するんでしょう?
List使うの初めてで、よくわからないでいます。
366デフォルトの名無しさん:2010/06/07(月) 16:47:53
>>365
4項目を持つListじゃなくて4項目を持つclassなりstructを作って
それのListを作るんだよ。
367デフォルトの名無しさん:2010/06/07(月) 17:01:05
もうこんなんでもいいじゃん

public class Sample ←構造体でもどっちでもいいよもう・・・
{
  public string 名前;
  public string ふりがな;
  public string メールアドレス;
  public string 電話番号;
}

private void hoge()
{

 List<Sample> list = new List<Sample>();

 Sample item = new Sample();
 
  item .名前 = "ヴィータ";
  item .ふりがな = "おれのよめ";
  item .メールアドレス = "[email protected]";
  item .電話番号 = "090-xxxx-xxxx";

  list.Add(item);

}
368デフォルトの名無しさん:2010/06/07(月) 17:16:24
var list = new[] {
 new {
  名前 = "ヴィータ",
  ふりがな = "おれのよめ",
  メールアドレス = "[email protected]",
  電話番号 = "090-xxxx-xxxx",
 }
}.ToList();
369デフォルトの名無しさん:2010/06/07(月) 19:21:03
日本語のメソッド名って割と頻繁に使う?
俺、結構使ってるんだが…。
370デフォルトの名無しさん:2010/06/07(月) 19:23:05
使わない
使ってるってことに驚いた
煽りじゃない
371デフォルトの名無しさん:2010/06/07(月) 19:25:59
ヴィータを俺の嫁と言いたいのはわかった
相手はいやだと思うが・・
372デフォルトの名無しさん:2010/06/07(月) 19:26:07
>>369
大手でも国内の新規案件で使うケースは絶対あるから使う
373デフォルトの名無しさん:2010/06/07(月) 19:26:33
下手な英語使うよりは日本語のほうがいいな
374デフォルトの名無しさん:2010/06/07(月) 19:27:10
日本語のメソッドってとこがみそだなw
ちゃんと開発やってるなら使うだろw
375デフォルトの名無しさん:2010/06/07(月) 19:30:12
え・・
日本語使うの?w
376デフォルトの名無しさん:2010/06/07(月) 19:32:12
privateメンバでどうも思いつかない時にとりあえず付けることはある
377デフォルトの名無しさん:2010/06/07(月) 19:33:03
国内だったら使うな
コメントも何もかも英語というなら使わないだろう
378デフォルトの名無しさん:2010/06/07(月) 19:56:39
.csのソースコードの文字コードって、どこで指定するんだっけ?
VisualC#2010です。sijisで書いてて、読み込んだら盛大に文字化けしてる…。
379デフォルトの名無しさん:2010/06/07(月) 19:59:00
あー日本語メソッドって単体テストの時か
今頃気づいたわorz
あれって別名指定出来ないものなんかね?
380デフォルトの名無しさん:2010/06/07(月) 23:09:19
タイマオブジェクトって何個も同時に動かしてもいいもんですかね?
タイマー系のアプリ作ってるけどDispatcherTimerが10個を超えそうな勢い。
381デフォルトの名無しさん:2010/06/07(月) 23:10:49
余裕
382デフォルトの名無しさん:2010/06/07(月) 23:15:55
DispatcherTimerはWPFの上で管理されてるから問題ない
いくつ作ってもWindowsネイティブのタイマは一つ
383デフォルトの名無しさん:2010/06/07(月) 23:35:28
ttp://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_20/extremecs_20_01.html

もう、どうなのこれ?
この本こんな話ばっかなのか?
パフォーマンスがーって言って結局リフレクション使ってるし、わずかに速くなったって…
わずかのためにいったい何やってんだか…
ていうか状況設定が強引すぎて義都合主義で意味がない。
384デフォルトの名無しさん:2010/06/07(月) 23:38:49
>>381-382
おおそうなのか。安心して多用しますサンクス
385デフォルトの名無しさん:2010/06/07(月) 23:42:10
パフォーマンスがどうとかいう前にDispatcherTimerでタイマー作るのはいかん。
GUIをアニメーションさせたり適当な時間間隔で処理を実行したい場合に使うもの。精度を当てにしてはいけない。
386デフォルトの名無しさん:2010/06/07(月) 23:44:02
川俣に期待してるお前が馬鹿
387デフォルトの名無しさん:2010/06/07(月) 23:46:41
確かに意味不明だな
そんなにラムダ式が好きならExpression Tree使って動的コンパイルするくらいしろよ
388デフォルトの名無しさん:2010/06/07(月) 23:47:32
>>385
1秒くらいのズレなら大丈夫なのと、イベントハンドラがUIスレッドで実行できて
便利なのでこれを使ってるんだけど、他にいい方法あったらぜひ教えてください。
389デフォルトの名無しさん:2010/06/07(月) 23:48:53
>>388

383は君宛じゃないとオモウヨ
390デフォルトの名無しさん:2010/06/07(月) 23:55:22
>>388
DispatcherTimerを使うなら、可能な限り短い間隔でハンドラが呼び出されるようにして
現在時刻を取得して前に処理を実行した時刻との差を求めて目的の時間以上経過していたら処理を行う。
呼び出し間隔は全く当てにしない。
まあスレッドタイマ使ってDispatcher.Invokeの方が楽かも
391デフォルトの名無しさん:2010/06/07(月) 23:56:21
>>390
潔癖すぎるよ
392デフォルトの名無しさん:2010/06/08(火) 00:02:04
僕はもう少しのんびりとした生き方がしたい
393デフォルトの名無しさん:2010/06/08(火) 00:04:35
UIスレッドのタイマって状況によっては止まったり詰まったりするぞ
394デフォルトの名無しさん:2010/06/08(火) 01:03:09
とはいえ、優先順位はあるとはいっても、結局何使ったところでUIスレッドで動かす限りは大差はない。

395デフォルトの名無しさん:2010/06/08(火) 01:04:47
スレッドタイマの方が精度があるということですかね。
遅延のことだけど、別スレッドからDispatcher.Invokeするのも、
結局UIスレッドの状態に左右されてしまうのではないでしょうか。
396デフォルトの名無しさん:2010/06/08(火) 01:06:50
優先的に動かすこともできるくらいの効果はあるが結局大差はない。
>>394の話だな。
397デフォルトの名無しさん:2010/06/08(火) 05:25:36
大差はないね。
398デフォルトの名無しさん:2010/06/08(火) 08:04:49
先生方!
.Net4になってから文字コード指定のUrlのエンコードが出来ません!
(HttpUtilityが消えてる!Uriのものは文字コード指定出来ない!)
みんなはどうやって解決してるんですかっ!?
399デフォルトの名無しさん:2010/06/08(火) 08:07:33
>>398
winformの話?

WPFかSLあたりはHttpUtilityの所属が違ってた記憶がある
400デフォルトの名無しさん:2010/06/08(火) 08:11:15
ClientProfileだと切られてるみたいだな
こんなとこ切ってどうすんだイミフ
401デフォルトの名無しさん:2010/06/08(火) 08:19:39
SLだとSystem.Windows.Browserの所属になってるな
HttpUtility

.net4は本格的に使ってないので憶測だがもしかすると
WPFやSLにあわせてる可能性もあるかもね
402デフォルトの名無しさん:2010/06/08(火) 08:33:54
UriクラスかSystem.NetのWebUtilityクラス使えば?文字コードはしらん
403デフォルトの名無しさん:2010/06/08(火) 09:09:28
>>399
Yes!

>>400
そうなんですよぉ><

>>401
ClientProfileにないんですよ、それが…

>>402
その二つじゃ文字コード指定ができないんです><

八方塞がりですじゃー
404デフォルトの名無しさん:2010/06/08(火) 09:38:01
自分専用のRSSリーダーを作ろうとしています。
実際の記事はFirefoxで表示して、見終わってタブを閉じたら自動的にリーダーに戻りたいのですが
どんな方法があるでしょうか?

思いついたのは
○Firefoxに閉じられるのを監視するアドオンを追加し、そこから通知を受け取る
 リーダーから開く前にそのURLをファイルに書き出しておく
 Firefoxアドオンで、タブが閉じられたときファイルのURLと一致したら「閉じたフラグ」ファイルを作成
 リーダーでは「閉じたフラグ」ファイルが作成されるのを監視し自分自身にSetForegroundWindow
 この程度の規模のFirefoxアドオンなら作れる

○ローカルサーバとして稼働しリーダー画面自体もFirefoxでAJAXっぽく表示
 C#EEでのローカルサーバの作り方自体は確認済み
 但しこのあたりのサーバプログラムの経験は皆無なので難易度の見当がつかない
 インストールもしたこと無いけどこれだとWeb Developerで作った方が楽?
 作ったことないし、調べるうちに作ってみたくなってきた

あたりなのですが、他に何か良い方法はありますか?

・基本的にはFirefoxのBrief的な感じにしたい
 ツリー部分と一覧部分があり、ツリーで選択しているノード以下の全てを一覧で表示する感じ
・どちらもほぼ画面を占有するくらいのサイズが必要なので小さくして並べるという選択肢はなし
・環境はXP Pro SP3 + .NET4 + VS2010EE
Briefの機能自体は大体気に入っているのですが、
開くときに重すぎる(登録RSSフィードは200近く)のとフィルタをかけたりしたいので。
405デフォルトの名無しさん:2010/06/08(火) 09:39:45
×どちらもほぼ画面を占有するくらいのサイズ
○Firefoxもリーダーもほぼ画面を占有するくらいのサイズ
406デフォルトの名無しさん:2010/06/08(火) 09:40:21
方法は調べればわかりますお
407デフォルトの名無しさん:2010/06/08(火) 10:05:30
そのリーダーにGeckoエンジンを追加するほうが早くないか
408デフォルトの名無しさん:2010/06/08(火) 10:08:48
>>407
IEコンポーネントを使えるんだし自分で簡易ブラウザも作った方が早そうだけどな
409デフォルトの名無しさん:2010/06/08(火) 10:11:21
Silverlight使って全部ブラウザ上で作るとか
410デフォルトの名無しさん:2010/06/08(火) 10:13:00
>>409
それもいいな
後はローカルで動くproxyサーバータイプにしてしまうとか
411デフォルトの名無しさん:2010/06/08(火) 10:23:53
>>403
エンコードぐらい自分で書いちまえば?
412デフォルトの名無しさん:2010/06/08(火) 11:39:01
>>368
これって最初の宣言時に登録する以外に、あとで追加する場合はどうやるの?

またvar list =から?
413デフォルトの名無しさん:2010/06/08(火) 11:42:08
list.Add(hoge);
414デフォルトの名無しさん:2010/06/08(火) 11:51:07
>>413
追加するときは、わざわざhogeクラス作ってから、ということ?>>367に逆戻り?
>>368の書式って初回しか使い道無いの?
415デフォルトの名無しさん:2010/06/08(火) 11:54:56
C言語とC#比較したら
C#のコードのほうが何をやってるか見やすいね。

FILE *fp
とかイミフ
416デフォルトの名無しさん:2010/06/08(火) 11:55:31
>>414
そうじゃないの?
417デフォルトの名無しさん:2010/06/08(火) 11:58:31
list.Add(
 new {
  名前 = "なのは",
  ふりがな = "まおう",
  メールアドレス = "[email protected]",
  電話番号 = "090-xxxx-xxxx",
 });
プロパティ同じ匿名クラスなら通ったっけ?
418デフォルトの名無しさん:2010/06/08(火) 11:58:50
>>412
var newItem = new {
  名前 = "ヴィータ",
  ふりがな = "おれのよめ",
  メールアドレス = "[email protected]",
  電話番号 = "090-xxxx-xxxx",
};
list.Add(newItem);
419デフォルトの名無しさん:2010/06/08(火) 12:00:25
>>418
もうそこまでするならクラスなり構造体なりちゃんと作れって話だなw
420デフォルトの名無しさん:2010/06/08(火) 12:04:17
匿名クラスはLINQのselectで使うもの
421デフォルトの名無しさん:2010/06/08(火) 12:35:53
>>411
すでにかいてるー
レスないって事は標準ではなくなったってことなのね…

あんまり言いたくないけど糞だわ.Net4は
互換性ないとか糞にも程があるだろ
Obsoleteなんかの将来消えますよ属性もないのに勝手に消すな
422デフォルトの名無しさん:2010/06/08(火) 12:39:33
Client Profileだからだろうが
423デフォルトの名無しさん:2010/06/08(火) 12:41:52
そうだな
424デフォルトの名無しさん:2010/06/08(火) 12:43:56
.net4からこんなことになってるのか?
http://msdn.microsoft.com/ja-jp/library/cc656912.aspx
Client Profile限定にすると小さくできるの?
425デフォルトの名無しさん:2010/06/08(火) 12:44:59
.net4ってuserのpcにはclientprofileしかはいらなくね?
426デフォルトの名無しさん:2010/06/08(火) 12:45:42
サイズの差はHDDの容量からしたら誤差みたいなもんだし
Client Profileとか必要なのか?
427デフォルトの名無しさん:2010/06/08(火) 12:47:12
>>425
入れる事は出来る
でもWindowsUpdateではClientProfileが標準で提供されるからその認識でもOKかもね
428デフォルトの名無しさん:2010/06/08(火) 12:51:54
どんどん肥大化してるから妥当な選択だろ
なんでクライアントにASP.NET入れなきゃいけないのかと
429デフォルトの名無しさん:2010/06/08(火) 12:52:47
こりゃ色々消えてそうだなw
430デフォルトの名無しさん:2010/06/08(火) 12:55:11
実際問題パラレル使ってやりたいことがあるから4.0からは逃げれないけど・・・
なんかいろいろ変ってそうで怖いのぉ
431デフォルトの名無しさん:2010/06/08(火) 12:57:15
SilverlightにWebのクラス入ってないとかどういう設計か問い詰めたいけどな
432デフォルトの名無しさん:2010/06/08(火) 12:57:49
肥大しましたから分けました
お別れしちゃったライブラリは無いも同然だから自作してね☆(ゝω・)vキャピってことか
パネェな
433デフォルトの名無しさん:2010/06/08(火) 12:59:13
>>414
というか、DBとかとそう変わらないだろ
クラスはカラムの定義
リストへの追加はレコードの追加

結構違和感でもあるのか?
Varとか使うと2.0とかでは使えないんだしひとまずベタな方法で実装してみてはどうだろうか?


PS.ヴィータとかなのはってなんだよ と思ってググったらなるほど・・・
434デフォルトの名無しさん:2010/06/08(火) 12:59:14
>>431
SLは>>401じゃないの?
435デフォルトの名無しさん:2010/06/08(火) 13:04:33
SLもHttpUtilityはSystem.Webなんだが…。
436デフォルトの名無しさん:2010/06/08(火) 13:07:29
437デフォルトの名無しさん:2010/06/08(火) 13:10:15
あ、ほんとだ
しかも3からかよw
俺、3の時からSystem.Webからひっぱってきてた件…
つかなんでコロコロ場所が違ってるんだよ…
438デフォルトの名無しさん:2010/06/08(火) 13:22:43
まあ初めにSystem.Webにおいてしまったのが諸悪の根源
439デフォルトの名無しさん:2010/06/08(火) 13:32:30
最初からサーバ用とクライアント用で分けとけばよかったのにね
Silverlightはやりすぎだけど
440デフォルトの名無しさん:2010/06/08(火) 14:19:33
はいはーい
441デフォルトの名無しさん:2010/06/08(火) 15:24:10
はいは1回まで。
442デフォルトの名無しさん:2010/06/08(火) 15:51:58
はーーーーーーーーーーーーーい
443デフォルトの名無しさん:2010/06/08(火) 16:39:20
よろしい
お前の妹をファックしていいぞ
444デフォルトの名無しさん:2010/06/08(火) 16:57:33
>>442
伸ばさない
445デフォルトの名無しさん:2010/06/08(火) 17:27:02
はい?
446デフォルトの名無しさん:2010/06/08(火) 17:30:07
語尾を上げない
447デフォルトの名無しさん:2010/06/08(火) 17:30:37
御意
448デフォルトの名無しさん:2010/06/08(火) 17:31:14
これ思い出した

【青森】 「カニを買わないか」→「はいはい」と気軽に返事 カニ2回届く 消費生活センター注意を呼びかける
http://live28.2ch.net/test/read.cgi/newsplus/1275622821/
449デフォルトの名無しさん:2010/06/08(火) 20:19:49
でも4のクライアントプロファイルって対してサイズ変わらんよね。
3.5では極端に違ったから意味はあったが(しかし実質使えなかったが)、
4はむしろ誰得になってる…
450デフォルトの名無しさん:2010/06/08(火) 21:59:29
そこでSilverlightですよ
ここまでばっさり削られるとむしろ清々しい
それでも意外と使える
451デフォルトの名無しさん:2010/06/08(火) 22:03:31
2010の入門書早くでないかなー
MS公認の「ひと目でわかる」シリーズまだかなー
WPFも一緒に解説してくれるのかなー
452デフォルトの名無しさん:2010/06/08(火) 22:44:48
なんかサンプルや例題に加齢臭を感じるんだよな〜ひとめシリーズ。
萌え要素だと思っているのだろうがイラストも70年代。
萌え萌えキュンキュンとしすぎるのもアレだが、もうチョッとナンとかならんかな〜
453デフォルトの名無しさん:2010/06/08(火) 23:21:36
質問です。
mdb(データベース)ファイルをC#で扱いたいのですが、
mdbのファイルがまったく存在しない状態で
テンプレートになるような部分からファイルを作成することはできますか?

テンプレートというのは、たとえばこんなデータベースだとしたら
「氏名、年齢、住所」の部分だけを作るということです。

氏名 年齢 住所
山田 20才 東京
鈴木 30才 千葉


自分がmdbでやったことがあるのは、すでにmdbファイルが存在していて、その中身をいじるといったことくらいです。
Access自体はいじったことがありません。
よろしくお願いします。
454デフォルトの名無しさん:2010/06/08(火) 23:31:41
>>453
SQL Server Compactじゃダメなん?
455デフォルトの名無しさん:2010/06/08(火) 23:33:04
DAOでつなげばできるはず。
456デフォルトの名無しさん:2010/06/08(火) 23:35:08
457453:2010/06/08(火) 23:41:53
素早いレスありがとうございます。

なんだかできそうですね。
両方試してみて、使いやすいほうでチャレンジしてみたいと思います。
どうもありがとうございました!
458デフォルトの名無しさん:2010/06/08(火) 23:46:25
.sdfと.mdbをC#で使う場合はどちらが好ましいの?
Accessとかツール使わずC#アプリケーションからの利用だけだと
459デフォルトの名無しさん:2010/06/08(火) 23:50:36
面倒臭くなってきたのでsqliteにしました
460デフォルトの名無しさん:2010/06/09(水) 00:02:12
sqliteはお手軽だよな
461デフォルトの名無しさん:2010/06/09(水) 00:03:03
必要十分だし
462デフォルトの名無しさん:2010/06/09(水) 00:22:16
>>452
ひと目にイラストなんてあったっけ?
463デフォルトの名無しさん:2010/06/09(水) 00:59:37
C#言語仕様のドキュメントってExpress版にはついてないのな
ダウンロード出来るのは3.0の英語版だし。こんなとこでケチんなよMS
464デフォルトの名無しさん:2010/06/09(水) 02:29:06
有償版には翻訳されたやつが付属するの?
全く気にしてなかったけどExpressに入ってないと言われると読みたくなるw
465デフォルトの名無しさん:2010/06/09(水) 02:52:30
2010はまだ入れてないから知らんけど2008Proのは英語のみだぜ
466デフォルトの名無しさん:2010/06/09(水) 06:37:45
>>465
Microsoft Visual Studio 9.0\VC#\Specifications\1041\CSharp Language Specification.doc
ないの?
467デフォルトの名無しさん:2010/06/09(水) 09:28:57
>>458
.sdfじゃねーかな
468デフォルトの名無しさん:2010/06/09(水) 09:35:18
EqualやGetHashなんかを自動で作成してくれるプラグインってどこかにあったと思うけどみつからぬ…

誰かおすえて…
469デフォルトの名無しさん:2010/06/09(水) 11:12:45
ReSharperでしょ
でも参照型にGetHashCode実装するなら
イミュータブルにしないといけないから安易に実装しちゃダメだよ
470デフォルトの名無しさん:2010/06/09(水) 11:30:37
>>469
サンクス!これだ!!ったかな?w
見てみたら確かにこれで出来るね
でも有償かぁ
ModelにEqualsとかを簡単に実装したいのになぁ
でも最低2万もするのかぁ…
471デフォルトの名無しさん:2010/06/09(水) 11:40:37
Modelってそれ本当にイミュータブルか?
Dictionaryが壊れたりするからEqualsとGetHashCode(一方のみは不可)
を実装していいのは厳密には構造体かインスタンスの値が変わらないクラスだけ
472デフォルトの名無しさん:2010/06/09(水) 11:44:27
そもそも何でイミュータブルじゃないと駄目なの?
手持ちのクック本含めたあらゆる本にもそんな事かいてないけど?
473デフォルトの名無しさん:2010/06/09(水) 12:26:02
>>472
Dictionary が壊れたりするからって >>471 にまんま書かれてるが。
474デフォルトの名無しさん:2010/06/09(水) 12:28:44
>>473
だから何がどういう理屈で壊れるのさ?
GetHashCodeを使うものはクラス全体がイミュータブルであることが必須とか聞いた事が無い
475デフォルトの名無しさん:2010/06/09(水) 13:09:47
MSDNのGetHashCodeの項を読んでみなよ
>オブジェクトがどのように変更されていても、ハッシュ関数は同じ値を返す必要があります。
476デフォルトの名無しさん:2010/06/09(水) 14:35:40
>>475
それって別にクラス全体がイミュータブルである必要性なくね?
Modelの不変なプロパティ(一意なID等)を元に計算すればいいだけじゃん
477デフォルトの名無しさん:2010/06/09(水) 14:46:13
webBrowserコントロールを使って、Webをブラウザするとき、
Internet Explorerスクリプトエラー オブジェクトがありませんというパネルが出るのですが、
これを出さないようにするにはどうしたらよいでしょう?
478デフォルトの名無しさん:2010/06/09(水) 14:49:46
オブジェクトがあればいいんじゃね?
479デフォルトの名無しさん:2010/06/09(水) 14:52:20
どこにオブジェクトがあって、どこになくて、どうすればあるんでしょうか?
IEでアクセスしたときにはでないのに、なんでないっていうんでしょう?
480デフォルトの名無しさん:2010/06/09(水) 14:57:14
javascriptのエラーじゃないのか?
481デフォルトの名無しさん:2010/06/09(水) 15:05:03
エラー通知の抑制だけならWebBrowserにプロパティがあるよ
482デフォルトの名無しさん:2010/06/09(水) 15:33:41
WebBrowserにプロパティがあるんじゃね?
483デフォルトの名無しさん:2010/06/09(水) 16:51:55
>>476
それでいいならいいけど
それだったら自動生成しようと思うかな
484デフォルトの名無しさん:2010/06/09(水) 18:50:13
>>481
ありがとう。見つけました。すっきり。
485デフォルトの名無しさん:2010/06/09(水) 19:00:03
C#の良い入門書を教えてください。
javascriptとperlを使っていてオブジェクト指向は理解しているつもりです。
486デフォルトの名無しさん:2010/06/09(水) 19:14:35
javascriptとPerlでオブジェクト指向とは・・・
随分頑張ったんだなw
487デフォルトの名無しさん:2010/06/09(水) 19:15:38
>>485
まあ、本より先に、C#でググったページ見ればいい気も。
488デフォルトの名無しさん:2010/06/09(水) 19:20:53
最近、大規模なJavascriptのソースで、オブジェクト指向
してないのは、見たことがないが。
489デフォルトの名無しさん:2010/06/09(水) 19:27:19
どの言語もそうだけど、どのレベルで使っていたかにはよる罠
490デフォルトの名無しさん:2010/06/09(水) 19:27:53
だけどJavaScriptで1からオブジェクト指向勉強するのは相当大変だと思うぞ
体系的な情報がほとんど無い、あっても他言語で既に解ってる人向け
491デフォルトの名無しさん:2010/06/09(水) 20:12:22
>>484
教えたおれもすっきりしたよ
492デフォルトの名無しさん:2010/06/09(水) 22:08:52
>>476
そんなこと普通やるべきじゃないのは誰が見ても明らか。
493デフォルトの名無しさん:2010/06/09(水) 22:10:18
普通はa.Equals(b)を見たらaとbのすべてのメンバが同じであることを期待するわな
494デフォルトの名無しさん:2010/06/09(水) 23:29:27
>>475
だからそれはイミュータブルである事が必須って意味にはならないでしょー
同一プロパティ時に同一の値を返すって意味
もし不変なオブジェクトしかGetHashCodeが実装出来ないとなると全ての項目がreadonlyのものしかGetHashCodeを実装出来ないになるじゃない

イミュータブルなものしか駄目っていったいどこで聞いたの?
495デフォルトの名無しさん:2010/06/09(水) 23:39:37
それは違う。字の通り、同じインスタンスに対するハッシュ値が変わってはいけないという意味。
代表例はディクショナリのキーに使うとき。ディクショナリに追加した後にキーのハッシュ値が変わると壊れる。
496デフォルトの名無しさん:2010/06/09(水) 23:43:19
流れ見てると471の言い方が悪い気がする
497デフォルトの名無しさん:2010/06/10(木) 00:14:07
必須かどうかは別として、
現在はほぼイミュータブルなものでしか実装するなってのが
一般見解ではあるけどね。

>同一プロパティ時に同一の値を返すって意味
勘違いしてる気がするなー
それじゃダメだよ一般には。
498デフォルトの名無しさん:2010/06/10(木) 00:16:32
標準クラスでもなんでもいいから、イミュータブルじゃないもので実装してる例を挙げてみたら?
499デフォルトの名無しさん:2010/06/10(木) 00:19:41
EqualsとGetHashCodeの実装に使われるメンバは不変でなければならないってことだろ
EqualsとGetHashCodeは一貫してる必要があるからハッシュの計算ではIDだけ使って
Equalsでは全てのプロパティを比較したりするのは無理だがそれでもいいなら(普通はよくないだろうけど)問題はない
似た話だけどa.Equals(b) == b.Equals(a)は嵌まったことがあるな
違反してるとものすごくわかりづらいエラーが出るんだよね
500デフォルトの名無しさん:2010/06/10(木) 00:37:11
CookieとかStringInfoとか、わずかながら残念な実装があるな。
501デフォルトの名無しさん:2010/06/10(木) 00:54:41
Equalsの方がGetHashCodeよりも細かいのは問題ないだろ
逆は駄目だが
502デフォルトの名無しさん:2010/06/10(木) 01:01:41
>>475
わざわざ(現在では正しくない)古い情報を持ち出さなくてもいいのに。現在の指針は、

> オブジェクトの Equals メソッドの戻り値を決定するオブジェクトの状態に変更がない限り、
> オブジェクトに対応する GetHashCode メソッドは常に同じハッシュ コードを返します。
> これは、アプリケーションの現在の実行にのみ該当します。アプリケーションを再実行した場合、
> 別のハッシュ コードが返される可能性があります。

つまり、Equalsの結果に関係のある状態変化があれば、GetHashCodeの戻り値が変化してもよい

>>498>>500
PointやSizeがなぜかmutableなのは有名
503デフォルトの名無しさん:2010/06/10(木) 01:07:18
>>502
ですよねー
でもそうするとDictionaryが壊れるらしい…
なぜそうなのか後学の為に聞きたいのにおすえてくれないの…
504デフォルトの名無しさん:2010/06/10(木) 01:07:36
値型はGetHashCodeの結果が変わっても困らんからな
メンバを変更可能なのは別の意味で困ったもんだが
505デフォルトの名無しさん:2010/06/10(木) 01:12:42
>>502-503
値型はimmutableにしとかないと、
var p = rect.Top;
p.X = 10;
で rect.Top.X を書き換えたつもりになってはまる開発者が意外といるからということらしい。
506デフォルトの名無しさん:2010/06/10(木) 02:00:57
ディクショナリのキーに格納したオブジェクトを変更したらどうなるか
考えるまでもあるまいに。
そういう危険があるからイミュータブルが推奨されるってことでしょ。
507デフォルトの名無しさん:2010/06/10(木) 02:08:17
例えばもしStringが変更可能だとして、
ディクショナリのキーとして格納済みの”A”という文字列を後で"B"に書き換えたら、
ディクショナリが壊れる。
それは危険だからできるだけイミュータブルにするようにしようという当たり前の話。
508デフォルトの名無しさん:2010/06/10(木) 02:13:15
その為のEqualsなんじゃないの?
509デフォルトの名無しさん:2010/06/10(木) 02:16:28
Javaはそのへん考えてあるのにC#は考えてないの?
510デフォルトの名無しさん:2010/06/10(木) 02:26:04
>>509
その辺てどの辺?
基本javaも同じなんだが。
511デフォルトの名無しさん:2010/06/10(木) 02:26:49
>>508
その為ってどの為?
何が言いたいのかわからん。
512デフォルトの名無しさん:2010/06/10(木) 02:31:21
平たく言うとDictionary使いたいならイミュータブルかどうかちゃんと調べて突っ込めってこと?
てかどれがイミュータブルかどうかMSDNに乗ってないから判別不可能じゃね?
つかそもそもKeyに参照型つっこまなければいいだけなんじゃね?
513デフォルトの名無しさん:2010/06/10(木) 02:32:44
少なくとも、格納後にキーオブジェクトを変更することは絶対に避けなければならない。
514デフォルトの名無しさん:2010/06/10(木) 02:34:30
そもそもモデルをキーにぶち込むと思ってるところがおかしいと思う
515デフォルトの名無しさん:2010/06/10(木) 02:36:07
誰に言ってんの?
516デフォルトの名無しさん:2010/06/10(木) 02:39:42
よくわからんけどPointなんかの標準クラスは糞って事が言いたいの?
517デフォルトの名無しさん:2010/06/10(木) 02:42:28
DictionaryのKeyに入れるには不適切だから糞って事でしょ。
普通はミュータブルをKeyに入れるユーザを責めるべきなのにさ。
518デフォルトの名無しさん:2010/06/10(木) 07:52:01
極端なこと言いたがるバカばっかりかね?

ちなみに今はイミュータブルにするべきだったって言ってるよ。
519デフォルトの名無しさん:2010/06/10(木) 07:53:21
そもそも構造体のキーは変更できないから問題ないし。
520デフォルトの名無しさん:2010/06/10(木) 09:05:55
Dictionaryは使う側の問題でありGetHashCode云々とはまた別だと思うんだけど
521デフォルトの名無しさん:2010/06/10(木) 13:50:03
C#の匿名型は常にイミュータブルでGetHashCodeやEqualsは自動的に実装されるけど
VBの匿名型はデフォルトでミュータブルだから明示的にKeyキーワードで
メンバを不変にしてやらないといけないらしいね
522デフォルトの名無しさん:2010/06/10(木) 17:34:52
>>521
ですよねー( ´゚д゚)(゚д゚` )ネー
523デフォルトの名無しさん:2010/06/10(木) 20:13:37
http://journal.mycom.co.jp/articles/2009/08/21/DotNetZip/index.html
上記URLを参考にDotNetZip Libraryを使ってのファイルの圧縮をしたいのですが、
ビルドして実行する際に実行ファイルと同じディレクトリに「Ionic.Zip.dll」がなければいけないのが煩わしく
組み込ませたいのですが、参照設定はどのように行うんでしょうか?
524デフォルトの名無しさん:2010/06/10(木) 20:14:59
ちいせえ事にこだわんなよアホ
525デフォルトの名無しさん:2010/06/10(木) 20:23:11
なんでそんなにdllを嫌がるんだろうね

ソースはオープンなんだから自分のプロジェクトの中にソースコード放り込め
526デフォルトの名無しさん:2010/06/10(木) 22:04:15
なんでディクショナリが壊れるの?ねえなんで?って言ってたのに
いきなり使うやつの問題論調ばっかになってるのはどういうわけだ。
527デフォルトの名無しさん:2010/06/10(木) 22:11:01
ミュータブルなのがいけないんじゃなくてキーに変更を加えるのがいけないんだから
使う側の問題といえば使う側の問題
GetHashCodeを実装したクラスをクラスライブラリでパブリックに公開するなら論外だが
内部で使うだけなら注意してればミュータブルでも問題はない
528デフォルトの名無しさん:2010/06/10(木) 22:11:55
なにを「壊れる」というのかはともかく動作が胡乱にはなるな
foreach (var key in dic.Keys)
  var x = dic[key]; // これでキーが見つからない例外が発生したり
529デフォルトの名無しさん:2010/06/10(木) 23:16:42
>>523
今時staticリンクとかないから。
dll合わせて1つのアセンブリだから。
てか、exe 1個単体配布とかせず、ちゃんとセットアップexe作って。
VS使うなら「発行」ってやるだけで作れるから。
530デフォルトの名無しさん:2010/06/10(木) 23:19:27
>dll合わせて1つのアセンブリだから
用語の意味として完全に間違ってます
531デフォルトの名無しさん:2010/06/10(木) 23:28:38
exeの単体配布ってなんであかんの?
532デフォルトの名無しさん:2010/06/10(木) 23:40:08
>>528
十分壊れてるというだろそれは。
533デフォルトの名無しさん:2010/06/11(金) 00:12:26
expressじゃ発行できないもん。
534デフォルトの名無しさん:2010/06/11(金) 00:22:57
>>531
あかんってことはないやろ
535デフォルトの名無しさん:2010/06/11(金) 01:10:16
Direct2DのHwndRenderTargetを使ってDrawText()を呼び出したんだが、速度がExtTextOut()とほとんど変わらなかった
なんで?
536デフォルトの名無しさん:2010/06/11(金) 01:37:54
>>534
せやな
537デフォルトの名無しさん:2010/06/11(金) 03:07:07
MSのアドバイザは凍結(イミュータブル)でなくてもいいといってる
GetHashCodeの実装は効率のよいばらけ方を適切に実装出来るかを問題視してる
MSDNに書いてあるのは同一の値を使用した時に同一のハッシュコードが生成されることを指している
GetHashCodeが何故ovarride可能か普通に考えればわかる事なのにDictionaryが壊れるなどというのはあまりにもずれた事
538デフォルトの名無しさん:2010/06/11(金) 07:40:16
>GetHashCodeが何故ovarride可能か普通に考えればわかる事なのにDictionaryが壊れるなどというのはあまりにもずれた事

意味が分かりません
539デフォルトの名無しさん:2010/06/11(金) 07:55:28
「Aの場合はBしなければならない」
と書かれてる。

つまりAすることに問題はない
Aするべきではないなんてあまりにもずれている。

なんでだよw
そこでそのことには触れてないだけだろうよ。
540デフォルトの名無しさん:2010/06/11(金) 08:44:25
>>531
どこに置くか迷った挙句、手動コピーでProgram Filesやらドライブ直下にコピる人もいるし。
デスクトップとかにexeが散乱したりする人もいるし。
VS使えば数クリックでセットアップの発行できるんだから、インストーラー作って欲しい。
541デフォルトの名無しさん:2010/06/11(金) 08:55:39
むしろインストーラ作られるとレジストリいじくられてそうでいや
exe単体がええ
542デフォルトの名無しさん:2010/06/11(金) 09:09:55
>>541
実際にたいしたことしてなくてもこういうイメージだよな
手軽なもの(Twitterクライアントとか)ならexe単体をzip配布が色々と安心
543デフォルトの名無しさん:2010/06/11(金) 09:23:05
>今時staticリンクとかないから。
え?マジすか?
544デフォルトの名無しさん:2010/06/11(金) 11:01:37
インストールがいらないメリット
→OSの初期化に巻き込まれない
545デフォルトの名無しさん:2010/06/11(金) 13:05:50
波形を取るマイク入力をしようとMCIを呼び出してるのだけど
WaveAudio.waveInAddBuffer
グローバル領域に確保したバッファとWAVEHDR構造体を渡す所で上手くいってないみたいなんですが
現状はバッファの確保はMarshal.AllocHGlobalで確保してIntPtrを渡す
WAVEDHDRはクラスコンストラクタでnewしてrefで渡すってやってます
たぶんWAVEHDR自体もAllocHGlobalしないといけないのかと思うのだけど
AllocHGlobalで確保した領域に構造体としてアクセスする方法が分かりません
あるいは、AllocHGlobal以外にヒープ領域に確保して安全に受け渡しする方法が
他にあるんでしょうか?
546デフォルトの名無しさん:2010/06/11(金) 13:09:57
GCHandle.AddrOfPinnedObject
547デフォルトの名無しさん:2010/06/11(金) 13:21:39
>>535
Direct2Dはよく知らないけどキャッシュされてなくて毎回フォントをレンダリングしてるとしたら
CPUがボトルネックになるだろうから変わらなくて当たり前じゃね
というかC#だったらWPF使えよ
勝手にキャッシュしてくれるぞ
548デフォルトの名無しさん:2010/06/11(金) 13:49:59
キャストとasの違いを教えてください
549デフォルトの名無しさん:2010/06/11(金) 13:53:20
普通のはキャストできない時InvalidCastExceptionが出る
asはキャストできない時nullが代入される
550デフォルトの名無しさん:2010/06/11(金) 14:03:04
参照型なら概ねASのが早いんだっけか?
551デフォルトの名無しさん:2010/06/11(金) 14:15:21
うん
552デフォルトの名無しさん:2010/06/11(金) 15:05:03
いやキャストの方が速い
ただしキャスト可能かどうか型判定したあとでキャストする場合はasが速い
553デフォルトの名無しさん:2010/06/11(金) 15:23:49
>>552
すまん言葉足りてなかったな
554デフォルトの名無しさん:2010/06/11(金) 15:25:58
>>545
GCHandleType.PinnedなGCハンドルを割り当てて固定すれば
マネージヒープ渡しても問題ないよ
MarshalクラスのStructureToPtrとPtrToStructureを使うかポインタを使えば
一応メモリ領域に構造体としてアクセスすることはできる
Marshal使ったからってポインタより安全というわけでは全くないので
ややこしいことするんだったらポインタ使っていいと思う
555デフォルトの名無しさん:2010/06/11(金) 17:17:17
C#ってクック本の次は何を読めばいいの?
こんな感じのサンプルが付いてるC#の本がよみたい(´・ω・`)
556デフォルトの名無しさん:2010/06/11(金) 17:21:09
マンガでも読んでろ
557デフォルトの名無しさん:2010/06/11(金) 17:54:38
>>547
なるほど、WPFはいろいろな事情で使えないので、自前でキャッシュしてみるわ
558デフォルトの名無しさん:2010/06/11(金) 17:58:21
http://ideone.com/1POzC

WinFormsのコンストラクターでDirect2DとDirectWriteを初期化すると落ちるんだが、なんで?
559デフォルトの名無しさん:2010/06/11(金) 19:23:23
>>558
コードを見もせずに断言するが、コンストラクタではまだウィンドウが生成されてないから
ウィンドウハンドルが使えないんだろう。
OnHandleCreatedをオーバーライドして、そっちで初期化しる。
560デフォルトの名無しさん:2010/06/11(金) 19:47:03
>>559
トンクス
そこでやったら、うまくいった
561デフォルトの名無しさん:2010/06/11(金) 19:56:04
>>556
漫画オタクはどっかいけ
562デフォルトの名無しさん:2010/06/11(金) 19:59:37
お前ら冷たい奴ばっかだな
カワイイ女の子の可能性だってあるんだ
もっと夢を持とうぜ夢をよぉ!!
563デフォルトの名無しさん:2010/06/11(金) 20:25:35
(´・ω・`) …
564デフォルトの名無しさん:2010/06/11(金) 20:35:45
>>554
ありがとう、その方法でとりあえずデータが来るところまではやれたんだけど
MM_DATAでLPARAMにWAVEHDRのポインタが入ってくるんだけど
このLPARAMをMarshal.PtrToStructureでWAVEHDRに戻すと全部0なんだけど
直接戻したらまずいのかな?
565564:2010/06/11(金) 20:45:56
具体的な流れ
GCHandle.Allocでpin止めして
AddrOfPinnedをwinmm.dllに渡す
データ取得をを開始
WndProcにMM_DATAが来る
LPARAMをWAVEHDRにPtrToStructureで戻す
構造体の中身が全部0
アプリケーション終了時にGCHandle.Freeをする
566564:2010/06/11(金) 21:38:45
自己解決
値の設定はAddrOfPinnedObjectにStructureToPtrで
直接書かないといけなかったみたい
だから最初から空だっただけでした
567デフォルトの名無しさん:2010/06/11(金) 22:40:51
>>548 >>549
キャストとasの違いだけど、asはユーザー定義の型変換は無視する(nullが返る)って違いもある
568デフォルトの名無しさん:2010/06/11(金) 22:47:52
基底クラスや派生クラスへの型変換はオーバーロードできないからその言い方はちょっと語弊がある
キャストはユーザー定義の型変換を呼び出すのにも使われるけどasが使える状況においては違いはない
569デフォルトの名無しさん:2010/06/11(金) 23:29:00
http://ideone.com/iUk57
DrawTextで描くために文字列の幅を求めたんだが、10000万回ぐらいDrawTextとこの関数の実行を繰り返したら、ものすごく重かった
原因はなんだろうと思い、プロファイラーで調べたら、この関数が実行時間の半分を占めていた
これよりももっと早く測定する方法はない?
570デフォルトの名無しさん:2010/06/11(金) 23:34:30
どうせキャッシュするんだろ? どうでもいいじゃん
自分で計算したらそりゃ速いだろうけど何のためにDirect2D使ってるのかわからなくなるだろ
571デフォルトの名無しさん:2010/06/11(金) 23:34:42
なんでこんな珍妙な求め方を
572デフォルトの名無しさん:2010/06/11(金) 23:36:13
ふつうにMeasureStringとかそのへんじゃだめなんだろうか・・・・
573デフォルトの名無しさん:2010/06/11(金) 23:37:56
Direct2D使ってるんだからDirect2D使って求めないとおかしいだろ
WPFだって低レベルな文字レイアウトのAPI似たような感じだよ
キャッシュするんだから少々遅かろうがどうでもいい
574デフォルトの名無しさん:2010/06/11(金) 23:41:13
とギャーこら言う割には普通に自分でDisposeしちょる
575デフォルトの名無しさん:2010/06/11(金) 23:48:06
高度なレイアウトなどより速さだけを重視するならそもそも無理にDirect2D使う必要なくね?
System.DrawingなりWin32APIなりで測って描画してDirect2Dのサーフェスにコピーすれば?
576デフォルトの名無しさん:2010/06/11(金) 23:49:50
>Direct2D使ってるんだからDirect2D使って求めないとおかしいだろ
この一言に尽きる気がする
577デフォルトの名無しさん:2010/06/11(金) 23:54:28
GDIでサイズ測ってDirect2Dでレイアウトしたら明らかにおかしいけど
レイアウトもレンダリングもGDIでやってDirect2Dにコピーするなら当然GDIでサイズ測るだろ
578デフォルトの名無しさん:2010/06/11(金) 23:57:09
きっと・・・きっと・・・賢い>>569には明確な理由があってそうしているのです
間違っても
>Direct2D使ってるんだからDirect2D使って求めないとおかしいだろ
なんて固定観念だけでやっているわけではないはずなんです!!
579デフォルトの名無しさん:2010/06/12(土) 00:00:55
>Direct2D使ってるんだからDirect2D使って求めないとおかしいだろ
いやこれは正しい
他の方法で測定したらDirect2Dによる描画結果と一致しないかもしれない
580デフォルトの名無しさん:2010/06/12(土) 00:05:17
どうでもいいよ
581デフォルトの名無しさん:2010/06/12(土) 00:12:53
string[] files = Directory.GetFiles(Directory.GetCurrentDirectory());
foreach (string a in files)
{
if (new FileInfo(a).Length.Equals(0))
{ File.Delete(a); }
}

現在のフォルダからサイズが0バイトのファイルを全部削除したいんですが、
上記のようにやるとファイルがアクセス中で削除出来ないと言われます。
どうすればいいんでしょうか?
582デフォルトの名無しさん:2010/06/12(土) 00:22:28
いや・・・普通に消えると思うんだけど?
それはどっかが使ってるからじゃないのか?
583581:2010/06/12(土) 00:33:25
>>582
レスありがとうです
原因は同一アプリからFile.Createで生成したファイルだからだったみたいです
情報不足ですみません
File.CreateのあとにClose()を追加することで解決しました
584デフォルトの名無しさん:2010/06/12(土) 00:46:24
using 使えよ
585デフォルトの名無しさん:2010/06/12(土) 02:19:49
え?
586デフォルトの名無しさん:2010/06/12(土) 08:28:06
>>571
APICodePack付属のドキュメントを見たんだが、これ以外に求められる方法がなかった

>>573
すまん
キャッシュする方法を探してみたんだが、よくわからん
ヒントだけでも教えてくれないか

>>578
いや、単純にそれだけだ
587デフォルトの名無しさん:2010/06/12(土) 10:48:18
>>433
遅レスだが、varによるローカル変数の定義が使えないのは
C# 2.0であって.NET 2.0ではない。
C# 3.0以降(Visual Studio 2008)以降なら.NET 2.0対象のプロジェクトでも使えない。
588デフォルトの名無しさん:2010/06/12(土) 11:41:16
>C# 3.0以降(Visual Studio 2008)以降なら.NET 2.0対象のプロジェクトでも使えない。
C# 3.0以降(Visual Studio 2008)以降なら.NET 2.0対象のプロジェクトでも使える。

でした。
いっぺん氏んでくる……orz
589デフォルトの名無しさん:2010/06/12(土) 13:53:59
>>586
バッファにあらかじめ描いとくだけ
その前に、APICodePackで使えるのかは知らんがDrawTextよりも
DrawTextLayoutの方が効率的だとMSDNに書いてあるから試してみたら
それよりスレ違いだからC++覚えてDirectXの専用スレで聞くべき
どのみちC++わかんないとサンプルもロクに無くて厳しいでしょ
590デフォルトの名無しさん:2010/06/12(土) 14:35:01
>>589
あーなるほど
その方法か
スレを汚してすまんかった
591デフォルトの名無しさん:2010/06/12(土) 16:48:23
許さん!
592デフォルトの名無しさん:2010/06/12(土) 20:50:05
(´・ω・`)み〜んみんみんみん
593デフォルトの名無しさん:2010/06/13(日) 00:15:59
つくつくほーしつくつくほしー
594デフォルトの名無しさん:2010/06/13(日) 02:59:15
最近VBからC#に乗り換えてみたのですが、ググる時に「c#」が使えないのが痛いですね・・・
「cs」だと関係無いのばっかり出てきますし
もっぱら「.net」や「vb」で調べてますが、みなさんどうしてます?
595デフォルトの名無しさん:2010/06/13(日) 03:13:49
普通に「C#」でヒットするけど。
596デフォルトの名無しさん:2010/06/13(日) 03:20:33
むしろ今時C#を検索できないとこが存在するのか?
597デフォルトの名無しさん:2010/06/13(日) 03:24:36
サジェストだと、Yahooは「C#」ってそのままの候補が並ぶけど、
Googleだと「#」が抜けて「C」の候補が並ぶね。
そのまま検索すれば、「C#」の検索内容がリストされるけど。
598デフォルトの名無しさん:2010/06/13(日) 07:26:39
C#って入れてるけど検索できるよ
コピペで作ってるわけじゃないし、参考になるのがあればいいだけだし
599デフォルトの名無しさん:2010/06/13(日) 10:09:34
C#で検索できない男の人って。。。
600デフォルトの名無しさん:2010/06/13(日) 10:18:52
Googleって一般に記号は検索できないし、C#やC++が特別扱いって気がするんだが
601デフォルトの名無しさん:2010/06/13(日) 10:23:04
だろうけど試してみりゃあ分かるじゃん
602デフォルトの名無しさん:2010/06/13(日) 10:26:36
http://ja.lmgtfy.com/?q=C%23 このサイトFLASHが必要。
603デフォルトの名無しさん:2010/06/13(日) 10:27:23
昔は#通らなかった気がする。
#が早い時期に通るようになったのはC#の影響もあると思う
604デフォルトの名無しさん:2010/06/13(日) 10:31:32
よかったな長生き(ry
605デフォルトの名無しさん:2010/06/13(日) 10:53:59
>>600
多分そう。
まあ、でも、せっかく特別扱いしてもらってるわけだし、検索しようぜ。
606デフォルトの名無しさん:2010/06/13(日) 10:54:08
597はC#って入れてもサジェストの候補に#がつかないから
候補から選ぶと#をもう一度入れ直さないといけないって話だろ
確かにちょっとしたことだけど面倒くさい
607デフォルトの名無しさん:2010/06/13(日) 12:29:46
サジェストの話してるのは>>597だけだと思うんだが
608デフォルトの名無しさん:2010/06/13(日) 13:00:33
「.NETのクラスライブラリ設計」て本読んでみな。
値型はimmutableであるべき
参照型でGetHashCodeとEqualsをオーバーライドする場合はimmutableであるべき
みんな書いてあるから。
もちろん必須ではないけど、間違いなくそうするべきといわれてる。
609デフォルトの名無しさん:2010/06/13(日) 13:16:01
ふと思ったんだけどイミュータブルなクラスってビルダーパターン使うの?
コンストラクタに引数がゾロゾロあるのは汚いよね?
610デフォルトの名無しさん:2010/06/13(日) 13:25:22
>>609
いや、immutable なクラス作るときは普通にコンストラクターにゾロゾロ書くね。

ただし、同じく「.NET のクラスライブラリ設計」曰く、
やっぱ引数多いコンストラクターはユーザビリティ下げるけど。
611デフォルトの名無しさん:2010/06/13(日) 13:27:40
>>605
検索して
612デフォルトの名無しさん:2010/06/13(日) 13:36:08
>>608
その本は.NETを組み上げた時のルールが主
使う側の事は考えられていない
例えばWPFやSilverlight等のモデルはINotifyPropertyChanged等の実装を行う
つまり実装すればImmutableなクラスにならない
ではImmutableでは無いのでEquals等を実装してはいけないのかというとそれは否
必ずModelとなるクラスには不変だろうがそうで無かろうがEqualsとGetHashCodeは実装する

WPFやSilverlightの世に出てるサンプルを見れば一目瞭然
ImmutableなクラスでもEqualsとGetHashCodeは実装されている
この事にいちゃもんを付けるのであればそれはWPFやSilverlight等の技術全般に文句を言ってるも同義

>>609
エッセンシャル系の本を見るとコンストラクタの引数が沢山あったり順序が不変なものは使えとある
Immutableなクラスを作る時は実際そうすべきだと思うよ
613デフォルトの名無しさん:2010/06/13(日) 14:31:25
コンストラクタにbool型の引数が出てきたら、「これはそろそろヤバいな」って思う。
614デフォルトの名無しさん:2010/06/13(日) 15:04:02
はあ?
615デフォルトの名無しさん:2010/06/13(日) 15:20:33
C#でパスワードを入力して貰ってそれをStringでメモリ上に保持してたら
メモリ直接読み込みでばれる?
メモリを盗聴されるのを防ぐ方法ってあるかな?
616デフォルトの名無しさん:2010/06/13(日) 15:31:33
自己解決SecureStringってのもが用意してあった
617デフォルトの名無しさん:2010/06/13(日) 16:02:41
SecureString があってもそこから String を取りだしたら
いつ解放されるか分からないしあんまり意味ない
618デフォルトの名無しさん:2010/06/13(日) 16:21:20
System.Stringには変換できないから大丈夫。まあ、

SecureString ss ....

IntPtr p = Marshal.SecureStringToGlobalAllocUnicode(ss);
string s = Marshal.Marshal.PtrToStringUni(p);

とかやれば変換はできちゃうんだけど、基本的にはアンマネージ関数で処理するためのもの。
619デフォルトの名無しさん:2010/06/13(日) 17:08:21
WinFormの場合ユーザの入力をSecureStringで扱えないからどうしようもないような
WPFならPasswordBox使えば直接SecureStringで受け取れるけど
620デフォルトの名無しさん:2010/06/13(日) 17:38:10
そもそも、アルゴリズムも公開されてないものを信用していいのかっていう問題が。
621デフォルトの名無しさん:2010/06/13(日) 17:51:22
メモリ盗聴ってそんなの初めて聞いたよw

正直被害妄想にしか思えんけど、仮に純粋に可能性の話をしているとしても、
というか、だったらなおさら、「メモリ盗聴」なんてものをされてるような状況下なら
どんな対策したところで安心材料にならんのじゃないのか
622デフォルトの名無しさん:2010/06/13(日) 18:08:10
>>621
俺も「メモリ盗聴」なんて表現は初めて見た。
実際にプロセスメモリを自由に見られる状況なら、暗号化や復号化のロジックまで丸見え
なんだから、小手先の暗号化なんかしてもしょうがない。
問題は、残しちゃまずいデータがページファイルに残っちゃったりすることなんだよね。
623デフォルトの名無しさん:2010/06/13(日) 18:30:43
ReadProcessMemoryとかだな。ネトゲのチートで多用されていて、
やり方を聞くとチート野郎と罵られる。
624デフォルトの名無しさん:2010/06/13(日) 18:32:41
まあ実行ユーザーが同じなんだから権限としては見えてもしょうがないわな
625デフォルトの名無しさん:2010/06/13(日) 18:34:58
ReadProcessMemoryついて詳しく教えてください
626デフォルトの名無しさん:2010/06/13(日) 18:48:33
チート野郎
627デフォルトの名無しさん:2010/06/13(日) 18:54:19
Zero page thread の優先順位を上げる方法ってないの?
628デフォルトの名無しさん:2010/06/13(日) 19:04:04
\Device\PhysicalMemory をユーザーモードで読めた時代もあったね。
629デフォルトの名無しさん:2010/06/13(日) 19:11:45
>>622
>>実際にプロセスメモリを自由に見られる状況なら
これを出来なくするのがSecureStringじゃないの?w
630デフォルトの名無しさん:2010/06/13(日) 19:13:27
>>617
A=null;みたいに明示的に解放すればいいんじゃないの?
631デフォルトの名無しさん:2010/06/13(日) 19:18:32
GCが動くまではインスタンスは残り続ける
GCが動いたってメモリの内容まで破壊される訳じゃない
632デフォルトの名無しさん:2010/06/13(日) 19:24:01
まず前提として、Windowsでは(Unixでもだけど)同じユーザのプロセスメモリは
OSの機能で正当に自由に読み書きできる。
なので、パスワードなどを扱うときは、なるべくメモリ上に存在する時間を短くし、
読み取りにくくするべきだと言われている。(それだって文字列がメモリ上に存在する
瞬間に読み取られたら意味がないんだけど)
CやC++なら、文字列を上書きすることもできるし、確保したメモリを任意のタイミングで
明示的に解放することもできる(解放しても内容は消えないから、上書きしてから解放する)
んだけど、.NETのStringではその方法がない。
なぜなら、一度生成したStringのインスタンスは書き換え不可能だし、>>630のように
参照できなくしてもガベージコレクタが動くまでインスタンス自体は残り続けるし、
インスタンスが削除されても、そのインスタンスが使っていたメモリが再利用可能になるだけで、
その内容までは消えないから。
633デフォルトの名無しさん:2010/06/13(日) 19:59:05
windowsフォームで
form1.cs、form2.csに分かれたときにform2でform1で作ったメソッドを使いたいときにどう使えばいいのかわかりません。
634デフォルトの名無しさん:2010/06/13(日) 20:01:32
publicにしてForm2のコンストラクタにForm1のインスタンス渡しとけばいいだろ
635デフォルトの名無しさん:2010/06/13(日) 20:30:08
いやな感じだな。
636デフォルトの名無しさん:2010/06/13(日) 20:59:15
じゃあデリゲートでも勝手に使ってろ
637デフォルトの名無しさん:2010/06/13(日) 20:59:35
別にクラスを作ってそっちにメソッドを移せ。
638デフォルトの名無しさん:2010/06/13(日) 21:10:36
form1のオブジェクトを操作したいんです
639デフォルトの名無しさん:2010/06/13(日) 21:14:00
634に戻る
640デフォルトの名無しさん:2010/06/13(日) 21:23:34
ワラタ
641デフォルトの名無しさん:2010/06/14(月) 00:46:18
さむい
642デフォルトの名無しさん:2010/06/14(月) 10:19:00
設計から見直せよ
643デフォルトの名無しさん:2010/06/14(月) 13:32:15
もう一度小学校に通った方がいい
644デフォルトの名無しさん:2010/06/14(月) 13:42:28
質問させてください。

USBカメラからの静止画だけをキャプチャしたいのですが、どのようにしたらよいのでしょうか。

動画をキャプチャすることを前提に静止画をキャプチャするサンプルはいくつかあったのですが、
これだと動画をキャプチャしている間はなぜかKeyDownイベントがフォームで受け取れず、KeyDown
で一度ブレークポイントをはって止めると、そのあとはKeyDownが効くようになってしまいました。

どのみち動画は不要なので、静止画だけをキャプチャする方法が知りたいです。

よろしくお願いします。
645デフォルトの名無しさん:2010/06/14(月) 13:48:51
ほんっと 毎度毎度だな
646デフォルトの名無しさん:2010/06/14(月) 14:16:50
まーいどまいどのまいどあり!
647644:2010/06/14(月) 15:17:32
すいません、なにか問題あったでしょうか?
648デフォルトの名無しさん:2010/06/14(月) 16:01:28
主題はUSBカメラから静止画をキャプチャしたい!ってことで
C#は直接関係ないな
649デフォルトの名無しさん:2010/06/14(月) 16:43:11
うん
650644:2010/06/14(月) 16:50:28
>>648
たしかにそうですね…
VB.NETのスレッドはみつけれるのですが、.NET全般のスレってあるでしょうか?
651デフォルトの名無しさん:2010/06/14(月) 16:54:11
そもそもキーが効かない原因を調べたりしないのか
652デフォルトの名無しさん:2010/06/14(月) 17:00:11
USBカメラを使った事ないんだけど民生機のそういうデバイスってSDK提供されてるん?
653デフォルトの名無しさん:2010/06/14(月) 17:01:50
.NETの話題ですらない
やり方によるが大体DirectShowじゃないのか?
654デフォルトの名無しさん:2010/06/14(月) 17:19:56
C#からだとDirectShow.NETとかOpenCVのラッパーでいける
655644:2010/06/14(月) 17:20:09
>>651
業務なので今不必要な問題は後回しにします。

>>653
なるほど、そうですね。
そっちのスレに投稿してみます。
ありがとうございました。
656デフォルトの名無しさん:2010/06/14(月) 17:24:19
業務なので・・・
657デフォルトの名無しさん:2010/06/14(月) 17:25:43
ちょっと待てw
658デフォルトの名無しさん:2010/06/14(月) 17:25:57
業務なら有料のとこで聞けば?
659デフォルトの名無しさん:2010/06/14(月) 17:29:21
業務なら俺を雇えばいいよ
660デフォルトの名無しさん:2010/06/14(月) 17:31:44
業務かよ!
こんなのに業務させるなら
ニートの俺にやらせろよ
職安いっても誰もやとってくんねーよコンチクショ
661デフォルトの名無しさん:2010/06/14(月) 17:31:53
この空白期間は何をされてたんですか?
662デフォルトの名無しさん:2010/06/14(月) 17:41:13
プログラミングの勉強ばかりしてた

663デフォルトの名無しさん:2010/06/14(月) 17:43:11
664デフォルトの名無しさん:2010/06/14(月) 18:07:46
不必要な問題なのに質問に書くのはどうなんだw
665デフォルトの名無しさん:2010/06/14(月) 18:25:32
>>655
みたいなやつがPGやってるような会社おわってんなwwww
いや、結構多いと思うが・・・

キッチリしらべて作らないと後々ひどいことになることも多いと思うんだが
666デフォルトの名無しさん:2010/06/14(月) 18:37:16
このレベルの人がPGじゃなくてSE扱いだったりする
667デフォルトの名無しさん:2010/06/14(月) 19:02:15
>>666
たしかにそうですね…
668デフォルトの名無しさん:2010/06/14(月) 20:26:06
そもそもその関係ないと思っている場所が大問題だったりすることもしょっちゅうあるんだが
669デフォルトの名無しさん:2010/06/15(火) 10:05:54
今回の場合どう考えても大ありだろ
効かなくなるのが仕様なのかどうなのかを検討しないとFWのバージョン変わったりパッチ当てたら動作変わるとか普通にありえる
670デフォルトの名無しさん:2010/06/15(火) 10:42:36
それは見方によるのでは?
「あぁ、バージョンアップで使えなくなったようです。修正には追加料金がかかりますがどうしますか?」と商売するわけさ
671デフォルトの名無しさん:2010/06/15(火) 11:46:30
ロクに原因調べもせずに取りあえず動けばいいや で逃げに走ってるんだねぇ
納期近いかもしれないけど俺は下請けでも使いたくねぇな
672デフォルトの名無しさん:2010/06/15(火) 12:04:01
派遣だけど色んな会社に出入りしてきた
会社の規模に関係なく動けばいい、納期第一ってところは少なくない
>>671の下請けもたぶん… 気付いてないだけじゃない?
673デフォルトの名無しさん:2010/06/15(火) 12:54:00
>>672
いや、それは判ってるつもりなんだ
明らかに納期が近くて問題発生した場合は仕方ないんだと思ってる。
自身もそうなってしまうし

ただ、あの文章的に こまけぇこたぁいんだよ 的なのが気に食わなかっただけ

自分ならそこは後で調べることにして、動作することを目的として ってかんじで聞くかな?
あの質問内容だとなぜ発生しなくなるかを調べて解決すれば終わりじゃん となりそうでさ
自分の週間の問題だとは思うんだけど

スレ違い甚だしいのでこれにて消えます。
674デフォルトの名無しさん:2010/06/15(火) 14:24:44
うむ。消えてよいぞ。
675デフォルトの名無しさん:2010/06/16(水) 04:34:38
ソースが丸見えなc#ですが
容易に特定できない秘密鍵(共有鍵)の埋め込み方法ってあるもんですかね?
676デフォルトの名無しさん:2010/06/16(水) 05:12:26
いい方法思いついたニヤニヤ
677デフォルトの名無しさん:2010/06/16(水) 07:41:45
容易ってどの程度?
678デフォルトの名無しさん:2010/06/16(水) 08:25:08
容易とか困難とかいう以前に、秘密鍵をコードに埋め込んじゃダメだろ。
679デフォルトの名無しさん:2010/06/16(水) 09:02:05
パスワードとかだったらハッシュコードを埋め込むという手もあるぞ
鍵は無理だが・・・
680デフォルトの名無しさん:2010/06/16(水) 10:09:47
意味ねえニヤニヤ
681デフォルトの名無しさん:2010/06/16(水) 12:28:57
>>678
「データ」「タバコ」「イクラ」などカタカナ言葉の日本語を原語のアクセントで読むのは間違い。
これらを間違えて読んでいると日本人である事を疑われるので気を付けるように。
682デフォルトの名無しさん:2010/06/16(水) 12:32:16
データは両方のアクセントがあるだろ。
683デフォルトの名無しさん:2010/06/16(水) 12:33:52
ニヤニヤ
684デフォルトの名無しさん:2010/06/16(水) 12:58:30
>>681 みたいなレスをすると日本人である事を疑われるので気を付けるように。
685デフォルトの名無しさん:2010/06/16(水) 13:40:45
.NETFrameworkでサポートされている、
ファイル、フォルダ用のメソッドSystem.IO.File.Copy メソッドなど
は、再入可能なんでしたっけ?今まで考えずに使ってましたが、同時並行して
いくつか使った場合でも動作OK??またはスレッドを別にして実行する必要あり?
686デフォルトの名無しさん:2010/06/16(水) 15:52:33
うん
687デフォルトの名無しさん:2010/06/16(水) 17:06:01
デバッグ時に指定した例外をハンドリングしないようにするにはどうすればいいのん?
プロフェッショナルの皆さん、おすえて!
688デフォルトの名無しさん:2010/06/16(水) 17:44:02
メニュー→デバッグ→例外→追加→ハンドリングしたくない例外名入力
689デフォルトの名無しさん:2010/06/16(水) 17:44:59
システムに元からある例外なら追加はいらなかった
690デフォルトの名無しさん:2010/06/16(水) 19:17:31
SQLサーバーのDBにimage型で保存したjpgデータを、c:\test.jpg のようにファイル形式に落とす方法はありますか?
691デフォルトの名無しさん:2010/06/16(水) 20:03:38
はい
692デフォルトの名無しさん:2010/06/16(水) 20:25:51
>>688
あんがと〜〜〜
693デフォルトの名無しさん:2010/06/16(水) 20:29:11
>>692
どういたしまして
694デフォルトの名無しさん:2010/06/16(水) 21:43:44
2G超えの巨大ファイルを使うにはどうすれば?
695デフォルトの名無しさん:2010/06/16(水) 21:52:54
使うって何?
696デフォルトの名無しさん:2010/06/16(水) 21:57:10
読み書き
697デフォルトの名無しさん:2010/06/16(水) 22:03:51
読み書きは普通にできるだろ。
698デフォルトの名無しさん:2010/06/16(水) 22:29:41
メモリが足りないとか
699デフォルトの名無しさん:2010/06/16(水) 22:40:52
足りないの?
700デフォルトの名無しさん:2010/06/16(水) 22:49:43
まあつまり
何が死体の?
ってことなんだけどさ
701デフォルトの名無しさん:2010/06/16(水) 22:51:05
64bit化してメモリマップトファイルを使う。
702デフォルトの名無しさん:2010/06/16(水) 23:03:50
ふう〜すっきり
703デフォルトの名無しさん:2010/06/17(木) 19:39:31
>>675
こういうツールを使えばできる
http://dotnetfan.org/blogs/dotnetfanblog/articles/604.aspx
web.configの暗号化
http://dotnetfan.org/blogs/dotnetfanblog/archive/2006/08/17/809.aspx
App.Config内の接続文字列を暗号化する
704デフォルトの名無しさん:2010/06/17(木) 21:00:39
>>675の多分やりたいことには全く使えんけどな。
705デフォルトの名無しさん:2010/06/17(木) 21:04:08
なぜASP.NETなの?
706デフォルトの名無しさん:2010/06/17(木) 22:52:29
クライアントに渡すんじゃさすがに防御しようがないから、お茶を濁している
707デフォルトの名無しさん:2010/06/17(木) 22:54:30
へえ
708デフォルトの名無しさん:2010/06/18(金) 00:31:54
暗号化して防げるなら今みたいに市販のソフトの大半がクラックされてないよな。
結局ローカルで動くソフトは諦めるしかない。
709デフォルトの名無しさん:2010/06/18(金) 10:00:47
+= new でイベントを割り付けた場合は、破棄する前とか new でインスタンスを作り直す場合は
-= newでイベント解除をする必要があるのでしょうか?

たとえば、 TextBoxを格納するオブジェクト変数 testTextに += newでClickイベントを割り付けた場合には
testTextをdisposeする前には -= newをする必要があるのでしょうか。
(同様にdisposeではなくて、そのオブジェクト変数testTextに改めて new でインスタンスを作成する場合の場合はどうでしょう?)

デザイナが自動的に作成したコードには -= newがないので問題ないように思えるのですが、MSDNの
イベントサブスクリプションとサブスクリプションの解除には
「サブスクライバー オブジェクトを破棄する前にイベント サブスクリプションを解除する必要があります。」
という記述があるので、そのところがよくわからなくなっています。

ttp://msdn.microsoft.com/ja-jp/library/ms366768.aspx

710デフォルトの名無しさん:2010/06/18(金) 10:07:34
>そのオブジェクト変数testTextに改めて new でインスタンスを作成する場合の場合はどうでしょう?
あんまオブジェクトとかインスタンスが理解できてないように思えるんだが… 
711デフォルトの名無しさん:2010/06/18(金) 11:29:04
>>709
イベントを提供するオブジェクトがGCされればイベントは自動的に解除される。
提供側のオブジェクトが提供を受ける側のオブジェクトよりライフサイクルが短いか、
同じならばGC任せで放置してよい。
Windows Formの場合はこのケースに当たる。

逆に提供側のオブジェクトのライフサイクルが長いかイベントが静的な場合は、
-= で解除しなくてはならない。
712デフォルトの名無しさん:2010/06/18(金) 11:33:30
>>711
スゲー! そんな細かいところまでGCが面倒見てくれるのか。
イベントハンドラの登録解除は明示的に切り替えたい場合(反応する、しないを動的に切り替える)を除いて
あまり真面目に考えてなかったけど、
登録解除も自動でやってくれてたのか。

ますますC#と.NETが好きになるな。
713デフォルトの名無しさん:2010/06/18(金) 11:41:25
イベント登録って言っても.NETの場合、結局は参照握ってるだけだからね。
普通のオブジェクトの参照関係と一緒。
714デフォルトの名無しさん:2010/06/18(金) 11:47:43
通常の参照握ってて開放されるもんなのか?
弱参照じゃあないのか?

WPFは弱参照イベントみたいのあった気がする
715デフォルトの名無しさん:2010/06/18(金) 11:52:06
>提供側のオブジェクトのライフサイクルが長い
場合が弱参照イベントパターン。
716709:2010/06/18(金) 12:14:21
>>710
すいません、わかりづらい説明で。
(あとイベントとオブジェクトも理解してないかもしれませんが)

TextBox tb = new TextBox(); <---- (1)
tb.Click += new EventHandler(tb_Click);

<何かの処理>

tb = new TextBox(); <--- (2)

この場合、 (1)で作られたオブジェクトインスタンスと(2)で作られた
オブジェクトインスタンスはメモリ上では別物なんですけど。
(2)のインスタンスが作成された段階で(1)のインスタンスは参照されなくなるので
その場合に-= newをしないと(1)のインスタンスはメモリ上から排除されないのかと
思ったものですから・・・。



717デフォルトの名無しさん:2010/06/18(金) 12:28:12
>>714
PythonとかC++やりすぎじゃない?
CopyingとかMark & SweepなGCだと循環参照あってもちゃんと解放されるよ。

.NET Micro Frameworkみたいな組み込みでメモリ不足しがちな物ならともかく、
デスクトップの.NETでは弱参照まず使わない。
.NETで弱参照使うのは、かなり巨大なでまれにしか使わない一時オブジェクトを、
可能なら確保しっぱなし、ダメなら確保しなおしって方針で持っときたいときくらい。
718デフォルトの名無しさん:2010/06/18(金) 12:30:14
>>716
tb_Click を (1)以外が握っていない場合、
(1)がGC対象になった時点でtb_ClickもGC対象。

(1)の寿命とtb_Clickの寿命が一緒でいいなら、別に -= 要らない。

(1)生かしたままtb_Clickだけ抜くときに -= 使う。
719デフォルトの名無しさん:2010/06/18(金) 12:32:01
Action Script とかで必ずイベントの remove が必要なのは、
シングルスレッドでしか動いてないせいで、
非同期処理するときに、オブジェクトをシステム側で static に握っとかないといけないから。

C#/.NET でいうと、static なイベントに対する add してるようなもの。
static で、オブジェクトの寿命みたいなのがないんで、
必ず remove してやらないとメモリリークになる。
720デフォルトの名無しさん:2010/06/18(金) 12:35:04
あと、Pythonなんかは昔は参照カウント方式しか持ってなかったみたいなんで、
イベントの remove しないと循環参照になってメモリリーク。

最近のPythonは基本的に参照カウントで、
一定間隔でMark & Sweepか何か走らせるみたいなんで、
そこまで気にする必要ないはず。
721709:2010/06/18(金) 12:37:17
>>711
説明ありがとうございます。

提供側が生きていて、提供を受ける側のみDisposeした場合に
ガベージにいてもイベントが発生してしまうということが起こるわけですね。
そういう場合は、明示的にイベントの解除が必要でると。

>>718
なるほど、どこからも参照されなくなったならば、GCがオブジェクトを
削除してくれるんですね。

みなさんありがとうございました。
前々から疑問に思っていたことがようやく解決できました。
722デフォルトの名無しさん:2010/06/18(金) 12:38:12
サブジェクトとリスナ(オブザーバ)って言ってくれよ
どっちがどっちだか分からんようになる
723デフォルトの名無しさん:2010/06/18(金) 12:41:42
パブリッシャとサブスクライバで
724デフォルトの名無しさん:2010/06/18(金) 12:45:16
>>723
パブリッシャ(発行者)がイベントを発生させる側で、サブスクライバ(購読者)が
イベントを受ける側?
725デフォルトの名無しさん:2010/06/18(金) 17:16:52
>>709
例えばフォームのボタンをクリックしたなどのイベントは、フォームが閉じた後、すなわちDisposeされるとき
GCによって破棄されるので -= で解除する必要は無い。

但しstaticメンバーやフォームとは別の箇所など破棄されないオブジェクトに対してイベントを割り当てた場合、
-=で明示的に解除する必要がある。
そうしないと イベントハンドラが破棄されたオブジェクトに対してイベントを実行しようとして例外を発生することがある。

726デフォルトの名無しさん:2010/06/18(金) 18:10:36
>>725
イベントハンドラが破棄されたオブジェクトに対してイベントを実行しようとして例外を発生することがあるね
727デフォルトの名無しさん:2010/06/18(金) 18:51:12
これ見てよ↓
http://livedoor.blogimg.jp/tekepo/imgs/3/4/3414dfca.jpg
ばらまこうぜ!
728デフォルトの名無しさん:2010/06/18(金) 21:20:31
>>725
ありがとうございます。
よく分かりました。実際、破棄されたと思ったオブジェクトでイベントが発生して
NullPointReferenceを出したことがあります。
729デフォルトの名無しさん:2010/06/18(金) 21:45:59
ぬるぽ
730デフォルトの名無しさん:2010/06/18(金) 22:30:29
ガッ
731デフォルトの名無しさん:2010/06/18(金) 23:36:39
ビオレママになろう、弱参照ビオレ
732デフォルトの名無しさん:2010/06/19(土) 00:01:22
たまにファイナライザで-=してるアホなコードを見かける
733デフォルトの名無しさん:2010/06/19(土) 04:07:18
VisualC#2008では参照出来るDirectSoundが2010では参照できなくて困っています
どうすれば参照できるのでしょうか?
734デフォルトの名無しさん:2010/06/19(土) 08:07:26
>>733
ターゲットでフィルターかけられてるから一旦バージョンを下げれば出来るだろ
あとはapp.config
http://msdn.microsoft.com/ja-jp/library/bbx34a2h.aspx

735デフォルトの名無しさん:2010/06/19(土) 10:06:41
WM向け開発。
画面を回転させる処理のためには

using Microsoft.WindowsCE.Form;

としてSystemSetting.ScreenOrientation 云々と行わなければならないというのですが、
Microsoft.WindowsCE.Formというのが存在しないようなのですが、どうすれば良いですか。
736デフォルトの名無しさん:2010/06/19(土) 10:55:20
microsoft.windowsce.forms.dll を参照設定すればいいんじゃね?
737デフォルトの名無しさん:2010/06/19(土) 11:12:52
有難うございます。
738デフォルトの名無しさん:2010/06/19(土) 11:44:24
>>734
レスありがとうございます
ググったら同じ症状の人が見つかったのでその人と同じapp.configを作成したのですがダメだったので諦めます
739デフォルトの名無しさん:2010/06/19(土) 11:50:07
>>733-734
MDXのdllはネイティブコードが混在してるためCLR4.0との互換性が無いから
ターゲットをCLR2.0系に変更したらapp.configは弄っちゃダメ。
他のラッパーを使うことを強くお勧めする
740デフォルトの名無しさん:2010/06/19(土) 11:58:52
>>739
うむ
741デフォルトの名無しさん:2010/06/19(土) 19:29:41
フリーソフト作っているのだが、報告によるとNorton 2010のSONARとかいう機能で誤検知されるらしい。
調べてみると認知されていないとか、比較的新しいexeは、とりあえず信頼できないみたいな感じで検出するらしい。
どうすることもできないんだろうか・・・。
742デフォルトの名無しさん:2010/06/19(土) 20:30:50
>>739
ありがとうございます
.Net4.0利用のフォーム上で音声を再生したいのでSlimDXを使うことにします
743デフォルトの名無しさん:2010/06/19(土) 21:58:37
>>742
いえいえ。
744デフォルトの名無しさん:2010/06/20(日) 08:30:38
>>741
.NETでSONARにひっかかるってよっぽどな気がするけど
誤検知通報する手段があったはず
745デフォルトの名無しさん:2010/06/20(日) 10:42:38
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace SmartDeviceProject1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Exit_Click(object sender, EventArgs e)
{
Close();
}

[DllImport("user32.dll")]
public extern static int MessageBoxA(int h, string msg, string title, int i);
private void Form1_Load(object sender, EventArgs e)
{
MessageBoxA(0, "hoge", "title", 0); ←この行でエラー PInvoke DLL 'user32.dll' が見つかりませんでした。と。スマートデバイス以外では成功するのに。
}
}
}
746デフォルトの名無しさん:2010/06/20(日) 10:54:05
>スマートデバイス
スマホ向けの開発?
user32.dllってwindows用のdllじゃないの?
747デフォルトの名無しさん:2010/06/20(日) 10:57:23
そゆこと。coredll.dlだろ。
748デフォルトの名無しさん:2010/06/20(日) 11:16:15
どうもすいません。

ありがとうございます。
749デフォルトの名無しさん:2010/06/20(日) 11:51:47
>>748
orz
750デフォルトの名無しさん:2010/06/20(日) 13:54:02
MSDNトップページの目次からどうやって辿っていったらたどり着くのか解らない。
751デフォルトの名無しさん:2010/06/20(日) 14:10:45
どこにたどり着きたいのかわからない
752デフォルトの名無しさん:2010/06/20(日) 16:11:54
Visual C#の入門でいいサイトかお勧めの入門書ってありますか?
できるだけ初歩的なことから詳しく書かれているような物でお願いします
753デフォルトの名無しさん:2010/06/20(日) 16:49:31
どれも一長一短。
結局、どれが合うかは自分次第。
754デフォルトの名無しさん:2010/06/20(日) 16:52:27
DataReseivedは受信したときにおこるイベントとあったのに

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string str = port.ReadLine();
label1.Text = str;
}

とやっても上手くいきません。
また、受信したときっていうのは、いつのことを言うんですか?
755デフォルトの名無しさん:2010/06/20(日) 16:58:51
日本語のサイトなら
未確認飛行C C#によるプログラミング入門
@IT
くらいしかないよ

他は情報がフルすぎたり、C言語やJavaから移住してきたのを対象としてるとしか
思えないようなのばかり。

用語説明もなしにいきなり未知の単語が出てきたりね。
756デフォルトの名無しさん:2010/06/20(日) 17:12:57
>>752
入門というかお題が欲しいだけならここを最初からやっていけばいいんじゃね?
http://cs2ch.blog123.fc2.com/
757デフォルトの名無しさん:2010/06/20(日) 18:02:10
>>754
ReadLine()してるってことはNewLine(デフォルトだとLF)は送られてくるんだよな
あと、label1がSystem.Windows.Forms.Labelなら、それは駄目だからその行は消せ
758デフォルトの名無しさん:2010/06/20(日) 18:07:51
>>757
ボタンを押したときに、
同じことをするようにしたら、上手くいきましたんでたぶんそうです
759デフォルトの名無しさん:2010/06/20(日) 19:41:18
じゃあ受信は正常にできてるんだろう
760デフォルトの名無しさん:2010/06/20(日) 21:14:14
イベントが登録されてないとか
761デフォルトの名無しさん:2010/06/20(日) 21:24:12
>>760
Designer.csにはちゃんと
ポートナンバーも指定されて
this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
とあります。
762デフォルトの名無しさん:2010/06/20(日) 22:18:28
とりあえず、デバッグ出力か何か使って

・イベントが発生すること
・データを受信できていること

を確認しろ
763デフォルトの名無しさん:2010/06/20(日) 23:23:37
質問です。

3回まわるwhileの中に
label1.Text = "hoge\r\n";
があって、これを実行するとlabel1に
hoge
hoge
hoge
と表示されることを期待してるのですが、1回のhogeしか表示されません。
(プログラムをいじったところ、3回目のhogeだけが表示されるようです。)
これはどうしてでしょうか?
(Console.WriteLineなら3回表示されます)

かわりにこの手を使えば3回表示されるのですが、これ以外に方法はないでしょうか?
string hoge = "";
hoge = hoge + "hoge\r\n";

Win XPでVC#2010EEを使ってます。よろしくお願いします。
764デフォルトの名無しさん:2010/06/20(日) 23:25:17
代入してんじゃん
765デフォルトの名無しさん:2010/06/20(日) 23:25:20
頭が痛くなってくるな
LabelのTextプロパティはそんな動作を想定してるのではないのだから当たり前だ

「かわりの手」を使いなさい
それしかない
766デフォルトの名無しさん:2010/06/20(日) 23:26:07
こうだろ?

label1.Text += "hoge\r\n";
767デフォルトの名無しさん:2010/06/20(日) 23:30:24
代入でうまくいきました。なんか恥ずかしいw
どうもありがとうございます。
768デフォルトの名無しさん:2010/06/21(月) 00:42:16
じえん乙
769デフォルトの名無しさん:2010/06/21(月) 05:13:07
なんでプログラム用語って英語ばっかりなのに
nullだけドイツ語なんだ?
770デフォルトの名無しさん:2010/06/21(月) 07:56:28
単にローマ字読みだろ
771デフォルトの名無しさん:2010/06/21(月) 10:22:03
RSAで暗号化しようと
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()
rsa.FromXmlString(PublicKey)
rsa.Decrypt(Data, false);

こんな感じで
Dataがデカイとエラーが出るんだけど
一定上デカイとセキュリティに問題があるから小さいデータしかやれないようになってるの?
つまりデカイデータには使わない方がいいってこと?
それとも一定区切りで暗号化を繰り返しやらないといけないってこと?
その場合出力されるデータサイズって一定とか管理する目安みたいなものはあるの?
772771:2010/06/21(月) 10:27:46
自己解決
データは共通鍵暗号で暗号化して
その鍵をRSAで一緒に記録するってことね
773デフォルトの名無しさん:2010/06/21(月) 11:58:31
指定した時間スレッドを止めて、その止めてる間に処理をおこないたい時はどういうやり方がベストなのでしょうか?

//スレッドをループで止める
while (true) {
//ここにループ中の処理を挟む
//指定した時間がきたらループ脱出
}
774デフォルトの名無しさん:2010/06/21(月) 12:13:33
スレッド分けろよ
775デフォルトの名無しさん:2010/06/21(月) 12:14:25
>>774
マルチスレッドの中での処理です
776デフォルトの名無しさん:2010/06/21(月) 12:22:12
だからぁ、Suspendでもして「止めてる間に処理」を別のスレッド起動すりゃ良いだろ
777デフォルトの名無しさん:2010/06/21(月) 12:23:36
指定した時間だけとめて、その間に他のスレッドで処理が終わらなかったらとめちゃっていいのか?
何がやりたいのか分からないが、呼び出し側はサブスレッド開始→Sleep→サブスレッド停止とかかな
778デフォルトの名無しさん:2010/06/21(月) 12:25:36
主スレッドと作業スレッドってことでいいのかな。
手早いのは>>776が言うように作業スレッドを2つに分けて主スレッドから停止と再開をコントロールすればいい。
779デフォルトの名無しさん:2010/06/21(月) 12:29:16
>>776
無駄にスレッドを起動したくありません(コスト2倍になるから)

>>777
.Net4からあるキャンセルフレームワークを実装したいのです。
指定時間待機するだけならAutoResetEvent等で実装出来るのですが…。


ThreadPoolで時間指定で別スレッド立ち上げ↓
AutoResetEventでブロッキング
コールバック又はタイムアウト時の処理で〜としても良いのですが例外対処のコストが馬鹿になりません
なのでよい方法があればと思ったのです
780デフォルトの名無しさん:2010/06/21(月) 12:34:50
初心者がコストとか気にして貧民的プログラムしなくていいよ
781デフォルトの名無しさん:2010/06/21(月) 12:35:03
初心者向けの話題じゃないな。
782デフォルトの名無しさん:2010/06/21(月) 12:35:52
そうやって御託並べて無駄な一日を過ごせばいいw
783デフォルトの名無しさん:2010/06/21(月) 12:36:16
生産性が落ちるわけだな。
784デフォルトの名無しさん:2010/06/21(月) 12:36:37
内容が高度すぎるからフォーラムで聞いたら?
785デフォルトの名無しさん:2010/06/21(月) 12:37:25
いや、とりあえず相談室でいいんじゃね。
786デフォルトの名無しさん:2010/06/21(月) 12:37:54
相談室もマルチスレッド系は苦手みたいだったぞ
787デフォルトの名無しさん:2010/06/21(月) 12:37:56
そういえばThread.Sleep入れないとCPU100%になるけど
スレッドで特定のフラグとかループで監視してるのにSleepさせると若干開始が遅くなるよね
どうするのがいいのかな?
788デフォルトの名無しさん:2010/06/21(月) 12:39:14
3分強で7レスとか
お前らどこから沸いて出た
789デフォルトの名無しさん:2010/06/21(月) 12:46:58
>>787
WaitHandle
790デフォルトの名無しさん:2010/06/21(月) 12:59:44
>>779

そこまでやりたいこと分かってるなら最初からそう言えよ
具体的に何がうまくいかないんだ
http://www.infoq.com/jp/news/2009/06/net4_cancellation
791デフォルトの名無しさん:2010/06/21(月) 13:04:15
>>790
MSDN及びその辺の初歩的な物は理解してます。
やりたい事は既に非同期で実装済みのクラスをキャンセルフレームワークに適合したクラスへと変更するアダプタクラスを作成したいのです。
これを実現するには低コストのブロッキングと低コストのタイマー、安全な例外処理を実装しないといけない訳なんですが低コストのブロックとタイマーの所に詰まってます。
同一スレッドないであれば例外処理の対応は簡単なので出来れば別スレッドに分けたくないのです(非同期クラスアダプタという特性上コストが数倍になるという理由もあります)。
792デフォルトの名無しさん:2010/06/21(月) 13:06:05
よし、わかった!
volatileだな、これは!
793デフォルトの名無しさん:2010/06/21(月) 13:12:55
どうみてもフォーラムのMVP共の出番
794デフォルトの名無しさん:2010/06/21(月) 13:16:51
とりあえず、わんくまにでも聞けよ。
795デフォルトの名無しさん:2010/06/21(月) 13:18:04
ていうかここから出て行け
796デフォルトの名無しさん:2010/06/21(月) 13:20:06
この手の非同期つーか並列計算つーかその辺のしっかりした本ほしいな
初心者本ばーっかりでそう言うのが皆無
797デフォルトの名無しさん:2010/06/21(月) 13:29:44
折角だから調べてみようかな
798デフォルトの名無しさん:2010/06/21(月) 13:39:39
調べてみたが何のことは無いな
799デフォルトの名無しさん:2010/06/21(月) 13:41:57
途中で書き込んじゃった。まだ終わっていない!
800デフォルトの名無しさん:2010/06/21(月) 13:45:10
上級質問はわんくまなんかのMVPに聞け
あいつ等の仕事でもあるしな
801デフォルトの名無しさん:2010/06/21(月) 13:49:52
これは答えちゃいけない流れなのか…
802デフォルトの名無しさん:2010/06/21(月) 13:51:41
あー、これね
これはマルチスレッドでやるべきだよ
803デフォルトの名無しさん:2010/06/21(月) 14:09:34
マルチスレッドスレは低レベルな話が多いからな(悪い意味ではない)

実装はしてないけどここを見ると大体理解はできるんだがなぁ
http://msdn.microsoft.com/ja-jp/library/dd997364.aspx

既存の非同期実装済みのクラスの非同期実装方法はBegin〜、End〜とIAsyncResult使った奴?それともオリジナル?

それから例外処理は重いからやりたくないって言ってるが、MSの推奨してるキャンセル動作は例外動作
使う側からはそう見えないっぽいけど

なんだかスレチな雰囲気が漂ってるから俺はこれで降りるよ
804デフォルトの名無しさん:2010/06/21(月) 17:28:53
スレチだと思うならなんで書き込みするの?
もうこないでね(´・ω・`)
805デフォルトの名無しさん:2010/06/21(月) 18:20:59
( ^ω^)来たお
806デフォルトの名無しさん:2010/06/21(月) 19:16:54
失せろ
807デフォルトの名無しさん:2010/06/21(月) 19:37:18
自分用のツールで数万件になりそうなデータを扱いたくなり
SQL Server Compact + LINQ to SQLに初めて手を出しています
複数のスレッドからカウンタを弄る場合の競合への対策を下のようにしてみたのですが
無限ループにするかどうか以外、他に何か問題はありますか?

var db = new Database("Database.sdf");
var row = db.Data.First(item => item.RowNo == 1);
row.Count++;
while (true) {
  try {
    db.SubmitChanges();
    break;
  } catch (ChangeConflictException) {
    foreach (var cc in db.ChangeConflicts) {
       cc.Resolve(RefreshMode.KeepChanges, true);
       if (cc.Object == row)
        foreach (var mcc in cc.MemberConflicts)
          if (mcc.Member.Name == "Count")
             row.Index = (int)mcc.DatabaseValue + (int)mcc.CurrentValue - (int)mcc.OriginalValue;
    }
  }
}
808デフォルトの名無しさん:2010/06/21(月) 19:50:38
間違えました 一番下の行のrow.Indexはrow.Countです
809デフォルトの名無しさん:2010/06/21(月) 20:01:12
なぜか急にC#でプログラミングすることになり戸惑ってる者です。
ttp://d.hatena.ne.jp/mirakui/20090808/hedotnet
↑の記述通りにMicrosoft Visual C# 2008でWebアプリを作りました。
デバッグ(ローカル環境)ではうまく動作しましたが、
IIS(でいいんでしょうか?)で実行させようとしたら、

アプリケーションでサーバーエラーが発生しました。
ファイルまたはアセンブリ'HyperEstraier'、
またはその依存関係の1つが読み込めませんでした。
間違ったフォーマットのプログラムを読み込もうとしました。
例外の詳細:System.BadImageFormatException
と出てしまい、ブラウザから起動すらしませんでした。
自分なりに調べ、Unmagaged DLLのため、と判断しましたが、
どうすればいいのでしょうか?
一応、Cで作られたDLLのパスを通すため、いろんなところに
コピーしましたが、エラーは全く変わりませんでした。
また、ブラウザから開こうとした時のエラー画面の下に
バージョン情報:Microsoft .NET Framework バージョン2.0.50727.4200;
ASP.NET バージョン:2.0.50727.4205
と出ていたのがちょっと気になります。
C#のプロジェクト自体は.NET Framework 3.5だと思います。

自分でよくわかっておらず、要領を得ない質問で
申し訳ありませんがよろしくお願いします。
810デフォルトの名無しさん:2010/06/21(月) 20:02:18
それが出るときは、32/64問題の可能性が高い。
811デフォルトの名無しさん:2010/06/21(月) 20:11:03
>>810
AnyCPU関係かね?

となると>>809は開発OSとサーバー側のOSのエディションを晒すべきだな
812デフォルトの名無しさん:2010/06/21(月) 20:14:20
開発用Webサーバーは32ビット。
IISが64ビットで件の例外が出てるんじゃないかと想像する。
813デフォルトの名無しさん:2010/06/21(月) 20:34:46
質問です。
列挙に時間がかかるIEnumerable<T>が有るのですが、これをList<T>にしたい
ただToList()するだけでは時間がかかりすぎるので、取りあえずコレクションに10ぐらいAddして
残りは非同期で追加する。

こんな動作をしたいのですが、
BackgroundWorkerを使い、ProgressChangedでObservableCollectionに追加していく
これ以外に方法は無いでしょうか?回答お願いします。
814デフォルトの名無しさん:2010/06/21(月) 21:08:57
>>813
List<T>にしたいのにObservableCollection?
ただ非同期にするだけならActionで囲んでBeginInvokeでいいと思うけど。
815デフォルトの名無しさん:2010/06/21(月) 21:16:11
つうかそのListをどういう使い方するの?
816デフォルトの名無しさん:2010/06/21(月) 21:16:22
ObservableCollectionのCollectionChangedでList<T>に追加して
メインスレッドで処理してるつもりになってるとか?
別のスレッドから追加したらイベントハンドラもその別のスレッドで実行されるし
ObservableCollectionはスレッドセーフじゃないよ
817デフォルトの名無しさん:2010/06/21(月) 21:38:44
おおっと、書き方が悪すぎたようですみません。
WPFでのデータービューアー的なものを想定しています。
できるならList<T>で構わないのですが、逐次追加の場合反映されないのでObservableCollectionです。

流れとしては、
開始→IEnumerable<T>の取得→ObservableCollectionの作成→規定数だけ追加
→BackgroundWorkerのイベント設定し、開始→DoWork内で列挙→ProgressChangedで取得したアイテムをObservableCollectionに追加
818デフォルトの名無しさん:2010/06/21(月) 23:29:02
C#で分数の計算をしたいのですが、サンプルみたいなのはありませんか?
または循環小数などを分数にするというものでもやり方があったら教えてください。
819デフォルトの名無しさん:2010/06/21(月) 23:30:39
無いですよそんなもん
820デフォルトの名無しさん:2010/06/21(月) 23:32:40
その手のはかなり難しいよ
サンプルが無いとできないようなレベルじゃ無理
821デフォルトの名無しさん:2010/06/21(月) 23:35:54
オブジェクトのデシリアライズで質問です。
あるint型プロパティCountにデシリアライズしたのですが、
xml側が<Count></Count>みたいに何も入っていない場合、nullはInt32に変換できませんと例外が投げられてしまします。
これをnullの場合は0にしてデシリアライズする方法がありましたら教えてください。
822デフォルトの名無しさん:2010/06/21(月) 23:37:58
int?にする
823デフォルトの名無しさん:2010/06/21(月) 23:49:54
IXmlSerializable実装してそこだけ自分で書く
824デフォルトの名無しさん:2010/06/22(火) 05:20:23
HTTPサーバーを作りたいのだけど
PerlとかPHPに環境変数渡して実行するにはどうすれば?
825デフォルトの名無しさん:2010/06/22(火) 06:37:21
>>824
C#の出番がなければスレチなんですが
どう組み合わせるつもりで?
826デフォルトの名無しさん:2010/06/22(火) 07:51:01
いや見たまんまだろ
サーバーをC#で書きたいんだろう
827デフォルトの名無しさん:2010/06/22(火) 07:57:43
PerlとかPHPのサーバーから情報を集約してくるサーバーをC#で書きたいのかな?

いずれにしても、環境変数とか言ってる時点でC#以前な気がするけど。
828デフォルトの名無しさん:2010/06/22(火) 09:13:20
>>827は素人過ぎる
829デフォルトの名無しさん:2010/06/22(火) 09:30:20
>>824
CreateProcessで環境変数渡せばいいんじゃない?
830デフォルトの名無しさん:2010/06/22(火) 10:17:18
ProcessStartInfo.EnvironmentVariablesでいいだろJK
831デフォルトの名無しさん:2010/06/22(火) 10:33:04
>>830
おお、とりあえるありがとう
しかしなんだこの流れはw
832デフォルトの名無しさん:2010/06/22(火) 10:38:24
CGIを知らないやつが無理に回答しようとするからこうなる。
833デフォルトの名無しさん:2010/06/22(火) 10:43:33
まあ今回のはcgiとかPerlとか関係無しに
プロセス起動時に任意の環境変数を渡す方法を聞いてるだけだけどな。
834デフォルトの名無しさん:2010/06/22(火) 10:50:06
だが>>827はあまりにもバカ
835デフォルトの名無しさん:2010/06/22(火) 12:32:10
>>827
出しゃばるなよ、おボケさん
836デフォルトの名無しさん:2010/06/22(火) 12:36:01
さっき、女子中学生とSEXしてきた
837デフォルトの名無しさん:2010/06/22(火) 12:46:30
UseShellExecute を falseにする必要があるとか何とか
838デフォルトの名無しさん:2010/06/22(火) 13:00:41
>>827の人気に嫉妬
839デフォルトの名無しさん:2010/06/22(火) 14:02:43
>>836
完敗だ。
840デフォルトの名無しさん:2010/06/22(火) 19:39:41
DataGridViewの値(セルに表示されているの)をデバッグでステップインで
みたいんだけど、どれみりゃいいかわかんねーー

だれか、知ってる人いたら、教えて。
841デフォルトの名無しさん:2010/06/22(火) 23:43:21
>>840
さすがに頭悪すぎる質問じゃないのか....
842デフォルトの名無しさん:2010/06/23(水) 00:47:36
階層が深くてわかりにくいのは同意
とにかくツリーを開いてみて、見つけたらどこ開いたか紙にメモだな
そのうち慣れれば一発で開けるようになる
843デフォルトの名無しさん:2010/06/23(水) 01:15:03
>>841
うん。でも教えて。
844デフォルトの名無しさん:2010/06/23(水) 08:29:14
class A {
public delegate void AEventHandler();
public event AEvent;
}

class B : A
{
public B(){
base.AEvent += new EventHandler(AEvent_Func);
}

public void AEvent_Func(){
....
}

}

class program {
B b;
b.AEvent += new b.EventHandler(BEvent_Func)

public void BEvent_Func()
{
...
}
}
845デフォルトの名無しさん:2010/06/23(水) 08:31:57
みたいな階層構造クラスがあります
Aで発生したイベントはprogramでもキャッチされてしまう?
BEvent_Func発生のタイミングはAでイベントが発生のち
Bでいろいろ処理をしてprogramにスローしたいのだけど
AにOnAEvent_Funcみたいな関数を作ってそれをオーバーライドするしかない?
846デフォルトの名無しさん:2010/06/23(水) 09:02:20
キャッチされてしまう。On〜をオーバーロードするのが一般的
847デフォルトの名無しさん:2010/06/23(水) 10:19:53
>>846
ああそうなの?
まあいいか
848デフォルトの名無しさん:2010/06/23(水) 11:15:32
>>847
よくねえよ。

外部からメソッドを呼び出すとき、クラスの階層で同じ名前のメソッドがあっても
virtual/overrideを付けておかないと呼び出しの切り替えは行われない。
基本的には同じ名前を使いまわすのは避けた方がいい。

もちろんprivateの範囲で分かっていて定義するなら構わないけど、
protected/publicにするなら最悪。
(まあコンパイラに怒られるけど)

で、同じイベントに違うクラス階層から2つ以上のハンドラを
追加するような書き方はちょっと考えられないので、
頭整理して設計を見直した方がいいんじゃないかな。
849デフォルトの名無しさん:2010/06/23(水) 11:53:46
クラスAはある情報を持ったクラスαをhashtableで管理してる
リストが変化するとイベントを発生させる
よく考えたらクラスBはイベント発生ルールが違うのでオーバライドは使えない
クラスBはαを継承したβを同じhashtableで管理してる
βはαにクラスB管理用のデータを付加したもの
AとBは基本的に機能が少し違うだけでどちらを使ってもいいようになってる

今はBの中でAをnewしてAからのイベントはBだけで完結するようにしてる
BはBのタイミングでB独自のイベントを発生させる

問題はBの中でnewしてるせいで同じ関数も再定義しないといけないから長い
あとhashtableを検索する作業が1命令で2重だから2回必要になる
非常に効率が悪い

こういうのはどう設計しればいいのかね?
850デフォルトの名無しさん:2010/06/23(水) 12:14:47
>>849
なんか色々変な感じがしているが、とりあえずもうちょっと具体的なクラス名を付けてくれ。これじゃあ分かりにくい。
・クラスAとBを区別する必要があまりないなら1つのクラスにすることを考える
・コレクション的な使い方をしてるならSystem.Collections.Generic.Collection<T>を継承して作ることを考える。
・イベントはpublicにしておいて外部から登録させるような使い方じゃないと意味ねぇぜダンナ。
 クラス内で完結するなら普通にメソッドを呼び出せばいいじゃないか。
851デフォルトの名無しさん:2010/06/23(水) 12:23:00
>>850
1つにまとめるのは複雑になるので却下
Aはただのコレクションじゃなくてかなり複雑な処理をしてその結果をあるリストで管理してる
BはAのイベントをラップして別の形でAの結果にアクセスさせるためのラッパークラス
AのイベントがAで完結してるわけじゃない
BはAと似たインターフェースを持ってるが微妙に違う
共通する部分も多いのでB->Aという関数呼び出しが行われることもある
この時にBのリストのどれをターゲットにしてるか検索してまたAのリストのどれかまで
2重で調べないといけないから効率が悪いので悩んでたのです
852デフォルトの名無しさん:2010/06/23(水) 12:55:12
基本的な作りが良くないんだろうな。
853デフォルトの名無しさん:2010/06/23(水) 13:08:51
>>851
サンプルソースを公開してもらわんと案は出んだろうな。
お前のその判断が正しいということをソースなしにどうやって判断するんだ。
854デフォルトの名無しさん:2010/06/23(水) 13:11:15
>>853
お前にお前呼ばわりされる筋合いないから
855デフォルトの名無しさん:2010/06/23(水) 13:38:02
ところで>>844のAのデリゲートってどこで使われてるの?
856デフォルトの名無しさん:2010/06/23(水) 14:25:04
失礼します、若干スレ違い含むかもしれませんが
Windowsフォームアプリケーションを制作する際のVBとVC#の違いは何なのでしょうか?
一応どちらも使えるので優れた方に絞りたいな・・・と思うのですがお願いいたします。
857デフォルトの名無しさん:2010/06/23(水) 14:27:36
VBってのはVB.netのことかい?
VB6だとすれば化石言語なので.netを使ったほうがいい
.netを使うんであればC#が使えるならC#を使ったほうがいい

VB.netはVBを使ってきた人が離れていかない用にあるだけ
858デフォルトの名無しさん:2010/06/23(水) 21:30:11
両方使えるならどちらが優れてるかは明らかだろ
VB.NETは原則的にC#を超えてはいけない
859デフォルトの名無しさん:2010/06/23(水) 21:52:59
どっちもどっちだけどな。
860856:2010/06/23(水) 22:33:34
ありがとうございます。
どちらも基本的なことはできますが使い込んで少し入ったところまでしているのはVBなのですがこの度やりたいことがC#用でもう乗り換えちまうかー?と考えましたw

マイコンとかよく使うのでビット演算とか超便利ですね、これからC#のほうを主にしたいと思います。相談に乗ってくれてありがとうございました!
861デフォルトの名無しさん:2010/06/23(水) 22:38:33
1:object obj = 10m;
2:decimal? a = obj as decimal?;
3:decimal b = a;
4:decimal c = a ?? 0m;
5:decimal d = (decimal)(a ?? 0m);

3行目だと暗黙的変換が行えない
でも4行目だと5行目みたいに書かなくても暗黙的decimalに変換されちゃう
何で?
環境:XP,VS2005
862デフォルトの名無しさん:2010/06/23(水) 22:41:21
>>861
当然だろ
863デフォルトの名無しさん:2010/06/23(水) 22:42:40
4と5はaがnullまたは0mの時に0mを返すから。
864デフォルトの名無しさん:2010/06/23(水) 22:49:42
そもそもNullable外しのために導入されたのが??演算子
865861:2010/06/23(水) 22:49:55
>>863
もしかしてnull以外の時は元の型で値を返してくるって事ですか?
866デフォルトの名無しさん:2010/06/23(水) 22:52:04
a ?? bは
a == null ? (Aの型)a : b
と同じ意味
867デフォルトの名無しさん:2010/06/23(水) 22:53:02
訂正
a == null ? b : (aの型)a
868861:2010/06/23(水) 23:07:01
>>867
4行目は
decimal c = a == null ? 0m : (decimal?)a;
と同じ意味じゃなくて
decimal c = a == null ? 0m : (decimal)a;
と同じ意味って事か
ありがとう〜
869デフォルトの名無しさん:2010/06/23(水) 23:09:09
これか。
http://msdn.microsoft.com/ja-jp/library/ms173224%28v=VS.80%29.aspx
ただし誤訳が混じってる。

>?? 演算子は、null 非許容型に対して null 許容型が割り当てられているときに返す既定値を定義します。
じゃなくて、
?? 演算子は、null 非許容型に対して null 許容型を代入するときに返す既定値を定義します。
870デフォルトの名無しさん:2010/06/24(木) 01:57:30
>>869
うん。それ。
871デフォルトの名無しさん:2010/06/24(木) 02:43:36
話変わっちゃうが、関数の配列化なんて出来ないよね?
なんとかならんかな

public int i;
private void Form_Lord(){
//labelの配列化
for( i = 0;i < 100;i++){
method[i]();
}
}
*******************
private void method[1](){
Thread.Sleep(100)
label[1].text="a";
}
private void method[2](){
Thread.Sleep(100)
label[2].text="a";
}



できれば
private void method[i](){
Thread.Sleep(100)
label[i].text="a";
}
こんな様なことがしたいんだが
省略とかいろいろ気にしないで。
872デフォルトの名無しさん:2010/06/24(木) 02:47:58
そんなことするメリットがまるで思いつかない
873デフォルトの名無しさん:2010/06/24(木) 02:49:28
>>871
.Net4使え。
874デフォルトの名無しさん:2010/06/24(木) 02:51:16
気になったじゃダメなの?
メリットがないと教えてくれないの?
875デフォルトの名無しさん:2010/06/24(木) 02:52:05
>>873
ありがと!
ちょっと調べてみるよ。
876デフォルトの名無しさん:2010/06/24(木) 02:55:53
>>875
うむ。
877デフォルトの名無しさん:2010/06/24(木) 03:09:51
今調べてみたけど Parallel Extensions のこと?
ちがってたらごめん。

並列処理も目的ではあるけど
変数をつかって関数を指定する見たいな事も同時にしたいんだ。
for文で書いちゃったからあれかもしれないが関数を呼び出す時に変数を使いたい。
やっぱ無理かな・・
878デフォルトの名無しさん:2010/06/24(木) 03:44:46
よくわからんけどデリゲートじゃだめかな
879デフォルトの名無しさん:2010/06/24(木) 04:08:09
何回も有難うございます。
調べてみましたが マルチキャストデリゲート では並列処理ではなく逐次処理になる模様です。

ですが、非同期呼び出し (Asynchronous Call) を使いBeginInvokeメソッドで実装できそうです。
以上を踏まえ少し考えてみたいと思います。
本当に有難うございました!
880デフォルトの名無しさん:2010/06/24(木) 06:26:43
スレッドじゃだめなの?
スレッドクラス作って
必要な数と自分のインデックスを渡して起動すればいいだけでしょ

class threadclass(){
public int index;
public void run(){
}
}

for(i=0;i<10;i++){
threadclass t = new threadclass();
t.index = i;
Thread th = new Thread(new ThreadStart(t.run));
th.Start();
881デフォルトの名無しさん:2010/06/24(木) 06:29:05
そして単に普段はthreadclassの配列を作っといて
run()を呼び出せばいいだけだろうに
882デフォルトの名無しさん:2010/06/24(木) 06:36:26
しかしc#は動的クラスの関数がそのままスレッド化出来るんだから
この機能はまさに神的だな
スレッド処理が馬鹿みたいに簡単になった
883デフォルトの名無しさん:2010/06/24(木) 07:14:21
つまり馬鹿が量産されるんだな
884デフォルトの名無しさん:2010/06/24(木) 07:57:19
Threadのデバッグってどーやんの?
知りたいのはスレッドがちゃんと破棄されたかどうかを見たい
885デフォルトの名無しさん:2010/06/24(木) 09:34:07
>>884
Debugトレーサーつかって前後にDebug.Writeして
それをテキストボックスとかに出すと楽ですお

稼働中のスレッドを列件してくれるガーベージコレクタみたいなのがあったらいいけど
886デフォルトの名無しさん:2010/06/24(木) 09:44:06
VS2010で.NET3.5を使いながらMSChartを入れるのってどうやってやるのでしょうか?
2008と同じ方法でインストールしても、ツールボックスに表示されません。
.NET4.0にすれば標準で表示されるんだけど・・・うーん。
887デフォルトの名無しさん:2010/06/24(木) 10:04:15
なんでプログラムの並列化と変数によるメソッド呼び出しを
同列に語っているのかが理解出来ない。
それぞれ別の話だろ。
888デフォルトの名無しさん:2010/06/24(木) 10:05:33
>>885
前後ってどこー?
Threadってコールバック受け取っても死ぬとは限らないから確認のしかたがわけわかめ
スレッドというウィンドウがあるけどいまいち使い方がわかんない・・・
889デフォルトの名無しさん:2010/06/24(木) 10:08:08
関数ポインタがしたいってことだよね
890デフォルトの名無しさん:2010/06/24(木) 10:09:49
>>888
ユーザースレッド側でIDisposableな何がしかのオブジェクトを用意しておいて
コールバック全体をusing指定しておく。
Dispose()が呼び出された段階でトレースに書き込めばよい。

Threadのデバッグウィンドウは、デバッガでプログラムを変えている場合に他のスレッドに移動できる。
変なところで同期待ちしてたり無限ループしてたりしてる場合の問題解決には役に立つ。
891デフォルトの名無しさん:2010/06/24(木) 10:11:44
>デバッガでプログラムを変えている場合に
デバッガでプログラムを止めている場合に
892デフォルトの名無しさん:2010/06/24(木) 10:12:50
デバッガとか使ったことない。
マイコンでもLEDしかつかったことない
893デフォルトの名無しさん:2010/06/24(木) 10:16:10
>>887
そういう意味なのか?
処理の違う関数を同じ名前で管理しなきゃならんような設計の方が理解出来ないがw
894デフォルトの名無しさん:2010/06/24(木) 10:43:56
>>893
ポリモーフィズムがまさにそれなんだが?
895デフォルトの名無しさん:2010/06/24(木) 10:59:15
>>893
これはないわー
896デフォルトの名無しさん:2010/06/24(木) 11:12:46
>>871
答えでもなんでもない茶化しでも申し訳ないが。
某 H 社で改修をやらされた悪夢のコードがよみがえってしまった。。。
ex) [機能単位の命名規則(だっけ?)]0001, *0002, *0003, ...
897デフォルトの名無しさん:2010/06/24(木) 11:19:10
>>894
いや違うだろw
898デフォルトの名無しさん:2010/06/24(木) 11:27:24
>>897
いや、そうだぞ。名前と実装を分離するのが抽象化であり、
それの利用例であるポリモーフィズムなんだから。
Wikipediaでも読んでみれ。
899デフォルトの名無しさん:2010/06/24(木) 11:28:19
>>893を言っていたらインターフェイスって何のためにあるんだろうな
900デフォルトの名無しさん:2010/06/24(木) 11:31:56
メソッド単位ではあまりやらないが、
クラス(スーパークラスサブクラス混在)を配列で持ってForEachは結構やるわ。
901デフォルトの名無しさん:2010/06/24(木) 11:41:33
リフレクション対応用に、他のアセンブリに定義されているクラスの属性を
外から追加したりってできないの?
902デフォルトの名無しさん:2010/06/24(木) 11:42:32
すみません、配列から範囲指定で配列を取り出す方法を教えてください。

gという配列がありまして、

ruby で書くと
a = g[0...20]
b = g[20...20+20]

こんな感じの作業を書こうと思っています。
ぐぐるときのキーワードが悪いのか、
こんな単純なことがわからず1時間も経過してしまいました。
903デフォルトの名無しさん:2010/06/24(木) 11:45:16
直接はできないのでIEnumerable<T>.Skip().Take()か何かで代用せよ
904デフォルトの名無しさん:2010/06/24(木) 11:52:37
>>903
了解しました
ありがとうございます。
905デフォルトの名無しさん:2010/06/24(木) 12:00:40
>>903
配列にはないが、Listにはあるぞ。List.GetRange()
>>902
動的言語におけるいわゆる配列というのは静的言語におけるリストに近いことが多い。
906デフォルトの名無しさん:2010/06/24(木) 12:03:15
>>901
TypeDescriptor越しの操作に対してならTypeDescriptor.AddAttributesとかできる
メンバの属性を弄るのは確かすんごく面倒だったが気がするが
907デフォルトの名無しさん:2010/06/24(木) 12:20:11
>>906
あっそ
908デフォルトの名無しさん:2010/06/24(木) 12:20:49
そうそう
909デフォルトの名無しさん:2010/06/24(木) 12:24:38
910デフォルトの名無しさん:2010/06/24(木) 12:28:04
ひょひょ?
911デフォルトの名無しさん:2010/06/24(木) 12:29:11
>>906
なるほど、ありがとう……。
実はprotobuf-netでシリアライズ使用としてるところなんだけど、
自作のクラスのシリアライズの一部がうまく動かなくて困ってた。
質問の答を用いた解決法とは違うやり方だけど、一応当初やりたい事はできるようになった。

しかし、protobufは型がぎちぎちだなぁ。
XmlSerializerやBinaryFormatterみたいな
ぬるいシリアライザ使ってた身ではつらいものが。
912デフォルトの名無しさん:2010/06/24(木) 17:34:54
WCF使えばいいじゃん
protobuf-netはWCFの真似してるみたいだけどWCFはMSらしい汚い抜け道たくさん
913デフォルトの名無しさん:2010/06/24(木) 18:21:48
>>912
WCFは.NET 3.0だからなぁ……。
protobuf-netはどうやらシリアライズ情報に型情報が一切入らないので、
object型を含んだ曖昧なコンテナなどを扱えないようだ。

BinaryFormatterの方は理解できないクラスはスキップされる。
例えばSystem.Drawing.Colorなんかがそうで、
適宜シリアライズ用のプロパティを定義して代わりに読み書きしてもらうようにする。
従来これで動かしてきたんだけど、
データにいちいち型情報が入るし、読み書きがいまいち遅いみたいなんだよね……。
914デフォルトの名無しさん:2010/06/24(木) 20:19:19
2chブラウザを作る上でC#のExpressとProで差となる部分はどこですか?
915デフォルトの名無しさん:2010/06/24(木) 20:48:48
無い
916デフォルトの名無しさん:2010/06/24(木) 20:58:10
有ります
917デフォルトの名無しさん:2010/06/24(木) 21:23:16
>>913
どうやってobject型にデシリアライズするんだよ
シリアライズ関連の頻出単語"contract"の意味わかってる?
918デフォルトの名無しさん:2010/06/24(木) 21:43:14
>>917
実際にobject型のデータを持っているわけではないが、object型として扱っている部分がある。
例えばジェネリックでない通常のListだとかHash。
C#だともはやそういうコードは書かないんだけど別の言語(Boo)で実装している部分なので
そういう構成のデータが多々出来てしまう。
そういったデータをprotobuf-netだとシリアライズできなくて困ってるんだ。
919デフォルトの名無しさん:2010/06/24(木) 22:01:52
で、別の言語を使い分けたり妙なライブラリ使ったりリフレクションを駆使したりすることによって
総合的に見て実際に生産性は上がった?
どうせわざわざ苦労するのが好きな変態さんなんだろ? もうシリアライザも自作しちゃえよ
まあ気持ちはよくわかるw
920デフォルトの名無しさん:2010/06/24(木) 22:06:33
言語がひとつに統一されるのはいつだろう
921デフォルトの名無しさん:2010/06/24(木) 22:10:28
>>919
うーん。総合的に見ると、正直疑問かもw
ただ利用者側がカスタマイズや機能の拡張をできるシステムを目指しているので、
C#だけで全部組んでしまうとまずい。
まあC/C++だけで組んでた時代と比べたら、
少なくとも倍位の開発スピードは維持できてるんじゃないかな。

シリアライザはメジャーどころだけで4〜5種類あるみたいだから、もうちょっと調べてみるよ。
922デフォルトの名無しさん:2010/06/24(木) 22:40:46
言語が統一されたらまた神が怒ってバラバラにされる
923デフォルトの名無しさん:2010/06/24(木) 22:56:41
チェーンソーが必要だな
924デフォルトの名無しさん:2010/06/24(木) 22:57:16
チェーンソーか
925デフォルトの名無しさん:2010/06/24(木) 23:00:22
神って自己中だし大嫌い
926デフォルトの名無しさん:2010/06/24(木) 23:02:14
おめでとう
927デフォルトの名無しさん:2010/06/24(木) 23:05:57
スパゲッティ・モンスター神を侮辱するとかありえないし
928デフォルトの名無しさん:2010/06/24(木) 23:11:38
なにおー
929デフォルトの名無しさん:2010/06/25(金) 02:17:32
おほほほほっ・・・
930デフォルトの名無しさん:2010/06/25(金) 02:18:48
氏ね豚
931デフォルトの名無しさん:2010/06/25(金) 02:31:51
>>921だけど調べてみたけどわからんかたわ。
あきらめるわ。
932デフォルトの名無しさん:2010/06/25(金) 07:52:55
>>931
まあゆっくりしていけ
933デフォルトの名無しさん:2010/06/25(金) 22:03:59
System.Collections.ArrayList[] w = new System.Collections.ArrayList[10];
w[0].Add = "うんち";
これでNull例外になるのはなんで?

w[0] = new System.Collections.ArrayList();
この行挟めば通るんだが、なんか納得できない
934デフォルトの名無しさん:2010/06/25(金) 22:06:07
ArrayListは参照型だから
参照型についてはどのWebサイトや書籍見ても詳しい説明があるから自分で調べろ
935デフォルトの名無しさん:2010/06/25(金) 22:09:34
>>934
えw
その前に配列だよw
936デフォルトの名無しさん:2010/06/25(金) 22:13:27
いや参照型じゃなくて値型なら
配列作った直後に要素のインスタンスメソッド呼び出してもエラーにはならない
937デフォルトの名無しさん:2010/06/25(金) 22:25:19
>この行挟めば通るんだが、なんか納得できない
なぜ納得できないのかが分からない。
ArrayList w = null;
w.Add("うんち");
でエラーになるのも納得できないわけ?
938デフォルトの名無しさん:2010/06/25(金) 22:27:56
>>933
ポインタの配列を作ったところで、その配列の要素のポインタの値は不定かNULLでしょ。


…… なんて説明で分かればそもそも質問しねえかw
939デフォルトの名無しさん:2010/06/25(金) 22:28:54
>>933
リストだから混乱するのかね。
例えば
HogeClass[] hoges = new HogeClass[10];
だったらhoges[0] も hoges[1] も全てnullだというのには納得?

ところで、ArrayListは産廃なのでList<T>使いましょう。
本当にそれが必要でループ回して初期化が面倒くさいなら
var lists = Enumerable.Range(0, 10).Select(_ => new List<string>()).ToArray();
と書けなくもない。
940デフォルトの名無しさん:2010/06/25(金) 22:31:37
>>933
値型か参照型か以前に、ArrayListの配列に対する操作を
ArrayList自体と混同しているところがそもそもの問題の原因。

>System.Collections.ArrayList[] w = new System.Collections.ArrayList[10];
これは配列を作っただけで、中の10個のArrayListインスタンスはまだ初期化されておらず、nullのままだ。
だから

>w[0].Add = "うんち";
のコードの
>w[0]
のアクセスの段階でnullアクセスになる。
941デフォルトの名無しさん:2010/06/25(金) 22:33:30
>>934-938
すまんね、オブジェクト指向の開発経験がまったくないもんで

w[0] = new System.Collections.ArrayList();
ここで初めてインスタンスができるってことなのかね
最初の配列宣言したときにできてくれてもいいじゃんとおもったわけなんだよ
942デフォルトの名無しさん:2010/06/25(金) 22:34:30
>>940
何言ってるの?
w[0]は単なる配列アクセスでnullを返すだけ
943デフォルトの名無しさん:2010/06/25(金) 22:40:17
>>941
インスタンスの生成方法は必ずしもデフォルトコンストラクタを使用するとは限らないからな
ところで.NET 2以降ならArrayListとかやめとけ。
944デフォルトの名無しさん:2010/06/25(金) 22:41:28
>>941
配列というインスタンスはできてるじゃん
配列の各要素にぶら下げるインスタンスとは別だよ
945デフォルトの名無しさん:2010/06/25(金) 22:43:42
javaとかc#から入った人はポインタの概念の理解なしで
参照型を理解してたりするのかね。
946デフォルトの名無しさん:2010/06/25(金) 22:45:12
この辺が理解できないのは辛いな
947デフォルトの名無しさん:2010/06/25(金) 22:52:08
948デフォルトの名無しさん:2010/06/25(金) 23:03:31
2つの整数値からGetHashCode()をオーバーライドして、
一意になるようにしたいのですが、何かいい方法はないでしょうか。
整数値は1つが1〜99まで、2つめが1〜999までです(ただし連番ではない)。
単純に適当な数かけたり、XOR取ったりではキー重複になってしまいました。
949デフォルトの名無しさん:2010/06/25(金) 23:04:48
んん?参照型って配列でいくら作っても別々の値を保持できるわけじゃないのかw
やり方間違えたわ・・・
950デフォルトの名無しさん:2010/06/25(金) 23:06:16
何を言ってるのか良くわからん
構造体なのにオーバーライド??
951デフォルトの名無しさん:2010/06/25(金) 23:08:22
GetHashCodeは別に一意にならなくても適度にバラついてればいいので
あまり神経質にならんでもいいんだけどね。
952デフォルトの名無しさん:2010/06/25(金) 23:11:57
shortに収まるならa<<16 + bでいいじゃん
953デフォルトの名無しさん:2010/06/25(金) 23:24:03
キーの重複って事はディクショナリか
Dictonary<TKey, TValue>ならコンストラクタにIEqualityComparer<TKey>を実装させたオブジェクト渡す
954デフォルトの名無しさん:2010/06/25(金) 23:31:24
>>948
その課題に対するソリューションを考えるのに何か重要な情報がまだ抜けてるような気がするが、
とりあえず直接の解としては952でいいんじゃね?
他には0埋めで文字列化した上で2つ繋げて固定長の文字列にするとか。

そうやって作った集合をどう使うのか。どう保存するのかによっても話が変わってくるだろうよ。
955デフォルトの名無しさん:2010/06/25(金) 23:40:52
>>945
ポインタの概念云々言うほどのこっちゃないだろw

参照なんてただの参照じゃんw
956デフォルトの名無しさん:2010/06/25(金) 23:44:50
refとか絡んでくると苦しくなる
変数そのものを渡すとかいう意味不明な説明になる
957デフォルトの名無しさん:2010/06/25(金) 23:49:09
>>955
「参照」の方が抽象度が高いから理解しにくいでしょ。
ポインタの方が低レベルだからより簡単。

だから全くの初心者がいきなり参照を理解するのは、
同じく初心者がポインタを理解するより難しい。

何か勘違いしてないか。
958デフォルトの名無しさん:2010/06/26(土) 00:46:32
人によりけりじゃねーの?
959デフォルトの名無しさん:2010/06/26(土) 00:57:49
ポインターのむずかしさって、概念よりもむしろ、安全な使い方するにはどうすればいいのかな部分だと思うんだけど。
960デフォルトの名無しさん:2010/06/26(土) 05:03:00
>>958
(´;ω;`)ブワッ
961デフォルトの名無しさん:2010/06/26(土) 05:58:45
ガベコレ教育の弊害
962デフォルトの名無しさん:2010/06/26(土) 06:09:01
しかしイベントは発行するタイミングと処理するタイミングが前後するからうまくいかなかったり
manualresethandleとかで制御してたらそのせいでデッドロックしたり
イベントをマルチスレッドで使うのは危険だと分かった
963デフォルトの名無しさん:2010/06/26(土) 06:12:33
>>933
激しく勘違いしてるだけだろ
System.Collections.ArrayList w = new System.Collections.ArrayList();
w.Add = "うんち";

たぶんこうしたいだけ
964デフォルトの名無しさん:2010/06/26(土) 09:15:55
うんちとは何事だよ
965デフォルトの名無しさん:2010/06/26(土) 09:15:55
>>962
だから Win Forms も WPF もディスパッチャーの機構持ってるのよ。

>>963
List<string> にしようよ。
966デフォルトの名無しさん:2010/06/26(土) 13:07:44
タスクトレイ常駐型アプリを作っているんですが、そのアプリがタスクトレイにある間に
Windowsをシャットダウンしようとしてもできません。そのアプリを終了するとできます。
ネットで調べたら、タスクトレイ常駐アプリはシャットダウン時の処理をちゃんと書かないと
そうなるということがわかりました。
そこでhttp://dobon.net/vb/dotnet/system/sessionending.html←を参考にして、

コンストラクタに↓とかきまして
SystemEvents.SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding);

private void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
{
if (e.Reason == SessionEndReasons.Logoff)
{
Application.Exit();
}
else if (e.Reason == SessionEndReasons.SystemShutdown)
{
Application.Exit();
}
}
というメソッドを書きました。

しかし、うまくいきません。そのアプリが終了してくれずタスクトレイに常駐したままです。

どうすればいいんでしょうか?
967966:2010/06/26(土) 13:09:38
ちなみに、WndProcでやったらどうなるかと思いまして

protected override void WndProc(ref Message m)
{
const int WM_QUERYENDSESSION = 0x11;
const int WM_ENDSESSION = 0x16;
switch (m.Msg)
{
case WM_QUERYENDSESSION:
Application.Exit();
break;
case WM_ENDSESSION:
Application.Exit();
break;
}
base.WndProc(ref m);
}

↑と書いて見ると、今度はアプリの終了までは行くんですがPCのシャットダウンは
なりません。。

どうすればいいのかわからないので、知っている方がいましたら、教えてください。
968966:2010/06/26(土) 13:11:46
何度もすみません。

Windows終了時にWindowsからメッセージを受け取ってアプリケーションを終了する
コードを書かないといけないというのは、
http://www.woodensoldier.info/computer/csharptips/5.htm
で見つけました。
969デフォルトの名無しさん:2010/06/26(土) 13:35:47
単に通知領域にアイコンを表示するだけのアプリでもダメ?

なんか変なことやってると思うよ。
970デフォルトの名無しさん:2010/06/26(土) 13:39:39
ていうかそのページ、対象が.NET 1.x時代のだ
.NET 2.0以降ならFormClosingイベントでCloseReasonがUserClosingのときだけCancelするようにすれば
SessionEndingとか使わずとも問題ないはずだが
971デフォルトの名無しさん:2010/06/26(土) 14:13:51
>>969-970
私は、以前Javaプログラマで荒療治でネットからコピペして
何とか作っていたんですが、無理があったみたいです。Form_Closing メソッドを
private void frmTouroku_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason != CloseReason.ApplicationExitCall)
{
e.Cancel = true; // フォームが閉じるのをキャンセル
this.Visible = false; // フォームの非表示
}
}
だったのを
if (e.CloseReason == CloseReason.WindowsShutDown)
{
e.Cancel = false;
}
を付加したら、治りました。Windows終了時のApplicationExitを逃していたみたいです。
うまくできるようになりました。ありがとうございました。
972デフォルトの名無しさん:2010/06/26(土) 14:18:59
>>970さんの言うように、今度は
if(e.CloseReason == CloseReason.UserClosing)
e.Cancel = true;
とやってためしてみます。ありがとうございました。

しかし、みなさん、詳しいですね。C#は書籍も少ないので情報源が少なく
苦戦しています(;^^ ヘルプも重いですし。

解決できてよかったです。ありがとうございました。
973デフォルトの名無しさん:2010/06/26(土) 14:21:02
たいていは自分の書いたコードに問題があるんだから、
そこを重点的に見ていけばいいだけなんだが。

Javaプログラマとか書籍が少ないとか、なんも言い訳にならん。
974948:2010/06/26(土) 15:15:12
色々説明不足ですみません。
>>953の通り、自前クラスをDictionary<key, value>に入れるにあたり、
keyにGetHashCode()を使用して、一意性を確保したいということでした。

元々は従業員テーブルのモデルクラスなのですが、社員IDのようなものがなく、
常に支店CDと社員CDの二つを見なければならないため、これを解消したいと思ったのがきっかけです。
現在はList<T>を継承したクラスで管理しており、
Employees.FindByPK(支店CD, 社員CD)のような形で社員情報を取得しているのですが、
100人分取得しようとすると、それだけ毎回foreachで回すという無駄が出ています。

単純に連番やAddする際のDateTime情報からKeyの導出というのも考えたのですが、
別のモデルクラスの支店CD, 社員CDから、このクラスを関連づけようとした場合に
別クラスからはKey情報が判別できないため「なんとか支店CDと社員CDから一意な値を導けないか」と考えて質問しました。

>>948>>954の方法で試してみたいと思います。ありがとうございます。
975デフォルトの名無しさん:2010/06/26(土) 15:55:50
そういえばHashtableのキーって何で比較してるの?
intとかなら値だろうけどオブジェクトだと同じオブジェクトか比較するの?
具体的にはIPEndPointを使いたいんだけど
976デフォルトの名無しさん:2010/06/26(土) 16:00:51
>>975
まず GetHashCode の戻り値で大まかに判別。
その後、ちゃんと Equals で確認。
977デフォルトの名無しさん:2010/06/26(土) 16:01:18
GetHashCodeの値で大まかに振り分けて、対象の要素が含まれているグループ(同じハッシュ値をもつとは限らない)を
絞り込んだら片っ端からEqualsで比較してキーが一致したら検索成功
細かいことはハッシュ表でググれ
978デフォルトの名無しさん:2010/06/26(土) 16:25:24
だから948は一意にこだわる必要はないんだよね……
979デフォルトの名無しさん:2010/06/26(土) 17:36:50
>>976
>>977
その説明で完全にアルゴリズムまで理解しました
980デフォルトの名無しさん:2010/06/26(土) 18:03:20
>>979
教えた甲斐があった。
981デフォルトの名無しさん:2010/06/26(土) 18:38:50
979はワシが育てた
982デフォルトの名無しさん:2010/06/26(土) 19:40:33
次スレは?
983デフォルトの名無しさん:2010/06/27(日) 00:13:22
RSACryptoProviderでXMLキーじゃなくてバイナリデータでやり取りしたいんだけど
方法はあるの?メンバメソッド見る限りそれらしいものが無いんだけど
984デフォルトの名無しさん:2010/06/27(日) 00:36:12
>>983
やりとりと言われてもよく解らんが、
そのライブラリの本来の目的である暗号化、復号化としては十分使えるぞ。
アルゴリズムごとに決まったファイルサイズが増える格好になる。
985デフォルトの名無しさん:2010/06/27(日) 02:24:29
>>983
メンバ見りゃ見たままメソッドがあるように思えるんだが、何を言っているのかね?
986デフォルトの名無しさん:2010/06/27(日) 05:22:50
>>985
あったwExportCspBlobこれかwBlobってwwwなんでwww
987デフォルトの名無しさん:2010/06/27(日) 08:37:16
スレ作成方法しらない。
>>982がかわりに作成する。
988デフォルトの名無しさん
ふらっとC#,C♯,C#(初心者用) Part61
http://pc12.2ch.net/test/read.cgi/tech/1277597122/