このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
スレ立て乙。次からはこれもテンプレに追加してください。 釣りは過疎ってる時に50レス程度に
ただ同期処理はC#にあるエレガントなやり方を使ったほうがいいだろうな C#、同期とかでググって見るとか、前スレのキーワードをググって見るとか
なあ別のスレッドの値て何よ? Checkedじゃないわけ?
マルチスレッドがよくわからんのだろう スレッド間でどういうやり取りが出来るかが見えていないとみた
Checkedがセットされるまではただ待つんだろ? なんで値?を取得する必要があるわけ?
checkedプロパティのSetで行いたい処理(メソッド)を実行すればいいじゃんと いまだに思っている俺がいるんだがなんか間違っているのか?
Thread1がwhile内でCheckedを使っているのに、他所のスレッドThread2からそれを更新できるのか? がわかんないんじゃないの?
推理 1)スレッド1でちょっと待っている間に、スレッド2がCheckedをtrueに変更したら即座に待ちを止めてtrue時の処理 2)待ち時間タイムオーバー時は(念のためCheckedを確認して)何らかの処理 ってことかな?
実はマルチスレッドじゃなかったりしてな。 そう思い込んでるだけで。 そんなわけねーとは思うがこんなんでスレッドなんて扱えねーだろ
初心者ってーのはそんなモンでソ
スレッド間の協調動作を、片方のスレッドだけで確実にやるなんて不可能
アクターがどっちかってのがわかってないのも問題だな
本当におまいら御飯5杯くらい食うのなww
23 :
デフォルトの名無しさん :2007/01/09(火) 01:26:13
だいたいこんな感じです thread2は変更不可 値の取得しかできません thread1 thread2 . . bool msg; . msg=returnBoolMethod(); . . public void returnBoolMethod() . { trueでないと↓を . 実行しない return (true); . 次の処理 } . . . .
… なんだそれは…
おれたちはおまえのお母さんじゃないんだから おまえの考えてることなんて分からないんだよ。 悲しいことにね。
26 :
デフォルトの名無しさん :2007/01/09(火) 01:30:17
returnBoolMethodを実行してるのはthread1なわけで
Thread1 while((msg=thread2.returnBoolMethod)==False) sleep(100); 次の処理 じゃだめ?
それでなんでwhileでできないと思う… trueがかえるまで待つんじゃないのか?
29はスレッドについてちょっとは勉強したほうがいい
なあ、スレッドにメソッドがあるのは どういう状態を表してるんだ?
つーかスレッドってのは実効環境の事だろ? Threadオブジェクトってのは単なるスレッドの状態を持ってるオブジェクトだろ?
34 :
デフォルトの名無しさん :2007/01/09(火) 01:35:00
>>29 そのwhileの中にsleepが2秒たったら、諦めるというコードを入れればいけるかも!
ちょっと試して見ます
37 :
デフォルトの名無しさん :2007/01/09(火) 01:36:57
>>29 あ、いや、だめだ。
returnBoolMethodは、それ自体が他の処理もやっていて
その処理が何度も実行されてしまうからwhileの中に入れるのはだめなんです
>>32 スレッドの意味もよくわかってないです。
スレッドというか、別のクラスと考えてください。
スレッドとかマルチスレッドとかそういうのはわかりません。
ゴメン C#ってThreadクラスとかってって無いの?
∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄ ∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄ ∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄
おいおい今までのダメですの嵐はなんだったんだよ
理想的な釣技だなおい
おーい、別のスレッド言ってたのはなんだったんだ?
まじで
>>17 か?
44 :
デフォルトの名無しさん :2007/01/09(火) 01:41:10
メソッドは間違ってました。忘れてください 条件 1.Aクラスから、StaticなBクラスを呼び出して値を返してもらう 2.その値を返すタイミングはわからない。最大2秒待つ 3.そのBクラスは一切変更できない。呼び出しと値の返すことしかできない。 4.Bクラスは1度しか呼び出せない。 5.値はTrueかfalseを返してくる。どちらかが返ってくるまでAクラスの処理は待機する
45 :
前スレ801 :2007/01/09(火) 01:42:39
>>43 誰かがそういう風に言ったので
私がやろうとしてることはスレッドと呼ばれるものだと
思い込んでました。すみません。
>>44 Bクラスのメソッドを呼ぶ。
↓
返ってくるまでそのスレッドはブロックされる。
以上。終了。
>>44 ただ値が帰ってくるのを待てば良い。
非同期呼び出しとかしなければ、何をするまでもなく待機してくれる。
2秒待つって時点で既に非同期になってるわけだが・・・
>>37 その1回の呼び出しは誰が…
1回て…
ただよんでtrueなら処理するだけ?
なわけねーよな…
50 :
前スレ801 :2007/01/09(火) 01:46:33
>>41 ばらすということは、Aクラスを別のとこから呼び出すということになりますよね?
じゃあ、その呼び出し元はやっぱり、値が返ってくるまで待たなければならず
値が返ったかどうかもわかりません
親の親のそのまた親のって感じで処理が↑へと遺伝していくだけじゃないですか?
え、まじで呼ぶだけですむ事やろうとしてたわけか?
52 :
前スレ801 :2007/01/09(火) 01:48:25
>>47 それはごもっともですが
問題なのは。Bクラスは、非同期であるということなんです
同期型なら、値が返ってきたら、次の処理という風に
自然に自動でやってくれますが
AクラスとBクラスは非同期で、それぞれが勝手に動いてます
最大で2秒しか待たないのに 値が返るまで待たないといけないと。 さてさて
>>50 その前に
>>44 の条件がよくわからんのだが、
>1.Aクラスから、StaticなBクラスを呼び出して値を返してもらう
>2.その値を返すタイミングはわからない。最大2秒待つ
っていうのはどういう意味なんだよ
メソッドを呼べば値は帰ってくるだろ?
Aクラスの時なんかの状態とメソッドの返り値は同期していないってことだろ?
クラスが非同期??
(´-ω-`)...zzzZZZ
ブールを返すメソッドがいつ帰ってくるか分からん?
59 :
47 :2007/01/09(火) 01:52:13
>>52 俺が言っている 【非同期】 は IAsyncResult とかが出てくるほうだけど、その認識でOK?
もしそうなら IAsyncResult -> AsyncWaitHandle -> WaitOne(TimeSpan, Boolean) で解決するけど、これじゃ不満?
60 :
前スレ801 :2007/01/09(火) 01:53:21
>>54 Bクラスはユーザーからの入力待ちと考えてください。実際は違いますけど
なので、呼び出したからすぐ値が返ってくるわけではないです
61 :
前スレ801 :2007/01/09(火) 01:55:09
AクラスはBクラスの返り値待ちで Bクラスはユーザーからの入力待ちです
>>60 Bクラスで状態が変ったらAクラスに通知するんじゃダメな理由は何?
通常、UIはオブザーバーパターンの実装になるだろう?
値は返ってこないがメソッドはすぐ帰ると でその戻り値は普通にブールと 有り得るかそんなの!
なぁどこまでスレ無駄使いするんだ?
65 :
前スレ801 :2007/01/09(火) 02:00:32
>>55 メソッドを呼び出したいわけじゃなく、クラスを呼び出したいんです
「スレッドの無駄遣い」という言葉はよく使われるが、実態が無いがなw 実質的に誰も困る事はあるまいw
>>65 1つの方法に固執するのはよくない
なんでそんなにヘンな前提を置きたがるのかがわからんからなんともいえんが
あまりいいつくりとはいえないだろうね
68 :
前スレ801 :2007/01/09(火) 02:03:59
単純に何かしらの値が返ってきたら処理をするってプログラムがしたいだけだったのに どうやら相当難しいことみたいですね。 もしくは、初心者スレでは許容範囲超えてるのかな とにかく、わたしもまだ風呂も入ってないので 今日はこの辺でお暇させていただきます 長々とお付き合いして頂いた方々 ほんとうにありがとうございました。
>>68 >もしくは、初心者スレでは許容範囲超えてるのかな
>もしくは、初心者スレでは許容範囲超えてるのかな
>もしくは、初心者スレでは許容範囲超えてるのかな
>もしくは、初心者スレでは許容範囲超えてるのかな
>もしくは、初心者スレでは許容範囲超えてるのかな
ニセモンだろ
クラスを呼び出すとはコレイカに?
74 :
前スレ801 :2007/01/09(火) 02:09:56
dllです。それ以上は言えません
おりももう寝なきゃナー 今日はJavaの宿題スレで宿題してやっちゃったり ここでヘンなやつの相手しちゃったり 無駄な体力使っちゃったなーwww
なんでマ板ってIDねーの?
で、結局 801 が何をやりたかったのか、正確に理解した奴はいるか?
78 :
デフォルトの名無しさん :2007/01/09(火) 02:13:12
正解が出そうになると、意味がわからないと逃げ また、新しい条件を設けてのらりくらり 楽しかったお^^
いるわけねー
はいここまで無駄レス
いや、おれは釣りじゃなくて本物のあほと見たい
あほで確定
あほっつうか、ホントに何も分かってない本物のど素人だろ
> 63 だから、Aから呼んだ先Bでは別スレッド開始してすぐ戻ってくるんだろ... 1)呼び元AでスレッドCを開始、スレッドCはタイマーをはってBを呼び戻りを待つ AはスレッドCが終わるのを待つ 2)スレッドCはタイムアウトもしくはBからの戻りでAに制御を戻す ってことかな(´д`)どうかな
だったらなんで戻り値がブールなんだよ。 値を返すメソッドだって言ってるじゃねーか
そんならただの非同期呼び出しでいいだろ
いい例を思いついたので最後書きます もう少し調べてわからなければ、また質問させていただきます string msg =Str.SubString(initA) MessageBox.Show(msg) SubStringの反応が悪く、値を返してくれるかわからない そういう場合どうしますか? 値がもどらなければ、msgはnullのままです。 通常は、値が返ってくるまでmessageboxの処理はやらないのが自然ですけど 値が返ってくる来ないに関係なく次のmessageboxの処理まで行ってしまうということです
88 :
84 :2007/01/09(火) 02:39:39
>85 > 問題なのは。Bクラスは、非同期であるということなんです > 同期型なら、値が返ってきたら、次の処理という風に > 自然に自動でやってくれますが > > AクラスとBクラスは非同期で、それぞれが勝手に動いてます って書いてあるからなぁ AクラスからBクラスのメソッドを呼び出したら、Bクラスのメソッドが終わるまでAには制御が戻らないよね? ...あきらめて寝るw
89 :
84 :2007/01/09(火) 02:41:29
>87 > 返ってくる来ないに関係なく次のmessageboxの処理まで行ってしまう マジ?
>>88 戻らないのは同期型の場合です。
戻る戻らないに依存しないのが非同期の関係です
だからその場合最終結果はどうやって取得する仕様なんだよ
92 :
84 :2007/01/09(火) 02:45:26
>90 んじゃ >84 でどぉ?
最終結果を取得する方法が元々ないなら そんなこと出来るわけないのは分かるだろ
>>91 値は1回だけ返ってくるので、それが正解です。
>94 日本語でおk
だったらメソッドが戻ればもう結果は分かってんじゃねーのか どこに待機の必要があるわけ?
>>84 これなら、AがBをタイマーで張って待ってるのと変わらないんです
>>96 Bメソッドは、そのまたCメソッドを呼び出すので
そのCメソッドが値を返す返さないに関係なく
Bメソッドは結果を出してしまうためです。
なので、厳密にいうと、AクラスのAメソッドは、実は、Cメソッドを監視しているわけです。 BはAにもCにも依存せずに、すぐに結果を出してしまうわけです。
一回だけ返る結果はメソッドの戻り値じゃないのか? その場合はどうにかして結果を調べる必要があるだろ? メソッドの結果は最終結果じゃないんだから。 だったら調べる方法は用意しつあるだろ? あとはまあそれをポーリングするだけだろ? メソッドの戻り値が最終結果なら最初から何も考える必要ないだろ。
HelloWorldからやりなおせ
Aクラスの A1メソッド { Bメソッド();//すぐに値を返して次の処理(Cメソッド呼び出し)へ移る Cメソッド();//いくつかの処理をして値を返す } Bメソッドが呼び出さないで、Cメソッドを呼び出すとエラーになります。 また、Bメソッドと同期を取ると、Cメソッドは実行されません。 BとCは親子関係になります。Bが親、Cが子であり、 AクラスからはBもCも他人の家族です
全然分からねーが、つまり最終結果は調べられないということかな? つまりCメソッドの結果 調べる方法はないけど結果は取得する必要があるわけかな? 出来るかぼけ
全然分からねーが、つまり最終結果は調べられないということかな? つまりCメソッドの結果 調べる方法はないけど結果は取得する必要があるわけかな? 出来るかぼけ
なんだ? 全然分からねー
AがCを呼んでるように見えるんだがそうじゃないんだよな?
親子ってなんだ? 家族ってなんだ?
Bメソッドが呼び出さないで、Cメソッドを呼び出すとエラーになります。 また、Bメソッドと同期を取ると、Cメソッドは実行されません。 BとCは親子関係になります。Bが親、Cが子であり、 AクラスからはBもCも他人の家族です えーっと...まぁなんだ 日本語でおk
> 次のコード サンプルは、メソッドを非同期に呼び出して、メソッドが完了するまで最大 2 秒間待機する方法を示しています。 なんかそれらしいのがMSDNにありますけどぉ...
Aクラス A−1メソッド { BクラスのBメソッド();//処理をする //ここで待機 /*次の処理 ここもBの1の処理し終えてなければならない */ CクラスのCメソッド();//Bが1の処理し終わってなければ呼び出してはならない } A-2メソッド:Bの1の処理が終わっていることを判断するメソッド { }
A-2メソッドをwhileで繰り返し処理することで解決しました ありがとうございました。 おやすみなさい
解決したらしいw
何をどうやりたかったのか最後まで分からなかったが、
こんだけレス費やしてその解決方法はひでぇ。
>>55 ,
>>59 では駄目なのか?
>>111 Bメソッドの処理が終わるまで待つのはダメなんです
Bメソッドの処理が終えるのはCメソッド(イベント)が終わるのが条件ですから
Bメソッドの処理が終わるまで待つと、Bメソッドのところで止まったままになり
CメソッドへもAクラスから終了するように命令できないのでダメなんです
↓わかり易くいうとこんな感じ
Bメソッド
{
・Cデリゲート
・Cイベントが終了したのでBメソッドも終了
}
Cイベント
{
AクラスのAメソッドからCイベントを終了するように命令されるのを待つ
}
Cイベントを終了させるにはAクラスから処理しなければならない
もういいよ。かえれ
最後まで全然分かりやすくないのがワロス
終了メソッドとか何の話だよw ていうか、死ぬほど出てるポーリングとどう違うんだよ
マルチスレッドっていうのは 負荷が高い処理が時間のかかる処理を並行してやらせるためのものですよね? これだと、次の処理に行ってしまうのでダメ ポーリングだと、処理が終えるまで待機してくれるのはいいですが そのポーリングで呼び出した先のメソッドはどうやってかけばいいんでしょ? 実際、Cイベントがいつ終了するかはわからないので何度もスキャンしてやらないだめなんです Cメソッド { Scan(); } ↑をポーリングで待機したって、falseがすぐに帰ってくるだけです 答えはすぐ返ってきますが、それは真ではないです。 成功すれば1秒以内にtrueが返ってくるけど そうでない場合はfalseが返ってきます
> string msg =Str.SubString(initA) > MessageBox.Show(msg) 結局はこれなんだろ? んで、SubString はタイムアウト時に null を返す可能性があると。 ここまでは合ってるのか?
>>117 実際にはnullじゃなくて何も返さないんですけどね
返さなかったというのはわかるので、同じことですけど
>>118 何も返さないというのはありえない。
null ないし何らかの string インスタンスが返るという大前提がある。
1つ聞くが、本当に C# なんだよな?
do { Thread.Sleep(ScanDelay); int ExitsAnser=Scant(); if(ExitsAnser!=0) doWhileKeeped=false; if(OverWorkTime> ScanningTime) doWhileKeeped=false; OverWorkTime /= ScanDelay; } while(doWhileKeeped)
>>119 C#ですが、相手は値を返さずにエラーを起こしてハングアップする可能性があります
ハングアップした場合は、処理を中断させるように促さなければなりません
>>121 そんな糞な相手は使うなw
Thread 使って SubString を切り離し、元 Thread では Join をタイムアウト付きで実行、
んで Join から抜けても Thread 終了していなかったら Abort してやれ。
最初に質問してたのと全然内容が違うのがバロスw
>>122 それだと元Threadが生きたままになってしまうので
ユーザー側がハングアップしていると思い何度も
一連のプログラムを実行させようとする可能性があります
ユーザー側に暗黙的なルールを持たせたくはないのです
なので、この処理をしている間はGUIは入力イベントを受け付けない
設計でないといけません。
>>124 この処理をしている間は GUI イベントを受け付けなければいいじゃないか。
Control.Enable で GUI の有効・無効が設定できるぜ。
>>125 受け付けないなら、マルチスレッドにする意味がないとも言えます
>>126 あるから! ちゃんと意味はあるから騙されたと思ってやってみろ。・゚・(ノД`)・゚・。
>>127 確かに両方ともハングアップしてしまう可能性があるので強制終了というハメにならないためにマルチスレッドにして終了プロセスのみ受け付けるようにしたほうがいいかもしれませんが、だが、断る!
撤回却下! それから俺用語も使うな!
妙なこだわりがあると何も出来ないっていう典型例だな……。
どっかで聞いたそれらしい言葉を並べてt難しく見せようとしてるだけだな
ま、解決したんだしいいじゃない レスしているうちに問題点が見つかることはよくあること 初心者スレだしどんどん質問していこう
133 :
デフォルトの名無しさん :2007/01/09(火) 13:24:15
MIDIキーボードの鍵盤を押したら、PC側で音を鳴るようにしたいです。 参考書籍として、.NET Framework プログラミングテクニック Vol.3 を購入しましたが、midiOut しか扱っていません。 C#でmidiInの参考になるようなサイトがあったら教えてください。
せめて普通の人間に分かるように質問してほしい
あのな、普通ポーリングって言ったら、 結果が得られるまで繰り返すんだよ
>>134 それではおまえが801の変わりにわかりやすく質問してみろ
おれは結局何がしたかったのかがわからん
>>121 それはCメソッドのことたろ
Bメソッドの話をしてたんじゃないのか?
801は糞だけど、彼のおかげでいろいろ勉強になったw ちょっと感謝w
何いってんだ? 死ぬほど書かれてただろうが
141 :
デフォルトの名無しさん :2007/01/09(火) 14:48:08
XmlSerializerでデシリアライズしてプロパティに配列をもったクラスに格納するとき、 その配列に対応するXMLの要素の繰り返しは、順番を保持したまま格納される?
配列は大丈夫だったはず
143 :
141 :2007/01/09(火) 15:31:35
経験的には大丈夫そうなんだけど、確証がほしいのです 贅沢でスマソ
オーバーライドとオーバーライトの違いを述べよ
゛
上乗せと上書き
>>143 そんなに心配ならインデックスとアイテムをセットにした構造体に入れとけば
801の問題は前スレで解決していた。
誰も目的がわからんから、雑談にしかなってないなw 早くエスパー現れてコード書いて解決してくれよ! もうやってらんない
while(true){ Console.Write("BABEL"); }
Visual C# 2005のWebBrowser コントロールって、新しいウインドウで表示されるとき、 NewWindowでそれをキャンセルするか、それを許可して、IEで開かせるかしかできないの? どこのURLを開こうとしているのかを取得して、WebBrowserコントロールで表示したいんだが…。 NewWindowの中では、今、表示しているページのURLしか取れないし…。
初心者ってスタートの時点であっちの方向むいてるから難しいんだな…て思った。
ねぇどこら辺で釣り終わった?
801で検索w
148・・・無駄にしすぎだろ・・・
801の人気に(ry
XP sp2 C# 2005 Express Edition を使用しています。 下記のようにMDIフォームからフォームを子(以下、childForm)として呼び出しているのですが、 Form childForm = new Form(); TextBox txtBox = new TextBox(); childForm.Controls.Add(txtBox); childForm.MdiParent = this; childForm.Text = "子フォーム"; childForm.Show(); childFormのテキストボックスに対してCtrl+Vでの貼り付けができません。 同様にCtrl+Cでのコピーもできません。 テキストボックス内での右クリックメニューから選択すればできます。 childForm.MdiParent = this; の部分をコメントにしてchildFormをMDIの子フォームとして呼び出さなければCtrl+VもCもできます。 MDIフォームの子フォームというのはそういうものなのですか?
単純にそれだけのフォームなら問題なくコピー貼り付けできるので、それ以外の部分にも原因はありそうだな。 つか今時 MDI ?
>>160 親フォームのメニューとかで Ctrl+C と Ctrl+V を喰ってないかチェックしたれ
164 :
160 :2007/01/10(水) 03:14:53
>>161 >>162 >>163 回答ありがとうございます。問題解決しましたので書いておきます。
MDIフォームを作るときに「新しい項目の追加」から「MDI親」を選択して
自動的に作成されたMDI親フォームをそのまま使用していたのですが、
その親フォームにはメニューバーやツールバーやステータスバーがはじめからついていて、
そのメニューバーの[編集]-[切り取り]に割り当たっていたショートカット(Ctrl+V)に
持って行かれていたようです。
割り当たっているショートカットを削除したら無事貼り付けできました。
ありがとうございましたヾ(*´∀`*)ノ キャッキャ
ところでMDIって流行っていないんですか??
プログラミングするときどんなフォントがお勧めですか?
漏れは「Osaka - 等幅」を10ポイントのアンチエイリアスかかった状態で。 お勧めかどうかは知らない。
すみません。質問させてください。 ハッシュの配列を作ろうとしているのですが Hashtable[] ht = new Hashtable[10]; ht[0]["testkey"] = "testvalue"; ← ここでヌルポ参照エラー になってしまいます。。。 ht["testkey"][0] = "testvalue"; ht[0].Add("testkey", "testvalue"); ht[0].Keys["testkey"] = "testvalue"; すべてだめでした。。。 もうどうしたらいいのか。。。 お願いします。
参照型の配列を作っても配列の要素は全部 null だよ
>>169 なるほど。。。
勘違いをしていたようです。ありがとうございます。
>>168 Hashtable ht1 = new Hashtable[10];
Hashtable ht2 = new Hashtable[10];
hashの変数を二つ用意するのでは駄目なのかな
このほうが可読性が良いし、データとして扱い易い
んじゃないかな
>171 ?…??
>>171 型 'System.Collections.Hashtable[]' を型 'System.Collections.Hashtable' に暗黙的に変換できません。
そっとしといて上げようよ ヌルポ
ヒソヒソ (AA略
初心者に初心者が答えるスレはここですか?
一応自称中級者もいるよ。
自称中級者が初心者にしったかするスレです
眠いんだけど寝たほうがいいですか?
True
183 :
181 :2007/01/10(水) 23:45:37
>>182 ありがとうございました
仕事残ってるけど寝る事にします
OnSleep
OnSleep(SleepEventArgs e)
protected override void OnSleep(SleepEventArgs e) { //base.OnSleep( e ); base.OnWakeUp( new WakeUpEventArgs( this.mother ) ); }
protected override void OnSleep(SleepEventArgs e) { e.Dream.Add(new 気になるあの子()); }
e.Cancel = true;
こういうつまんない書き込みしかねーのかよ
学生の宿題が終わったんだこんなもんだろ?
191 :
デフォルトの名無しさん :2007/01/11(木) 15:50:49
クリップボードのデータが変更された場合に発生する通知は、どうやって得たらいいのでしょうか。 教えてエロい人!><
ヒント: SetClipboardViewer
ありがとう
>>192 ( ^ω^)
APIでやるんですね☆
クリップボードチェーン
IEのアドレスバーに入力されているテキストはどうやったら取得できますか
現在見ているアドレスじゃなくてアドレスバーのテキストか。 FindWindow / FindWindowEx でアドレスバー探して WM_GETTEXT を SendMessage かね。
質問させて下さい。 DataSet(拡張子xsd)を継承して拡張する事は可能でしょうか?
試してみたらどうかな?
199 :
デフォルトの名無しさん :2007/01/12(金) 11:48:40
誰か!このコードを簡潔に直してください。おながいします。 private void button1_Click(object sender, System.EventArgs e) { DialogResult dr = folderBrowserDialog1.ShowDialog(); if(dr == DialogResult.OK) list(); } private void button2_Click(object sender, System.EventArgs e) { DialogResult dr = folderBrowserDialog1.ShowDialog(); if(dr == DialogResult.OK) list2(); }
200 :
199 :2007/01/12(金) 11:49:17
つづき private void list() { textBox1.Clear(); listBox1.Items.Clear(); textBox1.Text = folderBrowserDialog1.SelectedPath.ToString(); DirectoryInfo di = new DirectoryInfo(textBox1.Text) ; foreach (DirectoryInfo dir in di.GetDirectories()) // フォルダの一覧表示 { listBox1.Items.Add(dir.Name); } foreach (FileInfo file in di.GetFiles()) // ファイルの一覧表示 { listBox1.Items.Add(file.Name); } }
201 :
199 :2007/01/12(金) 11:50:35
つづき2 private void list2() { textBox2.Clear(); listBox2.Items.Clear(); textBox2.Text = folderBrowserDialog1.SelectedPath.ToString(); DirectoryInfo di = new DirectoryInfo(textBox2.Text) ; foreach (DirectoryInfo dir in di.GetDirectories()) // フォルダの一覧表示 { listBox2.Items.Add(dir.Name); } foreach (FileInfo file in di.GetFiles()) // ファイルの一覧表示 { listBox2.Items.Add(file.Name); } }
何でそうしてほしいのかわからんが、 list()の引数でTextBoxを渡せればlist2はいらんわな。
203 :
デフォルトの名無しさん :2007/01/12(金) 17:28:02
もっと簡潔になるかもね private void button1_Click(object sender, System.EventArgs e) { if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) list(textBox1, folderBrowserDialog1.SelectedPath.ToString()); } private void button2_Click(object sender, System.EventArgs e) { if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) list(textBox2, folderBrowserDialog1.SelectedPath.ToString()); } private void list(TextBox textBox,ListBox listBox, string strPath) { textBox.Clear(); listBox.Items.Clear(); textBox.Text = folderBrowserDialog1.SelectedPath.ToString(); DirectoryInfo di = new DirectoryInfo(strPath); foreach (DirectoryInfo dir in di.GetDirectories()) // フォルダの一覧表示 { listBox.Items.Add(dir.Name); } foreach (FileInfo file in di.GetFiles()) // ファイルの一覧表示 { listBox.Items.Add(file.Name); } }
>>203 SelectedPathをToString()してる意味が分からん。
あー間違ってるし・・・ private void list(TextBox textBox,ListBox listBox, string strPath) { textBox.Clear(); listBox.Items.Clear(); × textBox.Text = folderBrowserDialog1.SelectedPath.ToString(); ○ textBox.Text = strPath;
textBox.Clear(); も必要なし
list呼び出すときにListBox渡してない listの引数にstrPathはいらない
209 :
203 :2007/01/12(金) 18:26:07
あーもうだめだめだ・・・orz
すまん
>>199 private void button1_Click(object sender, System.EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
list(textBox1, listBox1);
}
private void button2_Click(object sender, System.EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
list(textBox2, listBox2);
}
private void list(TextBox textBox,ListBox listBox)
{
listBox.Items.Clear();
textBox.Text = folderBrowserDialog1.SelectedPath.ToString();
DirectoryInfo di = new DirectoryInfo(textBox.Text);
foreach (DirectoryInfo dir in di.GetDirectories()) // フォルダの一覧表示
{
listBox.Items.Add(dir.Name);
}
foreach (FileInfo file in di.GetFiles()) // ファイルの一覧表示
{
listBox.Items.Add(file.Name);
}
}
だからSelectedPathにToStringはいらな(ry
212 :
203 :2007/01/12(金) 18:44:18
ぐへへへ ※listBoxEx:渡されたパスからフォルダ、ファイルリストを表示する setPathメソッドを実装したカスタムコントロール private void button1_Click(object sender, System.EventArgs e) { if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) textBox1.Text = folderBrowserDialog1.SelectedPath; listBoxEx1.setPath(textBox1.Text); } private void button2_Click(object sender, System.EventArgs e) { textBox2.Text = folderBrowserDialog1.SelectedPath; listBoxEx2.setPath(textBox2.Text); }
画像を用紙に印刷したいのだが、スケーリング条件は、 1 印刷領域をできるだけ命一杯使う 2 用紙と画像の縦横比が異なる場合長いほうを印刷領域に合わせる お願いします。
いやです。
サービスとして動くプログラムを作りたいのですが、 サービスについての知識が全くありません。 参考になるサイトがありましたら教えてくだ
217 :
216 :2007/01/13(土) 21:54:33
VB.NETスレでも訊いたのですが、 回答がなかったのでこちらで訊きます
まるちいくない
MSDN2
まずはメイド服。話はそれから。
AボタンとBボタン、押されたときの処理をどちらも同じ事をさせたいのですが、 同じコードを両方に書けば簡単ですね。 他に方法はありますか?
>>223 とりあえずここから
・A/Bに同じイベントを登録する
・A/Bで同じMethodを呼び出す
>・A/Bに同じイベントを登録する 微妙にいってることが違う。
226 :
223 :2007/01/14(日) 23:07:42
>>224 AのイベントをBで呼び出すことは出来ますか?
>>223 プロパティウインドウで呼び出すイベントハンドラをマウスで変えるだけ
buttonA.Click += new EventHandler( buttons_Click ); buttonB.Click += new EventHandler( buttons_Click ); ってことじゃなくて?
>AのイベントをBで呼び出すことは出来ますか? イベント呼び出すのとイベントハンドラ呼ぶのはべつ。
231 :
223 :2007/01/14(日) 23:17:46
>>224 ,227
あ、これで出来るんですか!
ありがとうございました。勉強になりました!
>>229 自分の知識では、まだ理解できないので調べてみようと思います。
232 :
225 :2007/01/14(日) 23:18:45
227が俺の回答 でもこの方法は勧めない。
233 :
223 :2007/01/14(日) 23:27:20
自分の知識不足でイベントハンドラというのがよくわかりませんが、
やりたいことはまさに
>>227 です。
この方法は勧めない、とありますが、どういった理由からなんでしょうか?
234 :
225 :2007/01/14(日) 23:28:32
>>233 名前の問題&ゴミの始末を自分でできるならよし。
イベントハンドラとはイベントが発生したとき呼ばれるもんだな。 細かく書くと全然違うけどこんな感じ ボタンクリック ↓ OnClick ↓ イベント発生 ↓ イベントハンドラ
236 :
225 :2007/01/14(日) 23:39:06
ふーん
237 :
223 :2007/01/14(日) 23:41:54
ボタンをクリックする、などがイベントで、
イベントによる処理がイベントハンドルという事であっていますか?
>>225 お手数かけますが、もう少し具体的に教えていただけますか?
238 :
223 :2007/01/14(日) 23:43:05
イベントハンドル → × イベントハンドラ → ○ 失礼しました。
>>237 225じゃないが
×A/Bに同じイベントを登録する
○A/B双方のClickイベントに対して同じイベントハンドラを登録する
てことかな
イベントハンドラはイベントが発生したときの処理
240 :
223 :2007/01/15(月) 00:06:48
>A/B双方のClickイベントに対して同じイベントハンドラを登録する そういうことですね。 >イベントハンドラはイベントが発生したときの処理 なんとなく、イベントとイベントハンドラの違いがわかりました。 ありがとうございます。
ボタンクリック程度なら、それぞれのイベントハンドラから 同じプロシージャ呼んだ方が初心者らしくて良いと思うのだが。
TextBoxのReadOnlyをTrueにしたときのKeyDownイベントで コントロール+E,R,J,L が発生しくて困っています。 フォーカス移動のショートカットのようなのですが、 回避してイベントを受け取る方法はありませんか?
ありません
244 :
199 :2007/01/15(月) 14:45:51
>>202-
>>212 遅くなりましたがありがとうございました。
>>212 >※listBoxEx:渡されたパスからフォルダ、ファイルリストを表示する
>setPathメソッドを実装したカスタムコントロール
↑の作り方が分からなくて・・結局こんな感じになりました。
private void list(TextBox textBox,ListBox listBox)
{
listBox.Items.Clear();
textBox.Text = folderBrowserDialog1.SelectedPath;
DirectoryInfo di = new DirectoryInfo(textBox.Text);
foreach (DirectoryInfo dir in di.GetDirectories()) // フォルダの一覧表示
{
listBox.Items.Add(dir.Name+"*");
}
foreach (FileInfo file in di.GetFiles()) // ファイルの一覧表示
{
listBox.Items.Add(file.Name);
}
}
245 :
199 :2007/01/15(月) 14:46:50
上の続き private void button1_Click(object sender, System.EventArgs e) { DialogResult dr = folderBrowserDialog1.ShowDialog(); if(dr == DialogResult.OK) if ((sender as Button).Name == "button1") { list(textBox1,listBox1); } else { list(textBox2,listBox2); } } で、ボタン1と2とでイベントハンドラを共有してます。 どうでしょうか。
ハンドラを共有するこたないのでは どうしても一緒にしたかったら button_click(int nButton) でも作って両方のハンドラからこれを呼ぶとか
普通メソッド呼ぶよな。 後でボタン変えるときも便利。
コントロールの同一性の判別にNameを使うのは邪道。 せめて (sender == this.button1) とかにしとけ。
ちゃんとソース読んでる人がいた!!
プログラム始めたんですが、彼女が出来ません。 釣りなんでしょうか?
あんまりからかってやるなw
ハンドラの箱を開けてしまったようだ
>>245 asを使うならnullチェックしろ
他の型が来ないとわかってるなら普通にキャストしろ
NullReferenceExceptionが出たら原因がわかりにくい
あえて、thisをつける理由を教えてください this.listBox1などなぜわざわざやってるのかがわからない
ローカル変数とインスタンスメンバの区別をつけるため。
旧バージョンのVisualStudioでインテリセンスのメンバ一覧を開くためによくthis.と打ったな 今は一文字目から開いてくれるけど
>>255 ローカル変数ってメソッド内の変数のことですよね?
それぐらいわざわざ書かなくても区別できると思うんですけど
public MyClass(string name){ this.name = name; }
>>257 区別できないときにはthisをつける必要があるだろ。
そこでインスタンスメンバにthisが付いてたり付いていなかったりすると紛らわしいから俺は全部につけることにしてる。
一目ですぐ分かるし 大規模になってくればなおさら 以前this付けずに作ってた時期のソース見ると 見にくいこと限りなし。 インテリセンスでローカル変数を除外できるという利点もあるし
public int Property{ get{ return this.value; } set{ this.value = value; } } public int Property{ get{ return value; } set{ @value = value; } }
public MyClass(string name){ this.name = name; } 個人的にはこの名前の付け方は勧めない。 string nameの部分を string nameeという風にミスタイプした場合に悲劇が起こる。
>>262 MSDNにある命名方法に従えばそうせざるを得ない
引数を変な名前にするな,とあるだけで,外から見えないメンバに関しての規定はないよ
個人的にだよ。 言ってる意味分かってない人はいないよな?
しかしprefixつけるのはなんか嫌だな
こういうのprefixっていわない
m_nameとかのことだろ
>>262 のような場合でも
ちゃんとVSが警告してくれるよ
普通のクラスはMSDNの命名方法にのっとってるが、Formクラスだけは別扱いにしてる。 Formクラスはそれ自体がデカイ上にポトペタでメンバが増えていくから全体の見通しが付きにくいので、 thisも付けまくるし各種プレフィックスもハンガリアン記法もためらわず使ってる。
privateかinternalならプレフィックスもハンガリアンも使い放題
this.name=Form2.Name; Form1のプライベートメンバであるnameよりForm2.Nameの方が目立つから腹立つので Form1のもNameと宣言してるんだけどダメ?
意味不明
メニュー作成して、そこの項目を追加しようとしてるんだけど マニュアルには MenuStrip.Itemsに追加できるのはToolStripMenuItem って書いてるのに インテリセンスだと、menuStrip1.Items.Add(ってやるとToolStripItemsしか追加できないんだけど どういうこと? menuStrip1.Items[].と入力してもToolStripItemだから、.DropDownItems.Addができないんだけど・・ これってバグ? c#EE
>>275 1. ToolStripMenuItemはToolStripItemsの孫クラス
2. キャストしろ
279 :
199 :2007/01/16(火) 09:44:09
>>246-
>>248 ありがとう。コードを簡潔にするにはイベントハンドラ共有とか使った方がいいと思ってたけど、
こういう時はメソッド呼んだ方がいいんだね。勉強になりました。
280 :
デフォルトの名無しさん :2007/01/16(火) 12:35:19
WINDOWSエクスプローラーのようにディレクトリをツリー表示できるコンポ−ネント無い?
ListViewを2つ作成したのですが、それぞれのListViewのアイテムを独立して選択できません。 また1つのListViewで、1つのアイテムしか選択できないようにしたいのですが、どうしたら良いのでしょうか>< 教えて下さい。エロい人
282 :
デフォルトの名無しさん :2007/01/16(火) 15:04:38
>>281 ListViewのHideSelectionをFalseにしろ。
ただし、フォーカスがあたってない方はグレイで反転される。
2つ目はMultiSelectをFalseにしる。
283 :
デフォルトの名無しさん :2007/01/16(火) 15:06:56
ID3タグを編集するソフトを作りたいです。 どうすれば編集できるのでしょうか? 既にそういうソフトがあるのは知ってるのですが、 ID3タグをどのような仕組みで取得するか知りたいです。 よろしくお願いします。
本当に、ありがとう☆
>>282 図々しくも、もう1つだけ教えて下さいエロい人!
デフォルトでアイテムを選択させるには、どうしたらイイディスカ??
ListBoxだと ListBox.SelectedIndex みたいなのが知りたいです ><
>>285 listView.SelectItems.Add(listView.Items[0])
287 :
デフォルトの名無しさん :2007/01/16(火) 18:19:25
詳しい方ちょっと教えてください。 コンパイラ・コンパイラに興味あるんですが、 C#にもJavaCCみたいなツールはありますか?
>>288 早速のレスありがとうございます。
ツール名があれば教えていただきたいのですが・・・
ツール名は多分あるだろう
291 :
デフォルトの名無しさん :2007/01/16(火) 18:33:15
ツール名は何といいますか?
ありがとう。jayですね。 聞いたことあったけどC#が使えるのは知らなかった。 面白そうなので早速使ってみます。
うあ、まちがって直リンしちまった・・・。 すまん。
296 :
283 :2007/01/16(火) 23:07:05
質問です。 DeflatStreamを使って圧縮するのと、BWT+LZ78ってどっちが縮みますか?
DeflatStreamは全然縮まん(むしろ増えることもある)ので、圧縮が目的なら自分で実装汁
どんなデータを圧縮しようとしたんだよ。
プロジェクト内のソースコードの参照についての質問です。 プロジェクトが存在するディレクトリ外にある共通のクラスを参照したいのですが、 既存の項目の追加を行っても、プロジェクト下にソースコードをコピーしてしまいます。 どのようにしたらいいのでしょうか?
>>300 追加ボタンのドロップダウンでリンクとして追加
>>301 Thx.
>追加ボタンのドロップダウンでリンクとして追加
追加ボタンというのはツールチップで
”新しい項目の追加”と表示されるボタンでOK?
そこには”リンク”という項目が見あたらない。
>>303 でけた〜
ありがとうございました。(ずーとなやんでたんだよ〜)
プロジェクトを右クリックして「フォルダを追加」で そのフォルダと同じ名前のフォルダを追加してからコードファイルを普通に追加でもおk
フォームのクライアントエリアを、左クリック&マウス移動で ウィンドウ自体を移動させたいのですが、上手くいきません。 protected override void WndProc(ref Message m) { base.WndProc(ref m); switch (m.Msg) { case WM_LBUTTONDOWN: PostMessage(this.Handle, WM_NCLBUTTONDOWN, (IntPtr)HTCAPTION, m.LParam); break; default: break; } return; } PostMessageをインポートし、各必要な値(WM_LBUTTONDOWN, WM_NCLBUTTONDOWN, THCAPTION)は定義してあります。 ドコが悪いのでしょうか☆
☆
えーっと上手くいきませんという書き方はダメです。 どのようになるのか書いたほうがいい。
switch(m.Msg) { case WM_NCLBUTTONDOWN: base.WndProc(ref m); if (m.wParam == HTCLIENT) m.wParam = HTCAPTION; break; } かな。脳内でしかビルドしてない。
switch (m.Msg) { case WM_NCHITTEST: if (m.Result == (IntPtr)HTCLIENT) m.Result = (IntPtr)HTCAPTION; break; } こうじゃね?試してないが
試してないって言えば何でも許される
☆つけりゃ何でも許されると思ってる奴もいるようだし
馬鹿な質問ですが パネルコントロールに2つリストボックスを乗せました。 で、Listbox1にはあるディレクトリ内のファイルリストを。 Listbox2にはそのファイル群の更新日時を入れました。 ファイルの数が多いと当然スクロールバーが現れますが そのままではListbox1とListbox2が同期して動きませんよね どうしたらよいのでしょうか?おねがいします
ListViewやDataGrid(View)を使えばいいと思うよ
>>316 ありがとうございます!!
・・・すみません。追加いいですか?
エクスプローラーみたいに更新日時でソート掛けたいんですけど
sortプロパティをどうつかっていいのやら・・
よかったら教えてください
で、なんてクラスのsortプロパティなんですか?
>>318 あ、すみません。しったかしてました・・
Listboxとかのsortプロパティを使うのかなぁ・・・って思ったのですが
そんなプロパティあったか?
>>321 あ、はい!これは知りませんでしたがこんな感じのプロパティないかな?
って探してました。でもTips見ると結構難しそうですね。
コピペで作っても理解してないと意味がないと思うので
がんばって教えて頂いたサイトで勉強してみます!!
ありがとうございました
323 :
デフォルトの名無しさん :2007/01/18(木) 21:50:13
NUnitというツールを導入して、単体テストをしてみたんですが、 オブジェクトの内部状態だけが変化するメソッド (privateメンバを書き換える) のテストの書き方がいまいちわかりません テストクラスはテスト対象のクラスのprivateメンバにアクセスできないので、 意図通りにオブジェクトの状態が変化したかどうかをテストできないのです・・・ 皆さん単体テストの時どうしてますか?
リフレクション
>>324 ありがとうございます
NUnitはprivateアクセッサが無いみたいなので、
(VisualStudioTSにはあるみたいですね)
リフレクションを使って頑張ってみます
すいません。質問させて下さい。 ボタンの背景を透明にしたのですが、ボタンの枠(border?)のような線を 消したいのですが、どうしたら良いのでしょうか。 よろしくお願いします。
プロパティ→FlatAppearance→BorderSite=0
ReadProcessMemoryを使ってメモリの値を取得することができません。 以下のどこがおかしいのかご教示願います。 class Win32API { [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr FindWindow( string lpClassName, // クラス名 string lpWindowName // ウィンドウ名 ); [DllImport("kernel32.dll", SetLastError = true)] public static extern bool ReadProcessMemory( IntPtr hProcess, // プロセスのハンドル IntPtr lpBaseAddress, // 読み取り開始アドレス [Out] byte[] lpBuffer, // データを格納するバッファ uint dwSize, // 読み取りたいバイト数 out uint lpNumberOfBytesRead // 読み取ったバイト数 ); } private void button1_Click(object sender, EventArgs e) { IntPtr hProcess; bool CouldReadMemory = false; byte[] lpBuffer = new byte[1]; int lpBaseAddress = 0x00400100; uint dwSize = 1; uint lpNumberOfBytesRead; hProcess = Win32API.FindWindow("hoge", "hogehoge"); CouldReadMemory = Win32API.ReadProcessMemory(hProcess, (IntPtr)lpBaseAddress, lpBuffer, dwSize, out lpNumberOfBytesRead); textBox1.Text = hProcess.ToString()+"+" + CouldReadMemory.ToString() + "+" + lpBuffer[0].ToString() + "+" + lpNumberOfBytesRead.ToString(); }
どう取得できないんだ。エラーが出るのか。
>>329 取得できない理由を書いてませんでした。失礼しました。
エラーは出ず、falseで返ってきます。
lpBuffer[0],lpNumberOfBytesRead共に、0で返ってきます。
FindWindowで戻るのはウインドウハンドル。 プロセスハンドルじゃないぞ。 GetProcessHandleFromHwndでも使え
Vistaでしかつかえないけどな
>>331 そういうことでしたか。。。
ありがとうございました。
つーか、これもいれとけ [DllImport("Kernel32.dll")] public static extern uint GetLastError();
335 :
328 :2007/01/19(金) 16:41:05
みなさんのおかげで取得できました。有り難うございました。
取得できたソース
private void button1_Click(object sender, EventArgs e) {
bool CouldReadMemory = false;
byte[] lpBuffer = new byte[1];
int lpBaseAddress = 0x016D1A64;
uint dwSize = 1;
uint lpNumberOfBytesRead;
Process[] hProcesses = Process.GetProcessesByName("GVOnline.bin");
CouldReadMemory = Win32API.ReadProcessMemory((IntPtr)hProcesses[0].Handle, (IntPtr)lpBaseAddress, lpBuffer, dwSize, out lpNumberOfBytesRead);
textBox1.Text = hProcesses[0].Handle.ToString()+"+" + CouldReadMemory.ToString() + "+" + lpBuffer[0].ToString() + "+" + lpNumberOfBytesRead.ToString();
}
これからエラー処理を書いていきます。
どうもありがとうございました。
>>334 書いておけと言われるので書きますが、正直はっきりとした内容がわかりません。。。
今からMSDN見ます。ご助言ありがとうございます。
何で初心者ってWIN32APIに走るんだろう…
オーバーロードとオーバーライド どっちがどっちだったか分からなくなります。 エロイ方々はどうやって覚えているのか教えて下さい。
overrideとタイプするのがオーバーライドで、タイプしなくていいのがオーバーロード
辞書で両方の単語を調べるとわかりやすいヨ
同じ名前のメソッドの複数定義でいいやん なんでそんなしょうもないことにわざわざ用語を付けるのかと
>>337 ソフトを作る動機として当然だろ
プロセス読み込んだり、他プロセスをフックしたり
ソフト固有のものは自分で作るしかな。
それ以外のものなら探せばいくらでもある
>>341 二者をどうやって区別するのか知らんが勝手にそう呼んでろよ。
>>342 APIを使うことが主な目的ならC++の方が楽じゃね?
こんばんは。昨日Listviewを教えてもらった者ですが ListboxのSelected.Itemみたいにアイテムを選択できないですよね 配列になっているというのは分かるんですが、どうやったらいいんでしょうか? いつもすみません。
ドキュメント読まないのはなんで?
>>342 プロセスの取得やメモリの取得はもっと楽な方法あるのに何故?
>>347 C#、というかプログラム初心者サンデープログラマーなんだが、
メモリの取得みたいな感じでググると、ReadProcessMemoryがいっぱいでてくるわけよ。
んで、win32APIってなんじゃ?という話になって、
それを使おうとする。だから俺も使ってるなあ、win32api。
俺はその、”もっと楽な方法”って知らない・・・
ヒントでも教えてくれればうれしいなあ。
349 :
347 :2007/01/19(金) 21:05:28
>>348 僕も古参サンデイ☆プログラマ!
c# プロセス 取得 でぐぐってね?
スタートはそこから。
後はがんばってね
win32apiないと無理じゃないのか?
ReadProcessMemoryのマネージドラッパは提供されてないだろ?
352 :
347 :2007/01/19(金) 21:41:12
ゴメ!勘違いだった。
オダギリ見せ場少なかった。
354 :
デフォルトの名無しさん :2007/01/19(金) 23:52:55
DllImport["testdll.dll"]をした後、 testdll.dll内のメソッドを使おうとしても ”エントリポイントが存在しません”といわれます。 そのメソッドは確かにあるのですが、なぜか存在しないと 言われます。 どのようなケースで上記エラーが起こることがあるのでしょうか?
関数を公開できていない
356 :
デフォルトの名無しさん :2007/01/20(土) 00:16:01
>355 関数を公開させるためにはどのようにすればいいのでしょうか? C#ではできない?のでしょうか?ネットだけでしか調べて いませんが、DllImport[]で、中身の関数を使えると思っていました。 よろしければ教えていただけたら幸いです
357 :
337 :2007/01/20(土) 00:26:08
>>342 >ソフトを作る動機として当然だろ
それ動機なんですか…?
>>348 なるほどね。
でも、なんでプロセスとかウィンドウハンドルがどうのとかって方向なんだろ。
要するに怪しいアプリが作りたいのかw
>>356 関数を公開するのはtestdll.dllのほうでしょ?
つーかそのdllもC#で作ってたりする?
どうしても必要になったからWin32API使うんだけど、駄目か?
Win32API使わなくてもできるのに使う場合の話をしてるんだろ…
win32apiってvistaではどうなってるの?健在?
バリバリ健在ですがな
Win32APIがなくなるんならもっと大騒ぎですよ
2ちゃん自動アフィ貼りプログラムを書くには、 どうすればいいですかぁ?
まず全裸になります
なりました、さむいです
>>356 DllImportはCのDLLを使うためのもの
C#で作ったDLLは参照設定するだけで通常と全く同じように使える
byte[] bytes1 = new byte[8]; Random rnd = new Random(); rnd.NextBytes(bytes1); byte[] bytes2 = (byte[])bytes1.Clone(); Console.WriteLine("bytes1:" + BitConverter.ToString(bytes1)); Console.WriteLine("bytes2:" + BitConverter.ToString(bytes2)); Console.WriteLine("hashofbytes1:" + bytes1.GetHashCode()); Console.WriteLine("hashofbytes2:" + bytes2.GetHashCode()); このコードで、bytes1とbytes2は内容的には同じですが違うハッシュが出力されます。 内容に応じたハッシュを算出する簡単な方法ありませんか? CRC32あたりをC#に移植するしかないのでしょうか。
単にハッシュを得たいならMD5とかSHAとかいろいろあるでしょ
>>368 そこまで厳密なハッシュが欲しいの?
int GetHashCode(byte[] data) {
int res = 0;
foreach(byte d in data) res ^= d;
return res;
}
これで良いやん。
Crc クラスがないのはやっぱり時代遅れだからのかな。
>>368 そのハッシュはあくまで byte[] オブジェクトのハッシュだからね。
Hashtable に bytes1 と bytes2 をそれぞれキーとして使った時に上書きされちゃ困るでしょ。
MSDN読んでね!
int64のhashじゃだめなんかwwww
>>373 おお。恥ずかしいw
んじゃこれで。
foreach(byte d in data) res = (res << 4) ^ d;
>>368 Console.WriteLine("MD5hashofbytes1:" + BitConverter.ToInt64(System.Security.Cryptography.MD5.Create().ComputeHash(bytes1), 0).ToString());
こんなんでどうよ?
378 :
356 :2007/01/21(日) 00:47:07
367さん dllはC#で作ったものではなくC++で作ったものです。 子の場合はC#でImportできないのでしょうか?
extern "C"
export してるのか?
DllImport できる関数はDllExportしたやつだけ。 C++の関数は名前が大きく変わるのでextern "C"で C式の名前でエクスポートしたほうがいい と、言ってます
あとstdcallにしてるかとか とりあえずDependency WalkerあたりでちゃんとしたDLLが できてんのか確認汁。話はそれからだ ただ、DLLの作り方とかはスレ違いだがな
元のDLLを触れるならC++/CLIにすればいいのに
C++/CLIはそのためにあるようなもんだしな
コンソールで動くプログラムを作ったんですけど、 ウインドウズアプリケーションのボタンクリックで動くようにしたいんですが、 どのようにしたら良いのでしょう? 貼り付けるだけじゃだめでしたw
Process.Start("ConsoleApplication.exe");
パス指定とかはどうなるのでしょうか? 実行したいコンソールアプリケーションが2つあるのです。
じゃあフルパスで書けよ
やだよ
なんでわざわざコンソールアプリケーションにするのかと ちょっとしたユーキリティっぽいものを考えてるのならDLLにしといて コンソールなりGUIなりでフロントを作れよ
>>387 同じフォルダにおいて、そこからの相対パスで実行すればいいじゃん。
394 :
デフォルトの名無しさん :2007/01/22(月) 03:16:08
.net寄りの質問なのですが、.net板で回答が頂けなかったので、こちらに 質問します。板違いですいません。 PictureBoxの一列にフォントサイズの異なる文字を表示することは可能でしょうか? 可能ならその方法を教えていただけないでしょうか?(HTMLだと可能なのはわかるのですが。。。)
>PictureBoxの一列 最初でもう意味がわからん
普通にDrawStringに渡すFontオブジェクトで変えられるだろ
>>394 PictureBoxならフォントサイズも糞もない。
Imageだろ・・・
ところで.net板ってどこ?
>>394 PictureBoxに文字を書こうとしているが、たぶんこの先行き詰ると思うぞ。
最終的になにがしたいのか言ってみ。
しつもんです。 Point[] ps = {new Point(30, 500), new Point(70, 370), new Point(290, 350), new Point(250, 190), new Point(430, 170), new Point(330, 60), new Point(600, 70)}; こんな感じの配列を別の関数で使うためにはどうすれば良いのでしょうか? Cでいうグローバル変数(static)みたいな機能を教えて頂けないでしょうか?
クラスのメンバーにしておけばクラス内のメソッド(関数みたいなもの)で使えるよ。
そのクラス内の関数(メソッド)と同レベルに private Point[] ps = {...}; と定義しろ。 そのクラス内の関数(メソッド)からは this.ps でアクセスできる。 private static Point[] ps =... ならクラスフィールド。 クラス.ps でアクセスできる。
>>403 ,404
どうもです。
解決しました。
Cしか分からないのに、なんとなくでC#が組める不思議さ。
IDEは使いやすいし、C#は良いですね。
Form1がロードされたとき(画面に表示されたとき)に 絵を表示させたいのですが、上手くいきません。 private void Form1_Load(object sender, EventArgs e) { Graphics g = CreateGraphics(); SolidBrush hoge = new SolidBrush(Color.Blue); g.FillRectangle(hoge, 100, 400, 30, 30); g.FillRectangle(hoge, 200, 300, 30, 30); g.FillEllipse(hoge, 10, 20, 100, 80); } 現状、フォームが表示されても何も表示されないのですが、 どこが悪いのか分かりますでしょうか?
Paintで書けばおk
>>406 そりゃ再描画しないと消えるわな
もう少しWindowsのウィンドウに関する知識をつけといた方がいいよ
対処法は
>>407 の通り
Shown に書いてみ、ちょっと仕組みがわかるかも Load、Shown、Paintのどれか一つだけ書いてそれぞれ実行してみるといい
アカウントとPASSをあらかじめ登録しておいて、 YahooとかmixiにC#プログラムで自動ログイン といった感じのプログラムを作りたいのですがアドバイスお願いします。 htmlで起動するものは見つけたのですが、"ログイン"という動作を実現したいのです。よろしくお願いします。
>>407 ,408,409
昼寝しててお返事遅れました。
解決しました。
どうもありがとうございました。
>>410 何がしたいかによる。
自分がブラウザと同じことをやるのかブラウザを操作したいのか。
自分で全部やるならhttpでどんな内容がやりとりされてるか調べて
それと同じように動作させればいい。
なんかよそでも聞いてるようだし、こんなもんで。
アルゴリズムの質問です。 pictureBox1.Left=pictureBox1.Left+2; if (pictureBox1.Left>Width){ pictureBox1.Left=-pictureBox1.Width; } みたいにタイマを使ってpictureBox1を横に動かすことは出来るのですが、 これをナナメ(例えば画面の左上から右下まで)に動かすには、 pictureBox1.Left=pictureBox1.Left+2;をどうすれば良いでしょうか?
わろた どこがアルゴリズムだよw
} の位置が気になる
頭が痛くなってきた
目標地点の位置ベクトルからスタート地点の位置ベクトルを引けば 速度ベクトルの向きが得られるから,それを適当に少数倍して速さを調整 それをフレーム毎に位置に足す
418 :
413 :2007/01/22(月) 20:04:56
?です。 何か参考になるサイト、有りますか? なんとかして、ナナメに動かしたいんですけれども・・・
>>413 LeftとTopを両方動かせば、斜めに動く。お前は頭を動かせ。
いったい何作ってるの?
421 :
413 :2007/01/22(月) 20:14:10
プログラムを作っています!!
int age =
>>413 .Age;
if( age > 70 || age < 13 )
I.Allow( You );
else
TakeAShit( shit );
> if( age > 70 || age < 13 ) この記法、直感的じゃない希ガス。 if (age < 13 || 70 < age) のほうが好きだよ、おにいちゃん。
I.think(so, too);
でもトマトの方がナスより好きだよ
なんで 13 < age < 70 と書けないのはなぜ?
なんでなぜ
python でも使ってろ
(< 13 age 70)
430 :
394 :2007/01/22(月) 23:49:27
すいません。意味わからない事言ってました。 PictureBoxではなくて、ListBoxです。 質問は以下の内容です。 ListBoxの一列にフォントサイズの異なる文字を表示することは可能でしょうか? 可能ならその方法を教えていただけないでしょうか?
っ オーナードロー
また釣られてんのかよw 暇だなお前等www
>>430 Listitemのフォントを変えればいいじゃん
なんだつりかよ・・・orz
初心者スレだから、釣りの可能性があっても はっきりしないうちは答えてもいいかと
437 :
435 :2007/01/23(火) 18:40:17
そ、そうだよな!
フィールドとプロパティの違いがよくわからないんだけど 実装する上でどういう意図の違いで区別しているんですか? フィールド public string Title=""; プロパティ public string Title{ get{return _title;} set{_title=value;} } これらって同じように扱えますよね?
>>438 プロパティにすると代入値をチェックしたり出来る。
440 :
439 :2007/01/23(火) 19:22:17
だからって「チェックするかしないか」で切り分けするのは間違い。 クラス外部に公開するなら、おとなしくプロパティにするのが○
441 :
439 :2007/01/23(火) 19:24:32
連投すまん。 プロパティにすると、getとsetでスコープを分けられる。
区別するものじゃない 問答無用でpublicフィールドは使うな
>>440 それがなぜかがわからないんです
プロパティに値を代入するクラスのほうで
たとえば、タイトルが空白であるかどうかのチェックを書けばいいだけではないでしょうか?
プロパティ側でチェックしたって、空白の場合どうすればいいかまでの記述なんてのは
書かないわけだし、プロパティ側でエラーが出たからってどうなの?って感じなんです
>>441 値を取得するだけで、値は設定させたくないって時に使うもの?
>>442 static readonlyなフィールドぐらい使わせてくれ
今はそういう風習になってるから従ってろという話で時代が変わると常識が逆転することはありえる。 値型はPublicフィールド直の例もみるね。
446 :
439 :2007/01/23(火) 19:35:31
>>443 「値をセットするほうがチェックする」って考え方がダメなのヨ。
そこにセットできる値の条件を知ってるのは、そのプロパティを持ったクラスだから。
>値を取得するだけで、値は設定させたくないって時に使うもの?
そうだヨ
> プロパティに値を代入するクラスのほうで > たとえば、タイトルが空白であるかどうかのチェックを書けばいいだけではないでしょうか? その理屈で言えばクラスのメソッドは不要 もっと言えばクラス自体不要
staticじゃないpublicフィールドは作るなって言うのがマイクロソフトからのお達し
漏れはノーチェックで読み書きできるんならプロパティにはしないよ。 でもある程度の規模のクラスでそういうのが出てくるのは設計が悪いと思う。
451 :
438 :2007/01/23(火) 19:43:14
たとえば、そのTitleがDictionary<>みたいなもののキーで利用する場合
必ず値が必要なわけですから、値は必ず必要ですよというのを
わかり易くするために、プロパティとそのチェックコードを記述するってことなんでしょうか?
>>446 > そこにセットできる値の条件を知ってるのは、そのプロパティを持ったクラスだから。
そのにセットできる値の条件を知っているのはプログラマである私だから。
って考えでやるのはダメってことなのかな?
わかるならそれでいいんじゃね?って返答がきそうですけど
後で見返した場合わかり易くするために、説明書きを長々と書いているってことなのかな?
それなら、コメント文つけておけば済む話だし・。。
いまいちよくわからない。
>>447 そう言われると設計自体おかしいのかな?と思ってきてしまいます
でも、プロパティとフィールドの違いがわからないと先に進めない気がするので
>>451 人間は不注意な生き物であるが、コンパイラはミスを犯さない
コンパイラに理解できる形(ex. アクセス修飾子)で書いておけば、
人間が間違えたとしてもコンパイラが止めてくれる
453 :
439 :2007/01/23(火) 19:47:47
>そのにセットできる値の条件を知っているのはプログラマである私だから。 それは全ての変数を object 型にして「なにが入ってるのかは私がわかってる」なんて言うようなもんだヨ
たとえば, private string text; public string Text{get{retrn text;}} これを, private string List<string> text; private string Text{get{return text[0];
455 :
438 :2007/01/23(火) 19:49:16
>>450 問答無用でプロパティを使えってことですか
そういうもんだって理屈抜きに覚えろってことなのかな・・・
でも、パブリックな変数が増えてくると、何の意味もなく
プロパティをだらだら記述するのがすごく無駄な気がするんですよね
これって理由がほしい。
456 :
454 :2007/01/23(火) 19:50:46
途中書き込みスマン
>>454 みたいに変更しても呼び出し側のコードまで変更しなくてもいいってことね
本来のプロパティの目的はそれ
>>455 そのうちありがたみが身にしみて分かるようになるよ。
458 :
438 :2007/01/23(火) 20:01:08
>>452 コンパイラでも、Titleに代入されるのが空白かどうかまではわからないんじゃないでしょうか?
実行後に任意の値が代入されるわけだし、
stringにintを代入してエラーなんてのは、プロパティじゃなくてもフィールドでもコンパイラエラーが出るわけだし
>>453 そう言われると、オブジェクト指向についてまだ理解が足りてないと反省。
それぞれのクラスは他人みたいな感じでちゃんとそれぞれが独自に機能するように
作らないとだめってことなんですね。
で、自分でそれぞれのクラスを記述しているのに、自分の記憶にフィルタかけて
隠蔽化するなんて難しいな。中身を知ってしまっているんだから
長くプログラムやってないとこういう理屈は身につかないのかなぁ
>>456 なるほどーそういう使い方もあるんですね
一例がほしいんですけど、Titleというプロパティには
空白だけの文字列は代入されてはいけないって場合の記述を
みなさんならどうやって書きますか?
>>455 >問答無用でプロパティを使えってことですか
必要性感じないなら、フィールドでいいじゃない?
MS提供のクラスを見ると、外部に公開する物は、プロパティを使用しているみたいだけど、
一切変更しないなら別にフィールドでいいとおもう。
プロパティは外部への見せ方と内部に保持しているものを変えるためのもの。
例えば、DateTime でTickとかあるけど、Tickに相当する物を内部で保持して、
それをもとに年月日時分秒を渡したり、同様に長さに対しては、内部保持は一つだけど、
外部には色々な単位の受渡をすることも出来る。
あとは、インターフェースと同様に、外へ公開する仕様と、内部での状態に、
壁を作っておいて、後々変更が可能にしておくって考えがある。
自分が理解してるのは上記2つ。
460 :
439 :2007/01/23(火) 20:02:26
>>455 理由が欲しいって感覚は正しいと思う。
メンバへのアクセス方法の統一化
→public変数では都合の悪い場合だけプロパティ化することの不統一感
自分一人で趣味のプログラムしてるんだったら、自分が不満を感じるまで
そのままやっててもいいかもしれない。
脱初心者への一歩だな。
初級者と中級者を分ける壁は何?
セオリーの外しどころ
464 :
438 :2007/01/23(火) 20:22:02
>>459 >>460 なんとなくわかってきたような気がする
今まではクラスの実装を変更したらそれに関連するクラスを
全て変更してたけど、代入する値と返す値だけは変更させなければ
それぞれ独立してバージョンアップできるわけですね
まとめ
・メンバへのアクセス方法の統一化
・あとは、インターフェースと同様に、外へ公開する仕様と、内部での状態に、
壁を作っておいて、後々変更が可能にしておくって考えがある。
・プロパティは外部への見せ方と内部に保持しているものを変えるためのもの
・
>>456 ・「値をセットするほうがチェックする」って考え方がダメなのヨ。
そこにセットできる値の条件を知ってるのは、そのプロパティを持ったクラスだから
みなさまどうもありがとうございました。
今作ってるプログラムを大幅に変更することになりそうです
楽しくて仕方がありません
そういえばVB6でCOMのDLLを作るとPublicなフィールドが内部的に Get/Set付きのプロパティに変更されていたのを思い出した。 こうしないとリモート呼び出しやら、COM+やAOPのように呼び出しを インフラがインターセプトする場合に都合が悪い。
なんだか… 素直なやつだな…
>>450 のマイクロソフトの説明だと
>パブリック フィールドとプロテクト フィールドは適切にバージョン管理されず、
>またコード アクセス セキュリティ要求によって保護されません。
だから
>>465 のこの辺にかかわってくるわけだ。
>こうしないとリモート呼び出しやら、COM+やAOPのように呼び出しを
>インフラがインターセプトする場合に都合が悪い。
こんな風にレスするヤツに変なのが出てこなければいいスレなんだけどなw
470 :
468 :2007/01/23(火) 21:16:27
>>465 それはCOMにフィールドって概念がないだけでしょ
一人面白いのが紛れ込んだなwww
スルーしてやれ
煽るときにレス番つけないのは臆病者
Cookieを有効にする というコードありますか?
意味が分からん。 もう少し詳しく
すみません。質問内容悪すぎました。さっきの無しで質問変更します。 プログラムで指定されたURLをIEで開くにはどうしたら良いですか?
Process.Start
C#で作ったDLL(ManagedDLL?)を、Cpp等で書かれたアプリ上から利用できるのでしょうか? 具体的には、プラグイン機能に近い、外部DLL内の関数をCall出来るソフトウェアがあるので、 そのソフトウェア向けにC#で作ったDLLを呼ばせたいのですが、 .netの事やmanagedDLLの事は当然の如く想定してないと思われるので…。 ちなみに、DLLの仕様はextern "C" __declspec(dllexport) void Function();だそうです。
分かりやすいのは COM 相互運用にして C++ の DLL でラップする事だが
文字列の前に指定した文字数になるよう「半角空白」を挿入したいとき、Stringの PadLeftメソッドを使用しますが、所謂「全角文字」が入っている場合も1文字とし て処理されてしまいますよね。(Unicodeが関係しているからだと思いますが…) 「全角文字」を「半角文字」2文字分として半角空白の挿入を処理したい場合どの ようにするのでしょうか? 今考えているのは文字列を一度S-JISとしてbyte[]に変換し、指定した要素数 「半角空白」にあたる値を入れたの別のbyte[]に後ろから値をコピーしていく方法 なのですが、もっとすっきり実行できるよく使われる方法はあるでしょうか?
GetByteCountで数えて不足バイト数分空白前に足せばいいじゃん
すんません、教えてください 自分以外のアプリケーションウインドウのタイトル文字列を取得したいのですが どうしたらいいのか分かりません。 お願いします
>>486 .NETのクラスライブラリにはないから P/Invokeを使え。
Win32APIのEnumWindows、GetWindowText このあたり。
>>487 ありがとうございます。ぐぐってみますね
>>480 1. COM Interopを用いてラッパDLLを書く
2. CLRホスティングを用いてラッパDLLを書く
3. 逆P/Invoke
プロジェクトA namespace hoge {
491 :
490 :2007/01/24(水) 16:49:38
途中で送信してしまいました、お恥ずかしい… プロジェクトA namespace hoge { class test1 { private const string a = "2ch"; } } プロジェクトB namespace huga { class test2 { private const string a = "2ch"; } } となっていて、Visual C# 2005 Express Editionを用いてA・Bのプロジェクトをひとつのソリューションで管理しています。 それぞれ名前空間が異なるクラス、test1とtest2内にまったく同じconst string aがあります(どちらも必要)。現状では片方の文章のを変更するともう片方も変更しなくてはなりません。 どこかにconst string aをおいて、test1とtest2から参照する方法などありますか?どうにかして変更を1箇所で済ませたいのです。
どっちかのプロジェクトの参照設定にもう一方を入れればおk あと,そういうときはconstじゃなくてstatic readonlyを使え
494 :
492 :2007/01/24(水) 16:59:21
>492 できました!! ありがとうございます。 >493 static readonlyですね、ありがとうございます。勉強になりました。
495 :
デフォルトの名無しさん :2007/01/24(水) 19:59:27
お世話様です、C#でのデバッグの方法について教えてください。 よろしくお願いします。 通常はVS2005Proを VB主体モードで使っています。 そこであるサイトからダウンロードしたC#で作られた.NETコントロールを 使ってみていました。ところがそこでちょっとした不都合があり、その コントロールの中のソースにブレークポイントを置いて調べないと わからないことが出てきました。 そこで、いつもやっているように、そのソースの中にブレークポイントを 置いてデバッグを開始してみたところ、そのコントロールのコンストラクタ の中にブレークポイントを置いても、ブレークせず、どうもこのロール内の ブレークはすべて無視されているようでした。 VBとC#を両方で使うとC#でのブレークポイントは無視されるのか、 あるいは何かオプションの設定でどちらでもブレークポイントが有効になる のか、などコントロールのC#ソースコードをデバッグする方法を知りたく 思います。すみませんが、これについて教えてください。よろしくお願いします。
496 :
デフォルトの名無しさん :2007/01/24(水) 20:13:44
>>495 それで、今やってみてわかったことですが、、
C#だけのアプリケーションの状態でやっても、そのコントロールを使う方の側の
FormのコンストラクタやForm_Load()でもブレークポイントがヒットしませんでした。
なので、VBとの混用によるものではありませんでした。
で、そのブレークポイントのところにマウスを持っていくと、
「このブレークポイントは現在の設定ではヒットしません。
このドキュメントのシンボルが読み込まれていません。」
というメッセージが現われました。
これはどういった設定をしたら解決できるでしょうか?
VBですと、特にシンボルを読み込むとかといったことを意識しないでも
デバッグモードではどのソースにおいたブレークポイントもヒットしていました。
C#では条件が異なるのでしょうか?
よろしくお願いします。
プロジェクトの設定はいじってない?
498 :
デフォルトの名無しさん :2007/01/24(水) 20:38:23
>>497 さっそく助かります、どうもです。
それで今、この元々のC#のスタートアッププロジェクトのプロパティを見たところ、
なんと全項目がアクセス不能(ディスエイブル)になっていました。
これはこのコントロールの作者と異なる人は触れないようになっているということ
でしょうか、こういうのは初めて見る状況でした
499 :
デフォルトの名無しさん :2007/01/24(水) 20:40:16
>>498 ・・・と思ったら、すみません、あわててデバッグ途中のものを見ていました orz
すみません
>>489 有り難う御座いましたー。そこらへんでやってみます。
501 :
デフォルトの名無しさん :2007/01/24(水) 20:49:21
>>497 改めて見比べてみますと、プロジェクトのプロパティについては、
こちらで筆をいれたことはありませんでしたが、VBとは項目が
同じというわけではないのですね。
先の 「このドキュメントのシンボルが読み込まれていません」
ということの意味がわかりませんでした。どのあたりを見れば
わかるでしょう?
>>501 ビルド→出力→詳細設定→出力→デバッグ情報→full
503 :
デフォルトの名無しさん :2007/01/24(水) 21:03:23
どうも、ツールのオプションを見ますと、シンボルファイル( .pdb)がないと いけない、という感じでしたが、ダウンロードしたC#のソースにはこの .pdbという 拡張子のファイルは含まれていませんでした。 もしかしてこの .pdb という拡張子のファイルは、VB専用のファイルなのでしょうか だとすると、VS2005の環境をC#に最適化した状態にしないと、C#用のシンボルファイル なるものが読み込まれない、といった感じなのでしょうか・・・・ VB用に最適化したVS2005を、C#用に最適化する方法はどこかにありましたっけ?
504 :
デフォルトの名無しさん :2007/01/24(水) 21:04:31
>>502 あ、すいません、かぶりました。
その設定ですか、わかりました、今すぐやってみます。
pdbはコンパイルするときにできるんだよ
506 :
デフォルトの名無しさん :2007/01/24(水) 21:14:04
>>502 出ました、それでした、助かりました。
C#の開発環境はVBのそれとはだいぶ違うということが
これでわかりました。この次からはもう少しC#の関係を勉強して
からやってみます。
教えて頂いたおかげで、深い穴から脱却できました、
ありがとうございました!
507 :
デフォルトの名無しさん :2007/01/24(水) 21:18:14
>>505 そうだったんですね、いま見ていたのが、bin\debugフォルダーでしたが、
こちらにはファイルが何もなく、bin\releaseフォルダーにはVB同様に
できていました
どうもC#ではbin\debugというフォルダーは使用されないかもしれないのですね、
それもわからずあわてていました、ありがとうございました。
プロジェクトがリリース構成になってるんじゃないの?? あんまり短絡的に判断するな。
勘違いしやすいほど隠れてるのも問題だよなdebugとrelease インスト直後だと設定が隠れてるから ツール→オプションで「すべての設定を表示」にチェックした後 プロジェクトおよびソリューションの「ビルド構成の詳細を表示」をチェック それでやっとビルドの所に構成マネージャが出るからそれで debugビルドとreleaseビルド選択できる 何でわざわざこんなにわかりずらい所にあるんだろうなw
Proならはじめから選べる状態になってた気がするけど
>>486 Process.GetProcesses () でプロセスとって、
Process.MainWindowTitle プロパティじゃだめかな?
質問させてください。 とあるところで「BandObjects」というクラスライブラリを見つけ、 ツールバーを作ってみようと思ったのですが、 Visual C# 2005 Express Editionで開いた後、dllへのビルドが出来ません。 エラーには「アセンブリの生成に失敗しました」とあります。 C#はまだよくわからないのですが、Visual C# 2005 Express Editionではビルド出来ないのでしょうか。
うん
>>512 タスクマネージャのアプリケーションタブに表示されるものだけしか取れない
フィールドとプロパティの違いを述べよ
出た出たw
MMO用のbotを作りたいんだけど パケット情報取得したり、偽装したり、フックしたりすることって C#でできるの?
>>513 >Visual C# 2005 Express Editionではビルド出来ないのでしょうか
いいえ。
おれ作ってるよ
お前には無理だがC#ならできるだろ。
c#でウィルスソフトを作った場合、M$なんかに誰が作ったかすぐわかりますか? プロジェクトのプロパティでIDとか入れないといけないのが気になるんですけど
ここで俺が「わかる」と答えれば、
>>523 は過ちを犯さずにすむのだろうか。
>>523 お前にはウィルスなんて作れないから気にするな
526 :
486 :2007/01/25(木) 03:40:37
486です。 度々スマンですがウィンドウタイトルは無事取得できました! で、今度はウインドウのクラス?名を取得したいのですが どなたかご存知? お願いします
>>512 ありがとうございます
一応私は
using System.Runtime.InteropServices ; // for DllImport
using System.Text ; // for StringBuilder
[DllImport("user32.dll")]
extern static IntPtr GetForegroundWindow() ;
[DllImport("user32.dll")]
extern static int GetWindowText(IntPtr hWnd, StringBuilder lpStr, int nMaxCount) ;
private void timer1_Tick(object sender, System.EventArgs e)
{
StringBuilder sb = new StringBuilder(200) ;
IntPtr hwnd = GetForegroundWindow() ;
GetWindowText(hwnd, sb, sb.Capacity) ;
textBox1.Text = sb.ToString() ;
}
でやりました
GetClassNameじゃなかったか
>>528 ありがとうございます!
さっそくぐぐってきます
質問です。 →035 ↓304 540 のようなグラフが有って、 int[][] hoge = new int[3][3]; みたいな配列を作って、 hoge [0] [0] = 0 hoge [0] [1] = 3 hoge [0] [2] = 5 hoge [1] [0] = 3 hoge [1] [1] = 0 hoge [1] [2] = 4 hoge [2] [0] = 5 hoge [2] [1] = 4 hoge [2] [2] = 0 と代入した後、これを以下↓ hoge [0] [0] = 0 hoge [0] [1] = 5 hoge [1] [0] = 3 hoge [1] [1] = 4 hoge [2] [0] = 5 hoge [2] [1] = 0 のように変更させたい場合、どうすればよいのでしょうか。
C#でゲームパッドの入力を受けることができますか? マウスイベントとかキーボードイベントしかないんですけど
Managed DirectX でも使えばいいじゃん
多分523はウィルスではなく、メモリやCPUをくうものを作ろうとして ローカル実行であぼん!
>>531 int[][] hoge = new int[3][];
hoge[0] = new int[]{ 0, 5, 3 };
ジャグ配列
でぐぐれ
int[] hoge hoge.AddRange() ってやりたい
>>519 おや…。自分のやり方が間違ってるんでしょうかね、
ちょっと調べてみます。
ある配列 a[0],a[1],a[2],a[3] 全てに一定の処理をしたいとき for(i=0;i<4;i++){ 何か a[i] } とするとして、 もし事情によりa[2]のときだけ処理をしたくないときは、 for文の条件式をどのように書けばスマートにいくでしょうか? (a[0],a[1],a[3]に処理をしたい)
>>541 if (i == 2) { continue; }
いつiが2になるかわからないので使えません>< www
544 :
デフォルトの名無しさん :2007/01/25(木) 21:41:14
配列のスライシングの様な事をして、関数に渡したいんですが、 C#でどう実現すればいいでしょうか byte[] ar = new byte[100]; //これの50以降を使いたい func(???); C言語なら char ar[100]; func(&ar[50]); とか可能なんですが・・ 部分的にコピーするか、参照開始のインデクスを一緒に関数に渡すしか無いですかね? func(ar,50);みたいに
>>544 ジェネリックとインデクサを使って配列をラップするクラスを作れば?
>>544 どうしてもコピーしたくなければポインタ使えよ
549 :
デフォルトの名無しさん :2007/01/25(木) 23:58:01
まぁ静的変数にしてアンセーフにすりゃポインター使えるけど C#の意味ないんだよな
配列の引数の型は常にIListにするとか IListの実装しだいでいくらでも対応できるよ
551 :
デフォルトの名無しさん :2007/01/26(金) 02:14:24
foreach文でループさせているときに、 n=10のときは何もせず、n=11のときにn=10で取得するはずだった dataViewを取得したいのですが、どのようにすればよいか教えてください。 int n = 0; foreach(DataRowView dataRowView in dataView) { n++; if(n == 10) { 処理A } 処理B }
continue;
>>551 質問とソースが微妙に意味不明…
n=10のときに何もせず…って処理Aしてるじゃないかw
n=11のときに「n=10で取得するはずだった」ってn++なんだから取得してるに決まってるだろw
で
DataRowView dataRowView10;
int n = 0;
foreach(DataRowView dataRowView in dataView)
{
if (n == 10)
{
dataRowView10 = dataRowView;
処理A
}
else if (n == 11)
{
MessageBox.Show(dataRowView10.ToString());
}
処理B
}
ホントにこんなのでいいのかよ・・・
>>553 俺はそれを書こうとして吐き気がしたから止めた。
ゲームを作っています。 とりあえずpictureBox1に画像を表示させたいのですが、 うまくいきません。 フォームに何も表示されない状態です。 コンパイルは通るのですが・・・ timer1はtrueになっています。 public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height); g = Graphics.FromImage(pictureBox1.Image); Random rnd = new Random(); score = 0; } private void timer1_Tick(object sender, System.EventArgs e) { g.Clear(Color.FromArgb(0, 0, 0)); score = score + 1; g.DrawString("SCORE:" + score, new Font("MS明朝", 12), new SolidBrush(Color.FromArgb(255, 255, 0)), 0, 0); pictureBox1.Invalidate(); } どなたか原因の分かる方、いらっしゃいますでしょうか?
556 :
555 :2007/01/26(金) 06:17:11
すみません。自己解決しますた
>>555 意味分かってコード書いてる?
WindowsのGUI周りの仕組みについてちゃんと勉強してきてね
突っ込みどころが多すぎてどこから指摘したものか
では優しくヒントを出します。 Google C# 画像表示 まずは、この検索結果サイトを見て理解してみては?
一応絵は出るだろ、あれで。
562 :
555 :2007/01/26(金) 10:13:51
みなさんにはがっかりさせられました もう来ません
563 :
デフォルトの名無しさん :2007/01/26(金) 12:54:06
「全然やり方が判りません」って質問は良く見るけど、 ガンガン出鱈目を書いて、「動きません」ってのは始めて見た。 前者よりマシだけど、プログラムよりも先に勉強の仕方を勉強するべきだな。
すみません、質問です。 C++とC#の違いは 後者はコンパイル後のEXEを実行するのに、Microsoft .NET Framework が 必要だけど、前者は必要ないって理解であっていますか?
>C++とC#の違いは 文法からして違う 別言語でしょ
>>565 あああ、すいません。
文法というより、実行環境の違いの1つということで。
C++でもcl /clr hoge.cpp とやるだけで.net farameworkが必要になる。 C#のexeはmonoでも動く(GUI系は怪しいけど)
なんでそんな捻くれた回答するんだよ テストだと0点だな
569 :
デフォルトの名無しさん :2007/01/26(金) 14:27:37
任意の文字を入力し、先頭文字は大文字、それ以外は小文字にして表示 するプログラムを作成せよ。ただし、アルファベット以外の文字はそのまま 表示すること。
以前ヘルプかどっかでみかけたやつ string text = "four score and seven years ago"; string result = System.Text.RegularExpressions.Regex.Replace(text, @"\w+", new MatchEvaluator(this.CapText)); public string CapText(Match m) { string x = m.ToString(); if (char.IsLower(x[0])) { return char.ToUpper(x[0]) + x.Substring(1, x.Length - 1); } return x; }
571 :
デフォルトの名無しさん :2007/01/26(金) 15:09:21
C#ってどちらかと言うとC++っぽいVBみたいなもんだな VBいらん気がするんだが
572 :
デフォルトの名無しさん :2007/01/26(金) 15:12:41
C#からWin32 API関数を呼び出すことは出来ますか?
if (String.IsNullorEmpty(s)) return s; if (s.Length == 1) return Char.ToUpper(s[0]).ToString(); return String.Format("{0}{1}", Char.ToUpper(s[0]), s.SubString(1).ToLower());
カルチャをつけれ。2.0ならなんか専用のToLowerなんちゃらがあった奇ガス
Formなどをクリックされても、ListViewが常にアクティブにしておく方法教えてください 項目が選択された状態にしておきたいんです もちろんフォーカスが別に移っても選択状態にしておくの方法はわかりますが それだと、選択色が反転してしまうので
>>576 つまりフォーカスを失っても選択部分が「強調表示の色」のままに
なるようにしたい、ってこと?
578 :
576 :2007/01/26(金) 18:22:29
>>577 そうです。見せかけでもいいので、選択色が変わらないようにしたいんです
よくソフトでコンボボックスとかに検索文字を
入力しててもリストの選択状態は変わらなかったりするじゃないですか
そういうことをしたいわけです
フォーカスが無いことを明示しないのはいただけないが、 そういう設定ができないならオーナードローでいいじゃん
フォーカスが移動したら、すぐさまフォーカスを取り戻せばいいと思うよ( ´ー`)y-~~
581 :
576 :2007/01/26(金) 18:28:43
>>579 >フォーカスが無いことを明示しないのはいただけない
そう言われればそうですね。
ユーザーが項目が選択されてるから削除しようとDelキーを押しても
実際のフォーカスはコンボボックスにあって、そっちが消えてしまうと
意図しない状況になるかもしれないですね。
ってことで、解決しました。
ありがとう
>>562 そう言わずにちょっと聞いてくれ。
Winodwsアプリケーションの場合、別アプリのウィンドウが重なって
消えてしまった領域を再度描画するのは、その消えた方の仕事なわけだ。
ようは自分のウィンドウの描画は自分が描く。
基本的にはOSが再描画してくれるわけじゃない。
で、重なっていたウィンドウが移動したり、自分のアプリが最前面に出たり
するタイミングでOSが「今描いてね」って教えてくれる。
それが Paint イベントなんだわな。
だから普通はウィンドウに描画するロジックはココに書く。
で、OSの連絡に関係なく自分の思ったタイミングで描画する場合は、
自分のウィンドウに対して「今描いてね」ってメッセージを送ってもらうように
OSにお願いするわけ。
例えばInvalidate()メソッドとかで。
オレは昔、DOSからWindowsアプリへ移行する際に、コレを聞いて前が開けた。
がんばれ。
583 :
デフォルトの名無しさん :2007/01/26(金) 21:04:27
ListView(Detail)で行がダブルクリックされるとその内容が表示されるようなものを作っています。 listView1.ItemActivate += new EventHandler(ListView1_ItemActivate); private void ListView1_ItemActivate(object sender, EventArgs e) { ListView lv = (ListView) sender; MessageBox.Show(???); } としたとき、???の部分にその行の情報に記載されている内容をぶちこみたいときは どのようにしてやればよろしいでしょうか?
>>583 それくらい自分で調べようぜ
MSDNのItemActivateの項目に書いてあるよ
>>581 ListView.HideSelection プロパティ
最近、@ITのC#入門と猫でもわかるのC#コンソール編で勉強を始めた初心者です。 C#の勉強で参考になるサイトや書籍が他にあったら教えて下さい。
言語仕様は大して複雑じゃないから別にそんな色々見る必要もないよ .NET のライブラリは膨大だけど
>>588 >>3 本ならちょっとふるいけど↓
2.0対応の良書は知らない
C#によるプログラミングWindows 上・下 (本格的)
Visual C#.NET逆引き大全 500の極意 (初心者向きで手軽)
書籍のパソコン教科書シリーズのVisualC#の解説書の付録CDでインストールしたんですが framework2.0 はインストールされましたがSDKはされませんでした。(入っていない?) それでも普通にビルドできるんですが、frameworkのSDKはどんなときに必要になるんでしょうか? (ただのframeworkってランタイムみたいなものですよね?)
>>591 エディタでコード書いて、厳密に署名されたキーを作ったり
タイプライブラリをインボートしたりするときに使う
VisualC#Expressインスコしたら入らないか?
確かヘルプが不完全なんだっけ
>>592 アプリケーションの追加と削除を見ると
.net framework2.0
.net framework2.0 日本語pack
VisualC# express
となっているので、SDKは無いようにみえるのですが、実は入っているのかな?
入っているか見分ける方法とかありますでしょうか?
>>594 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0
ってフォルダない?
つーかVSあれば.net SDKいらないよ
むしろWindows SDKが必要
一応 VC# で一通りは入るはず %windir%\Microsoft.NET\SDK\v2.0\Bin に sn.exe とか wsdl.exe とか sgen.exe とか ildasm.exe とか gacutil.exe とか AxImp.exe とか resgen.exe とか
あ、%windir% じゃないな。Program files の方だった。
C#は本当にGUIが楽でいいなあ それでもライブラリが豊富で深い所まで踏み込めるし
>>594 VC#Expressだけだとヘルプの.net Frameworkクラスライブラリの項目に
Microsoft.*、 System.Runtime.*がないから
.NET Framework SDKもインストしないとだめ
601 :
デフォルトの名無しさん :2007/01/27(土) 12:09:59
C++っぽい考え方なんすけど Label labelA..Text Label labelB..Text Label labelC..Text を string[] DDD = new string[3] なんて配列にポインター割り当てみたいな方法ありますか? DDD[0]になんか書くと labelA..Textに値が入る DDD[1]になんか書くと labelB..Textに値が入る DDD[2]になんか書くと labelC..Textに値が入る みたいな
ないな プロパティは一見フィールドだけど実体はメソッド呼び出しだし
仮にフィールドでもStringは変更不可なクラスなのでLableオブジェクトそのものを配列にする必要がある。 Label [] DDD = new Label[] { labelA, labelB, labelC }; DDD[0].Text = "xxxxx";
デリゲート配列にしとけば一般的に扱えないこともないかも 面倒だけど
605 :
601 :2007/01/27(土) 12:38:46
>>603 ありがと
ログみてたら違う方法もあるのね、同じ事思う人いると思うんでかいとくね
private List<Label> ddd = new List<Label>();
ddd.Add(labelA);
ddd.Add(labelB);
ddd.Add(labelC);
ddd[0].Text = "AAA"; //LabelA.Text = "AAA";
ddd[1].Text = "BBB"; //LabelB.Text = "BBB";
ddd[2].Text = "CCC"; //LabelC.Text = "CCC";
DataBindでできんかったっけ?
>>601 C++でも、その考えたはバグの温床なので改めたほうがいいよ。
メモリリークや開放された領域のアクセスしたり…
c#やJavaはそういう感じにならないように出来てる。
608 :
601 :2007/01/27(土) 14:48:02
>>607 そうでつね
目的としては配列として扱いたいだけで
なにが何でもポインターアドレスを配列変数にひっつけたい訳じゃないっす
質問です。 Image中の絵を消すのに消しゴムツールを作りたいのですが、 どのように作成すればいいのでしょうか? 自前で白く塗りつぶしてColorMapとか使って透明にしないといけないのでしょうか?
アルファで塗ればいいだろ
Graphics.CompositingMode がポイント
612 :
609 :2007/01/27(土) 16:22:49
試しにアルファ値を0にして塗ってみましたが、全く変化がありませんでした orz
あのね消しゴムってただの背景色で塗りつぶしてるだけなの。 透明色は関係ないよ。 レイヤー別にするなら別だけどな あとアルファー0で塗りつぶしにしたら何もしてないのと同じだと思うが…
614 :
609 :2007/01/27(土) 16:28:15
>>610 CompositingMode.SourceCopyやCompositingMode.SourceOverを
指定してからアルファ値0で塗ってみましたがこれでもだめでした。
アルファーはブレンドの割合のようなもんだ。
616 :
609 :2007/01/27(土) 16:32:16
>>613 マジすか orz
後ろが白なので白く塗りつぶすことにします。
ありがとうございました。
テキストボックスコントロールのWidthの設定方法で質問です。 Maxlength×[1文字分の幅]によって設定したいと思っていますが、 テキストボックスの[1文字分の幅]はどのように取得できますか? またはもっと一般的なWidthの設定方法があれば教えてほしいのです。 環境はVS2005です。おねがいします。
>>617 その前にプロポーショナルフォントって知ってる?
一応文字列の描画サイズは TextRenderer.MeasureText で計測できるが
>>617 そのWidthのつづりを見て幅は一様じゃないと気付かないのか?
>またはもっと一般的なWidthの設定方法 固定値
なんでこういう適当なこと言うヤツいるんだろ
>>610 とか
初心者が多いんだろ?
つまらん
アロンアルファ
べつに
>>617 はMS ゴシックとか固定幅フォントを使ってるかも
知れないじゃん。そこまで書かない方が悪いと言うかも知れないが。
いまでもシフトJISで全角半角、っていうやり方から変わってない
のかも知れないし。
Graphics.MeasureStringとか。
>>627 そういうことなら実際にテキストボックスに文字入れてみたらサイズくらい判るだろ。
今回の事でプロポーショナルを初めて知ったんだとすれば良いことじゃないか。
629 :
デフォルトの名無しさん :2007/01/28(日) 10:27:28
文字の出力について質問です。 char[] array = { 'a', 'b', 'c', 'd' }; for (int i = 0; i < array.Length; i++) { Console.WriteLine(array[i]); } とやればうまく改行されてコマンドプロンプトに文字が表示されるのですが、 char[] array = { 'a', 'b', 'c', 'd' }; string w; for(int i=0; i < array.Length; i++) { label1.Text = Convert.ToString(array[i]); } とやっても文字が最後のdしかラベルに表示されません。 どのようにすれば文字が全部表示されるでしょうか?
>>629 文字と文字列は違います。
ループなど使わずにこう書きます。
label1.Text = new string(array);
むしろまずchar配列を使う必要があるのかどうかから検討したほうがいいと思います。
label1.Text += array[i].ToString();
632 :
デフォルトの名無しさん :2007/01/28(日) 11:01:58
すばやい回答有難うございます。
>>630 添え字で指定して、文字を出力することが大事なんです。
>>631 うまくいきました。有難うございます。
>>632 ちょっとまて
ループ中で文字列に追記し、しかも毎回label1.Textにアクセスするというのは効率が悪い。
どうしてもというならこう書け
StringBuilder sb = new StringBuilder();
for ( ... ) {
sb.Append(array[i]);
}
label1.Text = sb.ToString();
VSで作った、フォームだけでサイズ20KBのEXEファイルなんだけど 起動した時点でメモリを12MB食ってんのよ こういうもんなの? 初心者で申し訳ない。
>>634 .net のランタイムライブラリが読み込まれるからそんなもの。
そんなもんだよ
>>634 そういうもん。サイズがでかくなってもその数値はあまり増えん。
起動し終わったら自然に8〜10Mぐらいに減る。
それから最小化すると極端に減るが、元に戻して操作するとやっぱり8〜10Mぐらいにもどる。
Vistaで起動するといいよ
>>638 見た目が減るってかw
ワーキングセットのうちプライベート分だけが表示されるんだっけ?
640 :
634 :2007/01/28(日) 11:37:43
即レス ありがとう
質問 ・テキストファイルに1行1レコードでかかれたリストが処理対象。 ・各レコードにはIDが割り当てられていて、同一内容のレコードは同一のIDを持つ。 ・同一IDのレコードが複数のファイルに分散しているので、それが重複しないよう に1ファイルにまとめ、テキストファイルとして出力したい。 このようなファイルを読み込んで [input_A.txt] 200 100 [input_B.txt] 300 100 次の出力をえる処理です。 [output.txt] 200 100 300 処理量は、出力の output.txt のデータサイズで数十万レコード、100Mオーダー になります。 現在はIDをキーとしたハッシュに全入力レコードを読み込み重複レコードをぶい たあと、順番に出力しているのですが、当然ながらメモリ消費がはげしく、 スワップが多発している状態です。 そこでより効率的な方法がないでしょうか、というのが質問です。 やはり SQLite などの DB に頼るのが無難でしょうか?
>>641 > やはり SQLite などの DB に頼るのが無難でしょうか?
無難つーかそれしか無いような気がするが
>>641 入力ファイルがともに辞書順にソートされていれば単なるマージロジックで
処理できるのでメモリ消費はほとんどない。
ただWindowsのソートユーティリティはたいていオンメモリでやってるから
こっちのメモリ消費が激しい;;
みなさん、なんでそんなに詳しいんですか?
>>641 以下ならほぼ、メモリはID分だけですむけど
List<ID型,> isexist = new List<ID型,>();
for ( int i=0; i<読み込み行数; i++){
Read一行(内容);
if ( isexist.IndexOf(ID)<0 )
{
isexist.Add(iD);
Write一行(内容);
}
}
>>645 それだと計算量が多いね。
IDのリストじゃなくてIDをキーにしたマップの方がいいかと
つまり bool[] か Dictionary<ID, bool>
>つまり bool[] か Dictionary<ID, bool> Dictionaryって速いの? 内部的な動作がわかんないからなんともいえないけど 計算量を考えるなら、 ArrayクラスのBinarysearchを利用すればいいとおもうが、 Sortに要するコストはどうなんだろうと思った まあ、IDが整数ならたいしたメモリくわないし 整数以外なら、ハッシュをもちいるとか(衝突に関しては別対策必要)
速いいの?ってかさ 数十万レコードあるのを、1レコードごとに線形に検索したら 最後の方なんてどういうことになるかぐらい分かるだろ?
>>647 Dictionaryはハッシュだよ。だから定数オーダーで検索ができる
(BinarySearchは対数オーダー)
キーが存在するかどうか保持するだけだから衝突も関係ないと思うが。
>>647 Dictionaryはハッシュテーブルだからthis[]は定数オーダー
List.IndexOfは線形オーダー
Array#Binarysearchは対数オーダー
Array#Sortは最悪n^2オーダー
何を選ぶかなんて迷うことないだろ
例えば4バイトかける数十万、200Mバイトくらいか? コレクションなら動的拡張で下手すりゃその倍、しかもリニアに必要。 >IDが整数ならたいしたメモリくわないし 正気か?
>>647 Hashtableはコリジョンの処理を勝手にやってくれます
キーが数値でレンジが非常に狭いなら究極のやり方もあるぞ、制約が厳しすぎて使えないことも多いが。
>>651 >例えば4バイトかける数十万、200Mバイトくらいか?
どういう計算?
IDを保持せずに処理するといいたいの?
原理的に不可能だと思うんだが。
>>654 「IDが整数ならたいしたメモリくわない」に対する反論じゃねえの?
つごい計算w
200Manと言いたかったとエスパー
たいしたことなかったなw
なんかこのスレかっこいいな
なんかコレクションとかのソートって、実装が再起型のクイックソートだった希ガス。 つまりデータが悪いとStackOverflowでアボン
>>642-648 今後扱うレコード数が増えそうなので今回は DB 使うことにします。
また、 Dictionary に bool を入れる手は思いつかなかったで、他の場面で
使わせてもらいます。
いろいろなアイデアありがとうございました。
順序がどうでもいいなら… まず小さい方のファイルをそのままコピー 小さい方のファイルを一行ずつ読みながらDictionary<ID型, bool>とかにキーだけ格納。 あとはもう一方のファイルでキーが格納されてないものだけ追加書き込み。
663 :
647 :2007/01/28(日) 14:28:27
なるほど、Dictionaryはハッシュテーブルなのね(MSDNにかいってあった) 納得 当たり前といえば、当たり前か 本ケースでDictionaryを用いようとすると、レスポンスよりメモリー量の方が問題になりそうかな 数倍程度は必要だろうし MSDNの「Dictionary の既定の初期量は 3 ですが…」は、3倍ってこと?
>>663 それはコンストラクタで指定しなかったときのCapacityの初期値。
Capacity==Countのときに値を追加しようとするとCapacityが二倍に拡張される。
665 :
647 :2007/01/28(日) 14:41:57
>>664 Thx
ああ、そういうこと 「Dictionary の容量は」をメモリ量と思ってた
MSDNに記述はないみたいだけど、ハッシュテーブルの要素数は
格納要素数の一桁ぐらい余裕見る必要あるんだろうなぁ
まあ、数十万ぐらいのデータを格納するのに、 どの程度メモリを食うかだな。
>MSDNに記述はないみたいだけど、ハッシュテーブルの要素数は >格納要素数の一桁ぐらい余裕見る必要あるんだろうなぁ どういう意味??
調べてないが、コレクションのソートは多分イントロソート使ってるよ。 クイックソートの再帰深度が一定以上になったら、 ヒープソートに切り替える。
669 :
647 :2007/01/28(日) 14:51:46
>>667 ハッシュ法ってハッシュ値を衝突させないため、ある程度余裕もってテーブル持つでしょ
その余裕ってどの程度もつおかなぁってこと
670 :
601 :2007/01/28(日) 14:57:55
MSDNに 書 い て あ る
>>669 普通はデータの2〜3倍くらいみとけば大丈夫。
DB使うって言ってるじゃんw
>>669 それで一桁も余分に必要なわけないじゃん
そもそもそのテーブルの要素数は固定でしょ?
格納する要素数の数が多ければ多いほどそんなものは無視できるじゃん
StreamからStreamへコピーしたい <<無いの?
676 :
647 :2007/01/28(日) 15:18:26
>>671 >MSDNに 書 い て あ る
そうなの?見あたらなかったけど
>>672 >普通はデータの2〜3倍くらいみとけば大丈夫。
Thx
レスポンスが極端に落ちない条件だと思うけど、
結構少ない量で済むもんなんだね
自分で、ハッシュ法を実装したことないんで、勉強になった
>>675 C++が変態なだけ
普通にread/writeしる
CFile outfile(path, CFile::modeCreate); outfile << stream; 同じような関数無い? streamをファイルに保存できればいい byte[]以外で
こういう話なんじゃない? StreamやWriterのコンストラクタで別のStreamを引数に出来る。 StreamWriter sw = new StreamWriter(new BufferedStream(new GZipStream(file.OpenWrite(path), IO.Compression.CompressionMode.Compress), 1024 * 16))
>>681 使い方が分からない。
Stream stream;をtemp.txtに書き込むにはどうすればいい?
>>683 すべてのクラスを見たよ
俺の頭じゃ理解不能
>>682 Streamは抽象クラス。具体的に何のStreamなのさ?
>>685 実装に依存しないStream一般を表すために抽象クラスがあるんだろうよ
>>687 よく理解できないんだが下埋めてくれないか?
Streamが保存できればStreamに変換できるものすべて保存できるんだけど・・・
// Streamゲット
Stream stream = ??????????????;
//StreamをTemp.datへ出力
??????????????????
>>688 やりたいことがやっとわかった。
Read系のストリームをWrite系のストリームに直接つなぎたいわけだ。
標準ライブラリには無い なんで byte[] 介しちゃダメなのさ? 欲しければ作れば良くね?
ToolStripItemDesignerAvailabilityでDateTimePickerを追加して使っていたのですが 昨日より、追加の所にDateTimePickerが出てこなくなってしまいました。 出てこなくなった原因とかお分かりになりますでしょうか?
IDEの反応が糞重いから、誤って削除してしまってたりとか
694 :
デフォルトの名無しさん :2007/01/29(月) 00:45:00
JavaのコレクションクラスだとtoStringメソッドで中身を確認しやすいフォーマットで出力してくれるけど C#のコレクションクラスのToStringは大抵objectクラスのものなので不便です。 コレクションクラスの中身を確認できる形で出力する簡単な方法ってありますか?
そう言う静的メソッド書けばいいんじゃね // C#3.0 になるとそう言うのを拡張メソッドで書く奴が増えそうな予感
696 :
デフォルトの名無しさん :2007/01/29(月) 01:08:05
これからC言語勉強しようと思ってる大学生ですが、CとC++とC♯どれをやったら一番就職後役立つのでしょうか?
public static String ToMemberwiseString(this IEnumerable list); public static String ToMemberwiseString<T>(this IEnumerable<T> list); public static String ToMemberwiseString<T>(this IEnumerable<T> list, String format) where T : IFormattable; public static String ToMemberwiseString<T>(this IEnumerable<T> list, IFormatProvider formatProvider) where T : IFormattable; public static String ToMemberwiseString<T>(this IEnumerable<T> list, String format, IFormatProvider formatProvider) where T : IFormattable; ああ、よだれでそう、こりゃやるだろうな…ぜったいやるorz
ガベージコレクションDisposeの違いを述べよ
知りたいならもっとかわいく言わないと
がべぇじこれくしょんってなんですお^^;
>>697 禁断の果実とはすべからく美味しそうに見えるものです
commonsから移植でいいんじゃね?
Visual C# Express Editonを使っています。 あるコードをコンパイルすると、フォームとコンソールが同時に起動してしまいます。 フォームだけ起動させるには、どの設定をいじればよいのでしょうか?
あるコード
そのあるコードは直接フオームが起動するんです。 自分が変数名をいじった程度に改造すると、フォームとコンソールが起動するんです。 コンパイルオプションを教えていただければありがたいのですけれど。
俺が作った、あるコードではそんなことないぞ。
では、そのあるコードを参考にしますので見せてください。
他人のサンプルのコンソールアプリにフォーム追加したとか
いや、もとがフォームに直接画像を描画するアプリなんです。 で、自分がやると同じようにフォームに直接描画してくれるんですが、 同時にコンソールが開くんです。 たぶんコンパイルオプションがあると思うんですけれど、分からないんです。
ソリューションエクスプローラのProperties→アプリケーション →出力の種類 は?
たしかにフォームだけのアプリで
>>712 のWindowsアプリケーションをコンソールアプリケーションにすると
両方出るな
714 :
デフォルトの名無しさん :2007/01/29(月) 21:48:20
すんません、次のようにしてTextBoxの色をボタンの色と 同じにしようとしたのですが、 txtEdit.BackColor = KnownColor.ButtonFace; エラー3 型 'System.Drawing.KnownColor' を型 'System.Drawing.Color' に暗黙的に変換できません というエラーが出て色を代入できませんでした。 (System..Drawing.Color) をつけてキャストしてもみたのですがダメでした。 すみませんがよろしくお願いします。
716 :
デフォルトの名無しさん :2007/01/29(月) 22:02:17
>>715 わかりました、、ありがとうございます!
txtEdit.BackColor = Color.FromName("ButtonFace");
で代入できました、やっと意味がわかりました。
txtEdit.BackColor = SystemColors.ButtonFace; じゃだめなんか?
>>716 せっかくリンクつけたんだからSystemColors使ってくれよ
それじゃtypoしたときにコンパイルエラーが出ない
せめて FromKnownColor を……。 SystemColors の方が良いけどな。
どうでもいい話だが、Color.FromNameの実装はかなりキモイ リフレクションでSystemColorsのプロパティ取り出してやがる
なぜ初心者は行っちゃいけない方向に向かってしまうんだろう・・・w
坊やだからさ
んで教えるヤツも坊やだからさらに…
FromNameなんてけったいなものを見つけ出すあたり純粋って感じがしていいよね
>>720 つーかリフレクション以外に無理なんじゃない?
質問です。 最大化したMDIの子フォームをActivateMdiChildなどでアクティブにして切り替えると 元の大きさのフォームが一瞬ちらつくんですが、直す方法はないでしょうか…?
初心者は一応実現はできる方法を見つけると、 それが本当にいいやりかたか、もっと適したものはないか、 という発想ができずに最初に見つけたやり方で突っ走る。 初心者はっていうより、初心者脱出できないやつの傾向だな。
別にいいんじゃないのか? わかったらそれ以降直せばいいんだし むしろ、あまりこだわるといつまでたっても何も出来ない レベルにあったバランスの問題でしょ
初心者は知識も経験も少ない そんなこと突っ込んでも意味がない 全部わかった上でプログラミングを始めるやつなんていない こんなソフトがないか?ないなら作って見ようって発想から来てるんだから いきなり難しい課題を挑戦しようとしているのは当然でしょ ありきたりのソフトはすでにフリーで出回ってるんだからさ
733 :
デフォルトの名無しさん :2007/01/30(火) 06:26:58
TextBoxから入力した文字を、PictureBoxで読み込まれた画像にbuttonを押して描画させているのですが、 続けて入力すると、文字が重なってしまいます。 buttonを押すたびに、Formを再描画させたいのですが、どのようにすればよいのでしょうか?
文字を描く前に画像の転送しなおしたら
あるレベルの事をちゃんと理解してから、 もっといい方法の事を考えた方が、 そのもっといい方法の事が理解しやすいよね。
レベル1でボスキャラは倒せないからw
いや無理w
>>733 その前にPictureBoxにどうやってイメージを表示しているか教えてくれ。
場合によってはまたキミの質問が来るかとw
Imageプロパティを使ってそうだな Imageプロパティを使う方法はあくまで簡易表示用だから, 上から描画したりするような凝ったことをするなら イメージの描画にImageプロパティは使わずGraphics.DrawImageでやる
ん?
pictureBox.Text = "" にしておく。 Button1_click で、 pictureBox.Text を設定して、pictureBox.Invalidate する。 あとは pictureBox の Paint いべんとだか、onPaint だかを実装すれば棲む話じゃない?
>pictureBox.Text = "" にしておく 初心者スレで訳のわからない事を書くな。 混乱するだろ。
>>743 は何の言語が出来てこのスレにいるのだろう・・・
すごい気になる
フランス語ペラペラなマドモワゼルに違いない
断言するがこのスレには女性はいない。
748 :
デフォルトの名無しさん :2007/02/01(木) 00:05:09
C#は無償で使えますがこれでコンパイルしたものは 配布するのになにか制約とかありますか?
.NET Framework の再頒布パッケージのインストールが必要
そういうことを言ってるんじゃないだろ SDKで作ったものはもちろん,VC#Expressで作ったものも完全自由
そうなんですか どうもありがとう 本当に無償KITなんですね
値段はWindowsに含まれてますから
言えてる でも悔しいけどVSExpressは本当に太っ腹
Javaへの対抗策なんすかね
C# に関しては凄い太っ腹だけど、 C++ は色々なものが無くて、後からインスコしたり 別ツール使ったりしないといけないんだよな。 C# 使え! って言いたいんだろうけどさ。
商用は不可じゃなかったっけ?
それはよく言われるが、ソースが出たためしがない。
758 :
756 :2007/02/01(木) 01:24:57
そうなのか。 MSもあえてハッキリ言いたくないんだろうなw
C#とC++と2つある意味がわからないんですが どういう風に使い分けるんですか
C#でできないことを、しかたなくC++でやる つか全然違う物なのになんでそんな疑問がでるのかわからん
762 :
758 :2007/02/01(木) 03:18:03
>>760 C#・VB→開発効率重視
C++→パフォーマンス重視
MS英語のページかブログに住み分けが書かれてたんだが忘れた
これからの開発の現場はどうなんでしょう C#になってC++は消えてしまうということはないんですかね
766 :
デフォルトの名無しさん :2007/02/01(木) 07:35:27
C++は消えないが、C#が広まっていけば VBは今後消えていくだろうな
VBなんていらないしな。うんこ言語だからいいことだよ。
VBをうんこと呼ぶのはC#をカレー味のうんこと呼ぶのと同じだぞ
770 :
デフォルトの名無しさん :2007/02/01(木) 17:13:28
C++とC#とVBAを仕事で同時に組んだ事あるけど VBはうんこだよ、素人が組むにはVBみたいな曖昧言語でいいが 仕事で組むものではない、厳密にするならC#になる
VBAはVBしせゃないだろ。単なるサブセット。
にっぽんごでおーけー
>VBAを仕事で ・・・
774 :
デフォルトの名無しさん :2007/02/01(木) 19:33:10
>>773 しかたねーだろ、ある機器のデータをエクセルで受ける仕様なんだから
しかも藻前が思ってる程簡単な物でもないし
こちとらシステム全部一人でやってるんだ
苦しい苦しいよ
776 :
デフォルトの名無しさん :2007/02/01(木) 19:39:10
苦しくねーよ >C++とC#とVBAを仕事で同時に組んだ と言ってるじゃねーか VBAだけじゃねーよ 言っておくが機器のファームまで組んでる
>>774 >データをエクセルで受ける仕様
受け取るんならC#で問題ないだろ・・・
VBAつきEXCELLとして提供するなら別だが。
VBAの仕事は結構あるよ。 アクセスだけどね。 アクセスにしとくと、事務所の女性が自分で帳票フォームとかして便利なんだ。
でなんでそれがVB2005と関係あるの? 全然別物なのに
782 :
デフォルトの名無しさん :2007/02/02(金) 00:49:55
>>777 藻前は馬鹿か、受けるだけならC#とかC++で作ってるわ
何でエクセルで受けるのか良く考えろ
どうでもいいよ
そんなに必死にならなくても(´・ω・`)
786 :
デフォルトの名無しさん :2007/02/02(金) 07:38:44
初心者にありがちだけど、それを糞仕様と決めつけるのはどうなのかな? プロの仕事になると、エンドユーザーの強い要求はあれば システム的に糞だろうが、良かろうがそれに従うしかない 要はカスタム品の場合、エンドユーザーが一番使いやすい方法を取る事 (要求に応じて高い金払ってくれればの話だが) 一方的にアプリをユーザに提供する方法以外、自分の思うソフト構成なんてそうそう出来ないよ
もはやスレ違いだ。
そうだな 結論としてC#あればVBはいらないと
C#でウィルスソフトを作れますか? 例えばハードディスクの内容をすべて削除するようなもの
どうすれば「ハードディスクの内容をすべて削除する」ことが出来るのかを貴方が知っていれば出来るだろう。 でも、それが出来ることとウィルスであることはまったく関係ない。
初心者スレで釣りするやつって終わってるな
そもそも
>>770 はVBとVBAを一緒にしてるところがうんこ
794 :
デフォルトの名無しさん :2007/02/02(金) 14:48:38
>>792 使えるものが限られているだけで
基本的部分は同じだろ
C++とC#程の違いはない
違う意味で漏れに言わせれば
C#=VB2005だわ
いいから消えろ
「C♯, C#相談室」から来ました。 CheckedListBoxでいずれかのアイテムのチェック城外が変更されたときに、 既にチェックされたアイテムの一覧(CheckedItemとかで)を取りたいのですが、 ItemCheckイベントだと、チェックされた/チェックが外れた瞬間のアイテムが取得できません。 適当に合成してやれば良いのかもしれませんが、他に何か良い方法はないでしょうか?
向こうにも書いたがCheckedIndices, CheckedItemsじゃあかんのか? 何がしたいのかよく分からん。
CheckedItemsだと、ItemCheckイベントはチェックされた瞬間を捕まえるので、 その時チェックされた/チェックが外れたアイテムが入ってないのですよね。 array<String ^> ^items = gcnew array<String ^>(CheckedItems->Count+1); CheckedItems->CopyTo(items, 0); if(e->CheckedState) items[CheckedItems->Count] = e->NewValue; とかやるしかないんですかね。
なんか後半のコードが怪しいですけど、見なかったことに。
C++/CLIかよ
言語が違うのは気にしたら負けか
頭固すぎ 発想を転換してごらん
本当にC#そっくりなんだなC++/CLIって
804 :
798 :2007/02/02(金) 22:04:19
.NET Frameworkなのは同じなので、C#の知識で結構ですが。
>>798 そのコードは無茶苦茶だがCheckedIndicesとe.Index,e.NewValueから作り出すしかないと思う
>>802 柔軟な発想とやらを具体的に示してくれ
>>799 後半どころか頭からおかしいだろ。
なんでCheckedListBox+CheckedItemCollectionをString[]にコピーしてるんだ。
継承してAfterItemCheckでも作れば?
809 :
デフォルトの名無しさん :2007/02/03(土) 00:45:20
TextBoxにかいてある文字列の一文字をハイライトするために、 そこだけ色を変えたり、文字サイズを大きくしたりすることは出来るでしょうか? 出来るのであれば、その方法を教えてください。 やはり、Labelを列挙するという方法じゃなきゃ無理なのでしょうか?
WebClientクラスを使ってフォーム認証を行う方法はないでしょうか?
>>809 描画を横取りすればできんことはないが、
Labelを列挙とかわけの分からんこと言ってるようなレベルじゃ辛いだろう。
RichTextBoxでも使ったほうが楽じゃねえかな
>>810 webreq.Credentials = new System.Net.NetworkCredential("user", "pass");
webreq.GetResponse();
でどう?
最近、パターンというものを勉強し始めたのですが、わからない事があるのでご教授願います。 PofEAA(翻訳)を一通り読んだのですが、.NETFrameworkを使用した場合のTableModuleパターンとは 簡単に言ってしまえば、DataTable(DataSet)を使用した開発という認識で良いのでしょうか?
もー似非とのお遊びは終わりか・・・つまらん
ダイナミックライブラリとクラスライブラリの違いを述べよ
消えろ
>>812 ありがとうございます
やっぱりCookieの関係かWebClientクラスでは出来ないねのですね…
何を試したのかも書かずに出来ないって断言するなバカ
819 :
デフォルトの名無しさん :2007/02/04(日) 03:44:52
TreeViewで、ChildNodeを登録していなくても常にExpandのボタン(+-のアレ)を 表示しておく方法はないでしょうか?
>>820 ありがとうございます。
仕方ないので、ダミーノードを登録しておいてExpandした時に置き換えることにしました。
>>821 最初に登録するのが嫌なのか
設計に問題ありそうだな
そのうち混乱してきて作り直すに1票
823 :
デフォルトの名無しさん :2007/02/04(日) 10:11:21
IPアドレスを直接指定して文字列等を送信するプログラムを製作しています。 目標のアドレスと接続する際、try{ 接続処理 }catch{ 例外を受け取ったときの処理 }で接続をしているのですが、 接続の際、例外を受け取ったり結果にたどり着くまでにそのプログラムの処理が止まってしまいます。 これなんとか解決する方法ありませんでしょうか?
>>823 どういうことをやってるか分からん以上は答えようがないが
止まるってどういうことなんだ?
プロセスが落ちるのか、無限ループして止まってるように見えるのか。
826 :
デフォルトの名無しさん :2007/02/04(日) 10:57:34
>>825 説明不足でした。申し訳ありません。
プログラムはポートを空けて自分のコンピュータに接続されてくるのを待つものです。
データが送られてくるまで待っているようなんですが
外から見るとフリーズしているように見えます。
データを実際に送ってみて受信されると元のように操作できるようになります。
別のスレッドでやれば
>>826 Begin*/End*系の非同期メソッドを使うか、通信用に別のスレッドを用意すればいい。
829 :
826 :2007/02/04(日) 11:08:26
スレッドですね。 調べてきます。どうもありがとうございました。
C#って面白いな VBからくる香具師とVC++から来る香具師で かなりレベルが違う
JAVAやdelphiから来る奴は大して変わらない。
FrameWorkのFrameWork 中間コードの中間コード ウィンドウズのウィンドウズ いつまでやるんだ?こういうことって
ここは儲しかいないから批判がしたいなら他所でやったほうがいいぞ
ところでC#で作ったアプリはVistaでまともに動くのか? .netがうまく動かない様な事を風の噂で聞いたんだが
837 :
826 :2007/02/04(日) 13:03:36
先ほどスレッドに関して聞きに来たものです。 何度も申し訳ありません。 チャットを作ってみたのですが、スレッドをTimerで回してみたのですが、 文字を送信した際に送信されない、受信されない不具合があるようでした。 受信側で「何かデータが送られてきたら処理を行う」等のイベントを定義したいのですが そのようなイベントやメソッドありましたら教えてください。 よろしくおねがいします
>>836 そんなこと聞いたことないけど。
MSDN でダウンロードできるようになって以来ずっと Vista 使ってるけど、
C# で作ったもんが不具合起こしたこともない。
つかそのためのVistaでしょ
vistaでエロゲができるかのほうが心配
>>837 スレッドをTimerでまわすって意味不明なんだが、いったい君は何をやってるんだね?
843 :
826 :2007/02/04(日) 13:09:02
すみません。自己解決しますた。 デリゲート使えばよかったDOS
VISTAにしたら彼女ができました^^
845 :
826 :2007/02/04(日) 13:19:21
┳文字列が受信できたら表示する ┳ ┣文字列が送信された場合に送信┫ ┗別の操作があった場合その処理┛ こんな感じにしたかったんですが送受信に関しては 作ったメソッドは文字列受信したら停止してしまいます。 そのため定期的に呼ばなきゃならないのかなと。
C++ 徒歩 Delphi チャリンコ VB 車 C# 単車 C++やりたいけどなぁ。 コードを書くのがまどろっこしすぎる
>>846 .netならVBもC#も違いはないと思うが
VBは関わらない方が良い気がする
つD
Express入れようかと思ったが河童800じゃきつそうだな
VBなんて見た感じ気持ち悪い 大文字多いし
>>849 メモリあれば問題ない XPだと1Gくらい? 756M積んでた時でも気にならなかった気がする
今は256Mなんで起動させないけど
VBは2chに直接貼ってインデントが消えても それなりに読める利点がある
>>850 それ両方やるとたぶん意見変わるよw
実際俺がそうだから。
つうかさ、.netでVBがあれだけC#っぽく変えたのは MSが無言で藻前らC#に移れよ、いずれVB止めるからって言ってる様に見えるぞ いつまでもしがみついてると酷い目にあう気がする
>>853 両方やってるけど850に同意するよ
VB系の文法は好かん
>>853 両方やったことあるけど
関数とかクラスとか入れてるから
BASICとしては言語バランスメチャクチャになってる
VB.NETはVB組を留めJ#はJava組を取り込みつつ、C#に移れるようにするための商業戦略的な言語だからなあ。
>>851 w2kでメモリは256
一応Eclipse動いてるからどうにかなる気もするが、
とりあえずコンソールからコンパイルして遊んでみることにする
>>856 話ずれてないかい?
まあ良いけど、コードの読みやすさは明らかにVBのコードの方が上だと思うけどね俺は
End Sub とかめんどい {} これでいい
コードの読みやすさなんて主観だから人それぞれだろ。
VBの方が自然に読めるが,C#はかな漢字交じりみたいな感じで ぱっと見て全体を把握しやすい
ここ比較スレじゃねーから止めれ まぁ内容的に初心者スレだけどなwww
VBで public void a() { for(....) { } } こんな感じで入れ子何個も作ることってできないでしょ かなり見ずらい
868 :
821 :2007/02/04(日) 18:25:07
>>822 >>824 は偽者ですが(´・ω・`)Expandする度にDBに問い合わせをしているので、
数が増えてくると一番最初に開くときに時間がかかりそうなことをしているのが理由です。
質問です。 プログラムの保存データをXMLで保存しようとしてたのですが、 バイナリで保存するように変更、読み書きともに成功したのですが、 この保存データを別のプログラムから読み込もうとしたとき、 SerializationExceptionが発生してしまいます。 別のプログラム側も、クラス名、メンバ名、数ともに一致していることは 確認しました。 XMLの時はこんなことなかったのですが、どのようにしたら読み込める ようになりますか?
>>869 アセンブリ修飾型名で保存されるから、
別のプログラムも型を定義したアセンブリを参照している必要がある。
>>870 ということは、Assembly.Load()とかを使って元のプログラムを読み込んで、
MethodInfoからInvoke()で読み書きすればいいのでしょうか?
872 :
デフォルトの名無しさん :2007/02/04(日) 19:38:16
もしかしてC#って#defineできないんでしょうか?
#defineはあるよ フラグ立てるだけだけどな 値を与えたいならconstを使っとけばコンパイル時に置き換えられる
874 :
デフォルトの名無しさん :2007/02/04(日) 19:58:11
把握しました。 どうもです。
>>871 普通に型を定義してるアセンブリを参照しとけばいいんじゃない?
っていうか、バイナリシリアル化使う限り.NET Frameworkのバージョン変わっただけで あぼーんの可能性があるんだよね。 違ったっけ?
コピペ君ってやっぱり間抜けだよな バージョンの意味が違うと思いますがw
>>875 ということは、元プログラムの保存用クラスをpublicにしなければいけないという
ことですか…。
手元に元プログラムのソースがないので今日中には無理か orz
ありがとうございました。
(地名,緯度,経度)が縦に800個程羅列されたテキストファイルを読み込んで、 メンバtimei,メンバido,メンバkeidoを持つ構造体配列を作成したいのですが、 やり方が分かりません。 ファイル読み込むのと、構造体を宣言するまでは出来るのですが、 作成はどうすればいいのでしょうか?
宿題か・・・ま、いいやw ファイルの読み込みは出来てるって、ドコに読み込んでるの? ちょっとくらい今のソースを書いてみ。
構造体名[] 変数 = new 構造体名[800];
宿題はクラスメイトに聞け。
すみません>< 今は一行ずつ読み込んでlistboxに表示させています。 string path = textBox1.Text; System.IO.StreamReader (path) new System.IO.StreamReader(path); string line; listBox1.Items.Clear(); while((line=reader.ReadLine()) !=null) { listBox1.Items.Add(line); } reader.Close(); } listboxに表示を構造体作成の処理に変なければいけないんですよね。
多分CかC++と間違えてるんだよ。 C#は、CでもC++でもありませんよ。 C#は、CでもC++でもありませんよ。 C#は、CでもC++でもありませんよ。
C#みたいだけど…
構造体の作成はC#では出来ないのでしょうか?
>>887 釣だなw
そうじゃないなら勉強しなおせ!
ちょっとは本屋に行ってC#の本読んでこいと思うな なんでもかんでも頭から聞いてもなぁ・・
さすがに釣りじゃないのか?
すみませんでした、勉強します><
構造体の宣言はどこに?
895 :
881 :2007/02/04(日) 23:04:08
>>884 ほれ、先生には内緒だぞ。
後は適当にやってくれ。
struct Kouzoutai
{
public string timei;
public string ido;
public string keido;
}
string[] value = line.Split(',');
Kouzoutai kouzoutai = new Kouzoutai();
kouzoutai.timei = value[0];
kouzoutai.ido = value[1];
kouzoutai.keido = value[2];
その先生はC#のことをGUIが強力なC++とみなしてるのか? そんな先生には教わりたくないな
独り言はチラシの裏に書いてろバカ
くだらないこと質問してすみませんでした>< 881,882,893,895さん、ありがとうございました!
漏れが実がある似たような質問をしてみよう ある関数に引数をキー入力する場合Const値が選べるんですけど あれって、構造体でConstを宣言すればいいんでしょうか?
>>899 言ってることがはっきりしないので
例を挙げると、テキストカラーとか入力すると色んな色がフルダウンメニューで
でるあれです
>>900 >言ってることがはっきりしないので
はっきりしてないもんが実になる訳ないだろ
なんのことやら
Windowsのファイル転送とかで、長いパス名が真ん中だけ省略される奴がありますが、 あれはどこかにAPIがあったりするんでしょうか。
StringFormat.Trimming, StringTrimming.EllipsisPathあたりをMSDNで引いてみれ
これはちょっと実があるなw
Win32 API の EnumWindows でコールバックに delegate を 渡したいときはどうすればいいかおしえれくらさい。
EnumWindows(new デリゲート名(プロシージャ名)); こんな感じじゃない?
別に難しいことないだろ [DllImport("user32")] static extern bool EnumWindows(EnumWindowsCallback lpEnumFunc, IntPtr lParam); delegate bool EnumWindowsCallback(IntPtr hWnd, IntPtr lParam); ... EnumWindows(new EnumWindowsCallback(プロシージャ), IntPtr.Zero); EnumWindows(プロシージャ, IntPtr.Zero); // C#2.0 匿名関数なら、 EnumWindows(delegate(IntPtr hWnd, IntPtr lParam) { Console.WriteLine(hWnd); return true; }, IntPtr.Zero); てな感じか
やってみます。ありがとう。
参照タイプの引数をコンストラクタで受け取って、そのクラス内の他の メソッドで参照のまま使い続けるにはどうすれば良いのでしょう? なんか説明しにくいですが 要はC++のようにクラスのコンストラクタの引数をポインタで受け取って アドレスをクラスローカルのポインタメンバにコピーして そのクラス内で 使い続けるようなことができるのでしょうか、ということです。
参照型なら普通に参照のまま使えるしょ 値型ならref
914 :
912 :2007/02/05(月) 11:44:07
class test{ bool test_bool; object test_object; public コンストラクタ(ref bool test_bool, object test_object) { this.test_bool = test_bool; this.test_object=test_object; } private void testmethod() { test_bool = true;//これはローカルメンバいじってるだけ bool temp_bool = true; test_object = (object)temp_bool; //これもローカル…… } } 例えば、こんな感じで testmethod()でコンストラクタ引数で参照したtest_bool自体 をいじりたいのですが…… testmethod()にどうやって持って行けばいいのかがわからないのです ボックス化して渡しても変更されないですし
915 :
912 :2007/02/05(月) 11:53:16
C++だと class test{ bool* mybool; public test(bool* test_bool){ mybool = test_bool; } てな感じで、その後testクラス内ではmyboolを 利用するだけで参照元の変更ができたような……
>>915 this.test_bool = &test_bool;
this.test_object=&test_object;
>>916 つまりunsafe指定で使うしか無いということですか
boolをメンバに持つクラスを作ってそれを渡せばいい
919 :
912 :2007/02/05(月) 14:56:05
>>918 それってボックス化とおなじことでは?
コンストラクタから外に出す時点で別のインスタンスに
なってしまうのですが……
アドレスというか参照だけもらいたいのです
できればunsafe使わずに
>コンストラクタから外に出す時点で別のインスタンスに >なってしまうのですが…… ,一-、 / ̄ l | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ■■-っ < んなーこたーない ´∀`/ \__________ __/|Y/\ Ё|__ | / | | У |
C++脳の恐怖
C++で考えちゃいけない C#ってCっぽく見えるが VBに近い
>>919 C#ではマネージドポインタは使えないから無理。
>>918 の通りに参照型でラップ(≠ボックス化)して、その参照をやり取りするしかない。
C#じゃなくてもマネージドポインタはインスタンスフィールドにできなかった気が
925 :
912 :2007/02/05(月) 15:31:05
>>918 >>923 ありがとうございます。
なるほど。メンバにしたクラスをローカルクラスで受ければ大丈夫ですね
boolのボックス化=boolをメンバにもつオブジェクト型クラスの作成
と勘違いしてました。そもそもオブジェクト型も参照型のはずでは……
わけがわかりませんorz
なんか回答も迷いがあるみたいだから分かりやすい例を挙げるけど structはスタックにも直接積まれる。そういうことだ
>>918 が言ってるのはコードにするとこういう事だよ。
class BoolWrapper {
public BoolWrapper(bool x) {
_value = x;
}
public bool Value {
get { return _value; }
set { _value = value; }
}
public bool _value;
}
class Test {
public Test(BoolWrapper x) {
_x = x;
}
public Method() {
_x.Value = true;
}
public BoolWrapper _x;
}
static void Main() {
BoolWrapper hoge = new BoolWrapper(false);
Test testobj = new Test(hoge);
testobj.Method();
Console.Write(testobj._x.Value); //true
Console.Write(hoge.Value); //hogeの中も勿論true
}
ボックス化はBoolWrapperのValueプロパティからsetが出来ない版を、
わざわざクラス作らなくても自動的にやってくれる機能だと思えばいい。
928 :
912 :2007/02/05(月) 17:43:28
>>927 丁寧にありがとうございます。
同様のコードで実験して、確認しました。
あんまりお薦めできないが class Ref<T> where T : struct { private T _value; public T Value{get{return _value;}set{_value=value}} }
930 :
デフォルトの名無しさん :2007/02/05(月) 20:32:35
以下VBスレで聞いたのですがレスしてもらえませんでした。すみませんが 教えてください。 以前はデバッグ時に一時停止してのコード変更が可能だったのに、 どこかのタイミングからか、コードウインドウのタブ耳にロックのマークが現われ、 デバッグ実行中の一時停止でコード変更ができない状態になってしまいました。 これを解除してまたコード変更可能な状態にしたいのですが、 方法が見つけられずにいます。すみませんが解除の仕方があれば教えてください。
>>930 そんな悪い習慣はこの際捨てる、が正解だと思う。
質問の答えはたぶんリリースビルドになってるだけでしょ。
構成マネージャでデバッグビルドに戻せば直る。
つーか、タブ耳ってなんかワロタ
耳たぶの仲間かな
デバック中にコード変更なんて、そんなむちゃくちゃなデバックができるんか 知らなかった
>>934 Edit and Continueでググってみ
>>935 わざわざありがと
漏れはそんなデバックしないからいいよ
937 :
デフォルトの名無しさん :2007/02/05(月) 22:08:33
>>931 >構成マネージャでデバッグビルドに戻せば直る
情報、どうもです。
ツールメニューからオプションで、「ビルド構成の詳細を表示(I)」をチェック
しましたら、確かに「構成マネージャ」が「ビルド」メニューに現われました。
そこで見ましたところ、DebugとReleaseと選べるところはDebugとnっていました
が、やはりデバッグ中はロックが掛かっていました。
>>935 それで、先のオプションのところでの、「デバッグ」項目では、確かに
「エディトコンティニュ」というページがあったので、そこも見てみますと、
そこでも「エディトコンティニュを有効にする」にチェックが付いていました。
それでもやはりデバッグ時にはロックが掛かっているのでした。
まだほかに設定があるのでしょうか・・・・・。
>>937 エディットできるのはブレークポイントで止まってるときだけじゃね?
939 :
デフォルトの名無しさん :2007/02/05(月) 22:33:45
>>938 すみません、焦ってました。そうでした。今止めて確認したところ、
できるようになっていました!
まことにありがとうございました!!
なんじゃそれwwww
動いてる途中で有効ってありえないじゃんw i ↓ in ↓ int
[Stop]キーを押す。 リストを修正する。 CONTINUE こんなことしてた覚えがあるな。
派生クラスの中で、baseクラスにない名前のプロパティを new public virtual キーワード付きで作成し、ビルドして Formに貼り付け、デザインモードで値をプロパティウインドウで入力、 実行して動作確認までOKだったが、もう一度デザインモードで プロパティ・ウインドウを見ると、今度は設定したはずの値が消えて しまっていて、Form画面上でもそれが表示されていない、 つまり、InitializeComponent()に記録されないという事態が起きました。 プロパティ値の頭には [Category("・・・"),Description("****")] [BrowsableAttribute(true)] という修飾詞は付いていますが、 baseクラスに同じ名前のプロパティがあるときでも、set{}側で それに代入しておいてやらず、勝手に派生クラス専用の変数に 入れただけだと、やはり上と同じ現象になりました。 これを解決し、Form側で InitializeComponent()に記録されるように なるために他に処理が必要でしょうか?それとも何か根本的に間違って いるのでしょうか?
>>943 デザイナシリアライゼーションは出来るようになってんの?
コード生成だからシリアライズは関係ないんじゃないの とりあえずこっちでは普通にできたからそのプロパティの実装晒して
946 :
デフォルトの名無しさん :2007/02/06(火) 11:56:44
>>944 >>945 プロパティの記述は
new public virtual string Text
{
get
{
return _Text;
}
set
{
_Text = value;
// base.Text = value; ・・・(*1)
}
}
(*1) を生かすと InitializeComponent() に正しく記載されるようになり、
このままだと、プロパティページに書いても反映されません。
947 :
デフォルトの名無しさん :2007/02/06(火) 12:16:51
>>946 (追記)
>>943 で
>Formに貼り付け、デザインモードで値をプロパティウインドウで入力、
>実行して動作確認までOKだった
の部分での「動作確認」は、自分のコード上でのTextプロパティの代入が
できていた、ということでしたが、コード上で何も代入しないと、プロパティ・ウインドウ
で書いた値も反映されず空白のままで、しかし実行が終わって戻ってくると、
プロパティ・ウインドウには書かれた値が残っていても、InitializeComponent()
には反映されていない、ということでした。
948 :
デフォルトの名無しさん :2007/02/06(火) 12:25:48
>>946 (追記2)
これで不思議なのは、baseクラスを Control の場合は、Textプロパティは
存在するので base.Text への代入はできてよいのですが、baseクラスに
Panelを選んだ場合は Textプロパティは public にも protected にも存在しない
ので、 base.Text への代入はできないはずでしたが、どういうわけか、(*1)を
生かしてもビルドエラーにはならず、実行もできてしまって、InitializeComponent()
にも書き込まれているのでした。
理解が全然違っているのでしょうか・・・
949 :
デフォルトの名無しさん :2007/02/06(火) 12:27:35
すいません。質問をさせてください。 Formに複数個ボタンがあり、そのボタンを押すと色が変わるようにしたいと思ってます。 ただ、ボタンの数が30個以上あり「これって毎回書かなくてもできるんじゃないかな?」と疑問が出てきました。 今は if (textBox1.Text == "A01") { btnA02.BackColor = btnA03.BackColor = btnA04.BackColor = btnB01.BackColor = btnB02.BackColor = btnB03.BackColor = btnB04.BackColor = btnC01.BackColor = btnC02.BackColor = btnC03.BackColor = btnC04.BackColor = btnD01.BackColor = btnD02.BackColor = btnD03.BackColor = btnD04.BackColor = btnE01.BackColor = btnE02.BackColor = btnE03.BackColor = btnE04.BackColor = btnF01.BackColor = btnF02.BackColor = btnF03.BackColor = btnF04.BackColor = btnG01.BackColor = btnG02.BackColor = btnG03.BackColor = btnG04.BackColor = btnG05.BackColor = btnH01.BackColor = Color.White; btnA01.BackColor = Color.LightCyan; } 上記のように指定してます。うまく説明できずに申し訳ないですが、何かいい方法は無いでしょうか?
>>945 コードを生成することもシリアライズのひとつだっつーの。
DesignerSerializationVisibilityやらSystem.ComponentModel.Design.Serializationでも
眺めてみろハゲ。
>>946 今環境がないので調べられんがMSDNに必ず元のに代入しろとか書いてなかったか?>Text
Nameと変な風に連動してた気がするからなんか独自にやっているのかもしれん。
>>948 回答になってないが、現状でデザイナで操作できなくなるような変更はやめたほうがいいかもね。
何がしたいのかわからんけど、フォームのプロパティを置き換えなきゃできないことなの?
foreach(Control c in Controls) { if (c == sender) continue; c.BackColor = Color.White; } ((Control)sendor).BackColor = Color.LightCyan; or lastbtn.Backcolor = Color.White; lastbtn = (Control)sender; lastbtn.Backcolor = Color.LightCyan;
>>949 質問とソースが微妙に一致してないぞ。
質問からは押したボタンの色が変わって欲しいように想像するが、
ソースはテキストボックスにセットされてる文字列からボタンを決めて、
そのボタンはシアン系、それ以外は白って感じだが。
何がしたいのかハッキリしてくれ
955 :
デフォルトの名無しさん :2007/02/06(火) 13:36:23
>>950 >今環境がないので調べられんがMSDNに必ず元のに代入しろとか書いてなかったか?>Text
>Nameと変な風に連動してた気がするからなんか独自にやっているのかもしれん。
そうだったんですか、どのプロパティも同じとはいかないのかもしれませんね。
これがBackColorで同様のことをやったときは、baseの方は透明にしておいても
独自変数の値がちゃんと出てきてたので、Textでも同じかと思ったのでした・・・
>>951 >現状でデザイナで操作できなくなるような変更はやめたほうがいいかもね。
もともとPanelにはTextプロパティがなかったので追加で実装する必要が出たのですが、
今改めてみてみると、ヘルプによるとControlクラスにも、実際には Public にも
Protected にも Text プロパティはリストに載っていないです、??
それで、別の、VBのプロジェクトと組み合わせたソリューション内でやってみると、
この Textプロパティに関する Control と Panel の区別はちゃんと出てきて、
Controlクラスから派生した方は base.Text への代入はOK、Panel クラスから
派生した方は base.Text への代入でビルドエラーが出て来ていました。
C#だけで単独でやっているとこの差が現われず、VBとの混用でやっている方では
これが出るということは、両者の設定に関係しているのでしょうか・・・?
956 :
デフォルトの名無しさん :2007/02/06(火) 13:41:37
>>954 そうなのですが、
>>954 のような状況でした。
このことから、この Panel と Control の違いは、Text プロパティが
プロパティ・ウインドウに現われるかどうかの違いと一致していましたので
Panel ではたぶん Textプロパティを殺しているのではないかと思ったのですが
そうではないのでしょうか・・・。
957 :
949 :2007/02/06(火) 14:05:25
>>952 具体的な回答ありがとうございます。
まだ始めたばかりなので逆引き大全を片手に今眺めてます…orz
>>953 質問の仕損ないで申し訳ないです。
今はボタンを押したときにtextBox1に[A01]等のデータが入るようにしてます。
958 :
デフォルトの名無しさん :2007/02/06(火) 14:11:05
>>955 >今改めてみてみると、ヘルプによるとControlクラスにも、実際には Public にも
>Protected にも Text プロパティはリストに載っていないです、??
この Control は System.Windows.Forms のではない別の Control でした、
System.Windows.Forms.Control では Text も BackColor もやはり存在してました。
Panel の方ももう一度みてみようと思いましたら、今度は Help で 「見つかりません」
になって探せなくなってしまった・・・、まずこっちから直さないと。。。。
>>958 PanelにもTextはあるがこのクラスでは使用しないことになっている。
プロパティグリッドに表示されないのは非表示になってるから。
[Category("Appearance"), Description("hogehohe"), Browsable(true)]
public override string Text {
get { return base.Text; }
set { base.Text = value; }}
MSDNしらないの?
MSDN引いたらすぐに分かるようなこと質問してるってことは知らないんだろ
962 :
デフォルトの名無しさん :2007/02/06(火) 19:24:33
すいません 質問させて下さい。 private const int WM_CLOSE = 0x0010; protected override void WndProc(ref Message message) { base.WndProc(ref message); switch(message.Msg) { case WM_CLOSE: MesssageBox.Show("test"); break; default: break; } } と書いたのですが、フォームを閉じてもWM_CLOSEを受け取れません。 終了処理などをさせたい場合、どうしたら良いのでしょうか!!! お願いします。。。
何故そんな回りくどいことをするの?
OnClosed,OnClosingをオーバーライド。 なんだってそんな低級な方法をとるよ
普通にClosingとかClosedとかイベントあるだろ。
ありがとう
>>965 他にもウィンドウプロシージャーで受け取りたいメッセージが多くある<
なんだってそんな低級な方法をとるよ
ウィンドウプロシージャーをオーバーライドしてイジくるのは低級だったのか・・・
⊂二二二( ^ω^)二⊃
プロパティウインドウで終了関連のイベントのところダブルクリックするだけなんだがなあ? C++から来たの?
>>967 変な例えかもしれないが。
アセンブラでウィンドウズプログラム作るのは低級。
C++ & win32APIから来ました。が、元はAssemble出身です。
>>962 やむにやまれぬ事情もあるのかも知れんな(笑
WndProcを使うとして、base.WndProcを先に呼んでるからじゃない?
.NET Framework のソースってどこからみれるの? えーと質問です。 class hoge {} class hogelist : List<hoge> { public String Value { get() { return ""; } } } private readonly hogelist hogelist = new hogelist(); public form1(.......) // こんすとらくた { InitializeComponent(); textBox1.DataBinding.Add("Text", terolist, "Value"); } というコードを書いて、外部のフォームからこのフォームを表示させようとすると form1->Show(); // ここで例外。 ArgumentExceptionはハンドルされませんでした。 DataSource のプロパティまたは列Valueにバインドできません。 パラメータ名:dataMember と言われて、データバインディングに失敗します。 Show() のところから、ステップ実行すると IEnumerable.GetEnumerator() が呼ばれて いて、これは素直に通過するのだけど通過した後の外部コードの中で例外が発生します。 どうすればデータバインディングできるのでしょうか?
スレッドについての質問です どこか思いこみがあるようですので間違いを指摘していただけると有り難いです。 Formを作成し、自分で新規にスレッドを作成していない状態で (つまり自分はシングルスレッドのつもり) aというメソッドに処理が入り、抜け出す前にbというメソッドに入っているようです。 シングルスレッドの状態でこのようなことはありえるのでしょうか? 尚、a、bともにリストビューのItem選択によるイベント起動がもとになっている物と 思われます。
>form1->Show() ネタですね…
ありがとう
>>971 base.WndProc(ref message); を、switch文の後に回しても解決出来ました。
低級だな。
977 :
デフォルトの名無しさん :2007/02/06(火) 19:40:15
>>973 どうせDoEventsしてるとか言うオチだろ。
>>978 >どうせDoEventsしてるとか言うオチだろ。
していません。
一応検索してみましたが、つかってません。
ちなみに、しょうがないので、lockもしてみましたがうまくいきません。
AutoResetEventとかでしたら、同一スレッド間でも排他制御ができるのでしょうか?
>>980 「同一スレッド間でも排他制御」って具体的にはどういうことだ?
同一スレッド「間」???
>>979 ちげーよ
多分ネタだよ。
>hogelist
>terolist
>尚、a、bともにリストビューのItem選択によるイベント起動がもとになっている物と >思われます。 ここらを詳しく書かないとダメ void a() { b(); } って書いてないよなw
>>981 >「同一スレッド間でも排他制御」って具体的にはどういうことだ?
レスした後自分でも書いてて変だと思った。
まあ、
>>973 の状況でわけわかんなくなっていると思ってください
一応プロセスはThread.CurrentThread.GetHashCode()で同一かどうか見てるつもりです。
(これも変?)
>>984 >aがbを呼んでるというオチ?
a,bとも単にdllの関数を呼ぶためのラッパーですのであり得ません
なぜaの動作中にbが動作しているとわかった? dll内で呼んでるとか。
次スレ余路!
989 :
973 :2007/02/06(火) 20:06:13
念のためにa,bの関数の例を出します。 UnLha.dllの関数を呼び出すだけです。 (lockとか例外処理とかどうしようもなくてつけてます) 基本”S”と”E”が交互に表示されるはずですが、”S”が続くケースがあり、その後”E”が続くことが あるため、メソッドの途中でメソッドが呼ばれている物と判断しています。 public static int UnlhaLck(IntPtr hwnd, string szCmdLine, StringBuilder SzOutput, int dwSize) { int ret; lock (obj) { System.Diagnostics.Debug.WriteLine("S1" + Thread.CurrentThread.GetHashCode().ToString()); try { ret = Unlha(hwnd, szCmdLine, SzOutput, dwSize); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); ret = -1; } System.Diagnostics.Debug.WriteLine("E1"); } return ret; }
990 :
958 :2007/02/06(火) 20:08:53
>>959 ありがとうございます、オンラインヘルプでみましたら、やはり Panel では
Text プロパティは 「無効になっています」 とのことでした・・・。
それでも、やはり Set{}側で その無効な Text プロパティに代入さえして
おけば InitializeComponent() に書き込まれるらしいことが確認できました。
つまり、Control ベースでも、Panelベースでも同様にできそうでした。
ソリューションに、これらのコントロールも内部のプロジェクトとして入れ込んで
いたのですが、これら部品のコントロールをビルドしたら、一旦 VS2005 自体を
終了し、また再度起動してソリューションをオープンし直してからやってみたところ、
VBとの混用側でも InitializeComponent() に記録されるようになりました。
InitializeComponent() に Text プロパティが保存されなかった問題の原因は、
どうも、これら部品クラスのビルド後の取り込みが行なわれていなかったためかと
思われ(「ソリューションのビルド」で行なってもできませんでした・・・)、
VB との混用で行なう場合は面倒でも VS2005 を再起動する必要があるの
かもしれません・・・。
おかげさまでとりあえず InitializeComponent() に取り込むことができました、
ありがとうございました。
必要なのはココじゃない。 ネタ?
993 :
デフォルトの名無しさん :2007/02/06(火) 20:12:19
>>961 MSDNはオンラインで知っていますが、それ以前に、どうして Panel のメンバーぐらいの
参照が オフライン側のほうでできなくなってしまったのか不思議でした。
どっちにしても Textって名前は使わないほうがいいんじゃないかな。
996 :
デフォルトの名無しさん :2007/02/06(火) 20:16:19
>>994 Text は特別なのですか、やはり同一名称は new キーワードでも
問題あるのでしょうか・・・・・?
997 :
デフォルトの名無しさん :2007/02/06(火) 20:17:51
>>995 前には見たことはあったのですが、今日はそのページの参照リンクから叩いたのですが
飛んで行かず、「みつかりません」が出てきたのでした。
>>992 残念ながら見方が分かりません。
さしあたって、>973の質問のシングルスレッドの状態では、a,bが同時に実行されることは
ないと思って良さそうですね(あたりまえでしょうけど)。
どうもありがとうございました。もうちょっとがんばってみます。
999 :
デフォルトの名無しさん :2007/02/06(火) 20:19:18
new にせざるを得なかったのは、virtual にしたかったからでした。 virtual にすると、 override か書けないとのことでした。 どうもでした。またよろしくです。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。