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

C#, C♯, C#相談室 Part42

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/08/26(日) 12:42:25
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part41
http://pc11.2ch.net/test/read.cgi/tech/1184840053/

過去スレは>>2-5あたり。
0415デフォルトの名無しさん2007/09/06(木) 22:02:31
>>413

そのクラスの人間なんて見たときねーよ
0416デフォルトの名無しさん2007/09/06(木) 22:02:47
すみません。どれが自作自演でしょうか?
0417デフォルトの名無しさん2007/09/06(木) 22:03:48
やまだだけどなんでもそうだんにのるよ!!
0418デフォルトの名無しさん2007/09/06(木) 22:05:47
>>414
jが必要になったらどうする。
0419デフォルトの名無しさん2007/09/06(木) 22:06:12
やまだくんはネームスペースをだな
0420デフォルトの名無しさん2007/09/06(木) 22:06:28
田中は山田のイヂワルな上司だ。
今日も嫌がらせを部下達にして楽しむ。

「iというなまえはかぶるかもしれないからあんぜんじゃない!
「Int16 _USER_OBJECT_YAMADA_WRITE_200709062156_FOR_COUNTER
「完璧なソースコードの誕生だ!

あれ、山田が何か楽しそうだぞ。
イヂワルしてやれ!
「山田君、このメソッドの名前は[_USER_OBJECT_YAMADA_WRITE_200709062156_FOR_COUNTER]にしてくれ
 会議で決まったのだ!
0421デフォルトの名無しさん2007/09/06(木) 22:06:31
>416
じえんはないけどえいえんはあるよ!
0422デフォルトの名無しさん2007/09/06(木) 22:12:35
たなかさんめそっどめいのせんすないからきらいだ!

そうだ。こういうときは・・・おーばーろーどがあるじゃないか!

やまだはそっとたなかのめそっど名のぷれふぃっくすに
OVERROAD_
をつけたした。
これでなまえがかぶることはない。
0423デフォルトの名無しさん2007/09/06(木) 22:15:09
スレが壊れだした
0424デフォルトの名無しさん2007/09/06(木) 22:15:21
>418
よくじつにまわすか、ぷれふぃっくすにSTATIC_とかつければかいけつだよ(^^)
0425デフォルトの名無しさん2007/09/06(木) 22:17:18
>423
すまない。ガチでこんなコードの修正依頼にイラついて書いてしまった。
後悔はしていない
0426デフォルトの名無しさん2007/09/06(木) 22:19:11
マでやれ
0427デフォルトの名無しさん2007/09/06(木) 22:22:43
for(LOOPCOUNTER_[LOOPCOUNTER_1,LOOPCOUNTER_2]=58;END==TRUE;LOOPCOUNTER_1**)
{
}

やまだすごくね?
0428デフォルトの名無しさん2007/09/06(木) 22:23:33
名前空間の無い言語はきついな
0429デフォルトの名無しさん2007/09/06(木) 22:24:51
END==TRUEってなんぞ
0430デフォルトの名無しさん2007/09/06(木) 22:25:40
>>428
どちらかというとセンスのないプロ…
0431デフォルトの名無しさん2007/09/06(木) 22:33:45
ちなみに言語はC#だぜW
0432デフォルトの名無しさん2007/09/06(木) 22:35:04
ENDがTRUEの間ループをまわすの?
普通に発狂するわ
0433デフォルトの名無しさん2007/09/06(木) 22:39:10
もっとやまだのコードがみたい
0434デフォルトの名無しさん2007/09/06(木) 22:39:56
ディフォルトTRUE
スイッチFALSEとコメントある。
わからない事もない
0435デフォルトの名無しさん2007/09/06(木) 22:44:32
ディフォルトって何?
0436デフォルトの名無しさん2007/09/06(木) 22:45:54
マでやれ
0437デフォルトの名無しさん2007/09/06(木) 22:48:14
やまだソース今度ZIPであげるわ
0438デフォルトの名無しさん2007/09/06(木) 22:48:38
なんで大文字なんだろ
0439デフォルトの名無しさん2007/09/06(木) 22:49:42
小文字だと予約語などにぶち当たるからだろ。
それかOLD BASICの名残。
0440デフォルトの名無しさん2007/09/06(木) 23:08:58
まだLOOP==TRUEの方が理解できる
0441デフォルトの名無しさん2007/09/06(木) 23:56:29
ブレークポイント設定してもデバッグができなくなる現象が突然でました。
どの辺確認すればいいのでしょう?構成はDebugでやってますが
0442デフォルトの名無しさん2007/09/07(金) 00:01:03
ブレークポイントまでいってない説
0443デフォルトの名無しさん2007/09/07(金) 00:08:40
リビルドすれば治る説
0444デフォルトの名無しさん2007/09/07(金) 00:10:56
ブレークポイントはForm_Load内なので、到達してるんです。
性格にはブレークポイントに到達して、デバッグモードになるのに凄い時間がかかって
デバッグモード後はF10で1ステップ進ませると、デバッグモード解除されてしまいます
0445デフォルトの名無しさん2007/09/07(金) 00:21:14
Form_Loadのブレークポイントの後に続く文があるのに
デバッグモード解除されるんだったら、
多分VSがぶっ壊れてるんだと思うよ
再インスコじゃね
0446デフォルトの名無しさん2007/09/07(金) 00:31:52
不思議なことに、あるプロジェクトでしか現象出ないんだけど、
とりあえず朝一で再インストールしてみます
0447デフォルトの名無しさん2007/09/07(金) 00:37:35
>444
デバッグのオプションのネイティブのチェックを外して.NETのみをデバッグするようにしたらどうなる?
0448デフォルトの名無しさん2007/09/07(金) 00:40:18
>>447
すんません。ソースが会社なんで、明日やってみます。thx
0449デフォルトの名無しさん2007/09/07(金) 01:27:48
「〜〜〜は開始されませんでした」みたいなエラーメッセージがでて
デバッグ開始が異常に遅くなるときあるよね。
0450デフォルトの名無しさん2007/09/07(金) 13:13:13
>>378
kwsk
0451デフォルトの名無しさん2007/09/07(金) 15:01:14
ソリューションのクリーンとか試してみた?
0452デフォルトの名無しさん2007/09/07(金) 16:39:10
怪しいアプリに邪魔されてた事とかあるな
0453デフォルトの名無しさん2007/09/07(金) 19:05:00
質問です。

TextBoxコントロールの枠線の色は変更できますか?
できそうにない感じなのですが、そうすると自分で線を描くしかないかと
思うのですが、

Graphics g = this.CreateGraphics();

と取得してコレに対してDrawLineをしてみているのですが、
線が表示されません。

アプローチが間違っているのか、足りないおまじないがあるのか…。

どなたかお知恵をお貸しいただければ幸いです。
0454デフォルトの名無しさん2007/09/07(金) 19:49:42
>453
まずその描画はOnPaintでやるべき。

なんとなく、Panelとかの上にTextBoxを載っけてPanelとかに枠線描いた方が楽じゃない?
0455デフォルトの名無しさん2007/09/07(金) 19:59:40
>>453
いわゆるオーナードローっぽいことがやりたいのならControlPaintを使うようだから
詳細はMSDNを見るといい

が、>>454に同意だな
0456デフォルトの名無しさん2007/09/07(金) 20:19:15
>>454
> まずその描画はOnPaintでやるべき。
TextBoxBase 以下は OnPaint が無視されたような気がする。
0457デフォルトの名無しさん2007/09/07(金) 20:52:07
>450
2003までのCPPはマネージとアンマネージはクラス分けされ、同一コード内にはかけても、そこからメモリへの受け渡しが辛かった。
2005はマネージとアンマネージを並べてかける。
つまり

int A=42
printf(A.Tostring());
みたいな事ができる。
0458デフォルトの名無しさん2007/09/07(金) 20:56:41
何かしょぼいが解る人にはマジで!と叫ぶようなコード。
0459デフォルトの名無しさん2007/09/07(金) 21:15:38
>>453
やってみると意外と面倒だね。

枠の幅が1でよければ、BorderStyle =BorderStyle.FixedSingleにしておいて
WM_PAINT捕まえてそこで枠を描画すればできる。
0460デフォルトの名無しさん2007/09/07(金) 21:44:08
public string フィールドしかないクラスから、全フィールドを連結した
文字列をこさえたい。リフレクション使えばできるかと思ったら、
Type.GetFileds() はフィールドの宣言順を保証しないと言う。
どうすればできる? あきらめるしかない?
0461デフォルトの名無しさん2007/09/07(金) 21:44:35
>453
ピクチャボックスに色を塗る。
テキストをフラット枠線無しにしてピクチャの上に載せる

これが一番時間がかからない。

グラフィックで書くのも良いけど、速度は体感できない程度しか変わらない
0462デフォルトの名無しさん2007/09/07(金) 21:47:44
>>460
そもそもCILにコンパイルされた時点で宣言順なんて保証されないと思うが。
まああきらめた方がいいと思うよ(仮にできたとしても)。
0463デフォルトの名無しさん2007/09/07(金) 21:50:44
>>461
ぴったり1ピクセル分ずらすのって、むずかしくない?
0464デフォルトの名無しさん2007/09/07(金) 21:55:20
>>460
Order属性とか自分で定義して全部のフィールドに[Order(2)]みたいに付けといて
その順番で連結すれば?
それなら余計なメンバを増やしたり動作をいじったりせずにリフレクションだけでできるよ
0465デフォルトの名無しさん2007/09/07(金) 21:58:07
>463
サイズプロパティに打つんだよ。
マウスだとちょっとズレるかもだから
0466デフォルトの名無しさん2007/09/07(金) 22:01:35
>460

ヒント
IList
delegate
0467デフォルトの名無しさん2007/09/07(金) 22:07:41
>>466
そんなめんどくさいことするくらいなら初めから連結メソッドを定義するだろw
04684602007/09/07(金) 22:10:44
>>464
カスタム属性か。まあ今も Excel から自動生成してるクラスなんで、
それならできそうです。

>>466
plz one more.
0469デフォルトの名無しさん2007/09/07(金) 22:12:06
>462
確かに宣言順は保証されないんだが、
宣言順に初期化されるという保証があるので事実上宣言順に並んしまうという状態。
それを利用してリフレクションを使って順番通りに文字列をなんかするなんてソースが会社に大量にあって動いている困った状態。

どうにかして宣言順に並んでいないケースって意図的に作れないかな?
順番は保証されてないから動かない可能性があるって言っても動いてるからって理由で修正を拒まれて困ってる。
0470デフォルトの名無しさん2007/09/07(金) 22:14:45
>468
自動生成クラスなら文字列連結メソッドも自動生成した方がいい。

自動生成クラスが何かのケースで実際に動かして動かないことが発覚するリフレクションより
コンパイル時に動かないコードになってることが分かる方がいいよ。
04714602007/09/07(金) 22:56:31
>>470
んんん。良くわからんのだが、リフレクションは信用ならないということ?
連結メソッドにしろリフレクションしろ、コンパイルを通した上で、テスト
ケースもこなすと思うのだが。
04724532007/09/07(金) 23:33:24
>>454
やっぱり重ねるのが楽でしょうか…。
ありがとうございました^^

>>455
了解しました、MSDN見てみます。
ありがとうございました^^

>>456
な!?
マジですか!?
処理追ってみます。

>>459
おお、その方法よさそうですね、試してみます^^
ありがとうございました^^

>>461
やはり載せる案多数ですね…。
ありがとうございます^^

とりあえず今日は退勤してまいりましたので、明日にでもいろいろやってみようかと思います。
みなさんありがとうございました^^
0473デフォルトの名無しさん2007/09/07(金) 23:36:50
リフレクションは保障されてない
メソッドは保障されてるってことだろ?

わざわざリフレクション使う内容かどうかわからないし。
0474デフォルトの名無しさん2007/09/07(金) 23:47:59
でもこの場合属性を連番で付けるだけなら失敗のしようがないだろ
0475デフォルトの名無しさん2007/09/08(土) 00:00:35
このスレ見てるとC#おもしろそうですね。
アセンブリしかできませんが、挑戦してみようかな
0476デフォルトの名無しさん2007/09/08(土) 00:03:32
君見る目があるね
0477デフォルトの名無しさん2007/09/08(土) 00:05:03
>>475
今の流れはどちらかと言うと不毛な話ばっかりだと思ったが。
どこらへんが面白かったか教えてちょ!


正直c#は面白い。
0478デフォルトの名無しさん2007/09/08(土) 00:08:33
F#はもっと面白いよ(´・ω・`)
0479デフォルトの名無しさん2007/09/08(土) 00:42:40
>471
ある日、誰かがメンテをしてそのクラスを手でちょっとだけ修正を入れて
何気なくフィールドを追加しただけなのに挙動が変わったなんてことが起きるかもしれない。
せっかくの連番の属性も意味もわからないままコピペされて番号が重複したりするかもしれない。
そういうときに限ってテストケースの存在も無視される。
普通のメソッドになってれば少なくともそのメソッドの挙動は直接メソッド自体を書き換えられないと変わらないだろ。

マクロで普通のコードを生成できるのに、
リフレクションで処理しやすいようなクラスを用意するってのは本末転倒だろ。
C#のリフレクションはJavaなんかより割と速いけど普通にメソッドを叩くよりかは明らかに遅くなるだろうし。
0480デフォルトの名無しさん2007/09/08(土) 01:09:54
DataGridVewに行を追加したいのですがどうすればいいのでしょうか?
0481デフォルトの名無しさん2007/09/08(土) 01:46:22
asciiファイルからshift-jisで読み込んで、dataGridViewに表示させてるんですが、
この表示された値(2バイト文字)をコピーしてエクセルに貼り付けると文字化けしています。
(テキストファイルなどへのコピーは平気)
エクセルへのコピーも問題なく行うにはどうればいいのでしょう?
04824802007/09/08(土) 02:55:09
自己解決しました
0483デフォルトの名無しさん2007/09/08(土) 03:42:07
そのくらい自己解決してもらわないと困る
04844602007/09/08(土) 08:26:15
>>479
自動生成クラスを手でいじったり NUnit かけずに済ます文化がこちらには
ないんだが、言わんとしてることはわかった。ありがとう。
0485デフォルトの名無しさん2007/09/08(土) 10:06:40
dictionaryのキーとして専用の構造体を使うとき、
等値比較演算子を自分で実装しないといけないの?
試してみたら自動でやってくれてるみたいだけど
0486デフォルトの名無しさん2007/09/08(土) 10:59:15
リフレクション使うのでかなり遅いけど、それでもいいのなら
0487デフォルトの名無しさん2007/09/08(土) 13:14:24
構造体なら値比較?
0488デフォルトの名無しさん2007/09/08(土) 13:37:18
>>487
デフォルトだとValueType.Equalsが使われる。

ValueType.Equalsだが、プリミティブ型のみから構成される構造体なら
ビット比較を使うっぽい。

参照型を含んでいたりするとリフレクションでメンバごとに再帰比較してる模様。
これが遅いと言われている。

http://pc11.2ch.net/test/read.cgi/tech/1173763436/161-185
0489デフォルトの名無しさん2007/09/08(土) 13:41:43
>>488
>参照型を含んでいたりするとリフレクションでメンバごとに再帰比較してる模様。

いまのCLRならその部分をLCGで実行時生成して
キャッシュしておくこともできそうだな。

キャッシュの寿命管理が面倒そうだけど、
直近の16エントリぐらい保持しておけばそこそこヒットしそうだ。
0490デフォルトの名無しさん2007/09/08(土) 14:01:32
素直に IEqualityComparer 実装しようよ
0491デフォルトの名無しさん2007/09/08(土) 14:09:10
自作の構造体なら、わざわざDictionaryなんかに頼らなくても
自分とペアになるオブジェクトをプロパティで持たせた方が簡単で早いじゃん。


・・・・・・と俺は思っちゃうんだが、これってやっぱり単細胞過ぎる発想かな。
0492デフォルトの名無しさん2007/09/08(土) 14:10:11
>>491
肝心のハッシュテーブルはどうするんだw
04934922007/09/08(土) 14:12:39
ああ、ごめん無視して
俺のほうが単細胞だったようだorz
0494デフォルトの名無しさん2007/09/08(土) 18:57:52
>>488
ValueType.Equalsを使うならボクシングが発生するよね
それならプリミティブ型のみでもやっぱり自分で比較した方が速いのかな
0495デフォルトの名無しさん2007/09/08(土) 23:48:32
comboboxにあるクラスのインスタンスを設定したいのですがどうすればいい?


0496デフォルトの名無しさん2007/09/08(土) 23:51:32
ComboBox.Tag を使いなはれ
0497デフォルトの名無しさん2007/09/08(土) 23:51:33
ValueTypeにそのクラスを設定すればいいだけじゃん

その程度のこともしらない人がつくったアプリなんて使いたくも無いw
0498デフォルトの名無しさん2007/09/09(日) 01:41:29
>>494
JITでボクシングの部分はたいてい取り除かれているらしい。
さらにインラインかもありえるらしい。
ただJITの結果は調べられないからほんとかどうかは知らない。
0499デフォルトの名無しさん2007/09/09(日) 01:59:44
>>498
>ただJITの結果は調べられないからほんとかどうかは知らない。

ボクシングが起きてるかどうかはCLR Profilerで分かるんじゃない?
GCヒープにその値型が確保されてればどっかでボクシングは起きてるてことで。
0500デフォルトの名無しさん2007/09/09(日) 02:10:22
デバッガでアタッチしたら見えるんじゃねーの。
ってか取り除かれるのはかなり限定された状況だけじゃない?
0501デフォルトの名無しさん2007/09/09(日) 05:03:43
>>469
問題が起きたら直すでおk
世の中そんなもんだ。
0502デフォルトの名無しさん2007/09/09(日) 11:42:40
文字列に記述したプログラムを解析して結果を返したいけどいい方法はない?
jscript.netのevalはNGです。
自分で書いた独自のメソッドを呼べないので。。
public string myMethod(string s)
{
return "hoge";
}
文字列に
if(myMethod("hoge")=="hoge") "あ","い")
としておき
結果の
"あ"
を返す方法
文字列中にmyMethodがいつ来るかはわからないです。
0503デフォルトの名無しさん2007/09/09(日) 12:23:16
まあやっぱりJScript.NETのevalだな
myMethodは静的にすれば元アセンブリ参照で呼べるだろ
0504デフォルトの名無しさん2007/09/09(日) 12:36:05
>>502
IronPython
0505デフォルトの名無しさん2007/09/09(日) 12:37:51
教えてください。
ArrayList で foreach を使う事について
ループ内部でIndexof を使用してIndexを求める場合、
foreach を使用せずに最初からインデックスを指定して回すやり方が普通なのかどうか
常識的に考えると後者が普通だと思うのですが
foreach を使用したほうが、コードが若干短くなるし、
コード上では多少効率が割るそうですが、オプティマイズされたCLRが吐かれるような気もしますし
0506デフォルトの名無しさん2007/09/09(日) 12:45:06
ArrayListの中身を変更したいんならindexで回す
参照オンリーならforeachでいいんじゃないのか

Array<T>やList<T>ならForEachメソッドなんてのもある
0507デフォルトの名無しさん2007/09/09(日) 13:05:00
>>506
ありがとうございます
ところで、2003 にはList<T>は無いみたいです...
0508デフォルトの名無しさん2007/09/09(日) 13:08:21
ペイント系のアプリを書こうと思ってとりあえずPaint.NETを
使ってみたが、とてもじゃないが金を取れるソフトではありませんね

やはり、商用だとC/C++がいいのですかね
0509デフォルトの名無しさん2007/09/09(日) 13:18:51
そりゃ金とってないソフトだ品
0510デフォルトの名無しさん2007/09/09(日) 13:35:56
>>508
おまいさんは金を取ることの意味を勘違いしてるな。
The Old New Thingsでも立ち読みしてこい。
ttp://www.amazon.co.jp/dp/4756150004
0511デフォルトの名無しさん2007/09/09(日) 13:57:37
>>508
みたソフトが悪い

あれはMITのヲタク学生が書いた駄作だよ
0512デフォルトの名無しさん2007/09/09(日) 14:05:24
またまたArrayListについて教えてください
ArrayListにオブジェクトをセットして
セットするオブジェクト: int Key, string Name1, string Name2, ...
そのArrayListに対して、例えば、Key = 3 は何番目なのかを
メソッドだけで、処理できますか?
Contain と IndesOf と、比較用のメソッドをオーバーライド?すればできそうな気もしていますが
良くわかりません
0513デフォルトの名無しさん2007/09/09(日) 14:26:55
なにを言っているんのかよく分からんが
IndexOfでとれるだろ。。unboxingされて値が同じなやつが返るだろうけど
05145122007/09/09(日) 14:29:21
>>513
比較の際に、同一オブジェクトではなく、プロパティのKeyのみで比較したいのです
■ このスレッドは過去ログ倉庫に格納されています