ふらっとC#,C♯,C#(初心者用) Part56at TECH
ふらっとC#,C♯,C#(初心者用) Part56 - 暇つぶし2ch1:デフォルトの名無しさん
10/02/28 18:13:21
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

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

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

ふらっとC#,C♯,C#(初心者用) Part55
スレリンク(tech板:1番)

関連スレ
C#, C♯, C#相談室 Part55(実質56)
スレリンク(tech板:1番)

VB.NET質問スレ(Part33)
スレリンク(tech板:1番)

C++/CLI part3
スレリンク(tech板:1番)

2:デフォルトの名無しさん
10/02/28 18:30:08
F#最強wwwwwww

3:前スレ988
10/02/28 18:44:15
>>1さん ありがとうございます。

前スレのクリップボードについての質問者です。

MDIEというファイラーの挙動を見てみたのですが、切り取りはアプリ外にも
できましたが、終了するとクリップボードは空にされました。
切り取りかコピーかの情報をアプリケーション側が保持しているっぽいですね。

エクスプローラと同じ挙動をするように、切り取り情報をOS側に投げられたら
よいのですができなさそうですね・・・

ほぼプライベートで使うアプリケーションなので、こんなところにしておきます。
みなさんありがとうございました。

4:デフォルトの名無しさん
10/02/28 19:13:56
>>3
SHFileOperationでググれ

5:4
10/02/28 19:24:56
ごめん、コピペには対応していなかったみたいだ

6:デフォルトの名無しさん
10/02/28 20:04:14
弱いなおいw


7:デフォルトの名無しさん
10/03/01 00:19:29
>>4よりつええやついねえのか?

8:デフォルトの名無しさん
10/03/01 00:31:43
>>3
切り取り/コピーの情報もクリップボードに入っている
アプリ終了すると消えるのは、終了しても残すように指定されていないから

// StringCollection fileDropList;
var buf = BitConverter.GetBytes((int)DragDropEffects.Move);
var memStream = new MemoryStream(buf);
var data = new DataObject();
data.SetFileDropList(fileDropList);
data.SetData("Preferred DropEffect", memStream);
Clipboard.SetDataObject(data, true);

9:デフォルトの名無しさん
10/03/01 00:39:51
麻生だ。>>1乙。だが、リンクにゴミ(/1$/)が付いてる。あと、リンク修正も

C#, C♯, C#相談室 Part55(実質57)
スレリンク(tech板)

10:前スレ988
10/03/01 00:52:50
>>8 さん

ありがとうございます!
うまくいきました。
クリップボードに情報が入っていたのですね。


11:デフォルトの名無しさん
10/03/01 19:59:37
過疎が酷いw

12:デフォルトの名無しさん
10/03/01 22:01:04
くそ韓国のせい

13:デフォルトの名無しさん
10/03/01 22:24:02
こうやって韓国がどんどん嫌われるのは嬉しい

14:デフォルトの名無しさん
10/03/02 20:57:16
スレチ

15:デフォルトの名無しさん
10/03/02 21:00:22
exploerのように3桁づつカンマを入れたリストビューを
ソートしようと思っているんですが
(例)123,456,789(右揃え)を数値に変換するにはどうすればいいでしょうか?

文字列でソートしてもうまくいかないので数値に変換しようと思ってます

16:デフォルトの名無しさん
10/03/02 21:04:49
NumberStyles 使った Int32.Parse 使えば変換できるけどさ
それよりTagとかにソート用の情報オブジェクト持たせた方が楽よ

17:デフォルトの名無しさん
10/03/02 21:19:43
System.Net.Mail.SmtpClient でメールを送るプログラムを書こうと思います。
このクラスを使うとして、envelope from を設定することは可能でしょうか?

TcpClient とかを使って自分でサーバとやりとりをすれば出来そうなのですが、
出来れば楽をしたいな、と。w

18:デフォルトの名無しさん
10/03/02 21:20:24
NumberStylesでぐぐったら
ぴったりのとこ見つけました
ありがとうございました
URLリンク(www.atmarkit.co.jp)

19:デフォルトの名無しさん
10/03/02 21:41:03
>>17
URLリンク(www.diaryofaninja.com)

20:デフォルトの名無しさん
10/03/02 22:45:04
>>19
ありがとうございます。

いまはちょっと寝ぼけているので、明日チャレンジします。
こんなにすぐに教えていただいたのに、ごめんなさい。

21:デフォルトの名無しさん
10/03/03 03:47:03
前からプログラムっていうのがやってみたくて、重い腰をあげてC#Expressというのを
苦労してインストールしてみたお。だいぶGUI画面とかできるようになったお。

だけど、今日、本屋いったらF#って言う本が出ててVisualStudio2010から正式にうんちゃらかんちゃらって
かいてあったお。

C#はこの先置いてけぼり食らうのかお・・

22:デフォルトの名無しさん
10/03/03 04:31:27
衝撃的なデビューから早10年
結局メジャーにはならず、プログラム初心者向けの言語にしかならなかった

そして時代はF#

23:デフォルトの名無しさん
10/03/03 04:53:59
public string Name
{
set
{
_name = value;
}
}

こういったプロパティって何か意味があるんですか?
サイトのTIPS見てもよくわからない
ただ単にデータを格納するだけなら直接publicな_nameに格納してもいいものだけど

24:デフォルトの名無しさん
10/03/03 06:36:32
>>21
C#とF#は棲み分けが違う

>>23
オブジェクト指向では直接フィールドメンバにアクセスすることを嫌う。
カプセル化でぐぐりなさい。といっても、意味が広いからすぐに理解はできないと思うけど。

25:デフォルトの名無しさん
10/03/03 10:24:20
>>24
オブジェクト指向というよりコンポーネント指向。
C#など最近の言語はこの二つが混ざり合ってるけど、
interfaceやpropertyはコンポーネント由来の機能。

26:デフォルトの名無しさん
10/03/03 11:15:50
WEBページで右クリックして出るIEショートカットメニューに
自作ソフト登録して、自作ソフトにそのWEBページのURLが
送られるようにしたいんだけどどうすればいいですか?

27:デフォルトの名無しさん
10/03/03 11:35:46
IEMenuExt入れてヘルプ見ながら色々弄ってみれば何やってるか分かるよ
ちなみに登録できるのはあくまでJavaScript

28:デフォルトの名無しさん
10/03/03 11:50:29
>>27
ありがとう
調べてみます

29:デフォルトの名無しさん
10/03/03 11:54:53
>>25
コンポーネント指向っていうのはキャッチコピーみたいなもので
具体的にどこがどうコンポーネント指向かというのは難しい
あえていうなら、MSのようにクラスの利用者を「お客様」として扱う考え方かな
あくまでオブジェクト指向がベース

30:23
10/03/03 12:22:18
>>24
内部を隠蔽化とかそういう説明は沢山あるけど
具体的にどういう場合に支障があるんでしょうか?
ただ代入するだけなら意味がないと思うんだけど

例えば>>23だとフィールドメンバの型を変更することになった場合

public string Name
{
  set
  {
    _nameNumber =int.Parse(value);
  }
}

こんな感じにできるということ?

31:デフォルトの名無しさん
10/03/03 12:33:14
まあそれはかなり極端な場合だがそういうのもある
他にも入力値チェックしたくなったりとか値変更時にイベント発生させたりとか

で、「初めはフィールドにしといて何かしたくなったらプロパティにすればいいじゃん」については
取り敢えずこう返す、「今なら自動実装プロパティがあるからフィールドにする意味ないじゃん」

32:デフォルトの名無しさん
10/03/03 12:36:03
プロパティは遅いやん

33:デフォルトの名無しさん
10/03/03 12:46:31
オブジェクト指向の真髄は多態であって、
カプセル化なんてのは構造化プログラミング時代でも普通にやってた。モジュール化とか。

34:デフォルトの名無しさん
10/03/03 13:09:02
つい最近某所のベンチマークソースで試してみたら、デバッグビルドではプロパティが数倍遅かったけど、リリースビルドなら誤差レベルだったな

35:デフォルトの名無しさん
10/03/03 13:09:44
>>32
それは実際できたものを動かしてみたら遅くて、その原因箇所を探したら
プロパティアクセサだったとき(まずありえないけど)に考えること

36:デフォルトの名無しさん
10/03/03 13:15:53
SilverlightやらWPFやらで流行りのMVVMパターンで組むなら
Setterの中であれこれやる事になるからプロパティ必須

37:デフォルトの名無しさん
10/03/03 13:23:07
リモートオブジェクトで値を受け渡す場合の方法に
値渡しとインターフェイスポインタ渡しがあって、
プロパティはインターフェイスポインタ渡しで必要になった技術なんだよね。
現在ではリモート処理以外でも広く使われるようになった。


38:23
10/03/03 14:16:55
エラーチェックと言っても普通呼び出す側でチェックするのに
プロパティでする意味が有るのかな?
エラーチェックを2回することになるんですよね?

39:デフォルトの名無しさん
10/03/03 14:25:51
int[] a = new int[1];
int b = 2;
a[b] = 4;
bがa.Length未満かどうかはそりゃ呼び出し側はチェックするだろうけど
だからといってint[]側がチェックしないわけないだろ?

40:デフォルトの名無しさん
10/03/03 14:37:35
規約をチェックして例外投げるのはかまわないけど
利用者が例外をキャッチしないといけないような設計はダメだよ
プロパティが例外を投げることは普通想定しない
利用者が事前にチェックできないような条件なら、代入時じゃなくて
そのプロパティの値が内部で使用されるときに例外を投げるべき

41:23
10/03/03 15:08:27
例えば

①ファイル入出力クラスを利用するクラス

②ファイル入出力をするクラス

エラーメッセージとして"ファイル名を入力してください"と出す場合
この場合両方のクラスでファイルが存在するかチェックすべき?
それとも②に一旦ファイルパスを送って例外が出された場合①のクラスでエラーメッセージを表示すべき?

42:デフォルトの名無しさん
10/03/03 15:13:08
両方

43:23
10/03/03 15:19:34
うーん、こういうことってやっていくうちにわかるのかな
なんとなくわかったようなわからないような
とにかく、ありがとうございました

44:デフォルトの名無しさん
10/03/03 15:20:55
>>23は頭固いというか誰かの洗脳でも受けたのか?

45:23
10/03/03 15:27:31
オブジェクト志向って同じ機能をまとめることでしょ?
同じ機能が他のクラスに合ったらまとめたくなるじゃない?

46:デフォルトの名無しさん
10/03/03 15:30:35
今度のMicrosoftの新言語はG♭

47:デフォルトの名無しさん
10/03/03 15:32:11
>>45
機能をまとめるってのがなあ・・・
まあそういうのはクラスわけができてないっていうんだろうけど

48:デフォルトの名無しさん
10/03/03 15:38:15
②のクラスはファイル名が与えられなかったので、ファイルを開けませんでした
というエラー報告を、例外として利用クラスに投げるだけにとどめるべき

どう扱い、どう表示するかは、ファイルクラスには関係ない

デバッグ時なら②クラスがエラー表示してもかまわんと思うけど

49:デフォルトの名無しさん
10/03/03 15:53:43
流れぶった切ってすいません。
ちょっと教えて。

System.Diagnostics.Trace クラスで出力したデータを
VSの出力windowみたいな感じにモニタするソフトってあります?


50:デフォルトの名無しさん
10/03/03 16:02:04
あったな、そういうの
syslogに投げるやつもあったな

51:デフォルトの名無しさん
10/03/03 16:17:45
DebugViewが定番
「VSの出力windowみたいな感じ」かどうかは自分で確認してくれ
何を持ってそう判断するのかは>>49にしか分からんので

52:49
10/03/03 16:23:50
>>50さま
レス有り難う御座います。

ログを出力する側に手を加えてTextやEventLogへ出力する方法は
ググると結構見つかるのですが・・・

TraceListenerを自作するべきか、悩んでます。
苦労して作った後に、いやこんなツールはあるんだけどね。知らなかったの?
ってなるのが、怖わかとです。


53:デフォルトの名無しさん
10/03/03 16:25:06
>>52
>TraceListenerを自作するべきか、悩んでます。
>苦労して作った後に、いやこんなツールはあるんだけどね。知らなかったの?
それも勉強だろ

54:49
10/03/03 16:36:32
>>51さま

DebugView(DbgView)
URLリンク(www.atmarkit.co.jp)
URLリンク(technet.microsoft.com)

やっぱり聞いて良かったです。

そうそう、こんなツールが欲しかったんです。!!
なんでMSはVS2008にデフォルトで付いてくれないんだろう(怒

助かります。
有り難う御座います♪ 

>>53
何事も勉強ですよね・・

ただこの場合はオリジナルのデバックIFを作っても、
発展性も望めないので・・


55:デフォルトの名無しさん
10/03/03 17:01:33
WEBページのボタンを自動でクリックしたい・・・

56:デフォルトの名無しさん
10/03/03 17:02:20
>>55
ぐぐれ
その辺は結構情報あるよ

57:デフォルトの名無しさん
10/03/03 17:51:17
ピクピク
webbrowserでやればいいのかな?
第一歩の踏み出すためのぐぐる検索キーワード教えて

58:デフォルトの名無しさん
10/03/03 17:55:15
HTTPとかPOSTとかGETとか・・・

59:デフォルトの名無しさん
10/03/03 17:56:53
え!?そこから勉強しないとダメなんだ・・・orz

60:デフォルトの名無しさん
10/03/03 17:58:17
魔法じゃないんだからすこしはやれよ

61:デフォルトの名無しさん
10/03/03 20:29:07
webbrowserでナビゲート終了後にhtmlドキュメントを調べるだけだろ
javascriptとかでボタンの列挙とかあるしやることはそれほどかわらん

62:デフォルトの名無しさん
10/03/03 20:32:45
webbrowser click
でググルだけで出てくる

63:デフォルトの名無しさん
10/03/03 20:57:20
>>61
>>62
ありがとうございます
これでいけそうです
URLリンク(www.atmarkit.co.jp)

64:デフォルトの名無しさん
10/03/03 21:03:09
web 自動運転 ボタン Document.GetElementById HtmlElement

とかで必死にぐぐってたのになかなか目的サイトが見つからなかった
これで半日かかってしまった

webbrowser click

で検索すると大量に目的のサイトが出た
初心者はこういうので時間かかるんだよなぁ

65:デフォルトの名無しさん
10/03/03 21:08:30
自動運転はねーよww

66:デフォルトの名無しさん
10/03/03 21:09:42
どうでもいいなりよ

67:デフォルトの名無しさん
10/03/03 21:52:45
TraceListenerはなんか変。
なんであんな派生しにくいんだよ。


68:デフォルトの名無しさん
10/03/03 21:53:02
>>23 >>32
最近出版されたEffective C#嫁。
そのプロパティのことがずばり書かれている。

69:デフォルトの名無しさん
10/03/03 21:54:47
>>52
TraceListener使うのが一番。
ログの吐き出しはlog4netで。

70:デフォルトの名無しさん
10/03/03 22:27:56
log4netいまいち
NLogのがいい気がする

71:デフォルトの名無しさん
10/03/03 23:13:59
>>68
スバリ教えて

72:デフォルトの名無しさん
10/03/03 23:17:05
C#2008EE使っているのですが
デザイン画面のコントロールのプロパティで
boolの値をドロップダウンで選択しようとしても
一瞬開いて閉じてしまう症状があるのですが
こういった症状になったことある方いますでしょうか?

何度か連打していれば元に戻るのだけど

73:デフォルトの名無しさん
10/03/03 23:19:41
boolならドロップダウンさせずともダブルクリックで切り替えれば十分な希ガス

74:デフォルトの名無しさん
10/03/03 23:39:58
>>71
やーだお(´・ω・`)

75:デフォルトの名無しさん
10/03/03 23:58:27
>>33
それはただのフィールドの隠蔽化。カプセル化はもっと深い。

76:デフォルトの名無しさん
10/03/04 00:02:22
>>71
プロパティ、中身がシンプルなものは JIT 時にインライン化される。
プロパティにすることで、フィールドをpublicにするよりも変更に強くなる。

77:デフォルトの名無しさん
10/03/04 00:04:39
>>75
いやいや>>33の言うとおりでしょ。
(OOPの真髄が多態という見解には異論があるが)

カプセル化なんてOOPよりずっと昔からある概念なんだけど。

78:デフォルトの名無しさん
10/03/04 00:06:54
インライン化されてもコピーが入るからまったくコストが無くなるわけじゃないよ

79:デフォルトの名無しさん
10/03/04 00:23:52
へえ

80:デフォルトの名無しさん
10/03/04 00:24:15
>>23
まあごく例外的な場合とか「フィールドは公開すべきでない」という精神論を別にすれば、
プロパティにする必要性が出た時点でプロパティにする、という方針でも
別に悪くはないと個人的には思う。別にたいした手間でもないし。

ただ、今時プロパティ書くのもフィールド書くのも手間はあまり違わないわけで、
そういう現状を前提にすると「なぜ<あえて>プロパティなのか」っていう疑問は
あまり自明じゃなくなって来てるな。

81:デフォルトの名無しさん
10/03/04 00:31:26
>>78
コピーって何?


82:デフォルトの名無しさん
10/03/04 01:30:41
>>77
オブジェクト指向のこころを読めば世界が広がるよ。

83:デフォルトの名無しさん
10/03/04 03:44:00
クラスの内部から、フィールドには直接アクセスすることもプロパティが実装されていれば
プロパティからフィールドにアクセスすることもできますが、プロパティが
実装されている場合、積極的にプロパティを使ってフィールドにアクセスすべきですか?
Javaのアクセッサ(getter/setter)では記述のコストが高くてやってられないのですが、
C#ではどうなんでしょうか?

84:デフォルトの名無しさん
10/03/04 03:47:22
自分でテストコード書けばいいじゃねえか

85:デフォルトの名無しさん
10/03/04 04:05:28
>>84
速度だけの話じゃないです。

クラスの内部からフィールドへのアクセスもプロパティを通すことで、
カプセルとその他もろもろの恩恵を受けられると思ったんだけど、
そういった形でプロパティを使うってありですか?

86:デフォルトの名無しさん
10/03/04 04:08:28
自分でテストコード書けばいいじゃねえか

87:デフォルトの名無しさん
10/03/04 04:12:48
いや、あんたに聞いてない

88:デフォルトの名無しさん
10/03/04 04:17:18
ママにでも聞けばいいじゃねえか

89:デフォルトの名無しさん
10/03/04 04:28:11
論外さようなら

90:デフォルトの名無しさん
10/03/04 04:29:53
二度と来るなよ

91:デフォルトの名無しさん
10/03/04 04:32:50
日本語分かる?ちんぱん

92:デフォルトの名無しさん
10/03/04 06:14:19
webbrowser

<input type="image" onclick="hoge" name="homo">

GetAttribute("onclick")でonclickの値(hoge)が取得できないのですが、普通はできるのでしょうか?
値は"System.__ComObject"というのが返ってくるだけです
同じやり方でtypeの値はちゃんと取得できます

93:デフォルトの名無しさん
10/03/04 06:19:16
vc# 2005使い始めたんだけど、
デフォルトのインデントがタブじゃなくて、スペースなのね。

c#ではこれが流儀?
これに慣れた方がいい?


行をBSで逆インデントする時に、
BSを連打しないといけないのが、苦痛。
Shift+tabは面倒。



94:デフォルトの名無しさん
10/03/04 06:26:08
>>92
その周辺のコードは晒せる?

>>93
設定で切替できなければタブとスペースの切替はできないってことだろ

それにVC#の場合オートインデントなのでガシガシ打ってもどうにかなるだろ

95:デフォルトの名無しさん
10/03/04 06:30:13
トイレに行ってきます(´・ω・`)

96:94
10/03/04 06:31:20
どこでもいいので

{
int aaaa = 10;
aaaa++;
}

を書いた上で

//{
int aaaa = 10;
aaaa++;
//}

という感じでネストをいじった上で

上記4行を一旦切り取って同じ位置に貼り付けてみると勝手にインデント調整してくれるよ

97:デフォルトの名無しさん
10/03/04 06:32:16
C#で生ソケットについて経験者いたら教えてください。
下記のコーディングで間違いとか、抜けとか、ありますか?

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Tcp);
TCPヘッダ作成
IPヘッダ作成
ヘッダ連結
チェックサム
int nBytes = socket.SendTo(sendbuf, sendbuf.Length, SocketFlags.None, endpoint);

SendToメソッドの箇所でエラーが発生します
エラーコード:10022
エラーメッセージ:無効な引数が提供されました

原因分かる方、教えてください。

98:デフォルトの名無しさん
10/03/04 06:34:13
>>97
デバックでとまった際に引数みてみなよ

99:デフォルトの名無しさん
10/03/04 06:37:08
>>98
といいますと?

100:デフォルトの名無しさん
10/03/04 06:38:19
TCPヘッダ作成
IPヘッダ作成
ヘッダ連結
チェックサム

あと可能な限りここも書きなよ

固有情報は適当に書き換えて

101:デフォルトの名無しさん
10/03/04 06:45:31
TCPヘッダ作成は下記の通りです。

/********************************************************************************
* TCPヘッダ取得
*******************************************************************************/
public byte[] getTcpHeader(Int16 selfport, Int16 destport)
{
TcpHeader header = new TcpHeader();
header.selfport = (UInt16)IPAddress.HostToNetworkOrder(selfport);
header.destport = (UInt16)IPAddress.HostToNetworkOrder(destport);
header.seq_num = 1;
header.ack_num = 0;
header.offset_and_reserved_and_flags = 5; // offset
header.offset_and_reserved_and_flags <<= 6; // reserved
header.offset_and_reserved_and_flags |= 0;
header.offset_and_reserved_and_flags <<= 1; // URG
header.offset_and_reserved_and_flags <<= 1; // ACK
header.offset_and_reserved_and_flags <<= 1; // PSH
header.offset_and_reserved_and_flags <<= 1; // RST
header.offset_and_reserved_and_flags <<= 1; // SYN
header.offset_and_reserved_and_flags |= 1;
header.offset_and_reserved_and_flags <<= 1; // FIN
header.window = (UInt16)IPAddress.HostToNetworkOrder((Int16)32767);
header.checksum = 0;
header.urgent_pointer = 0;

return header.getBytes();
}


102:デフォルトの名無しさん
10/03/04 06:49:03
IPヘッダ作成は下記の通りです(パート1)

/********************************************************************************
* IPヘッダ取得
*******************************************************************************/
public byte[] getIpHeader(byte[] databuf, string selfAddress, string destAddress, byte protocol)
{
Ipv4Header header = new Ipv4Header();
header.version_and_length = 69;
header.service_type = 0;
if (protocol == 4)
{
header.packet_length = 20;
}
else
{
header.packet_length = 40;
}
Random rand = new Random();
header.identifier = (short)rand.Next(32767);
header.flagment_offset = 0;
header.ttl = 64;
header.protocol_no = protocol;
header.checksum = 0;


103:デフォルトの名無しさん
10/03/04 06:50:08
IPヘッダ作成は下記の通りです(パート2)

int startpoint = 0;
int endpoint = selfAddress.IndexOf(".");
header.self_ip1 = byte.Parse(selfAddress.Substring(startpoint, (endpoint-startpoint)));
startpoint = endpoint + 1;
endpoint = selfAddress.IndexOf(".", startpoint);
header.self_ip2 = byte.Parse(selfAddress.Substring(startpoint, (endpoint - startpoint)));
startpoint = endpoint + 1;
endpoint = selfAddress.IndexOf(".", startpoint);
header.self_ip3 = byte.Parse(selfAddress.Substring(startpoint, (endpoint - startpoint)));
startpoint = endpoint + 1;
endpoint = selfAddress.IndexOf(".", startpoint);
header.self_ip4 = byte.Parse(selfAddress.Substring(startpoint, (selfAddress.Length - startpoint)));

startpoint = 0;
endpoint = destAddress.IndexOf(".");
header.dest_ip1 = byte.Parse(destAddress.Substring(startpoint, (endpoint - startpoint)));
startpoint = endpoint + 1;
endpoint = destAddress.IndexOf(".", startpoint);
header.dest_ip2 = byte.Parse(destAddress.Substring(startpoint, (endpoint - startpoint)));
startpoint = endpoint + 1;
endpoint = destAddress.IndexOf(".", startpoint);
header.dest_ip3 = byte.Parse(destAddress.Substring(startpoint, (endpoint - startpoint)));
startpoint = endpoint + 1;
endpoint = destAddress.IndexOf(".", startpoint);
header.dest_ip4 = byte.Parse(destAddress.Substring(startpoint, (selfAddress.Length - startpoint)));

104:デフォルトの名無しさん
10/03/04 06:52:03
IPヘッダ作成は下記の通りです(パート3)

if (protocol == 4)
{
header.checksum = this.calcCheckSum(header.getBytes());
}
else
{
header.checksum = this.calcCheckSum(header.getBytes().Concat(databuf).ToArray());
}

return header.getBytes();
}


105:デフォルトの名無しさん
10/03/04 06:53:41
チェックサム計算は下記の通りです。

/********************************************************************************
* チェックサム計算
*******************************************************************************/
public short calcCheckSum(byte[] buf)
{
Int32 checksum = 0;
byte[] wrkbyte;
if (buf.Length == 1)
{
checksum += buf[0];
}
else if (buf.Length >= 2)
{
for (int i = 0; i < buf.Length; i += 2)
{
if ((i + 1) == buf.Length)
{
checksum += buf[i];
}
else
{
wrkbyte = new byte[] { 0, 0 };
Array.Copy(buf, i, wrkbyte, 0, 2);
checksum += Convert.ToInt32(BitConverter.ToInt16(wrkbyte, 0));
}
}
}
checksum = (checksum >> 16) + (checksum & 0xFFFF);
return (short)((~checksum) & 0xFFFF);
}

106:デフォルトの名無しさん
10/03/04 07:32:22
処理の流れは下記の通りです。

// Initialize a Socket of Type TCP
socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Tcp);
byte[] tcpheaderbuf = Common.getInstance().getTcpHeader(Int16.Parse(this.selfPort), Int16.Parse(this.destPort));
byte[] ipheaderbuf = Common.getInstance().getIpHeader(tcpheaderbuf, this.selfAddress, this.destAddress, 6);
byte[] sendbuf = ipheaderbuf.Concat(tcpheaderbuf).ToArray();
// Send the Packet over the socket
IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Parse(this.destAddress), UInt16.Parse(this.destPort));
EndPoint endpoint = (ipendpoint);
this.iStartTime = Environment.TickCount;
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);
int nBytes = socket.SendTo(sendbuf, sendbuf.Length, SocketFlags.None, endpoint);
if (nBytes == -1)
{
return false;
}
return true;


107:デフォルトの名無しさん
10/03/04 07:33:42
書き込み制限食らってました^^;
以上がソースですが、まだネットワーク系を勉強中なため、基本的なことが抜けてたらご指摘ください。


108:デフォルトの名無しさん
10/03/04 07:44:23
SocketType.Rawは使ったこと無いけどConnectしてないのが悪いみたいだな
変更後の例でもsocket.Connectをコメントにするとエラーになるし

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Tcp);
TCPヘッダ作成
IPヘッダ作成
ヘッダ連結
チェックサム
int nBytes = socket.SendTo(sendbuf, sendbuf.Length, SocketFlags.None, endpoint);



Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
TCPヘッダ作成
IPヘッダ作成
ヘッダ連結
チェックサム
socket.Connect(endpoint);
//int nBytes = socket.SendTo(sendbuf, sendbuf.Length, SocketFlags.None, endpoint);
//ソースみたら内部でoffset指定タイプを呼んでるだけだった
int nBytes = socket.SendTo(sendbuf, 0,sendbuf.Length, SocketFlags.None, endpoint);

109:デフォルトの名無しさん
10/03/04 07:46:10
EEじゃないのならMSからソースなどを入手して
自分のプログラムと一緒にトレースしてみた方がいいかもね

110:デフォルトの名無しさん
10/03/04 08:01:14
2chに貼られても読む気がしねー
うpろだに丸々うpしる!

111:デフォルトの名無しさん
10/03/04 08:26:39
>>92
onclickのスクリプトコードそのものが欲しいのならOuterHtmlから切り出すくらいしかないはず
コード手に入れて何したいのか知らんけど

112:デフォルトの名無しさん
10/03/04 08:37:02
関係ないけど、offset_and_reserved_and_flagsはflagsなenumか定数にでもしとけ

113:デフォルトの名無しさん
10/03/04 15:08:35
>>111
そこにクリック後のURLの一部が書いてあって
それを使えばわざわざクリックしてページを開かなくてもいいことに気づいたので
利用しようと思っていたのです

OuterHtmlでいけました
ありがとうございます

114:デフォルトの名無しさん
10/03/04 16:36:28
デザイナーで配置したコントロールのNameを一括変換とかする方法はありますか?
プロパティ開いてNameをシコシコ書き換え?

115:デフォルトの名無しさん
10/03/04 17:08:36
もとの名前に何かルールがあるなら
フォーム名.csとフォーム名.Designer.csを正規表現置換
ないなら一括変換機能がもし仮にあったとしても無理だと思うよ

116:デフォルトの名無しさん
10/03/04 17:11:25
>>115
レスありがとうございます。
やっぱり外部ツールとかで正規表現かけるかデザイナーのプロパティのところでNameを変更して
デザイナーに関連項目の名称置換を行ってもらうとかになりますかね・・・

117:デフォルトの名無しさん
10/03/04 17:19:36
>>72なんですが
ドロップダウンで選択するものは全部すぐ閉じます
あと、スニペット挿入時で出るウィンドウを一瞬で閉じます

どなたかこの対処法ご存じないでしょうか?

118:デフォルトの名無しさん
10/03/04 17:48:49
どこかキーボード押しっぱなしになってない?

119:デフォルトの名無しさん
10/03/04 17:49:38
っマウスを買い換える

120:デフォルトの名無しさん
10/03/04 17:50:32
>>116
いや普通に>>115の2つのファイルをエディタで開いて
VSの置換機能で置換するだけ
ただしコントロールのアクセスレベルがprivateの場合に限る

121:デフォルトの名無しさん
10/03/04 19:47:48
>>118
特に何もしてないdす
久しぶり起動してそれまでにいくつか常駐ソフトやいろいろなソフトいれたので
それが影響してるのかもしれないが、一応常駐しているのはすべて切ったけどだめだった
コンテキストメニューはちゃんと開くんだけど、スニペットのウィンドウだけ違う方法で開いているのかな

>>119
買ったばかりです・・

スニペット挿入はどういう操作で閉じるか教えていただけませんか?

122:デフォルトの名無しさん
10/03/04 22:36:27
C#4.0ではExcel2007みたいなリボンとか作れるようになるけど
どうせある程度慣れたらCtrl+Dみたいなキーボード操作しかしなくなるからでっかいボタン表示してもうざいだけだな・・・

リボンとか意味のない機能だ

123:デフォルトの名無しさん
10/03/04 22:40:58
Officeくらい機能盛りだくさんでないとあんまり使い道ないわねぇ、リボン。

124:デフォルトの名無しさん
10/03/04 22:43:46
>>123
候補はある>2chブラウザ

あとwindowsを搭載したタッチパネル系デバイスがイマイチ普及しないのは
windowsの基本UIが小さすぎるのでペンなどの先が細い物じゃないと使いにくい
というところがあったからなんだよね・・

タッチ前提になると変わると思うよ
ただおofficeはそもそもタッチで使うことはないので意味ないだろうけどw

エンターテイメント要素がある物には有効だよ

125:デフォルトの名無しさん
10/03/04 23:26:31
いやリボンはタッチパネルを想定してアイコンでかくなってるわけではないでしょ。

っていうか、汎用OS上のアプリに限れば、タッチパネルは指をポインティングデバイスに
しようって発想じゃなくて、むしろマウスジェスチャー的な補助的操作の
延長線上のものでしかないと思うけど。

あと、リボンは、たとえカスタマイズ可能になっても作業領域や表示領域を
広くとりたい用途(例えばワード)には全然向かないね。

126:デフォルトの名無しさん
10/03/05 00:06:23
ケチくせーこと言うなよ。
じきにモニターの解像度が20000*10000とかになるって

127:デフォルトの名無しさん
10/03/05 00:18:52
使う前は叩いてたけど、実際に触ってみたら結構快適で気に入った。
作業領域を広くしたい時は隠せばいいじゃん。

128:デフォルトの名無しさん
10/03/05 00:26:07
>>126
解像度上げてもフォントが読めるサイズでないと話にならないから
モニターのインチが大きくならんと意味なかろう
俺のはすでに24なんだが、この数倍のモニターは部屋に置けねーよw

129:デフォルトの名無しさん
10/03/05 00:43:14
>>126
モニタは今くらいでいい
HMDをそれくらいにしてくれ

130:デフォルトの名無しさん
10/03/05 01:20:10
>>129
ケチ。

131:デフォルトの名無しさん
10/03/05 01:20:32
>>128
文字を大きくすると意味ないしなぁ。
必然的にモニタサイズ大きくする必要があるわけで、27インチが俺の射程距離内
に入ってきますた

132:デフォルトの名無しさん
10/03/05 01:53:39
マルチモニタおいしいです

133:デフォルトの名無しさん
10/03/05 06:10:53
うん

134:デフォルトの名無しさん
10/03/05 07:46:16
リファラ設定していろいろダウンロードできるようになったけど
MMSのストリーミング動画の落とし方がわからない・・・

135:デフォルトの名無しさん
10/03/05 07:56:16
GAS使っとけ

136:デフォルトの名無しさん
10/03/05 09:42:24
GASでできるけど
タイトル変えたりするのが面倒だから
自分で作ろうと奮闘してるんだが
むりぽww

137:デフォルトの名無しさん
10/03/05 10:26:24
//////////////////////////////////////////////////
public void button1_Click(object sender, EventArgs e)
{

int y = int.Parse(textBox1.Text);
int x = int.Parse(textBox2.Text);
int _y = 520 * x / y;
textBox3.Text = Convert.ToString(_y);

}
///////////////////////////////////////////////////

Form1の中なんですけど、デバッグ中にボタンおしてもtextBox3に変化がない
どうすればいいんでしょうか?
よろしくお願いします

138:デフォルトの名無しさん
10/03/05 10:29:33
イベントハンドラが設定されてないとか?

buttonのclickイベントでその関数呼ばれるようにしてある?

139:デフォルトの名無しさん
10/03/05 10:29:43
public……そのメソッド手で直接追加した?

140:デフォルトの名無しさん
10/03/05 10:54:57
>>138
ちょこっと探してきたら,これがあったので大丈夫ですかね?
this.textBox3.TextChanged += new System.EventHandler(this.button1_Click);

>>139
見る人が見れば分かるんですね
元々はprivateで書かれてて、それでいろいろと試行錯誤をしてみたんですよ
まぁ、それの跡ですねw 一応直しておきました

141:デフォルトの名無しさん
10/03/05 10:58:21
>>140
ちげーよw

ボタンが押されてもbutton1_Click(object sender, EventArgs e)これが呼ばれてないから
変わらないんだろうw

142:デフォルトの名無しさん
10/03/05 10:59:48
メソッドの名前は便宜的なもので、button1_Clickという名前でもbutton1のクリックとは関係ない
で、明らかにtextBox3のTextChangedのときに呼び出されるようにしてるじゃん

143:デフォルトの名無しさん
10/03/05 11:00:51
windowsでプログラム組む上での基本的な仕組みを分かってないのは痛いな

144:デフォルトの名無しさん
10/03/05 11:03:28
というか分かっててあえて分からないフリして釣ってるようにも見える

145:デフォルトの名無しさん
10/03/05 11:04:32
>>141,142
フォームのデザイナでもう一回メッソド作り直したら、
正常に動きました

>>143
おっしゃるとおりだと思います
勉強し直します

ありがとうございました

146:デフォルトの名無しさん
10/03/05 12:23:03
>>136
そういう時はGASを制御するアプリを作るんだ

147:デフォルトの名無しさん
10/03/05 13:27:58
>>146
ダウンロードするリストだけ自前で作って
MMSをダウンロードするソフトに読み込ませてdlした方が早そうですね

148:デフォルトの名無しさん
10/03/05 16:34:44
ねえ。。俺もそれで(>>137)迷ってたんだけど・・・

解決方法がわからん・・誰か教えて。。

Form1_ClosingとnotifyIcon1_DoubleClickを手で直接入力しちゃったんだけど・・
たしか、VB6だと、オブジェクトをフォームデザイナの左のコンボボックスで選択して右のコンボボックスで
適したイベントハンドラを選択できるようになってたんだけど・・

VC#2005Expressだとやり方わかりません。すみません、誰か教えてください。。

149:デフォルトの名無しさん
10/03/05 16:37:34
自動プロパティをして、後でフィールド変数が欲しくなった場合
すべての変数を書き換える作業をしないとダメなんですか?

public string Name{get;set;}

public void hoge()
{
  Name="hage"; ←こういうの全部 _name に書きかけなきゃならないの?
}

だったらやっぱり、最初からフィールド変数使った方が楽な気がするんだけど

150:デフォルトの名無しさん
10/03/05 16:39:02
>>148
URLリンク(uproda.2ch-library.com)
雷マークがイベントハンドラの設定
右下の赤枠のマークを押すと画像の場合はFormのLoadイベントのイベントハンドラを
IDEが候補をだしてくれる

151:デフォルトの名無しさん
10/03/05 16:41:24
>>149
別に内部だからってプロパティに代入しちゃダメな訳じゃないが?

152:150
10/03/05 16:44:24
まだイベントハンドラが無い場合は作りたいイベントのところでダブルクリックすれば
勝手に作ってくれる

153:デフォルトの名無しさん
10/03/05 16:50:33
内部も外部もプロパティで制御するのか・・・その方が便利か

154:デフォルトの名無しさん
10/03/05 17:36:22
>>153
ちげーよw

155:デフォルトの名無しさん
10/03/05 17:48:01
クラスについて教えてください。
(1)クラスを呼び出すとき、別スレッドにするには、どうしたらよいですか。

おなじ名前空間にあるクラスを呼び出しています。

クラス名 名前 = new クラス名();
名前.メソッド名();

で呼び出すときに、スレッドにするにはどうしたらよいですか?

(2)この処理って、終わったら、呼び出したクラスに関するいろいろはぜんぶ自動的にdisposeされるんですか?
それとも、
名前.Dispose();
と処理する必要があるのですか?

以上2点、よろしくお願いします。


156:デフォルトの名無しさん
10/03/05 17:51:11
>>155
おれより賢そうだから>>149の質問ズバリ教えて

157:デフォルトの名無しさん
10/03/05 17:55:03
>>156
いや、ぜんぜん賢くないし。
get/setなんて使ったことないです。
ごめんなさい。


158:デフォルトの名無しさん
10/03/05 17:56:54
>>155
スレッドとクラスって関係ないし
Disposeなんて所詮そう言う名前のメソッドに過ぎないんだからusingもせずに勝手に呼ばれるとかないし

159:デフォルトの名無しさん
10/03/05 17:57:24
はじめから
>public string Name{get;set;}
こんなのしなければいいだけ

160:デフォルトの名無しさん
10/03/05 17:57:46
>>149
Nameプロパティをリファクタリングで_nameに名前変更
_nameプロパティの宣言をフィールドの宣言に変更
Nameプロパティを設けてgetとsetを書く

161:デフォルトの名無しさん
10/03/05 18:06:35
>>159
・・・え?

162:デフォルトの名無しさん
10/03/05 18:08:02
ん?

163:デフォルトの名無しさん
10/03/05 18:15:43
>>160
いやいや、それだと外部からそのプロパティを参照しているところも
全部_nameになるじゃない・・・

164:デフォルトの名無しさん
10/03/05 18:16:54
>>161
プログラマなんだから英数字や記号は半角にしか変換できないようにIMEセッティングすべき

165:デフォルトの名無しさん
10/03/05 18:23:10
>>163
じゃあクラス内の文字列置換なんかですればいい


166:デフォルトの名無しさん
10/03/05 18:41:50
public class StreamDataSet
{
  public string URL = "";
  public string Title = "";
}

List<StreamDataSet> SrcList=new List<StreamDataSet>();

StreamDataSet src=new StreamDataSet();
src="ww.google.ne.jp";

if("-同じURLが既に追加していなければ-")
  SrcList.Add(src);

if文の条件式にどのように書けばいいか迷ってます
この場合SrcListに同じURLがあるか探すにはForeachで
ひとつひとつ照らし合わすしかないですか?

List<string>だと.Findメソッドなどで簡単にできるけど
オブジェクトだった場合のやり方がわかりません
よろしくおねがいします

167:デフォルトの名無しさん
10/03/05 18:48:04
>>155
[イベント ベースの非同期パターンを使用したマルチスレッド プログラミング]
URLリンク(msdn.microsoft.com)

[.NET ThreadPool の実行順序を制御する]
URLリンク(msdn.microsoft.com)

この辺を読むといい。本気で作るなら前者なんだが、おそらく挫折するw
次点のThreadPoolを利用する方法が簡単で、後者はその応用編

168:デフォルトの名無しさん
10/03/05 18:56:50
>>166
一般には
if (!SrcList.Any(x => x.URL == src))
でも効率が悪いのでIComparer<T>を実装してBinarySearchを使うのがいいと思う

169:デフォルトの名無しさん
10/03/05 19:05:10
>>168
srcは多分StreamDataSetだと思う
その次の、フィッシングサイトみたいなURLのあるコンパイルエラーになる行が気になるけどw

あと、効率考えるならDictionaryを使うことを検討した方がいいと思う

170:デフォルトの名無しさん
10/03/05 19:16:00
>>166のケース限定であればListじゃなくてDictionary使うな。

171:デフォルトの名無しさん
10/03/05 19:23:34
すいません。書き間違えてました。

× src="ww.google.ne.jp";
○ src.URL="ww.google.co.jp";

ID付きで追加削除したりするならはじめからDictionaryにしておくべきでしたね
使い勝手がいいからList<>を使っていたけど、データ構造はもうちょっと慎重にすべきでした
ありがとうございました

172:デフォルトの名無しさん
10/03/05 21:01:03
>>158
?
(2)は自動的にDispose()はされないってことですか?
>>167
ありがとうございます。
挫折しました。
まだぜんぜん読めるレベルでありませんでした。


173:デフォルトの名無しさん
10/03/05 21:07:54
されるかもしれないしされないかもしれない
それはクラスの実装次第
後処理が必ず必要になるようなクラスではGCされるときに自動的に後処理が行われるように
作ってあるはずだけど必ずしもそうだともかぎらない
でもそれはクラスを書いた奴が悪いのでそこまで考えても意味がない

174:148
10/03/05 21:25:13
>>150さん
どうもありがとうございます。その方法でできました。。
助かった~。ひさしぶりにプログラムやってみまして、
ウィンドウ右上の×印クリックしたときの挙動が違ったので
困っていました。

ちょっと所要で出かけていたので、お礼が遅くなりました。すみませんでした。
ありがとうございました。

175:148
10/03/05 21:28:25
画像までキャプチャーしてアップしてくださり、どうもありがとうございました。

176:デフォルトの名無しさん
10/03/05 21:41:51
(´・ω・`)

177:デフォルトの名無しさん
10/03/06 00:46:59
よくデスクトップ右下あたりからにょきにょきっとバルーンが出てるけど
C#で作れますか?

178:デフォルトの名無しさん
10/03/06 00:58:30
うん

179:デフォルトの名無しさん
10/03/06 01:11:10
にょきにょき環を上手く出すにはC#ではどうすればいいですか、

180:デフォルトの名無しさん
10/03/06 01:13:46
No results found for "にょきにょき環".
すまん、説明を頼む

181:デフォルトの名無しさん
10/03/06 01:28:32
石塚英彦が大山のぶ代の物真似で「ニョキニョキリング!」って叫ぶ声が
聞こえた気がした。

182:デフォルトの名無しさん
10/03/06 02:17:23
>>177
アラートウインドウ
URLリンク(youryella.wankuma.com)

183:148
10/03/06 02:48:38
>>177
君の「C#」「バルーン」というキーワードに咥えて「タスクトレイ」という3つを
スペースで区切ってグーグルで検索するとたくさん情報がでてくるよ(´・ω・`)

デスクトップの右下あたりをタスクトレイというんだよ(´・ω・`) 。

184:デフォルトの名無しさん
10/03/06 02:51:41
豪鬼くんありがとう

185:デフォルトの名無しさん
10/03/06 02:56:19
右下じゃないが?

186:デフォルトの名無しさん
10/03/06 02:57:24
10年間、「タクストレイ」を「タスクレイ」と思ってた

187:デフォルトの名無しさん
10/03/06 03:18:01
Windows 8 新機能

 タ ス ク R A Y

188:デフォルトの名無しさん
10/03/06 03:55:47
>タスクトレイ
実はそんなものはない。


189:デフォルトの名無しさん
10/03/06 04:06:53
正式名称は通知領域だって?
microsoft.comの中の人もうっかり使うぐらい普及してんだからそんな指摘はナンセンス

190:デフォルトの名無しさん
10/03/06 04:24:44
タスクバーのプロパティのダイアログにははっきり通知領域と書いてあるんですがね。

191:デフォルトの名無しさん
10/03/06 04:34:40
mono2.6.1をインストールしてTPLのParallel.Forを動かそうと思ったのですが。
monoVMで動かすとSystem.TypeLoadExceptionの例外を吐いて落ちます。
そこで"gmcs"でソースそのものをコンパイルしようとしたのですが
error CS0234: The type or namespace name `Tasks' does not exist in the namespace `System.Threading'.
といってきます。

しかし
URLリンク(www.go-mono.com)
ここによればParallel.Forは(たぶん)実装済みとの話です。

なにか勘違いをしているのか?
もしくは手順をまちがえているのか、教えてください。

192:デフォルトの名無しさん
10/03/06 04:45:09
そもそも.NET 4.0自体まだ製品はでてないのだが
Monoだって.NET4.0相当品はまだRCだろ精々

193:デフォルトの名無しさん
10/03/06 08:07:25
>>191
手元にないから確認はできないがコンパイラはdmcsらしい。
gとかdとかどういう基準のネーミングなんだろ。
mcs   # C#1.0
gmcs  # C#2.0-3.0
smcs  # moonlight
dmcs  # C#4.0 preview



194:デフォルトの名無しさん
10/03/06 09:36:07
にょきにょきってCravingExplorerのダウンロードが
終わったときにでるやつじゃなくて?
ただのバルーンなの?

195:デフォルトの名無しさん
10/03/06 11:13:36
ローカル変数の名前をつけるとき、変数の型が int だったら n とか i とかつけちゃうような
場面で、string[] だったらなんて名前にする?

int n;
string[] ???;

慣用的な名前ってある?

具体的には、
var ??? = text.Split(new[]{'='},2);
var key = ???[0];
var value = ???[1];
みたいな場面で使いたいんだ。

196:デフォルトの名無しさん
10/03/06 11:17:06
splitted

197:デフォルトの名無しさん
10/03/06 11:19:06
pairとかtmpとかやっちゃうな

198:デフォルトの名無しさん
10/03/06 11:20:53
Splitの戻り値はfieldsにしたりする

199:デフォルトの名無しさん
10/03/06 11:22:41
parts

200:デフォルトの名無しさん
10/03/06 11:23:31
s

201:デフォルトの名無しさん
10/03/06 11:25:31
複数のstringだからss

202:デフォルトの名無しさん
10/03/06 11:43:16
>>195
string[] って型だけでは、慣用はない。
用途・意図に基づいた名前付けないと。

自分はSplitの戻り値はtokensとか多用。


203:デフォルトの名無しさん
10/03/06 11:45:01
tmpStringsかな。
変数名は書く人のポリシーみたいなのが出て面白いな。
俺はnとかiとかは絶対使わない派かな。

204:デフォルトの名無しさん
10/03/06 12:14:06
tmpStringsならnやiと一緒じゃね

205:デフォルトの名無しさん
10/03/06 12:20:39
一文字じゃなきゃいい、とか訳わかんないルールなんだろ?

206:デフォルトの名無しさん
10/03/06 12:43:30
変数名に型情報入れるのはなしだなぁ。
n とか i よりよっぽど悪い。

207:デフォルトの名無しさん
10/03/06 12:46:00
itemsとかやってしまうな

208:デフォルトの名無しさん
10/03/06 12:52:17
>>204のネーミングはおいらは使わないが、
tmpStringsを型情報というのも賛同できないな

209:デフォルトの名無しさん
10/03/06 13:33:28
つってもintだったらtmpIntsなんだろ

210:デフォルトの名無しさん
10/03/06 13:42:34
Employee[]をemployeesと名付けることはあってもstringsはないな
漠然としすぎ

211:デフォルトの名無しさん
10/03/06 13:46:43
Employee[] な変数に格納するのがほんとに漠然と従業員全員なら employees にするけど、
LINQ とかで条件絞るとまた別の名前にするしね。

漠然と strings はちょっと範囲広すぎると思う。

212:デフォルトの名無しさん
10/03/06 13:53:18
単に末尾にsつけたんじゃ配列だかListだかDictionaryだかわからないから
lstとかdicとか頭につけてるが、これもハンガリアン的なアレなんだろうか

213:デフォルトの名無しさん
10/03/06 13:58:11
>>212
ハンガリアンそのものでしょ。
今時そんなことやる人いるのか。

「型名」を「略号」で変数名に組み込むより、
「機能」を「明示的に」変数名に組み込む方がずっと合理的だとは思わないのかな。

214:デフォルトの名無しさん
10/03/06 14:04:00
にょきにょきってか、もじゃもじゃだろ?
URLリンク(www.nhk.or.jp)

215:デフォルトの名無しさん
10/03/06 14:06:11
ローカル変数のうちでも狭い範囲でしか使わないような変数の名前なのだから
機能うんぬんもちがうんじゃないかい。
配列だったら ar lst dm あたりを使ってるな。


216:デフォルトの名無しさん
10/03/06 14:08:33
arrでいいだろ、どうでもいい

217:デフォルトの名無しさん
10/03/06 14:13:00
>>215
なんなのその「なのだから」って。
幻聴持ちですか?w

218:デフォルトの名無しさん
10/03/06 14:17:13
>>195 からの流れだろ?

219:デフォルトの名無しさん
10/03/06 14:22:03
まああまり感情的になって煽りに走ったりせず
冷静に話しましょう

220:デフォルトの名無しさん
10/03/06 14:32:34
自分だけかもしれないけど、形式的に名前付けちゃうと
スコープ広くして使いまわしたくなるんだよね
変数名自体よりもそのほうが問題

221:デフォルトの名無しさん
10/03/06 14:32:54
>>195
単語帳みたいなイメージでwordsでつける

222:195
10/03/06 14:33:11
トン。
慣用されてる名前はないのか。

じゃあ、>>225 が決めてくれ。

223:デフォルトの名無しさん
10/03/06 14:44:23
そもそも、intだってiだのnだので必要十分な場面がそう多いとも思えんけど。
まして文字列なんてもっとそうだろう。

もしそんな場面があるなら普通にsでいいと思うけど。

224:220
10/03/06 14:50:25
int nとかやると、あとでまたintの変数が欲しくなったときについ
新しい変数を宣言せずにnをそのまま使い回したくならない?
一文字変数がどうとかいうよりそういうのがコードを分かりづらくすると思うんだ
ループカウンタなんかはそもそも使いまわすわけがないのでiでも問題ないけど

225:デフォルトの名無しさん
10/03/06 14:52:46
候補は出てるんだから自分で決めろ

226:デフォルトの名無しさん
10/03/06 15:00:01
命令口調クンって馬鹿だな、まで読んだ。

227:デフォルトの名無しさん
10/03/06 15:05:27
nとかiとかはさすがに使い捨て目的で、それを使いまわすってことは無いだろう

228:191
10/03/06 16:02:42
>>193 コマンドのdmcsはおそらくなくなってます。gmcsだけに統一されたのかも?


229:デフォルトの名無しさん
10/03/06 16:15:21
TPLってオープンソースじゃないんだな
DLRやMEFみたいにMS-PLで公開されてるのかと思ってた

230:デフォルトの名無しさん
10/03/06 16:24:08
この辺じゃねーの
URLリンク(mono-project.com)
> ParallelFx
> To use this code you have to manually enable the .NET 4
> profile using the --with-profile4=yes switch at configure stage.

231:デフォルトの名無しさん
10/03/06 17:02:30
(from x in items.AsParallel() where x.A < 3 select x.B).ForAll(x=>時間のかかる処理(x));
もう異次元すぎるな
こんなの書く日が来るんだろうか

232:デフォルトの名無しさん
10/03/06 17:50:08
中途半端にクエリ式混ぜないで、全部メソッド形式で書く方がマシ。

233:デフォルトの名無しさん
10/03/06 17:58:05
クエリは保守性が一気に落ちるからな。

234:195
10/03/06 18:16:42
>>225 がきっとボケてくれると思って振ったのに、
ぼけてくれなくて残念。

ちょい補足。

ruby みたいに多重代入があれば、
key,value = text.Split(new[]{'='},2);
としたいところだが、それができないので一時変数名を決めないといかん。

そんな場合にどうするか。
自分は、ひとに見せる予定がないときは手を抜いて a (arrayの意)。
人に見せる予定があるときは、ary,tokens とかなんだけど、
ソースを読んだ人がわかりやすい名前があればそれに
しとこうと思って、皆に聞いてみました。

235:デフォルトの名無しさん
10/03/06 19:12:28
最初の頃はフォームアプリで作成していたんだけど
簡単なプログラムの場合、コンソールで作った方が早いと気づいて
最近はまずコンソールアプリを作って、それを制御するフォームアプリを作るように
しているんですが、おかしいですか?

236:デフォルトの名無しさん
10/03/06 19:14:32
うん

237:デフォルトの名無しさん
10/03/06 19:18:12
>>235
好みの問題でしょ
VC#ならEEでもGUI作るのは簡単だし

VC++のネイティブとなるとエディションによってはいろいろ面倒だけど

238:デフォルトの名無しさん
10/03/06 19:19:19
好みの問題じゃないよ。

239:デフォルトの名無しさん
10/03/06 19:19:48
好み、つーか何をつくりたいかある程度明確にしてから作り始めるんじゃないのか、普通は。
途中で変更はあるにしろ。

240:191
10/03/06 19:28:48
自己解決です。
SVNからビルドしたらできるようになりました。

241:デフォルトの名無しさん
10/03/06 20:34:39
>>204-210
いやいや、>>195の例では何のワークかわからんし、テンポラリの文字列という意味でtmpStringだよ。
もっと何の用途にというのがわかれば、具体的な名前つけるけど。
俺からは>>196とか>>197のようなsplitで分割するからsplitted、keyとvalueのペアだからpairとか
そっちの方があり得ない。

まあ、俺が馬鹿という結論でいいよ、この手の論争は疲れるし。

242:デフォルトの名無しさん
10/03/06 20:34:54
コンソールアプリとそれを制御するGUIフロントエンドの形態って
ロジックと外観の分離ができてるから良いかもね

243:デフォルトの名無しさん
10/03/06 20:36:22
コンソールアプリっていきなりDOS窓が開かないようにできたっけ?

244:デフォルトの名無しさん
10/03/06 20:38:21
子プロセスとして起動するならコンソールが開かないようにはできるな
ていうかDOS窓とかすでに郷愁を誘う言葉だ

245:デフォルトの名無しさん
10/03/06 20:39:26
アプリ側では無理。

246:デフォルトの名無しさん
10/03/06 20:43:01
データ処理側はローカルproxyのようなスタイルで分離して
テキストを投げてもらうとかもいいかもね

247:デフォルトの名無しさん
10/03/06 20:45:02
なんでDOS窓が邪魔なら素直にクラスライブラリにしないのw
意味がわからんよ

248:デフォルトの名無しさん
10/03/06 20:46:24
>>241
ばーかばーか

249:デフォルトの名無しさん
10/03/06 20:48:40
>>247
まあやり方はいろいろあるからなんでもいいんじゃないの?
処理部分はC/C++で書いて・・・とかあるとDLLとして使うのもいいし
裏でサービスとして起動しておいて汎用的なアクセスにするでもいいし

250:デフォルトの名無しさん
10/03/06 20:51:54
>>247
コンソールアプリはコンソールアプリで楽に自動化できるからあればいいじゃない
で、先にコンソールアプリがあるなら一々クラスライブラリ化するより
GUIアプリはコマンドライン用の文字列作ってコンソールアプリに丸投げした方が手っ取り早いじゃない

251:デフォルトの名無しさん
10/03/06 20:54:56
ないわぁ

252:デフォルトの名無しさん
10/03/06 21:00:00
ハンガリアンやめたのはMSの大失敗
一目で型が分かるアレは便利だった
ハンガリアンに批判的なのは低脳プログラマに多い

253:デフォルトの名無しさん
10/03/06 21:05:38
プリミティブな変数は使わない方向なんだから
ハンガリアンはなくなって行く方向なのは間違いない

254:デフォルトの名無しさん
10/03/06 21:07:30
プロセス間 I/F のひとつとしてコマンドライン‥‥実行ファイルへのコマンドラインパラメータ?で渡すのはアリじゃないかと。
単純なパラメータで済むなら楽と言えば楽だし。

255:デフォルトの名無しさん
10/03/06 21:09:52
>>252
それを.netスレでいうのはかなり痛いぞ
.netで開発してると過去のみみっちい省略がアホくさく思える
タダ単に古参ギークが新参をバカにしたいだけにしか見えない

アセンブラからいろいろやってきてるが古いやり方で駄目な物は変えるべきだし
変わってる以上は受け入れるべき

こだわってるってことは新しいことについていけない昔を懐かしむだけの
老人に見える。

256:デフォルトの名無しさん
10/03/06 21:20:32
>>254
普通にメソッド呼び出しできた方がずっと楽だと思いますがw

バッチファイルやWSHとか、.NET以外の言語からも弄れるようにしたいのならともかく、
.NETの世界で完結していいのならわざわざコンソールアプリにする意味ってあるのかしら。


>>255
どうせ釣りだろうにそうムキにならんでも....
ただ、クラス名にCを付ける習慣まで否定しなくてもよかったんじゃないのかなとは
個人的にはちょっと思う時がある。

そのくせなんでインターフェイスだけIでプリフィクス推奨なんだろう。

257:デフォルトの名無しさん
10/03/06 22:04:16
IDEでの開発を前提として実用性を第一に考えた時に

インターフェースがIから始まってたらクラスの山の中からすぐ探せて便利。
クラスのPrefixがCだとタイプ数が1回増えるだけで意味ない。

てな結論に至ったんじゃない?

258:デフォルトの名無しさん
10/03/06 22:05:21
>>256
>ただ、クラス名にCを付ける習慣まで否定しなくても
クラスの塊なのにC付けたらウザいだろ

259:デフォルトの名無しさん
10/03/06 22:05:59
splitted
www



260:デフォルトの名無しさん
10/03/06 22:12:38
>>256
だから選べる手段のひとつとしてだってばさ。w
プロセス分割の基準はいくつもあるだろ。

261:デフォルトの名無しさん
10/03/06 22:18:48
> バッチファイルやWSHとか、.NET以外の言語からも弄れるようにしたいのならともかく、
そこ除く意味が分からない

262:デフォルトの名無しさん
10/03/06 22:22:33
そもそもそんな話は出てなくて、Windows フォームアプリなのにコンソールで作り始める、
ってことだろ。

263:デフォルトの名無しさん
10/03/06 22:29:23
この言語より手早くにフォームアプリ作れる言語ってある?
より簡潔な言語とデザイン画面での操作性にすぐれたもの
多分フリーだとこれ以上のものはないよね?

264:デフォルトの名無しさん
10/03/06 22:30:41
>>263
フリーはないねえ

265:デフォルトの名無しさん
10/03/06 22:35:33
VB

266:デフォルトの名無しさん
10/03/06 22:37:17
タダじゃねーだろ

267:デフォルトの名無しさん
10/03/06 22:37:48
あれこれやらないのであればAccessの方が簡単に出来るな。
フリーじゃ無いが。

268:デフォルトの名無しさん
10/03/06 23:27:16
notifyIconについて質問です。

Windows XP以降のOSでアクティブでない通知アイコンが隠せるようになりましたが、
notifyIconをアクティブな状態にするにはShowBalloonTipしかないのでしょうか。

独自のフォームで通知を行い(メーラーやウィルスチェックソフトのように)
その際に通知アイコンを表示したいのです。




269:デフォルトの名無しさん
10/03/07 00:19:08
これだけは言わせてくれ。
tmpString はないわ。

270:デフォルトの名無しさん
10/03/07 00:34:01
意味不明だが、その独自のフォームの通知イベントのときにnotifyIcon.Visible = trueにすればいいだけの話ちゃうの?

Formにしろ、notifyIconにしろVisibleプロパティをtrueにすりゃ、アクティプになるだろう・・と思うんだけど

271:デフォルトの名無しさん
10/03/07 00:45:54
2001のころからやっているけど
未だにまともなプログラミングができないおれ涙目

272:デフォルトの名無しさん
10/03/07 00:47:47
文法からやりなおすんだ

273:デフォルトの名無しさん
10/03/07 00:49:45
>>270
Windows 7で確認していますが、

Windowsの通知領域アイコンの設定が「通知のみ」になっているとバルーンを出したとき?にしか
表示されなくなるんです。
これを、バルーンを出さずに一時的に表示する方法がないかな、と。

Visibleの変更は試してみましたがだめでした。

274:デフォルトの名無しさん
10/03/07 00:53:35
独学だとつらいだろうね。
いろんなプロジェクトに参加していいところを吸収できれば短期間でもすくすくと成長できる。

275:デフォルトの名無しさん
10/03/07 01:07:44
フォームアプリ作る場合いつもProgram.cは手付かずなんだけど
このクラスって何に使うべき?

276:デフォルトの名無しさん
10/03/07 01:10:43
例えば重複起動禁止処理とか

277:デフォルトの名無しさん
10/03/07 01:11:07
コマンドライン引数の処理とか
二重起動を弾くとか

278:デフォルトの名無しさん
10/03/07 01:14:20
while ( true )
{

279:デフォルトの名無しさん
10/03/07 01:23:08
new Form1().Show();
}

280:デフォルトの名無しさん
10/03/07 01:57:21
ブラクラかよw

281:デフォルトの名無しさん
10/03/07 08:24:00
>>271
専ブラでも作れ
GUIの作り方からいろいろ学べるぞ

282:デフォルトの名無しさん
10/03/07 09:14:39
.NET 1.1(C#)でFTPクライアントアプリの作成はどのように行えばよいですか?

283:デフォルトの名無しさん
10/03/07 09:20:28
誰かライブラリ作ってないか探してみて見つからなかったらTCPを自分で喋る

284:デフォルトの名無しさん
10/03/07 09:26:11
KBにあるからそれを使う。

285:デフォルトの名無しさん
10/03/07 09:33:56
1.RFC読んでFTPを理解する。
2.System.Net.Sockets で実装する。
3.できあがり。

286:デフォルトの名無しさん
10/03/07 10:18:58
wininetを使うのが一番簡単

287:デフォルトの名無しさん
10/03/07 11:14:30
英語苦手だとクラスの名前考えるだけで苦労する

urlを与えるとhostとか細かく分解処理して管理するクラスだとなんて名前付ければいいだろうw

288:デフォルトの名無しさん
10/03/07 11:19:41
System.Uriじゃだめなの?

289:デフォルトの名無しさん
10/03/07 11:21:26
>>288
host+その他
以外もできましたっけ?

290:デフォルトの名無しさん
10/03/07 11:25:09
以外が何を指してるのか分からんが取り敢えずメンバ一覧確認すれば

291:デフォルトの名無しさん
10/03/07 11:38:53
URLリンク([host])・・・・
という感じでパスがあったとすれば

[host]
[bbb]

とかurlの一部だけを抜きだしたい場合の話ですね

正規表現かけて処理しないと対応できなかった記憶が・・・

292:デフォルトの名無しさん
10/03/07 11:51:51
urlparse

293:デフォルトの名無しさん
10/03/07 14:44:03
>>281
2ちゃん専ブラって自分用にいろいろカスタマイズしたいし
作ってみたいんだけど参考サイトがあんまりないんだよね
ツインテールの初期のソースとかあったら見てみたいんだけど
今のソースは規模が大きくてもう理解不能

294:デフォルトの名無しさん
10/03/07 15:36:40
規模が小さければ理解できるんなら、時間さえあれば理解できるってことだ。

295:デフォルトの名無しさん
10/03/07 16:33:03
>>243
コンソールアプリで作って、プロジェクトの出力の種類をWindowsアプリケーションにすればOK

296:デフォルトの名無しさん
10/03/07 17:40:52
コードが時系列に並んでいないので
頭の中で実行プロセスをイメージしながら
ソースを見ていると混乱する

少し時間が経ってからクラスやメソッドを見ているとき
これがどのタイミングで実行されるかすぐにはイメージできない

ある動作をさせるとき多くの手段があり過ぎて迷う

297:デフォルトの名無しさん
10/03/07 18:00:09
>>296
なんかダメグラマ具合が文章にも出てるね。
文章力とプログラミング能力って相関がありそうだもんなw

298:デフォルトの名無しさん
10/03/07 18:11:46
論理性に長けてるかどうかだもんな。

299:デフォルトの名無しさん
10/03/07 18:20:17
>>293
2ch専用ブラウザの作り方
スレリンク(tech板:400番)
この辺で最近新規にc#で作ってる人がいるみたいなんでこっちも覗いてみては?

300:デフォルトの名無しさん
10/03/07 18:48:26
初心者が特にイベントドリブンで混乱するのはわかる気がする
処理が細切れになって頭の中でイメージしにくい

301:デフォルトの名無しさん
10/03/07 19:17:15
イメージしにくいですね

302:デフォルトの名無しさん
10/03/07 19:28:08
同じ処理が10回あれば10回記述する、とかじゃなきゃ
どんな言語だって多かれ少なかれそんなもんだろ

303:デフォルトの名無しさん
10/03/07 19:30:44
それは、たぶん問題の取り違えだと思うよw
イベントドリブン「だから」混乱するんじゃない。
イベントドリブン「ですら」混乱するんだよ。

304:デフォルトの名無しさん
10/03/07 19:52:33
大昔の割り込み処理もイベントドリブンといえるんだろうか

305:デフォルトの名無しさん
10/03/07 19:57:48
>>304
まあいえるんじゃないの?
マウスが動いたら~、サウンドボードのバッファーが空になったら~

306:デフォルトの名無しさん
10/03/07 20:50:17
割り込みは(普通は)応答時間を小さくするために使うものだから
目的は全然違うけどね。

っていうか、割り込み処理って別に大昔じゃないだろうw
マルチタスクOS上のアプリのコーディングでは使わないだけでしょ。

307:デフォルトの名無しさん
10/03/07 20:52:55
逆に言うと普通のアプリの場合については大昔になるわけで

308:デフォルトの名無しさん
10/03/07 20:55:40
何がどう「逆」なのか意味がわかりません。

309:デフォルトの名無しさん
10/03/07 21:34:14
とあるテンプレート
<div>
 <h2>[VAR1]</h2>
 <p>[VAR2]<p>
<div>
があるとして、
[VAR~]に値を流しこんでいきたいのですが、
どんな方法がありますでしょうか。

テンプレートは、
- div:
 - h2: VAR1
 - p: VAR2
のようなYAMLでもJSONでもなんでもいいのですが、
とにかく、同じようなデータセット?をテンプレートに流し込みたいです


310:デフォルトの名無しさん
10/03/07 21:36:00
Replace()

311:デフォルトの名無しさん
10/03/07 21:49:22
データグリッドビューでカレントセルが変わったときに
private void dataGridView1_CurrentCellChanged(object sender, EventArgs e)
で処理してるんですけど、処理が終わるまでカーソルの移動がわかりません。
先にカーソルを移動させたいんですけど、どうしたらいいでしょうか。

312:デフォルトの名無しさん
10/03/07 22:12:01
>>310
ありがとうございます。
なるほど、普通に置換すればいいのか。


連続で申し訳ないんですが、
フォルダのパスなどの定数ってどこに書くのが適切ですか?

313:デフォルトの名無しさん
10/03/07 22:33:01
不変値なフォルダパスって一般的ではない気がする
アプリケーション構成ファイルとかに書かない?

314:デフォルトの名無しさん
10/03/07 23:06:31
>>311
重い処理するならUIをブロックしないように非同期にする

315:デフォルトの名無しさん
10/03/07 23:15:35
>>314
それしかないんですね・・・
ありがとうございます。

316:デフォルトの名無しさん
10/03/07 23:37:28
>>315
おお

317:デフォルトの名無しさん
10/03/07 23:48:31
(´・ω・`) ………あ!

318:デフォルトの名無しさん
10/03/08 05:53:43
Foo f=new Foo();
f.Run();

Foo f=new Foo();
Thread t= new Thread(new ThreadStart(f.Run));
t.Start();
t.join();

はほぼ同じ動きをすると考えていいですよね?
後者にするとすごく遅くなるんですけど
これは余計なことやってるからだけなんでしょうか?

319:デフォルトの名無しさん
10/03/08 08:26:13
5月とかまた先延ばしにしたな

320:デフォルトの名無しさん
10/03/08 08:29:09
>>313
プロジェクトプロパティの
リソースや、設定っていうタブのことですか?

321:デフォルトの名無しさん
10/03/08 11:19:46
すいません、この画像のフォームコントロールの名前がわかりません。
誰か教えてください。
よろしくお願いします。

URLリンク(www.dotup.org)

322:デフォルトの名無しさん
10/03/08 11:22:12
リストビューだろ。

323:デフォルトの名無しさん
10/03/08 11:25:19
ありがとうございます!!

324:デフォルトの名無しさん
10/03/08 12:14:15
>>320
そう 主に設定の方

325:デフォルトの名無しさん
10/03/08 12:17:34
おれは app.config に出して、ConfigurationManager で読み出し、かな。

326:デフォルトの名無しさん
10/03/08 15:04:56
>>324
あれってよくわからんが、自分でapp.configとかいう名前のファイル作って
そこに書きだすのとどう違うんだ?

327:デフォルトの名無しさん
10/03/08 15:48:13
C#使っててPythonのが楽なときってある?
デスクトップアプリで

328:デフォルトの名無しさん
10/03/08 15:52:05
>>326
色々あるけど機能としては
IDEが自動的に型指定されたプロパティとしてSettings.名前でアクセスできるラップクラスSettingsを用意してくれる
ユーザースコープの方はSettings.Default.Saveで簡単に保存できる
とか 自分もこういう基礎的な部分以外は使わんから詳しくないけど

アプリケーション設定でもapp.configを使うんだけど
普通直接app.configに値を埋め込む場合は普通configuration/appSettingsを使うのに対して
configuration/configSections/sectionGroupを使って別ツリーに書き出す

329:デフォルトの名無しさん
10/03/08 17:40:09
Dictionaryのキーだけ保持したようなクラスありますか?

330:デフォルトの名無しさん
10/03/08 17:46:39
HashSet<T>

331:デフォルトの名無しさん
10/03/08 17:49:54
HashSet<T>がそれですか。
ありがとう。

332:デフォルトの名無しさん
10/03/08 17:50:34
というか、集合(set)を実現したいというならちゃんとそう説明しないと、

Dictionary<TKey, TValue>.KeyCollection

とか答えちゃうぞ

333:デフォルトの名無しさん
10/03/08 17:58:00
>>332
一般的な呼び方がわからなかったので329のように書きましたが
以降はそうさせてもらいます。

334:デフォルトの名無しさん
10/03/08 20:11:54
ロギングについて質問です。
例外発生時にエラーログを出力したいのですが、
後で統計などを取るためにプログラムから読みやすい形を考えています。
ただし、バイナリはNGにしたいと思います。

独自のErrorクラスを作って、その配列をXmlSerializerや
SoapFormatterでSerializeというのを考えたのですが、
こういう手法というのは一般的に見てどうでしょうか。

書き込むのにDeserialize→配列に追加→Serializeという手順になるので、
パフォーマンス上は不利だとは思いますが、
試しに3MB位までログ容量を増やしても体感上は遅延は感じませんでした。
本番運用では100KB以内で収まる程度だとは思います。

335:デフォルトの名無しさん
10/03/08 20:13:02
専用のTraceSourceというクラスを使う
XMLにも出力できる

336:デフォルトの名無しさん
10/03/08 20:15:52
>>327
ないね
かなり小さいコードでもインテリセンスに頼った方が早かったりする
スクリプト言語はコンパイルが不要なことに意義がある

337:デフォルトの名無しさん
10/03/08 20:17:05
log4netとか使っちゃうな。

338:デフォルトの名無しさん
10/03/08 20:37:42
sage

339:334
10/03/08 20:39:59
>>335,337
ありがとうございます。調べてみます。

340:デフォルトの名無しさん
10/03/09 10:10:21
>>337
あれ結構便利だとは思うけど
やれる事が多いだけに設定がめんどくせぇ・・・
俺の中では設定ファイルの中身グチャグチャにされるイメージがでかいかな・・
今は必要な機能だけ持った独自のログ機能自作して使ってるわ

341:デフォルトの名無しさん
10/03/09 12:45:06
bmpのファイルのロックを解除する方法を教えてください。
WPFでjpg画像を読み込んでいます。
BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.UriSource = new Uri(fileName);
bmp.CacheOption = BitmapCacheOption.OnLoad;
bmp.EndInit();

これで、jpgが壊れているときに、
bmp.EndInit();
でエラーになります。
そこで、これ全体をtry-catchして、エラーが出たらDisposeしようと考えました。
catch{
bmp.Dispose();
Close();
}
としたのですが、bmpにはDispose()が見当たりません。
どうやってDisposeして終了したらよいでしょう?
WPF掲示板は初心者の質問には答えていただけないようなので、
こちらに来ました。
よろしくお願いします。


342:デフォルトの名無しさん
10/03/09 12:46:49
最近この板でキモいC#信者が暴走してるから自重するように

343:デフォルトの名無しさん
10/03/09 12:59:43
>>341
以前とあるソフト書いたときはこんな感じにしたな
FileStream fs = new FileStream(save,FileMode.Open);
b = new Bitmap(fs);
fs.Close();
fs.Dispose();

これだと自分でdiposeできるのでロックがかかったままにならない
どこかにこれはあったはず(@ITあたりにサンプルコードあったはず)

344:デフォルトの名無しさん
10/03/09 13:03:42
>>343
それSystem.Drawingや、と
まあWPFでも同じ回避方法になるね
UriSourceじゃなくてStreamSourceを使う
ていうかこれはバグだなー

345:デフォルトの名無しさん
10/03/09 13:04:37
>>341
StreamSource
考え方は>>343

346:デフォルトの名無しさん
10/03/09 13:06:27
>>344
バグというか仕様というか仕様考慮漏れというか
GCをあてにする言語なんでこういう仕様も許容範囲かと
コード書く側でまったく対処できないなら問題だけどね

347:デフォルトの名無しさん
10/03/09 13:10:12
>>343の補足
saveってのはこの前のロジックの都合でそうなってるだけで
fileNameとか自分の環境にあったのに書き換えてね

348:デフォルトの名無しさん
10/03/09 13:13:34
>>346
いや、内部でStream作ってるんだからそれを例外時にCloseしないのは問題でしょ
「using使えよ」的な話
ストリームをCloseしたときに例外が出たって状況ではないんだから

349:デフォルトの名無しさん
10/03/09 14:03:42
>みなさんありがとうございます。
が、下記のコードで、画像が表示されなくなりました。
読み込めていないようです。
どこがまずいでしょう?

BitmapImage bmp = new BitmapImage();
try{
//FileStream fs = new FileStream(fileName, FileMode.Open);
//bmp = new BitmapImage();
//fs.Close();
//fs.Dispose();
bmp.BeginInit();
//bmp.UriSource = new Uri(fileName);
bmp.StreamSource = new FileStream(fileName, FileMode.Open);
bmp.CacheOption = BitmapCacheOption.OnLoad;
bmp.StreamSource.Close();
bmp.StreamSource.Dispose();
bmp.EndInit();
}catch{
Close();
}


350:デフォルトの名無しさん
10/03/09 14:07:09
EndInitする前にCloseしたらそりゃダメだろ…
あとCloseとかDisposeとかは明示的に呼ぶんじゃなくてusing構文で

351:デフォルトの名無しさん
10/03/09 14:15:21
なんでusingという名前にしたんだろうな?まぎらわしい( ・ω・)y─┛~~

352:デフォルトの名無しさん
10/03/09 14:20:25
正常な場合はCloseしちゃだめ。
基本的にオープンの状態を維持して読み直せるようにしないといけない。

353:デフォルトの名無しさん
10/03/09 14:23:59
>>352
BitmapCacheOption.OnLoadの場合ロード時=EndInit時にデータを全部メモリにコピーしちゃうから
元Streamがどうなろうがしったこっちゃないよ

354:デフォルトの名無しさん
10/03/09 14:25:28
その辺うまく使いこなせないならMemoryStreamで読み込みできるように
自分でメモリに上げちゃえばいいんじゃないの?

355:デフォルトの名無しさん
10/03/09 14:54:55
>みなさんありがとうございます。
bmp.EndInit();
bmp.StreamSource.Close();
bmp.StreamSource.Dispose();
と順番を変更してうまくいきました。
ありがとうございました。


356:デフォルトの名無しさん
10/03/09 15:15:28
配列に入っている値の符合をプラスから全部マイナスにしたいんだけど、簡単に出来る方法はないですか?
もちろんループをつかって全部-1を掛け算すればいいんだけど、ビット演算とかで簡単にできないかなーと思って

357:デフォルトの名無しさん
10/03/09 15:17:21
ループが一番簡単だろ

358:デフォルトの名無しさん
10/03/09 15:27:46
最近は2の補数とかやらないのか・・・

359:デフォルトの名無しさん
10/03/09 15:29:03
それ以前に配列なんだからループ以外にどうしろと

360:デフォルトの名無しさん
10/03/09 15:30:25
>>356
int32の場合だと-1かけるっていうのは0xFFFFFFFFをかけるってことだけど
素直に計算したほうがいいんじゃないの?

参考までに

1*-1は0x00000001*0xFFFFFFFF=0xFFFFFFFF
2*-1は0x00000002*0xFFFFFFFF=0xFFFFFFFE
以下略

余計なシフト演算するくらいなら掛け算したほうがいい気がする

361:デフォルトの名無しさん
10/03/09 15:30:56
意地でもループを使わずなんとかするって方向ですか?

362:デフォルトの名無しさん
10/03/09 15:46:54
うん、ループ怖いし

363:デフォルトの名無しさん
10/03/09 15:51:38
>>362
じゃあ、再帰使え

364:デフォルトの名無しさん
10/03/09 15:51:42
-1 をかけるって、実際にはループの中で a[i] = -a[i]; だろ。
これより高速な方法なんてある?

365:デフォルトの名無しさん
10/03/09 15:54:32
x86だと命令を繰り返すための命令もあったけど
そういうのを除けばすでに言語はあまり関係ないよな・・・

366:デフォルトの名無しさん
10/03/09 16:01:42
そんなもん数万回やってやっとms単位の差が分かる程度だろ。意味ない。

367:デフォルトの名無しさん
10/03/09 16:16:50
どうしてもループしたくないならこういう感じで行けるんじゃないかな

int[] val = new int[10];
var tmp =
from n in val
select n * -1;

var minus = tmp.ToArray();

368:デフォルトの名無しさん
10/03/09 16:18:30
それ結局ループしてね?

369:デフォルトの名無しさん
10/03/09 16:19:48
だから言語は関係なくてループを書かないってのはできないんじゃね?といってる
再帰でやるほどでもないだろうし

370:デフォルトの名無しさん
10/03/09 16:22:48
できんこたないだろ
a[0] = -a[0];
a[1] = -a[1];
・・・

さあ全部書くんだ

371:デフォルトの名無しさん
10/03/09 16:24:50
手段のためなら目的は選ばない

372:デフォルトの名無しさん
10/03/09 16:25:00
完全にネタ化してきたな

373:デフォルトの名無しさん
10/03/09 16:29:22
>>372
まあネタだよね
釣りともいうかも

374:デフォルトの名無しさん
10/03/09 16:36:21
SSEとかそういうの使えばループ無しで出来るんじゃね?

Cとかアセンブラの域になるが。

375:デフォルトの名無しさん
10/03/09 16:40:37
無限ループって怖くね?

376:デフォルトの名無しさん
10/03/09 16:54:25
えッ!?

377:デフォルトの名無しさん
10/03/09 16:59:23
メッセージループは無限ループだから怖い

378:デフォルトの名無しさん
10/03/09 17:18:06
まぁその程度の事で難しく考えるより
単純でミスがないような後々わかりやすいコードのが大事だろ

379:デフォルトの名無しさん
10/03/09 18:05:45
>>349
今更だけど、FileStream.Close()ってDispose呼ぶだけだから、
CloseとDisposeの両方を呼ぶ必要はなく、片方1つで十分のはず。

380:デフォルトの名無しさん
10/03/09 18:16:11
>>379
MSDNには「Disposeのtrueと同じ」って書いてあったから
ちょっと違うのかもと思ってた

381:デフォルトの名無しさん
10/03/09 18:25:00
>>380
Dispose()はDispose(true)をよんでいる。

382:デフォルトの名無しさん
10/03/09 18:59:18
Stream系は全部using使わないと開放漏れが気になっちゃう

383:デフォルトの名無しさん
10/03/09 21:11:15
解放漏れよりも更新されなくて嵌まることがある

384:デフォルトの名無しさん
10/03/09 21:49:10
そーいえば、SmtpClient と MailMessage で添付ファイル付きのメールを送ったときに、
添付ファイルとしていたローカルファイルを削除できなくて悩んだことがあったな。w

この時初めて Dispose の重要性を実感した。

385:デフォルトの名無しさん
10/03/09 22:21:55
マネージDllに記述したメソッドの説明などに使う///コメントが、Dllを使うプロジェクトで参照できません。
どうやったら参照できるようになりますか。

386:デフォルトの名無しさん
10/03/09 22:25:03
プロジェクトのプロパティ→ビルド→XMLドキュメントファイル
プロジェクト参照じゃなくてdllをそのまま配布する場合は必ず生成されたxmlファイルも一緒に

387:デフォルトの名無しさん
10/03/09 23:32:07
XmlSerializerを使ってDeserializeするクラスの中に配列があった場合はうまくいかないのかな?

388:387
10/03/09 23:47:58
自己解決しました・・・

389:デフォルトの名無しさん
10/03/10 00:07:21
死ね

390:デフォルトの名無しさん
10/03/10 00:15:45
どうやって解決したか書かない子はほんと自決して欲しい

391:デフォルトの名無しさん
10/03/10 00:18:27
>>390
いやです

392:デフォルトの名無しさん
10/03/10 00:27:11
>>391
勝手に応えるなw

>>390
ケアレスミスでしたw

393:デフォルトの名無しさん
10/03/10 00:28:53
>>392
いやです

394:デフォルトの名無しさん
10/03/10 01:51:09
一度覚えたら忘れにくい言語ないですか?

395:デフォルトの名無しさん
10/03/10 01:52:31
日本語

396:デフォルトの名無しさん
10/03/10 02:05:49
listview.items[].subitems[].text
↑長い
↓こんな感じにできたらいいのに
listview.items[](str,str,str,str)

397:デフォルトの名無しさん
10/03/10 02:07:27
>>396
っ 拡張メソッド

398:デフォルトの名無しさん
10/03/10 13:43:09
IDisposableの正しい実装方法おしえてちょ

399:デフォルトの名無しさん
10/03/10 15:02:56
string型をKeys列挙型に変換する書き方がわかりません。
下のような変換をするにはどのように書けばいいですか?

string "J" → Keys.J
string "Divide" → Keys.Divide
string "NumPad2" → Keys.NumPad2


400:デフォルトの名無しさん
10/03/10 15:34:09
スレッドセーフについて教えてください

①private static List<string> sampleList = new List<string>();として
同じクラス内の以下のスレッドを同時に実行します
スレッド1はsampleListに要素を一つずつaddして追加
スレッド2もsampleListに要素を一つずつaddして追加
スレッド3はsampleListの先頭の要素を取得後、RemoveAt(0)で削除
この場合はSynchronizedは必要ですか?

②private static int n1;として
2つの同時進行のスレッドからn1の値を変えたりする場合は
Interlockedが必要ですか?

③private static int n1;として
スレッド1からはn1の値を変更するが、スレッド2からは参照するだけ
ならばInterlockedは必要ないですか?

よろしくお願いします

401:デフォルトの名無しさん
10/03/10 15:35:43
>>399
(Keys)Enum.Parse(typeof(Keys), "NumPad2", false);

402:デフォルトの名無しさん
10/03/10 15:46:53
書き換えてる途中に参照しようとしたらどうする?

403:デフォルトの名無しさん
10/03/10 15:47:21
>>401
できました。ありがとうございます!
他にも色々使えそうなので更に勉強してきます。

404:デフォルトの名無しさん
10/03/10 15:58:59
途中ってなんだよw

405:400
10/03/10 16:05:14
>>402
ありがとうございます。
③の場合もInterlockedしておいた方がいいという事ですね。。。

もう一つだけ教えてください。
URLリンク(msdn.microsoft.com)(VS.80).aspxに
スレッド セーフ
この型の public static (Visual Basic では Shared) メンバは、スレッド セーフです。
と記載せれているのですが、これはSynchronizedが必要ないという意味ですか?

406:デフォルトの名無しさん
10/03/10 16:37:15
>>405
>この型の public static (Visual Basic では Shared) メンバは、スレッド セーフです。
>すべてのインスタンス メンバがスレッド セーフになるかどうかは保証されていません。
いらないよ
逆にCountプロパティとかその辺はセーフかどうかなんて保証されてないってこった

>コレクションが変更されない限り、List では、複数の読み込み操作が同時に発生しても問題ありません。
コレクションの列挙処理は、本質的にはスレッド セーフな処理ではありません。
まれに 1 つ以上の書き込みアクセスによって列挙処理で競合が発生する場合、確実にスレッド セーフにするには、列挙処理が完了するまでコレクションをロックします。
コレクションに対し複数のスレッドがアクセスして読み取りや書き込みを行うことができるようにするには、独自に同期化を実装する必要があります。

と書いてあるがこれ読めば参照時にもロックかけるべきかどうかは判断つくと思うんだけど



407:400
10/03/10 17:01:26
>>406
ありがとうございます
まとめると、Listをスレッドセーフで使うには
・public static以外はSynchronizedが必要
・For EachやCountプロパティ等を使用する時はロックが必要
ということでいいのかな。
助かりました、サンクス。

408:デフォルトの名無しさん
10/03/10 18:46:47
List<T>などのジェネリックコレクションにSynchronizedはない
常にロックが必要

409:デフォルトの名無しさん
10/03/10 19:32:29
Form1のボタンを押すと、Form2のテキストボックスにテキストを移すのってどうすればいいですかね?
DOBONさんのTipsを見て

Form2 f = new Form2();
f.ShowDialog(this);
f.Dispose();

な感じでForm2をForm1に所有させてやってるんですが
他にやり方とかないでしょうか?

410:デフォルトの名無しさん
10/03/10 19:39:31
>>409
クリップボードを中継する

411:デフォルトの名無しさん
10/03/10 19:42:07
>>409
それでできるのに何が問題なのかが
重要なんだと思うが・・・・

412:デフォルトの名無しさん
10/03/10 19:42:12
同じ説明をしたなあ
Form2にアクセス用の関数を作って公開する

413:デフォルトの名無しさん
10/03/10 20:09:20
ボタンとテキストボックスは自分で配置してくれ
Form1.cs
URLリンク(codepad.org)

Form2.cs
URLリンク(codepad.org)

414:デフォルトの名無しさん
10/03/10 20:39:55
>>409
テキストボックスのModifiersプロパティをPublicにする

415:デフォルトの名無しさん
10/03/10 22:13:29
>>409
状況が分からないのでどういう方法が適切か何ともいえないけど、
Form1とForm2の間に相互に依存関係を持たせたくないのなら、
第三の仲介者役のオブジェクトを間に入れる。

単に依存関係を逆転させたい(Form1はForm2を知るべきでないが、Form2はForm1を知っててもいい)
だけなら、イベントを使ってもいい。

(1) Form1はボタンがクリックされたらテキスト伝達のためのイベント(仮にTransmitTextイベントとする)を発生させるようにする

(2) Form2がForm1の参照を持つ

(3) Form2にForm1のTransmitTextイベントのイベントハンドラを書いて、その中でTextBoxを更新する。

こんな感じ。

416:409
10/03/10 22:23:46
Form同士で受け渡しがしたかった理由は
Form1からForm1所有でForm2とForm3を出した際に

Form2の情報をForm3で取得したいときに所有しているのはForm1なので
受け渡しが出来ないのでどうすればいいのか?と考えていました。

417:デフォルトの名無しさん
10/03/10 22:39:53
>>416
それは設計がおかしい
と普通の人は考える

418:デフォルトの名無しさん
10/03/10 22:43:56
オブジェクト指向の世界は縦割りなんだよ
横の繋がりは必要としない
絶対的な権力を持つボスがすべてを操る

419:デフォルトの名無しさん
10/03/10 22:48:05
もう全部static変数にすればいいよ
そんなレベルで頭捻ったって結果は同じだからとりあえず動けばいい
どこが悪いかはそのうちわかってくる

420:デフォルトの名無しさん
10/03/10 23:02:07
最初はform2で処理したデータをform1で一旦取得してから
form3に渡すのは不自然だったり、非効率的に思えるかもしれないが
両方のformで利用するデータはform1で管理したほうが
実は安全で効率的なのだ

もしform3がform2とのやり取りだけしかしないなら
form2の子としてform3を宣言すべき

421:デフォルトの名無しさん
10/03/10 23:10:58
それならForm1にも直接データは持たせないべきだろ
データを保持するクラスを別に作って持ちまわる形にする

422:デフォルトの名無しさん
10/03/10 23:12:54
MVCしろよ

423:409
10/03/10 23:24:17
みなさんありがとうございます。
参考にしてC#をちょっとずつやろうと思います。

424:デフォルトの名無しさん
10/03/10 23:57:04
>>423
まあ、Formの本来の役割は入力と表示だってことは理解した方がいいよ。

つまりFormの仕事は、ユーザーからの入力を何か別のオブジェクトに伝達したり、
別のオブジェクトからのデータを表示するのが仕事。

PCでいったらモニタやキーボードに相当する部分。
だからそんな部分同士がデータを直接やりとりするのは本来おかしい。

キーボードとモニタの間が配線でつながっててデータやりとりしたらおかしいでしょ?w

キーボードはPCに対して入力データを送るだけ。
モニタはPCからの信号を表示するだけ。

GUIのプログラムも基本同じような考え方で作るべきだ。
Form1はオブジェクトhogeにユーザから入力があったことを伝達するだけ。(ボタンClickイベントハンドラで
hogeの何かのメソッドを呼び出す)

Form2はhogeからの情報を表示するだけ。(hogeからのイベントでTextBoxを更新する)

一見面倒だけどこれが結局シンプルで標準的なやり方。

425:409
10/03/11 00:01:00
>>424
なるほど。
もう一度入門書などをちゃんと読みなおしてみます^^;

426:デフォルトの名無しさん
10/03/11 00:01:53
複数のFormから一つのオブジェクトにアクセスする方法がわからない

427:デフォルトの名無しさん
10/03/11 00:03:26
>>426
アクセス用のクラスでも作ってそのインスタンスを教えておけばいいんじゃないの?
参照型の強みだよ

428:デフォルトの名無しさん
10/03/11 01:11:10
>>400
③でInterlockedをどう使うわけ?
せいぜいvolatileじゃないか?



429:デフォルトの名無しさん
10/03/11 01:15:08
>>400
②だって値の更新をどういう風にやるかによる。
読み取りと書き込みを合わせてtアトミックにやりたいならInterlockedとかがいるが、
条件によってはただ書き込むだけでいいかもしれない。
もしくはvolatileにするくらいでいいかもしれない。

①は普通ロックが要るが、それはそれとしてListよりQueueの方が向いてないか?


430:デフォルトの名無しさん
10/03/11 13:19:37
>>422
最近多い、GUIでプログラム作らせる初心者用入門書の弊害だと思う

431:デフォルトの名無しさん
10/03/11 13:21:01
だってMSの旧来のコントロールだとコントロール自体がデータ持ってる場合が多いんだもんよォォォォォ


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch