1 名前:デフォルトの名無しさん [2008/04/22(火) 00:31:59 ] (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。 c++厨の嵐はスルー汁。 前スレ C#, C♯, C#相談室 Part45 pc11.2ch.net/test/read.cgi/tech/1200911737/ その他テンプレ>>2-5 くらい
175 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 18:11:30 ] オブジェクト指向のもっとも重要なポイントは、クラスではなくインスタンス。 インスタンスが主役であって、クラスはオマケ。継承がウンタラとかいう連中もいるが間違っているから相手にするな。 今四つのインスタンスがあるとする、それぞれ A , B , C , D 粒度が細かすぎて取り扱いにくいので、二つにまとめてみようと考えてみる。 インスタンスAがBを呼び出すなら A --関数名--> B と書いてみる。 まとめる方法は[A,B,C] [D]がよいか[A,B] [C,D]がよいか。 呼び出しが最少になるような図を考えてみよという事。 適当に矢印書きまくって、最小になるように分離してみるといい。 あとは応用。
176 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 18:56:57 ] インスタンスが主役でクラスがおまけ、って俺には理解できない発想だマジで。 っていうか、それに類するような主張をこれまでに聞いたことがないよ。
177 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:06:45 ] なにいってるかよくわからんが、継承か包含かちゅー話じゃないのか
178 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:12:02 ] プロトタイプ指向のことなんじゃね
179 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:16:53 ] インスタンスが主役w
180 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:21:47 ] C#は型指向
181 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:35:08 ] >>176 オブジェクト指向を扱っているサイトにいってみたら? そうすれば無知も治るよ
182 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:39:21 ] オブジェクト指向ではインスタンス(実体)は脇役だろう。
183 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:40:36 ] >>182 今から15年前くらいは、確かにそういう事になっていたが、そのまま固まったか?
184 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:43:19 ] Javaが登場して以降、体系的に研究されたオブジェクト指向もちょっとは勉強するといいよ。 でないと、デザインパターン意味や使い方など理解に及ぶことはできないし、上の例だって発想することすら難しいだろう。
185 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:46:44 ] Javaと関係なく研究は進んでいたと思うんだけど。
186 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:50:18 ] 何言ってんの。 オブジェクト指向イコールJavaと言ってもいい程だよ。
187 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:52:15 ] その進んだ研究を勉強していないのは駄目だという事だよ 今のライブラリは当たり前にその設計思想が入っているからな、知らないと使い方分らんだろ。
188 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:53:17 ] >>186 ゴールじゃねぇよ、LINQとか見てみろ
189 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:54:35 ] 別にオブジェクト指向がどうとかこうとかどうでも良いよ
190 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:55:05 ] インスタンスは実体。 お前はパソコンに文字を表示させるとき、直にVGAのメモリを書き換えるのか?違うだろう。 ドライバやらOSやらGDI+やらライブラリ郡など抽象化されたものを通してアクセスし表示させるだろう。 オブジェクト指向はインスタンス(実体)を直接操作せず、抽象化して利用しやすくする手法。 インスタンスがメインなわけがない。
191 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:55:55 ] >>188 ゴールなんて関係ないこと持ち出して自ら否定して 結局何が言いたかったのかね。
192 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:56:37 ] >>190 ヒント:言葉遊び
193 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:56:38 ] >>190 そうだな、もう永久にそう思っていろよw
194 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:59:04 ] >>190 そんな考えでも君のプログラムがちゃんと動くならそれでいいよ それはそれで正しいわけだから
195 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:00:26 ] 良いコード:動くコード 悪いコード:動かないコード
196 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:05:01 ] クラスが主役 に一致する日本語のページ 約 290,000 件中 1 - 10 件目 (0.30 秒) インスタンスが主役 に一致する日本語のページ 約 1,790 件中 1 - 10 件目 (0.06 秒)
197 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:11:37 ] タイヤキの型とタイヤキそのもの どっちも主役です(ゆとり教育的発想)
198 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:34:08 ] もうこの手の話がしたい奴はOOPスレ行った方がいいよ。 あそこは>>175 的なトンチキな自説をぶってるアホが延々同じネタをループしてて楽しいと思うよ。 俺は正直吐き気がするけどねああいうの。 ちなみに>>190 は半分はいいこと言ってると思うんだよね。 OOPというアイデアの肝は、>>190 の言う抽象化(より正確には仮想化と言うべきだと思うけど)された 仮想機械をより直感的に表現するコーディング手法ということだと思う。 ただ「実体=インスタンス」ってのは全然意味不明だが。
199 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:36:29 ] インスタンスの和訳が実体だろ・・・
200 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:43:41 ] >>188 LINQはオブジェクト指向とはまた別だろ。 関数型プログラミングのほうが近い。
201 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:45:09 ] なんか、こう訳わからん事になっているから、少し書くと たとえば、C++でいう所の仮想テーブルは、virtual などなくても class のみで作り出すことができる。 これは非常に重要なことで、仮想テーブルは書き換えられないが、自分で作った仮想テーブルは書き換えられる。 このような実装は、Strategyパターンと呼ばれる。 つまり、classを使った抽象化は実は必要なく、ただ『頻繁に出てくるので言語上にvirtualとして実装しておくと便利であるという程度の意味』しかないのだ。 オブジェクト指向を理解する上で、この点について理解しているかどうかは決定的だ。 理解せずクラスと継承を中心に置くとやれる事が一気に限定されてしまうのだ。 さらには、継承には各種問題点も指摘されてり、特に深い継承は良くないと最近はされている。 また原則、継承を考える前にインターフェイスを検討するべきとされている。 参考コーディング規約 www.kawabata.com/dotnet/CodingStdCS.pdf 参考サイト www.objectclub.jp/
202 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:49:06 ] >>199 話の文脈を読まなきゃ。 >>190 の言う「実体」とは「クラスによって抽象化される前の何者か」。 たとえばGDIならビデオカードやプリンタのハードウェアのことを「実体」といっている。 少なくとも話の前半ではね。
203 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:51:16 ] >>201 それって結局、包含と委譲のことだろ。クラス対インスタンスという話ではない。 継承だけがクラスの特徴ってわけじゃないぞ。
204 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:51:26 ] >>202 確かに変だな。
205 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:53:21 ] >>203 つってもインスタンスを大量生産するための鋳型以上の意味もないだろ?
206 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:55:38 ] >>175 ひょっとしてインターフェイスと書くところをインスタンスにしてしまって 引っ込みが付かなくなったとか。それなら文脈があうが・・・
207 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:57:38 ] >>206 インターフェイスもインスタンスの一つと見なしてよいものだよ。 インターフェイスは取得するものだ。
208 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:58:17 ] >>207 またまた荒れるような書き方をするな。
209 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 21:59:06 ] いったい君たちは何の話をしてるの? 誰か頭のいい人ドラゴンボールに例えてくれよ
210 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:00:06 ] ドラゴンボールの主人公はヤムチャなのか天津飯なのかと言う話
211 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:27:53 ] 実装と概念は分離して語れよ
212 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 22:30:20 ] ↑といいつつ乖離して語る馬鹿
213 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 23:10:09 ] 主役はキーボードを打つキミだ!!
214 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 01:52:33 ] >>209 サイヤ人→クラス 悟空→インスタンス
215 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 01:57:38 ] スーパーサイヤ人→スーパークラス
216 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 04:08:51 ] ブルー将軍→サブクラス
217 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 06:42:59 ] クラスもメタクラスのインスタンスだから、 インスタンスが主役ということでおk、みたいな話か?
218 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 06:58:38 ] 決定的な違いは、メタ視点を持てているかどうかだろうな 明らかに不自由な設計やコーディングをしているのは明白なのだが 目が見えていないので、それを理解するのが困難になっているような気がする。
219 名前:163 mailto:sage [2008/05/14(水) 09:30:42 ] 皆さん、いろいろとアドバイス頂き有難う御座います。 すこしスレが荒れ気味ですが、これは私の無知を175さんが丁寧に ご指導してくださった点から始まっているかと思います。 原因は私にあります。スレを汚して申し分けありません。 最近良く思うのですが、OOPの浸透が何故遅いかと、 1)基本概念と実装に大きな開きがありすぎる。 2)考え方に様々な歴史や諸説があり、人や本によって解釈が異なる。 (人によって解釈が異なるのは、読んだ本の年代が大きく依存しているんでしょうか・・) の2点に集約してるかと思います。 OOPが不慣れなものにとっては 具体的な実装論はなかなか本の中には出てこず、 また、こーいう現場的な定石というのか考え方が定まらなくて、 悩んでいることが多いんです。 だから、175さんを始め皆様より貴重なアドバイスを頂いた件は、 非常に感謝しております。 インスタンスの件は、2論に分かれているかと思いますが、 これは馬鹿な私にでも分かるように説明した為の、言葉の綾かと思います。 長文になってしまい申し訳ありません。 とても勉強になりますた。 皆様を師匠と仰ぎ、また伺わせて頂きます!!
220 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 12:43:48 ] くだらない哲学論争は後回しにして、とりあえずクラスの利便性(哲学論争クンはこういう言い方に反発するようだけど) を体得するのがいいと思うよ。っていうかそれが一番重要。 大して難しいことじゃないから使ってれば自然とわかるよそれは。 くれぐれもOOPを外から強制された義務的なものに過ぎない、などと考えないこと。 便利だから使われてるんだよ。 OOPが浸透してないとは俺には思えないけど、もしそうであるのなら それはOOPが「つかえねえ」からじゃなくてこの業界に馬鹿が多いからだよw
221 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 14:16:24 ] 質問です UDPで受信したメッセージをテキストBOXに表示する処理の方法論です。 今は、UDP受信を別スレッドで受信して。セマフォー同期ででString変数に渡し。 フォームのプロセスで、タイマー関数からセマフォーを同期で文字列を受け取って テキストBOXに表示しています。 しかし、今一つスマートでないような気がしてなりません。もっと良い方法がないでしょうか?
222 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 14:38:37 ] 普通に Control.Invoke でいいんじゃねーの?
223 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:20:18 ] タイマースレッド内に、Invokeで受信部分を入れてみたのですが。 ダメみたいな感じでした。 問題点1 Invokeスレッドが終了しない。 問題点2 結局、セマフォーで受信の確認を取るので処理的に同じ。 ただし、使い方が悪いのかもしれない。 別スレッドから、フォームに非同期イベントが出せればいいのだけど、その方法を知らない。 きっと有るような気がします。すごく初歩的な機能かも知れない…
224 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:36:47 ] 223が何を言ってるのか全く分からない Invoke スレッドて何?
225 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 16:14:15 ] >>224 んなこと言ったら、余計意味不明な説明が始まりかねん で、結論 Invokeの意味を理解できてない Invokeの使い方が間違っている
226 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 16:18:18 ] >>225 >Invokeの意味を理解できてない その可能性もある。 >Invokeの使い方が間違っている この問題にInvokeが適用できない。又は、別つの方法があるが使用したくない。 ちなみに、Invokeの中は一つのスレッドであることは理解していますよね?
227 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 16:54:08 ] >>221 Control.Invokeが解っていないなら、 codezine.jp/a/article.aspx?aid=139
228 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 17:32:06 ] >>222-227 出来ました。 結論:Control.Invokeが解っていなかった。無知でした。 申し訳ありません。そしてありがとうございました。
229 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 21:33:17 ] 本当の主役はテレビの前のあなたです!!m9ビシッ
230 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:31:56 ] 定数の取り扱いについての質問です。 定数宣言 public enum 定数 { MASU = 81, } 変数の定数宣言 public const int MASU = 81; この場合、配列列データ_創る場合。 private int[] tbl = new int[定数.MASU]; と private int[] tbl = new int[MASU]; どちらも同じに見えるのですが。前者を使用したほうがベターですか? 前者の方が速いですか?
231 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:37:25 ] enumハックを思い出した
232 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:46:14 ] キモい命名法だ
233 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:58:18 ] >>230 速さは一緒 値自体に意味があるならenumじゃなくてconstの方が適切 でもpublicならconstじゃなくてstatic readonlyにした方がいい
234 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 00:14:07 ] >>233 知らなかった知識です、ありがとうございます。
235 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 00:35:48 ] constと(static )readonlyは全く別物だから、 ちゃんと調べて使い分けるようにした方がいい
236 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 02:28:29 ] >>235 どこがどう違うかを書いた方がいい
237 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 02:44:41 ] 自分で書けよ
238 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 02:48:18 ] constに出来るものをstatic readonlyにした方がいい理由ってなんだよww
239 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 03:26:42 ] >>238 メモリの節約。
240 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 03:30:00 ] ↑アホ
241 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 06:17:51 ] 基本的にconstはクラス内でprivateに定義してその中だけで使用する。 constをアセンブリやnetmoduleまたがりで参照した場合、副作用がある。 S.DLLでpublic const A = 10 M.EXEで S.Aの表示 10 public const A = 99 に変更してS.DLLだけを再コンパイル。 M.EXEを再コンパイルしない限り結果は10のまま。
242 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 07:48:45 ] constを他のアセンブリから参照すると、参照元のアセンブリにも定数が埋め込まれる。後で値を変えたらさあ大変。 数学定数みたいに、絶対に値が変わることがないもの以外は、static readonlyにしたほうが無難。 あとはSizeとかDateTimeみたいに初期化の必要なものを、定数っぽく扱いたいときに。
243 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 09:05:11 ] それは完全に枝葉というか性質というか…全然別という意味分からないだろ constはコンパイル時に値が確定される定数、readonlyは書き込み不可な変数。 見えてくる違いとしては、constはコンパイル時に評価されるので使える範囲がちょっと広い。 定数式しか許されない属性指定内部やswitchのcase句にも使用可能。これらに使用される場合境界越えで あってもconstにする必要がある。 ちなみにenumの個々の値はconstなのでenumを等価に置き換えるならconstになる。
244 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 09:25:48 ] enumの値が変わったら大変なことになるんだな
245 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 09:27:54 ] 外部に公開している列挙体を不用意に変更しちゃマズいのか。
246 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 10:09:30 ] >>242 これは知らなかった。勉強になる
247 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:15:35 ] ところでなんでcaseには定数しか書けないの?
248 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:33:21 ] 定数じゃないと、複数該当することもあるからじゃない? まあ上から順番に比較するような仕様のやつもあるが。
249 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 17:34:50 ] あとジャンプテーブル変換
250 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 18:23:06 ] 実装を簡単にするための手抜き
251 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 22:20:36 ] かといってVBのSelectCaseは自由すぎると思わないか?
252 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:37:20 ] selectっていうのは0,1,2,3,4... みたいに連番で並んでると それを関数ポインタの配列みたいにしてジャンプすることが出来る だから定数じゃないとどうしようもない
253 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 02:00:26 ] バカばっかw
254 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 08:37:30 ] ↑暴走中。
255 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 10:48:23 ] >>251 バグを引き起こしかねない問題を含まない限り、自由度は高いに越したことはないよ C#は新規なんだから、switch case の構文にこだわるべきじゃないとは思った もともと、switch は C の特殊 goto label の構文な訳だし、考え方が古臭すぎる。 for 文からの脱出に break を使いたくても、switchにとられてしまうとかダサいと思うので。
256 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 11:37:15 ] フォールスルー不可能にもかかわらずbreak必須って時点で(ry
257 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 11:38:59 ] たしかに。 この辺何とかならなかったのか。 C、C++からの移行を意識してるならswitch caseと別の構文にすればいいしな
258 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 11:57:33 ] >>252 stringにもswitchは使える その場合はif(str=="a") /*case a*/ else if(str=="b") /*case b*/ else if… みたいなコードにコンパイルされる
259 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 16:01:00 ] >>258 たくさんあるとDictionaryを使うらしいぞ
260 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 18:35:22 ] #regionはIDEで出来るようにした方がいいと思う。
261 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 18:49:50 ] それを言語そのものに組み込むところはC#の特徴というかアピール IDEサポートを謳ってる言語なんだから
262 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 19:29:25 ] C#3.0の自動プロパティ作ると、[xxx]k_BackingField(うろ覚え)とかいうような変数が内部で生成されてるらしいんだが、これにソースコード上で属性を付加する方法ってありますか? 自動生成のプロパティにつけても自動生成される変数には付加されないみたいです。
263 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 19:54:51 ] >>261 C++にもあるよ。 てかそれなら両方サポートすればいいじゃん。
264 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 20:02:54 ] >>262 > 自動実装するプロパティ (C# プログラミング ガイド) > > 自動実装したプロパティでは、属性は使用できません。プロパティのバッキング フィールドで属性を使用する必要がある場合は、通常のプロパティを作成します。
265 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 20:05:39 ] >>264 ('A`)マンドクセ
266 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 21:21:12 ] プログラミングC#っていう本を買おうかと思ってるんだけど これ2年前に第4版が出たのが最後で、C#2.0対応とかVS2005対応とか書いてるよね もう今はC#3.5とかVS2008もでてるけど、近いうちに第5版とか出たりしそうかな? それとも第4版の内容でまったく問題ない?
267 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 21:27:06 ] 普通に考えれば最新の機能には対応してない。それだけだ
268 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 21:32:47 ] C#3.5って出てるの?
269 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 21:39:45 ] >>267 まあ、そうだね。サンクス >>268 ごめん、嘘ついた。NET Framework 3.5でもC#は3.0のままです ちょっと調べてたら原書のProgramming C# 3.0ってのは去年末にでてるんだな 日本語版でないかなー
270 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 23:43:57 ] 始めたばかりの俺はそれを待っている 今は猫と初めてを併用して学習中
271 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:02:27 ] 原書買えよ
272 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 02:10:19 ] 質問です。 DataGridViewで自動カラム生成機能ってありますけれど あれのカラムのフィールド名はこちらから指定できないんでしょうか? (特にReflectionを使った手法で) プロパティに属性つけるとかしたら上手くいくんじゃないかと思ってるんですが… ご存知の方いましたらお教えください。
273 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 03:11:04 ] 自動生成したらフィールドも何もないと思うが、 カラムのフィールド名って具体的に何を指してる? デザイナで列を追加したときにフォームに作られる Column*フィールドの名前のことか?
274 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 06:16:50 ] >>273 すいません、あまりにも説明不足でした。 フォームのカラムのヘッダに表示される文字列のことです。 プロパティ名がそのまま文字列変換されて表示されているようなので 多分どこかで設定できるんではと思っているのですが…
275 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 07:41:53 ] Select()でプロパティ名を変えた匿名型にすればいい var e1 = ...; // 元のデータソース: IEnumerable<Hoge> var e2 = e1.Select(x => new { Bar = x.Foo, ... });
276 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 08:36:22 ] 知らない文法だなぁと思ったら2008ですか…。 ちょっと調べてみます。ありがとうございます。
277 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 16:45:58 ] Seleは2005でもあるんじゃ? ラムダはデリゲートになおせばいいよ
278 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 16:47:00 ] Selectな
279 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 16:50:05 ] ごめん嘘だ msdn.microsoft.com/ja-jp/library/bb548891.aspx 3.5からだった
280 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 22:57:12 ] 2005でも似たようなのを作ることは出来るがラムダ式がないと使い物にならない
281 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 06:12:12 ] 2008に慣れてしまって、もうLastOrDefault()相当のコードを書くことすら面倒くさい。
282 名前:デフォルトの名無しさん [2008/05/19(月) 14:21:56 ] WindowApplicationを作っています。 別スレッド(固定周期)でDBの値を引いてきて、Form(メインスレッド)のラベル.Text属性に値を設定する という処理を行なっていますが、 表示されるのは最初だけで、その後DBの値を変えてもラベルの値が変更されません。 どうしたらいいかご教授ください。
283 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 14:29:09 ] >>282 >>227 と同じかな?
284 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 19:18:45 ] 同一のストリームをBinaryReaderとBinaryWriteに食わせた場合、 Closeを呼び出す順番ってどうすればいいの? ついでに、フィールドで持っているストリームをメソッド内のローカルの BinaryReader/BinaryWriterに食わせた場合、仮にメソッド内でClose呼んだりusingを使ったり することを避けたとしてもBinaryReader/BinaryWriterがGCに回収されるタイミングで ストリームも強制的に閉じられてしまうんだろうか?
285 名前:デフォルトの名無しさん [2008/05/19(月) 20:14:51 ] 今、関数の引数を設定したλ式を作る時、以下のようにしているのですが、 もっと良い方法または、ライブラリにこれと同様なことをするための物はあるのでしょうか? static Func<TResult> SetArg<T1,TResult>(Func<T1,TResult> f,T1 a1) { return () => f(a1); } ... static Func<TResult> SetArg<T1,T2,T3,T4,TResult>(Func<T1,T2,T3,T4,TResult> f,T1 a1,T2 a2,T3 a3,T4 a4) { return () => f(a1,a2,a3,a4) ; }
286 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 20:50:34 ] >>285 >static Func<TResult> SetArg<T1,TResult>(Func<T1,TResult> f,T1 a1) >{ > return () => f(a1); >} ライブラリに同等のものはないしもっと良い方法もない。 でもここにあげられたSetArgメソッドを使うぐらいなら a1 => f(a1) と毎回インラインで書けば十分だと思うよ。
287 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 20:57:42 ] >>285 今までC++使っていた人? C++がstd::bind1stやstd::bind2ndをありがたがって使っているのは 今までC++に簡潔なラムダ式が存在しなかったという特殊事情もあるので C# 3.0で無理してまねる必要は無いと思うよ。 C#だとSetArgみたいなのを作ってもインライン展開されないしね。
288 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 20:59:06 ] なんかすごいレベルの高い話してる・・・
289 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:00:24 ] 慣れてないだけだよ 解ればそんなに難しくない
290 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:10:48 ] >>284 Disposeは複数回呼び出されても大丈夫だから,続けて呼びさえしていれば問題ないんじゃね BinaryReaderやBinaryWriterはファイナライザを実装してないから それらがGCされるときにストリームが勝手に閉じられることはないよ ストリームへの参照がどこかで繋がってる限りは大丈夫
291 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:44:31 ] >>290 ありがと。
292 名前:デフォルトの名無しさん [2008/05/19(月) 21:55:05 ] >>286 実はそれがちょっとまずかったので、関数化したという事情があるんです、たとえば。 List<Func<int>> list ; for(int i=0;i<100;i++) { Func<int> tmp = () => i + 5 ; list.Add(tmp) ; } とすると、プログラムする側の気持ちとしては i には 1 , 2 , 3 , 4 , 5 となって欲しいのですが 計算が遅延しますので、i = 100 , 100 , 100 ... となってしまいます。
293 名前:デフォルトの名無しさん [2008/05/19(月) 22:29:40 ] いやそれは遅延のせいではないんじゃ…
294 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 22:31:29 ] C#のデリゲートはクロージャでない
295 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 22:34:25 ] 遅延させたいんでしょう、つかその必要がなければ、Lambdaなど使わずにその場で計算すれば済むわけだし。
296 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 22:39:05 ] Cocoaバインディング便利そうなんだけど、C#でUI作るとき同じようなもの作ったりしてる人おる?
297 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 22:40:44 ] >>292 List<Func<int>> list ; for(int i=0;i<100;i++) { var j=i; Func<int> tmp = () => j + 5 ; list.Add(tmp) ; } こうすればお望みの動作にならんかったっけ?見検証ヾ(゚д゚;) スッ、スマソ。
298 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 22:44:05 ] ListView.ItemSelectionChangedイベントで選択Itemが変化したのを検出し、 別の詳細表示フォームの表示を更新する、といったことをしています。 何も選択していないときは、詳細表示では何も表示したくないので全て消去しているのですが、 ItemSelectionChangedイベントは、選択が切り替わるときに「選択解除」と「選択」の2つのイベントを発生させます。 そのため「表示の解除⇒再表示」となってしまい、妙なチラツキが発生してしまっています。 1回目の解除用のItemSelectionChangedイベントでは、次に選択が入るかどうかが分からないので、 どうやってチラツキを抑えようか困っています。 この問題を改善する方法はないでしょうか?
299 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 01:04:48 ] >>292 こういうので良いんじゃない? var list = Enumerable.Range(0, 100).Select(i => (Func<int>)(() => i + 5)).ToList();
300 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 01:25:06 ] >>298 SelectedIndexChanged使えば?
301 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 02:04:34 ] >>297 やり方はそれでOK そのコード自体はNullReferenceExceptionになるけどなw てか、C#でラムダ式に(パラメータ以外の)変数を入れる場合は、 基本的にスコープを最小限して、参照型ならコピーを使うというのは for文の条件に不動小数点数を使わないのと同じくらい常識だと思う あと、ラムダ式をごちゃごちゃ弄る場合は式木使った方がいいと思う MSDNのどこかに載ってるExpressionVisitor使えばいろいろ出来る
302 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 02:15:36 ] intはいつから参照型になったんだ
303 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 03:25:22 ] >>300 それも試してはいるのですが結果は一緒でした。 マニュアルには複数選択のListViewの場合は削除と追加の時に呼ばれるとありますが、 これはMultiSelect=falseの設定でも同じ仕様で動いていました。 何か設定が足りないのでしょうか? (アイテム選択状態) ⇒別のアイテムを選択する ⇒ListView.SelectedIndexChangedが呼ばれる(選択要素数を確認すると要素数0) ⇒ListView.SelectedIndexChangedが呼ばれる(選択要素数を確認すると要素数1) SelectedItemsだけでなく、SelectedIndicesの内容も同様です。
304 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 03:43:33 ] 選択解除するタイミングはもっと限定できるんじゃないの そのタイミングでだけ消せば
305 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 08:46:40 ] >>303 何も選択してないときの処理を別コントロールにフォーカスが移ったらって条件にすれば?
306 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 09:09:56 ] PictureBoxかPanelのようなコントロールをウィンドウ上に貼り付ける場合、 一画面でどれくらいの個数までが実用的な範囲なのでしょうか? イベントをとりたいのでマーカーとして貼り付けたいのですが、 個数が多いとパフォーマンスが落ちそうで…
307 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 09:51:26 ] >>306 で、君の環境で試したらいくつでパフォーマンスが落ちたんだい?
308 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 11:06:46 ] Windowsアプリケーションから 非同期で、サービスプログラムの状態を知りたいんだけど、 1.別スレッドで周期的にサービスプログラムの状態を監視し、表示する。 以外に何かよい方法ありませんか?
309 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 11:23:04 ] そのサービスは既存のもの?
310 名前:308 mailto:sage [2008/05/20(火) 11:54:44 ] >>309 新しく作成したサービスプログラムなんですが、中身の仕様は変更できません。
311 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 13:51:11 ] Panelの上にいくつかのボタン等をおいて、 そのPanelの上に同じようにPanelを重ねていって場面ごとに最前面にしたいんだけど、 Panelの大きさって全く同じじゃないとだめなのね。 大きさが違うとPanelの中のPanelって事になっちゃうみたい。 それとBringToFrontで最前面にするよりVisibleですかそうですか。
312 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 13:59:09 ] よく分からんが、それはTabControlで済ませることができない操作なのか?
313 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 14:03:50 ] >>310 相手が固定ならそれないりの方法あると思うけど、 それが何かは場合によるから、普通にポーリングでいいんじゃないかな。 サービスへの通知みたいに取れることを期待している?
314 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 14:28:44 ] >>311 試してないけど、ツリーで位置を確認して移動すれば解決する事じゃないの?
315 名前:314 mailto:sage [2008/05/20(火) 14:31:16 ] >>311 いやわかった。 最前面に置いたPanelが小さいと、下のPanelが見えるって事なのかな だから最前面以外のVisibleをfalseにしなきゃいけないんだなっていうことを言いたいのかな だとすればそれは当然。
316 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 13:58:12 ] >>312 そだよ。でもデザイン的にタブが無い操作って事。 >>315 見えるっていうか、大きいPanelに小さなPanelが乗っかっちゃうと、小さなPanelをVisibleをtrueにしても大きなPanelがfalseなので結局表示されないって事なんだ。 たとえばPanel1とPanel2があって、Panel1に重なって小さなPanel2があったとします。 んで別のところにある二つのボタンでPanel1とPanel2を切り替えるために private void button1_Click(object sender, EventArgs e) { panel1.Visible = true; panel2.Visible = false; } private void button2_Click(object sender, EventArgs e) { panel1.Visible = false; panel2.Visible = true; } こんな風に書くじゃないですか。 ところがPanel2はPanel1の中のパネルと判断されて表示されないわけです。 ちなみにPanel2が完全にPanel1に含まれていなくても大きさに関係なくPanel1上のものと判断されてしまうのです。 なので大きさも位置も完全に同じにしないと別々のパネルだと判断されないって事でした。 そして大きさも位置も完全に同じでもPanelをBringToFront()で最前面にしようとしてもダメでした。
317 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 15:58:37 ] >>316 それこそ>>314 で直るはずだろ 今VS起動できないから具体的になんて名前のウインドウだったか忘れたけど ツリー表示でPanel2がPanel1の子になってるはずだからD&Dして兄弟にしてやればいい
318 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 16:45:12 ] >>317 そんなツリーがあるんだ!? 従属関係を指定できれば解決する簡単な問題だったので疑問でした。 探してみます!
319 名前:デフォルトの名無しさん [2008/05/21(水) 16:57:26 ] ドキュメントアウトライン ビューだ!
320 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 17:11:00 ] >>319 今ちょうど検索してて見つからなくて困ってたんだけどありがとう!!! あった!
321 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 17:23:16 ] ただ確認できるだけで従属の変更は出来ないのね。 >>317 のように親子を兄弟にすると位置自体も変わってしまう。 まあでも確認できるだけでもかなり便利になりました。
322 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 18:33:33 ] コントロールの親子あるいは包含関係なら変更できるけど? そもそも、間違ってPanel2をPanel1に入れてる時点で自分に非があるのに あたかも処理系やIDEが悪いかのような論調で書かれも困る 結論としては、デザイン時にコンテナを意識してないお前が悪い てか、コンテナ意識しないとAnchorやDock使えんだろ
323 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 19:15:49 ] ↑なに言ってるの?w
324 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 19:22:47 ] 結論としては(キリッ って事だろ。 何の役にも立たないレス。
325 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 22:12:34 ] >>322 の言っている意味が分からないような馬鹿が偉そうに書き込まないほうがいいぞ。 どう考えても >親子を兄弟にすると位置自体も変わってしまう。 という頭の悪い考えに対する返答だろ。 コントロールの位置座標というのはコンテナに対する相対座標なんだから、 親コンテナが変われば当然Form上における絶対座標は変わるに決まってる。 そんなことも理解できない馬鹿はおとなしくWPFアプリケーションで視覚的に 階層構造を指定できるものを使っておけということ。 フォームデザイナに頼りっぱだからそうなる。 コード上で親コンテナ.Controls.Add()で追加していけば思うような構成にするのは極めて容易い
326 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 00:40:50 ] コントロールの親子あるいは包含関係はどうやって変更するんですか?
327 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:03:26 ] Controls.Addすれば子になるんだろ Controls.Removeしてから別のコントロールにAddすればいいんじゃないか
328 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:11:25 ] 変更前親コンテナ.Controls.Remove(子); 変更後親コンテナ.Controls.Add(子);
329 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:17:28 ] とういうことはPanel1に重ねてPanel2を配置して、 Panel2はFormの子にしたい場合はコードからしか設定できないってことでしょうか??
330 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:32:28 ] タブコントロールで、タブ部分だけ消したほうが早そうな
331 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:33:19 ] Panel2をFormに追加してから、サイズ変更でPanel1の内側に持ってけ。
332 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:35:01 ] >>329 というよりも、最初にPanelを同一の親コンテナの中に重ねて配置したいという時点で、 デザイナで作成するのではなく、最初からコード上でNew Panel()して それをControlsに追加していくようにすべき。 デザイナ上でそれやろうとすると、親切にもDesigner.cs上のコードは 最前面にあるコンテナ内にコントロールを配置しようとしてくれちゃうから希望通りにならない。 ためしにpanel1とpanel2をForm上に重ねるように配置して、 片方のBackColorをBlackにして、Button1のClickイベントで交互にBringToFrontするように してみたが、問題なく入れ替わったぞ。お前のやりたいことはまさしくこれのことだと思うが。
333 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:35:39 ] Windowsアプリケーションで、常に一つのフォームしか表示させなくて、色んなフォームにページ展開する時ってどのように実装しますか? シングルトンで実装するのが普通なんでしょうか? それとも1度開いたらHide()で見えなくするだけ? よろしくお願いします。
334 名前:332 mailto:sage [2008/05/22(木) 01:37:13 ] >>331 そりゃ盲点だったわ。 ためしにやってみたらそれでも大丈夫っぽいね
335 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:37:38 ] タブコントロールのAppearanceをFlatButtons、ItemSizeを0,1、SizeModeをFixedにすれば、あら不思議
336 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:43:58 ] >>330 そんなこと出来るんですかー。 >>331 ドキュメントアウトライン見ながら方向キーで調節したり、 Locateを手打ちしたりして注意しながら配置すれば出来るんですけど、 マウス操作だと親子関係が、ドキュメントアウトラインで親子関係を変えると位置が、それぞれ変わっちゃいますね。 特に後者の挙動は意味不明ですw せっかくのGUIデザイナなのに感覚的に操作出来ないのは面倒ですね。。
337 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:50:42 ] >>336 どうしてもデザイナにこだわるならExpressionBlend使ってWPFアプリ作れっての。 あれだとお前のやりたいことが全部感覚的にできるぞ。 あと、 >特に後者の挙動は意味不明ですw >>325 を百回読め。コンテナが変われば位置が変わるってことが理解できない頭なら プログラミングなんて向いてないからやめておけ。
338 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:51:51 ] >>332 最前面にあるコンテナの子にしてくれるのは感覚的にも動作的に問題ないけど ドキュメントアウトラインで親子関係解消すると位置が変わっちゃうのは意味不明だけどね。 他の操作でその位置に出来るのになぜ変わるのかと。 >>335 あら不思議! ありがとー。
339 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:56:38 ] >>337 親コンテナが変われば相対座標が変わるって言いたいんだろうけど それは問題になってないんですぅ。 GUIで親子関係を解消したら新親の座標に変換してくれたほうが直感的です。 しかもマウス操作したら旧親の子になってしまう座標ならなおさらです。
340 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 12:38:53 ] >>339 何を言ってるんだか意味不明な気がする。
341 名前:337 mailto:sage [2008/05/22(木) 13:59:41 ] >>339 いや、まあもう何も言わんからおとなしくWPFで作ったら? 君の言うGUIデザイナを使って「直感的」に作成できるからさ。 ツールに文句つけるわりには、それを解消したツールがあってもそっちを使おうとしないんだねぇ。 WPFとかXAMLの勉強するのは嫌だけどWPF&XAMLの機能を求めているわけだ。 だだをこねている子供にしか見えん。
342 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:05:59 ] よく論点が違うって言われない?
343 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:25:58 ] 言われない
344 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:27:59 ] 聞く耳持たねえ
345 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:28:40 ] WPFが直感的だと!?
346 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:33:20 ] うん
347 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:05:45 ] WPFはスレ違いだしもう何も言わなくていいですー
348 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:38:28 ] 337みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^
349 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:41:12 ] 348みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^
350 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 19:41:28 ] どうでもいいけど関係ない話するな
351 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:41:06 ] 349みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^
352 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:47:33 ] 351みたいな質問者の求めてる回答をしない香具師はただの荒しでしかないから^^
353 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 07:08:57 ] WPFがスレ違いならFormの話もスレ違いだろう
354 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 07:12:31 ] Expression高いしVSのWPFエディタはうんこだし WPFは爆死の臭いしかしない
355 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:49:13 ] C#でDataGridViewから派生したクラスを使いたいんですけど Form1.cs[デザイン]を開いて そこにDataGridViewを張り付けて そのあとに Form1.Designer.cs の System.Windows.Forms.DataGridView を MyNameSpace.MyDataGridView に書き換えるとかそういうことをするんですか? そんなはず無いと思うので正しいやりかたを教えてください。
356 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:52:30 ] 派生させたクラスがツールボックスに出てるだろう。
357 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 09:01:20 ] >>356 出てますね... ありがとうございます。
358 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 13:55:25 ] すみません、初心者的で申し訳ないのですが、質問させてください。 以下のコードを実行すると、クラスAのセッターを使ってAのプライベート変数に2を代入したいにも関わらず 既定値の0が用いられてしまいます。 警告内容は以下の通りです。 「フィールド 'NAME1.A.x' は割り当てられません。常に既定値 0 を使用します。」 また、付随する質問ですが、void func_A( temp ) { x... }をvoid func_A( temp ) { X... }とすればきちんと2がセットされます。 クラス内であるにも関わらずセッターXを用いる必要があるのはなぜでしょうか。 なお、コンパイル環境はVisual C# Express Editon 2008です。
359 名前:KKK [2008/05/23(金) 13:56:15 ] こんにちは。 はじめましてRayです。 私は大学4年生ですが、最近は大学は週に一回くらいしか行かないのですが、 就活の準備など、家にいることが多くなりました。 しかし、斜め向かいに住んでいる茨城という若い夫婦が嫌がらせをしてきます。 @近所をうろAしたり、家の窓から私の部屋を覗いてきて、部屋に「○○の本がある」などと近所のほかのオバサンに報告したり、 A布団たたきでものすごい音で布団をいつまでもたたきます。 (体格がいいオバサンなので、すごい音がします;;) B私が家にいるのを知っていて近所のオバサンと大きな声で悪口を言ってきます (「Rayが就職なんかできるわけないじゃない!」など・・) C茨城(夫)は部屋を覗くだけでなく、夜になると咳払いなどをしていつまでも近所をうろついています。 気持ち悪いので、弁護士や市の職員に相談しましたが、なかA証拠が取れなく、裁判まで持ち込めない状況です。 D車のエンジンをいつまでもかけ、うるさくする。 とにかく精神的にも滅入っていて、解決したいのですが、できない状況です。 ほかの近所のオバサンも私が困っているのを見て喜んでいるみたいです。 なんとかしたいので、誰か相談にのってくださぃ。 アドバイス待ってます。
360 名前:358のつづき mailto:sage [2008/05/23(金) 13:56:37 ] amespace NAME1 { class A { // メンバ private x; ← ここで警告が出る // メソッド public void func_A( temp ) { x... }; ← ここでx=0として計算してしまう // アクセッサ public X { get; set; } }}
361 名前:358のつづき mailto:sage [2008/05/23(金) 13:57:37 ] using System; using System.Collections.Generic; ・ ・ ・ using NAME1 namespace ConsoleApp { class Main { static void Main(string[] args) { // クラスAを配列としてインスタンス化、xに2をセット n ; A[] arrayA_ = new A[ n ]; for ( int i = 0; i < n; i++ ) { arrayA_[ i ] = new A(); arrayA_[ i ].X = 2; } // メソッドの呼び出し temp; for ( int i = 0; i < n; i++ ) { arrayA_[ i ].func_A( temp ); } }}}
362 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 13:58:59 ] >>360 xの型もXの型もgetアクセサの中身もsetアクセサの中身も書け
363 名前:358 mailto:sage [2008/05/23(金) 14:16:40 ] private double x; public double X { get; set; } です。アクセッサの表記は、.NETのver2かver3でこのように書けるので、それを利用してます。
364 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:27:19 ] ヘルプなりで「自動実装するプロパティ」調べれ どうして X が x を知ってる?
365 名前:358 mailto:sage [2008/05/23(金) 14:49:06 ] ヘルプを読んだ結果、 >自動実装したプロパティでは、属性は使用できません。 >プロパティのバッキング フィールドで属性を使用する必要がある場合は、通常のプロパティを作成します に関連がありそうだとは思うのですが、意味がよくわかりません・・・。
366 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:56:54 ] X プロパティは x に対応しないよ。
367 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 14:58:31 ] それだと、 private double _X; みたいなのが内部で自動生成されて public double X { get { return _X; } set { _X = value; } }
368 名前:358 mailto:sage [2008/05/23(金) 15:03:32 ] つまり、 class{ double x; double X{get;set;} } と書くのは誤りで、 class{ double x{get;set;} } と書けばよいということですか?
369 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:37:57 ] ファイルの読み書き単位でエンコーディングを指定するのではなく、 プログラム全体でエンコーディングをしているする方法はないですか?
370 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:46:03 ] >>368 private double x; と public double X { get; set; } は別物だよ。 xをプロパティとしたいなら public double X { get{return x;} set{x=value;} } 自動プロパティを使いたいならprivate double x;は消して public double X { get; set; }だけにして、Xを変数のように使えばいいよ。 ただその場合はprivateではないけどね。
371 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 15:59:52 ] >>369 CreateStreamReaderAsShiftJIS/CreateStreamWriterUTF8メソッドでも用意しとけば?
372 名前:デフォルトの名無しさん [2008/05/23(金) 17:04:01 ] 初心者ですが質問させてください。 Webbrowserコンポーネント(Webbrowser1)でgoogleを表示しておいて、 ソフトのTextBox(TextBox1)に検索ワードを入力して、Button(Button1)を押したら、 Webbrowser側に検索ワードが読み込まれて自動で検索するようにしたいんですが、 どのようにすればいいか検討がつきません。 開発環境はVisualstudio2005、言語はC#です。
373 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:07:41 ] コンポーネントでの表示が必要なの? httpで通信するってんじゃだめかい?
374 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:10:13 ] >>372 事前にgoogleを表示しとく意味があるのか? 取り敢えず適当にgoogleで検索して検索結果画面のURL調べれ あとSystem.Web.HttpUtilityのUrlEncodeとUrlDecode調べれ
375 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:11:44 ] >>373 webにいろいろと自動入力するシステムを作らないといけなくなりまして。 たとえばブログにあらかじめTextboxに入れておいたIDとパスを入れて自動ログインするとか そういったものなんですけど、webのフォームに、Textboxから値を入れる方法が知りたくて、 Googleはそのたとえのつもりでした。 http通信?の意味がよくわからないんですが、ソフト内のブラウザ上で表示させる必要はあります。
376 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:13:21 ] >>374 Googleっていうたとえが悪かったですね。ごめんなさい。 >>375 で書いたように、Webサイト上のフォームにソフトのTextBoxで記載したワードを記入するのが目的です。
377 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:27:16 ] WebRequest を使って WebResponse を取得し、 その内容を反映させては。
378 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:30:01 ] 素直にHTTP POSTしろよ低脳。 こんなの厨房でも出来るぞ
379 名前:デフォルトの名無しさん [2008/05/23(金) 17:39:43 ] >>377 どのメソッドを使えばいいかわからなかったので、ググってみたらできそうです、ありがとうございます。 >>378 HTTP POSTで検索したらそれらしいのがでてきました。ありがとうございます。
380 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:40:12 ] おい小学生かもしれねえだろうが
381 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:41:46 ] >>368 おそらくやりたいことは public double X { get; private set; } これだけでいいと思われる。 これでXのセッターはprivateになる。
382 名前:デフォルトの名無しさん [2008/05/23(金) 17:43:52 ] >>380 そのとおりです小学校3年生です。 バカな質問してすいませんでした。
383 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:46:22 ] >>380 小学生に失礼だ
384 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:48:58 ] >>381 自動プロパティのセッタゲッタの片方だけのプロテクションを帰ることは出来ないよ。
385 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:52:20 ] >>384 いきなりどうしたの? 俺ができてるからそう書き込んでるんだけど。
386 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:54:35 ] 俺もプロパティはほとんど public Foo Foo{ get; private set; } だな 普通のプロパティなんてかったるくて書いてられん
387 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:55:26 ] >>384 知ったか? それとも何か他に深い意味があるの?
388 名前:358 mailto:sage [2008/05/23(金) 18:08:21 ] うまく書けるようになりました。 ありがとうございました。
389 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 18:15:11 ] >>372 まあ、解決したならそれでいいけど、これでいいよ。 private void button1_Click(object sender, EventArgs e) { HtmlElement input = webBrowser1.Document.All.GetElementsByName("q")[0]; HtmlElement form = webBrowser1.Document.All.GetElementsByName("f")[0]; input.SetAttribute("Value", textBox1.Text); form.InvokeMember("submit"); } >>378 ログイン処理とかだと、ログイン前のセッションクッキー引き回しとか、 JavaScriptによるワンタイムキーの生成とかが必要になると、そのへんは ブラウザに任せた方がはるかに簡単。
390 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 18:34:21 ] 便乗だけどオンラインゲームの自動ログインはどうやればいいの? ttp://dobon.net/vb/dotnet/internet/webrequestpost.html ここを参考にしたけどだめみたいなんだ。 たとえば ttp://suddenattack.redbanana.jp/ ここに自動ログインするためにはどうしたらいいのかな?
391 名前:デフォルトの名無しさん [2008/05/23(金) 19:21:51 ] >>389 さん、ありがとうございます! 検索してもわからず、困っていたところでした。 ("q")と("f")のところにhtmlからそのフォームのnameをもってきたらいいということですか? やってみます!またできたら報告しますね。
392 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:28:24 ] Hashtableから値取り出すときにキャストしないでいい方法はない? 面倒くさいんですけどん。
393 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:29:59 ] VS2005以降ならDictionaryを使う
394 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:31:53 ] >>393 サンクスです。 こんなのがあったんですね。
395 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:43:16 ] GenericはC#2.0の最大の目玉じゃないか…
396 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 20:38:55 ] >>390 やろうと思えばできる。 IDとパスのINPUTタグのIDを調べ>>389 のようにIDとパスを入力し、 こいつらを管轄するフォームでsubmitする。 ヒント:javascriptを実行してからsubmitを行う。
397 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 20:52:21 ] windowsアプリなんですが、メインのフォーム内のメソッドで そのフォームがもってるある型の変数全部の値を一括で変更 する方法はありますか? おねがいします。
398 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 20:56:16 ] リフレクションを使います
399 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 20:58:34 ] >>396 javascriptは全然わからないから詰まってます。 submit()を実行すると無限に更新されるみたいなのですが・・・。 htmlソースみるとLoginLeftFormCheck()を呼び出してるみたいなのですが関係ないですかね。
400 名前:390 mailto:sage [2008/05/23(金) 21:04:58 ] 意味も分からずコピペなんですけど、 public Form1() { InitializeComponent(); webBrowser1.Url = new Uri("suddenattack.redbanana.jp/index.asp "); } private void button1_Click(object sender, EventArgs e) { HtmlElement id = webBrowser1.Document.All.GetElementsByName("user_id")[0]; HtmlElement pass = webBrowser1.Document.All.GetElementsByName("user_pwd")[0]; id.SetAttribute("Value", "aaaaa"); pass.SetAttribute("Value", "bbbbbb"); } こんな感じでフォームに文字が入りました。 あとはログインボタン押して、ゲームスタートボタン押すだけなんですが・・・
401 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:05:33 ] >>396 いやそいつを実行するの。
402 名前:デフォルトの名無しさん [2008/05/23(金) 21:06:25 ] >>400 ログインボタン、エンターキーおしたらいけないの?
403 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:06:26 ] >>399 JavaScriptもわからないようならC#とか無理だから諦めろ。 なでしこでもやってろ
404 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:06:59 ] 安価ミス >>396 →>>399
405 名前:390 mailto:sage [2008/05/23(金) 21:11:35 ] >>401 実行するってことはInvokeMember("LoginLeftFormCheck")ってことですかね? >>402 フォーム上ならエンターキーでもログインできます。
406 名前:401 mailto:sage [2008/05/23(金) 21:28:18 ] すまん。VS2005についているWebBrowserは詳しくないんだ。 COMコンポーネントのMicrosoft Web Browserコントロールと、Microsoft.mshtmlというライブラリでしか 俺はできないんだ。(メソッドやら何やらがわかりやすい。) Microsoft.mshtmlは.NetFramework1.0にしかついてこんのだ。 で、このMicrosoft.mshtmlを使ったやり方で説明すると、 ・・・・・ Dim id As mshtml.HTMLInputElement = doc.getElementById("ID_user_pwd") id.value = "id" Dim pwd As mshtml.HTMLInputElement = doc.getElementById("ID_user_pwd") pwd.value = "password" doc.parentWindow.execScript("LoginLeftFormCheck()") ' LoginLeftFormCheck()を実行 pwd.form.submit() ' フォームをsubmit(これはInvokeMemberでできるとおもわれ) これでログインできる。 ゲームのスタートボタンはFlashであるために、プログラム上で操作する方法があるかもしれないが、 俺は残念ながらわからんかった。 まえ、ガンストの自動ログインツールを作成したときは、画面にブラウザを貼り付けて、 ゲームのスタートボタンが確実に見えるサイズに広げて、APIでマウスを操作するプログラムを書くという 逃げ道でやった。
407 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:52:19 ] Windowsアプリケーション学習用にC#をやろうと思っています。 Microsoft Visual C# 2008 Express EditionをSDKとSQL Serverつきでインストールしました。 しかし何をどう作っていったらいいかわかりません。 プログラム経験はPHPでWebプログラム(こちらは趣味で3年以上やっていて2ch風掲示板ぐらいのものは作れます)、 あとオブジェクト指向の勉強にJavaを少しいじった程度です。 Javaでは簡単なファイル操作から、オブジェクトの継承や例外処理など基本的な勉強しかしていません。 Webプログラムはイメージ的にわかるので、ASP.NETあたりはなんとか理解できると思うのですが、 Windowsアプリケーションとなると右も左もわかりません。 まずは何をやったらいいのでしょうか?
408 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:54:25 ] 何をやりたいの?
409 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:55:56 ] >>407 スレチこっちで質問しなおせ ttp://pc11.2ch.net/test/read.cgi/tech/1160209713/ ttp://pc11.2ch.net/test/read.cgi/tech/1208248879/
410 名前:407 mailto:sage [2008/05/23(金) 22:04:58 ] >>408 とりあえずWebアプリケーションでいうチャットやカウンターのような位置づけなものを作ってみたいです。 (ようするに簡単なものです) おそらくメモ帳のようなものになるのでしょうか? ペイントのようなものも作ってみたいですが、メモ帳に比べると難易度はあがりそうですね。 簡単なテーブルゲームなんかも作ってみたいですが、アルゴリズムの勉強はしてないので少し厳しそうです。 >>409 了解です。そちらで質問しなおします。
411 名前:390 mailto:sage [2008/05/23(金) 22:15:45 ] >>406 どうもありがとうございます。 webBrowser1.Url = new Uri("javascript:" + Uri.EscapeDataString("LoginLeftFormCheck();")); で無理やり実行してみたらfalseが返ってきちゃいました。 マウス操作も考えたんですけど、ブラウザやマウスが勝手に動く様が見えちゃいますよね。。
412 名前:397 mailto:sage [2008/05/23(金) 22:32:25 ] すいません。リフレクションを使っても取り出せるのは 型情報でインタンスの値は取り出せないのではないでしょうか? もう少しキーワード教えてください。
413 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:43:15 ] 型情報からフィールド一覧取れるだろ FieldInfoから値取得できる
414 名前:401 mailto:sage [2008/05/23(金) 22:51:20 ] >>406 いや、LoginLeftFormCheckは単に実行するだけでOK。 submitすりゃ、ログインされる。 javascriptは多分InvokeScriptでできない? マウスは勝手に動くようにみえちゃう。これは仕方ない。
415 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:23:57 ] >>411 >>409
416 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:34:10 ] ここはなにを話すスレ?
417 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:36:31 ] C#プログラマの雑談スレ
418 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:44:16 ] >>1 >(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。 C#プログラマの雑談スレなんて限定的には書いてないけど? しかもスレタイは「相談室」だぞ
419 名前:397 mailto:sage [2008/05/23(金) 23:44:32 ] FieldInfoのGetValue,SetValueでできました。 ありがとうございます。
420 名前:デフォルトの名無しさん [2008/05/23(金) 23:55:28 ] JRq8rZjk7c 鳥解析4649
421 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:04:49 ] 私怨乙
422 名前:390 mailto:sage [2008/05/24(土) 01:09:12 ] >>414 ありがとうございました。 ゲームスタートのFlashもjavascriptを呼んでいましたので直接呼んだら開始できました!
423 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:53:52 ] >>416 C#、.NET(ただし、C#を使っている前提)に関することで、 主にふらっとだとアレな話題や雑談とかのスレ と、俺は解釈してる ここで質問すること自体は悪いとは思わないが、 ふらっとの方がより適切だとも思ってる
424 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:07:26 ] ふらっとは初心者用だから。 回答者も初心者スレにいなかったら結局このスレに質問しに来るのでは? たらい回しはいかんよ。
425 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:09:08 ] 俺はふらっとが初心者用でこっちが中級者の集まりだと思っていた。 こっちでの質問はOOPとか言語仕様なりの高度な質問になる感じ
426 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:11:33 ] >>425 元の趣旨はそうだが実情は逆
427 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:44:53 ] そんなの主観的なんだからどっちだっていいだろ。 質問者が初心者と自覚した場合ふらっとに行けばいいと思うよ。 ただそれだけ。
428 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 04:57:34 ] 複数あるのは害でしかない みんなわかってるはずだ
429 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 05:05:02 ] >>424 心配無用。 どうせ皆も両方見てるんでしょ。
430 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 05:42:36 ] どっちか削るとしたら明らかに初心者用だよな。 で、もし削ったとしたら初心者隔離スレも欲しくなるよな。 ここまで言えばわかるよな。
431 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 10:55:50 ] ぬるぽ
432 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 12:40:47 ] >そんなの主観的なんだからどっちだっていいだろ。 >質問者が初心者と自覚した場合ふらっとに行けばいいと思うよ。 えてしてその主観が間違ってるから問題になるんだが。
433 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:28:08 ] オレが全部答えてやんよ だからもう喧嘩するな
434 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:44:12 ] 整数5ずつにしたいのですが……うまく言えないのですが、例えば、 96なら95、98なら100、53なら55、42なら40 と言うふうにしたいのですが、どうすればいいでしょうか?
435 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:46:22 ] C#で自作した外部アプリケーションを呼び出したいのですが、 Process process = new Process() ; process.StartInfo.FileName = "hoge.exe" ; process.Start() ; こんな風に実行することが出来るようなのですが、 外部アプリケーション側に文字列を複数与えたいのです。 その場合呼び出す側と呼び出される側はどのような準備をすればいいのでしょうか?
436 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:49:25 ] >>434 問題を定義しなおしてから来い。 >>435 Process.Start(hoge.exe,"arbitrary string");
437 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:52:06 ] 俺は>>434 の言いたい事がわかったが次にどう書いてくるか楽しみなので伏せておく。
438 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:53:32 ] >>434 int number; number = 適当な数値; if (number % 10 < 4) number = number - (number % 10); else number = number + 10 - (number % 10); 適当に今思いついたがこんなんで良いか?
439 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:58:08 ] あ、5ずつか普通に四捨五入してるわこれ
440 名前:435 mailto:sage [2008/05/24(土) 18:00:09 ] >>436 文字列を複数渡したいのですが Process.Startの第二引数はstring[]でもいいのですか? それと受け取る側はどうすればいいのでしょう?
441 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:01:03 ] >>438 ありがとうございます。 さっそく導入してみたのですが、これだとただの10ずつになってしまうのですが……。 っと書いていたら439の返事がきました。 ありがとうございます。 こういうのも四捨五入というのですか……。 勉強になりました。
442 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:02:00 ] >>440 無理。記号を決めてそれを受け取る側で改行と見なすくらいしかない
443 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:02:40 ] >>438 の使って if (number % 10 < 5) number = number - (number % 10)+5; else number = number + 10 - (number % 10); でいいんじゃね?
444 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:02:43 ] あ、ちょっといじったらできました。 もうちょっとテストして、また報告させていただきます。 本当にありがとうございました。
445 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:04:33 ] 連投失礼します。 >>443 ありがとうございます。 それでいけそうです。 これまたもう少しテストしてきます。
446 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:06:56 ] こうでしょ。 int mod = x % 5; x += mod > 2 ? 5 - mod : -mod;
447 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:08:21 ] >>442 string一つだけなのですか。 受け取る側はどうすればいいですか? 受け取る側はコンソールではなくフォームアプリケーションです。
448 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:17:35 ] >>447 スペース区切りとかで渡して、 splitで分割するなりすればいいんじゃね?
449 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:19:37 ] >>446 ありがとうございます。 >>443 さんの方法だと、きりのいい数字だとちょっとおかしくなるようでした。 446さんの方法は私程度にはどういう処理をしているのかさっぱりなのですが、 問題なく使えます。 みなさん本当にありがとうございました。
450 名前:435 mailto:sage [2008/05/24(土) 18:30:42 ] Environment.CommandLineで受け取るか、 コンソールと変わらずにエントリポイントから受け取ればいいんですね。
451 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:40:20 ] >>431 AutoNullpoOudaki gattu = new AutoNullpoOudaki(); gattu.Execute();
452 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:11:50 ] 文字列から動的にExpressionTreeやFuncを得ることって出きるん? ttp://ufcpp.net/study/csharp/sp3_expressionsample.html ここで書いてあるような子としてみたかったんだが、CodeDom.GetExpressionFromとか見あたらず、いろいろググってもそれらしいのにたどり着けず・・・ CodeDomでFuncを返すメソッドを持つクラスをコンパイルして実行して呼び出せば出来無くないんだけれどもう少しまともな方法で・・・
453 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:31:07 ] >>452 そのページにある「ソース一式」のところからソース落して、 中身の「MyMath\CodeDom.cs」の中にその GetExpressionFrom の実体がある。
454 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:32:55 ] ちなみに、そのソースの GetExpressionFrom はまさに、その 「CodeDomでFuncを返すメソッドを持つクラスをコンパイルして実行して呼び出せば」 をやってるだけ。 もう少しまともな方法、確かに欲しいよね。
455 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:47:03 ] >>453 さんくすこ。 てっきり.NET3.5以降で追加されたのかと思ってた・・・orz CocoaのようなKVCとかやるためにリフレクションからコード生成→lambdaにしてそれなりに高速にアクセスみたいなことしたかったんだが・・・ 場合によって、無理やりコンパイルでlambda変換するようにしようかな・・・ あぁ書いてて思ったが、式ツリー手動でいじくればいいのか。よくわからんがやってみるノシ
456 名前:デフォルトの名無しさん [2008/05/24(土) 20:04:19 ] Compact Frameworkでやっててもこっちで大丈夫ですか? もし適切なところが他にありましたら誘導お願いします(´・ω・`) ボタン押したらwavファイルをプログラムに埋め込んで、ボタン押されたらそれを再生させたいんですが、上手く再生されません。 hi.wavが再生させたいファイルです。 private void button1_Click(object sender, EventArgs e) { System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly(); string file = a.GetName().Name + ".hi.wav"; System.IO.Stream s = a.GetManifestResourceStream(file); SoundPlayer player = new SoundPlayer(s); player.Play(); } サンプルを見ながらこのようなソースを組んで、 プロジェクトのプロパティのリソースのところにhi.wavを追加して、 Persistenceを「.resxに埋め込まれました」に設定しました。 しかし、動かしてみると標準のビープ音しかなりません。 デバッガで見ると、sがnullのままのようで、ファイルを読み込んでいないようです。 埋め込み方が間違ってるんでしょうか・・・。 よろしくお願いします(´・ω・`)
457 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:26:10 ] >>456 SoundPlayer player = new SoundPlayer("path"); player.PlaySync();
458 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:37:51 ] メッセージとしてスウェーデン語文字を表示させたいのですが、 なぜか読み込んでくれずにエラーが起きてしまいます どうしたらよいのでしょうか
459 名前:456 mailto:sage [2008/05/24(土) 20:42:51 ] >>457 ありがとうございます。実際にwavファイル置いてパス指定して音を鳴らすことは問題なくできるんですが、 埋め込めたら良いなぁ・・・ってことなんです。 もしかして、埋め込みは無理ってことですか?
460 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:42:50 ] >>452 これがクエリ式のパーサ持ってたと思う。使い回せるかも。 ttp://www.codeplex.com/nlinq 使い方は"poorman's linq"でぐぐる。
461 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:45:46 ] >>458 取りあえずエラーとやらに付随してるメッセージを読み上げるといいよ
462 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:46:10 ] >>458 OSにスウェーデン語パックを導入しる
463 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:48:49 ] >>462 今からググってきます。ありがとうございました
464 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:09:12 ] レベルの低い質問で申し訳ありません。 出力の種類を「クラスライブラリ」としてあるプロジェクトを、スタートアッププロジェクトに設定した他のプロジェクトに参照させるにはどうすればよいのでしょうか。 そのままusingしようとしても「名前空間がない」と言われてしまいます。
465 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:12:54 ] >>464 ソリューションエクスプローラで参照したいプロジェクトを右クリックして 参照の追加 → プロジェクト
466 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:16:17 ] >>434 今更だけど、要は「5の倍数への丸め」、もしくは「丸め幅5での丸め」でしょ? 個人的には汎用的なこれを使いたいところ var y = (int)Math.Round((decimal)x / n) * n; まあ、整数型に限定してもこんなところじゃないか var y = (x + (n / 2)) / n * n; 因みに、後者はaway from zeroだが、前者はRound()のmode指定で選択可 対象が整数値で、かつ丸め幅が奇数ならどちらでも同じ
467 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:37:56 ] >>465 ありがとうございます。
468 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:54:56 ] >>456 もしかしたら、Compact Frameworkじゃ違うかもしれないけど 多分、その方法はファイルをresxに埋め込まない古いやり方。 wavファイルをプロジェクトに追加して ビルドアクションを「埋め込まれたリソース」にすれば、 その方法で鳴る筈。 んで、2005以降は、リソースエディタを使ってresxに埋め込んで、 "HI"がリソース名になったとしたら、 System.IO.Stream s = Properties.Resources.HI; SoundPlayer player = new SoundPlayer(s); player.Play(); で一応鳴る。 でも、ストリームのWAVEデーターの再生は、 GC絡みで問題があるらしい。 詳しくはこれを。 ttp://dobon.net/vb/dotnet/programing/playembeddedwave.html
469 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:05:15 ] ブロック崩しを作ったのですが、ボールが宙に浮いているときにスペースキーを押すと、 ボールが画面外に飛び出してしまうのです。どうにかなりませんか? ちなみにソースはこれ www.borujoa.org/upload/source/upload18960.txt
470 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:24:40 ] ソースを解析したうえでデバッグしてくれと。
471 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:27:03 ] >>469 ソース見て吹いたw
472 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:31:36 ] >>469 こういうifの書き方好きなの?
473 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:31:59 ] ってそもそもスレ違いじゃん
474 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:32:51 ] 何でもう消えてるんだよ。ちょっと見てみたかった
475 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:56:20 ] キャッシュ漁ったら見つけた
476 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:59:51 ] 型に格納できる値の最大値、最小値を返す関数はありますか? 例えば、unsigned intなら0か4294967295を返せる、といったような。 変数の型の範囲を超えるような値が格納されそうになった場合、エラーを出すような関数を作ろうと思っているので。
477 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:03:33 ] MaxValue/MinValueじゃ足りんのか?
478 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:19:23 ] そんなの、泣けりゃじぶんで定義して返せよ
479 名前:デフォルトの名無しさん [2008/05/25(日) 00:24:16 ] LL言語のWWW::Mechanize的なのを探してます。 C#や.NET Framework向けのwebスクレイピングライブラリはないですか? 検索してたのですが、なかなか見つからないや・・・
480 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:24:27 ] スレ違い
481 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:24:56 ] >>478 いやいや、476はMaxValue/MinValueを知った上でそういう関数が欲しいんじゃなくて、 ただ単に MaxValue/MinValueの存在を知らないだけじゃないかと。
482 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:27:41 ] 関数はまあ見逃すとしてもunsigned intなんて言ってる時点でスレ違いである事に気付こうな
483 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:28:51 ] >>479 MS は文法のゆるい HTML を機械処理するのはあまり好きじゃないみたい。 HTML2XHTML みたいなものを通して文法の正しい XML にした上で、 XmlReader やら LINQ to XML でアクセスするのがいいかと。 ↓でそういうことやってるんだけど、 d.hatena.ne.jp/uesama99/20080219/1203394007 HTML2XHTML が微妙臭い。
484 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:29:53 ] >>482 しっかり読んでなかったw それはちゃんと、「C# は C/C++ とは違いますよ」誘導してやろうよ。
485 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:52:32 ] >>477 ありがとうございます。 >>481 その通りです。低レベルすぎてすみません。 >>482 C#ではUInt32って書くんですね。ありがとうございます、勉強になりました。
486 名前:デフォルトの名無しさん [2008/05/25(日) 01:45:22 ] >>483 クッキーとか面倒なところを良きにはからってくれるのはないっぽいですね。 LLと組み合わせるしかないか・・・ GUI楽したいので.NET使いたかったけど、うまくいくかなあ とりあえうずありがとう。 いろいろ試してみます
487 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 07:57:54 ] 2005のPropertyGridについて質問 プロパティタブをいくつか追加したりしてるんだが ボタンに使われる画像の色が PropertyTab.Bitmap で retuen した Format32bppArgb の画像と微妙に違う 見た感じは大体同じなんだが、実際のRGBを調べるとほんの少しずれてたりする 何か色数の制限があるのなら、それに合わせた画像にするんだけど分かる人いる?
488 名前:456 mailto:sage [2008/05/25(日) 08:59:21 ] >>468 ありがとうございます。 ビルドアクションを「埋め込まれたリソース」には一応変更していたんですが、鳴りませんでした。 ・・・とおもったら、hi.wavが(.resxに埋め込む操作したとき)Resourceフォルダの中に入ったままビルドアクションを変更していたので、 常識的に考えて鳴りませんね。プロジェクトのディレクトリ直下に移して無事鳴りました。 あと、 System.IO.Stream s = Properties.Resources.HI; SoundPlayer player = new SoundPlayer(s); player.Play(); も、そのサイトを見つけたときにやってみたんですが、 CompactだとProperties.Resources.hiがstreamじゃなくてbyte[]を返してくるんで使えませんでした。 ・・・って思ってたんですが、 byte[] hibyte = Properties.Resources.hi; MemoryStream s = new MemoryStream(hibyte); player.PlaySync(); すればすむ話ですねo. . ...rz 昨日の数時間は何だったんだ・・・ 1日置くと急に分かったりするもんですね(´・ω・`) 本当にありがとうございました。
489 名前:456 mailto:sage [2008/05/25(日) 09:03:19 ] byte[] hibyte = Properties.Resources.hi; MemoryStream s = new MemoryStream(hibyte); SoundPlayer player = new SoundPlayer(s); player.PlaySync(); の誤りです。すいません。 あと、>>456 ではPlay()使ってますが、 特に非同期再生が必要なわけではないので、GC絡みのを回避するためにもPlaySync()を使おうと思います。
490 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 11:27:09 ] 質問です ネットの初心者向けサイトを見ながらC#をやっていたんですがそろそろきつくなってきました とくにデリゲートをイベントハンドラとして実装するところと、イテレータがよくわかりません 初心者から中級者にレベルアップするために買うべき本を教えてください
491 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:11:02 ] C#用のDXライブラリと言うものがあったので早速使ってみたのですが、エラーが出ました。 空のプロジェクトに参照をDLLを追加し、Class.csファイルを作り、メインメソッドに DxLibrary.DxLib_Init(); と書いただけなのですが、 DLL 'DxLibDll.dll' を読み込めません: 指定されたモジュールが見つかりません。 (HRESULT からの例外: 0x8007007E) と出てしまいます。 DLLはあらゆる場所に配置して試したのですが、 やはり同じようにエラーがでます。 何か特別な書き方が必要なのでしょうか?
492 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:17:45 ] DXライブラリの公式サイトで提供されてる方のC#用DXライブラリを使え 使い方も丁寧に書かれてる
493 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:19:29 ] >>492 ありがとうございます。 いつのまにか出てたのですか!? なぜエラーが出たのかは未だ不明ですが、早速使ってみたいと思います。
494 名前:デフォルトの名無しさん [2008/05/26(月) 15:17:26 ] 質問です。 2つのスレッドでそれぞれフォームを作成し表示します。 このとき、これらフォームの表示順位(重なり)を コントロールすることは可能でしょうか? なんか、デバッカ上とSetup後のプログラムで表示順がことなって メッセージボックスが隠れたりする・・
495 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:06:52 ] 構造体の中で1次元配列メンバを持つには struct A{ public fixed double b[123]; }; でいけますが、 構造体の中で2次元配列メンバを持たせるために struct A{ public fixed double b[123][234]; }; などとやってもエラーになります。 構造体の中で2次元配列メンバを持たせることは可能でしょうか?
496 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:10:31 ] 494です。自己レスします。 とりあえず以下HPを参考にし、隠れていたダイアログが表示されるようになりました。(暫定対応ですが・・) www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34347&forum=7&start=0 端的に言うと、複数のアプリをダブルクリックしたときと同じで、 後から立ち上げた方が優先されて表示される。のと同じみたいです。 お騒がせしました。
497 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 17:17:20 ] >>495 fixedである以上は無理
498 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:17:56 ] 質問です。 クラスの配列をインスタンス化するのにforを使って次のようにやってるんですが、 もしもっとスタンダードな方法があったら教えてください。 for文の中でインスタンス化すると、スコープから出ると消えちゃうような感覚がして気持ち悪いんです。 classA{} A[] a = new A[n] for(int i = 0; i < n; i++){ a[i] = new A(); }
499 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:20:50 ] 狂っているその感覚を修正する事をお勧めします。
500 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:21:08 ] それで十分スタンダード > for文の中でインスタンス化すると、スコープから出ると消えちゃうような感覚がして気持ち悪いんです。 この感覚を何とかしたほうがいい
501 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:23:51 ] もしかして A[] a = new A[n] ← classA型の変数を宣言 a[i] = new A(); ← 実際に代入 つまり、for文の中では代入行為しかやってないから消えない、ということですか?
502 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:29:29 ] GCのアルゴリズムを理解した方がいいよ。 GCってのは「参照できる限りは消えない」 例えばnが1なら、forを抜けても a[0]を参照できるでしょ? で、参照できるので消えない。
503 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 18:34:42 ] 了解しました。勉強します。
504 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:18:27 ] というかスコープを勉強したほうがいいだろ
505 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:20:45 ] スコープは割と正しく理解出来てるような発言に見えるけど?
506 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:30:39 ] GCとは全く関係ないだろ。 スコープの話をしてると思うんだが。
507 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 20:26:57 ] コンストラクタでフィールドにインスタンスを代入したら不自然か
508 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:14:09 ] なんでGCが出てきたんだw
509 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:16:05 ] ↑遅れてきたアホ
510 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:36:55 ] 確かにマオは四川省だったから ヤバスwww
511 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:37:37 ] スマソ、誤爆った
512 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:41:06 ] newしたものはアクセスできるなら消えない
513 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:18:08 ] >>505 できてないできてない。
514 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:46:13 ] .NETのGCはスコープより早く働くことがあるから要注意なんだよね。たとえば static void Main() { Hoge hoge = new Hoge(); hoge.Foo(); // hogeが参照されるのはここが最後 // 時間のかかる処理 } hogeがまだスコープ内にあるにもかかわらず、時間のかかる処理の最中にGCされることがある。
515 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:50:36 ] ↑あほ?wwwwww
516 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:53:20 ] そんなものに注意は不要
517 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 01:00:18 ] ttp://dobon.net/vb/dotnet/process/checkprevinstance.html ここの真ん中くらいの「補足:ニュースグループ・・・」あたりにその例が出てる。 KeepALiveを使ってる箇所。
518 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 01:14:44 ] これもスコープ終了以前にGCされて落ちる例だね。 「ふらっとC#,C♯,C#(初心者用) Part22」 ttp://pc11.2ch.net/test/read.cgi/tech/1197802312/850-877 >876 名前: 875 [sage] 投稿日: 2008/01/08(火) 00:46:17 >>>850 >あーもしかしてと思ってと思って>>875 のコードから >GC.KeepAlive(func); 抜いたら確かにAccessViolationExceptionおきるね。 >言ってるのはこれのことじゃろか。 > >P/Invokeにデリゲートを渡す場合、そのデリゲートの寿命管理は.NET側の責任。 >実は元のるびま記事にも書いてある。 >ttp://jp.rubyist.net/magazine/?0021-RubyWithCSharp#fm05
519 名前:498 mailto:sage [2008/05/27(火) 01:56:25 ] もしかして>>501 の理解も間違いだらけなんでしょうか? もう少し詳しく教えていただけませんか。
520 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 02:21:58 ] >>498 はGCと関係ないよ。 厳密には関係なくないとしてあえて言うと、 new A[n]したオブジェクトはA[] aの寿命(参照が外れるまで)生きてる。
521 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 05:51:20 ] 初歩的なことだとうじゃうじゃ煽りレスがついたりするのに ちょっと難しい質問だとなかったかのようにスルーするお前らワロスw
522 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 08:25:46 ] >>521 最近はROM主体だが、お前の発言が一番醜く見える。 そんなに無視されたのがくやしいのか? ちなみにどの質問なのか示してみ。
523 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 08:56:45 ] どこが難しいの?直前のネタはフラットでもスルーだろ・・・C#関係ないし
524 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:04:01 ] >>518 それはスコープが終了するとGCされるから、プログラマの責任でスコープを終了させんな、って話だ。
525 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:12:10 ] >>522 わざわざROM主体とか前置きしないとレスできないのかよw
526 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:14:26 ] ROM主体と言うのを何か言い訳に使ってるなら >>525 のレスは理解出来るが、別に言い訳に使ってないじゃん まあ、無駄な前置きではあるけど
527 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:40:12 ] >>526 まあ、第三者を装ってるあたりはみっともないな
528 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 10:23:17 ] >>524 それはるびまの記事の話だろう。 あのスレの>>875 はこんなコード。GC.KeepAliveを抜いたらクラッシュする。 static void Main(string[] args) { VALUE state = 0; Ruby.ruby_init(); const string funcdef = "def foo\n" + "s=\"FOO\"+nil\n"+ "end"; Ruby.rb_eval_string_protect(funcdef, ref state); VALUE hoge = Ruby.rb_intern("hoge"); Ruby.CallbackArg0 func = arg => Ruby.rb_funcall(Ruby.Qnil, hoge, 0, 0); VALUE result = Ruby.rb_protect(func, Ruby.Qnil, ref state); GC.KeepAlive(func); }
529 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:20:13 ] アンマネージな世界に渡したデリゲートを安全に保持しとくには アンマネージ側で不要になるまでGC対象にならないようにしとかなきゃならない。 てだけの話?
530 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:41:36 ] >>529 そういうこと。 他にも、インライン展開されたコンストラクタが完了する前にファイナライザが実行されることすらあるよ。 この場合もアンマネージな世界のハンドルの早すぎる解放であぼんする場合がある。
531 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 13:44:19 ] >>529 9割9分そういう理解でOK。>>514 もアンマネージなmutexやロックのためのファイルを 開いたままにする場合などに影響が出る。 アンマネージが関係しないケースはまれなのだが、なぜかそのレアケースが、 MSDNに載ってたりする。サンプルソースは2種類あるが最初のほう。 msdn.microsoft.com/ja-jp/library/system.gc.keepalive (VS.80).aspx
532 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 14:44:45 ] 非同期ゲリゲートの動きを止めたいときはどうすればいいですか?
533 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 15:07:42 ] >>532 フラグやEventを使ってスレッド自身にそうさせるのが基本。
534 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:06:12 ] 関係ない話題を知ったかでひけらかすより質問に的確に答えてあげたら?
535 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:10:55 ] いったい何の話だ?
536 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:12:20 ] すっげーすぐにレス来たww お前が関係ない話してレスが流れたんだろ。 自分で見返せ。
537 名前:535 mailto:sage [2008/05/27(火) 16:19:20 ] >>536 えーと、俺はこのスレには初めて書いたものだが 流れがわからんからアンカーつけてくれないか? どの質問の話かわからないから、答えようが無いわ。
538 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:22:12 ] >>531 そこのサンプル例1の解説が不正確で、プロパティの取得処理が 時間のかかる処理のためデストラクタが先に動いてしまうと読めるがそれは誤り。 もしそうであれば.NETのGCなんて安心して使えない。 それはデストラクタの使い方に重大な欠陥があるために発生する。 具体的にはExampleクラスのデストラクタで他のクラス、 この場合hashValueが参照を持つArrayクラスの後処理を書いたらいかんということ。 マネージドだけの場合は基本的にKeepAliveのことは考えなくてよい。
539 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:57:12 ] デストラクタが呼ばれるときには、既にメンバは解放された後なんだっけ?
540 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:11:04 ] 微妙に違う。 ファイナライズメソッドの実行順序には何の保証もないという話。 だと思うけどリンク先見てないから確かなことは分からん。
541 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:11:27 ] >>539 メンバに参照型を持つ場合でも、オブジェクトとして独立してるので デストラクタが動くタイミングやメモリが回収されるタイミングは不順。 順番が必要な場合はDispose(true)のパターンを使う。
542 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:13:17 ] あいや、ずっと前に読んだことあるはずでかすかな記憶によると 解放された後っていうか自分で解放してんじねーかよw って話だったかも…
543 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:48:04 ] >>537 半年ROMれ。
544 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 18:08:24 ] >>543 それはない
545 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 19:47:37 ] 一匹キティが沸いてんな・・・フラットじゃないのに
546 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 21:16:53 ] フラット!フラット!!
547 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:24:52 ] 質問です。 フォームを2つ使うアプリを作っています。 メニューはメイン側にはありますが、サブ側は何もありません。 で、サブ側にフォーカスがある時に、メイン側のメニューのショートカットを叩いても、 フォーカスがサブ側にあるため、イベントが発動してくれません。 出来ればこのショートカットを共有したいと思っています。 サブ側でもOnKeyDownなんかで同じ関数を呼ぶようにすれば可能といえば可能ですけれど、 あまりにも美しくないなと思ってます。何か上手い方法は無いでしょうか?
548 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:38:50 ] ほかのウィンドウのイベントが別のウィンドウのショートカットをたたくというのは美しくないだろ。 ルートのフォームまでで処理されなかったイベントがアプリケーションのハンドルで処理されるというのが正しい形だと思う。
549 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:47:27 ] サブフォームでメインのOnKeyDown呼べばいいじゃん
550 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:50:05 ] 返信ありがとうございます。 >>548 そもそもメインのフォームでイベントを処理している、ってのがおかしいってことですかね? メインにしろサブにしろ、フォームはイベントを発行するだけで、 その実際の処理はアプリケーション級のオブジェクトがハンドルするわけですか。
551 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 07:35:33 ] MDIにしる
552 名前:デフォルトの名無しさん [2008/05/28(水) 11:10:54 ] 2重起動を防いで、後から起動された方に渡されたコマンドライン引数を 最初に起動された方に渡したいです。 ttp://dobon.net/vb/dotnet/process/checkprevinstance.html ここにVB.NETでのやり方が書いてあり、C#でも似たようなことは出来ると思ったんですが Microsoft.VisualBasic.ApplicationServices これが存在しないエラーというが発生しました。 C#だと別のプロセスにデータを渡したりって事が無理なんでしょうか?
553 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:20:52 ] 参照の追加
554 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:21:18 ] それでやるなら該当のdll参照すれ
555 名前:デフォルトの名無しさん [2008/05/28(水) 11:31:31 ] >>553 >>554 参照追加したらありました。 たんにusingを記述するだけじゃダメだったんですね。 これでなんとかなりそうです。 ありがとうございました。
556 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:37:44 ] ttp://blogs.dion.ne.jp/anis7742/archives/6905607.html ここでも聞いてるやついるな。 当たり前すぎて書かないからなー、普通。
557 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 14:13:09 ] なんつう偉そうなコメントだw
558 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:16:03 ] なぜSystem.Arrayクラスから派生クラスを作れないんですか?
559 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:17:31 ] CLR的に配列は特別なオブジェクトだから
560 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:55:06 ] System.Arrayクラスから派生クラスが作れると何の不都合があるんですか?
561 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 22:15:37 ] CLRべったりの低レベルで特殊な実装になってるから派生したところでどうせ何もできないよ っていうかSystem.Arrayなんかそんなによく使うか? IList使えよ
562 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 22:20:42 ] CLR自体、StringとかArrayとか、その内部構造自体に 依存した最適化がかかってるからだ、 ってどっかにあった希ガス。
563 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:14:13 ] C++だとコンストラクタは出来るだけ初期化のみにした方がいいけど、 C#では初期化以外にもメソッド呼び出したり処理を始めちゃってもいいの?
564 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:15:32 ] いいよ
565 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:30:20 ] いかんよ
566 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:51:19 ] C++でコンストラクタでは継承先でオーバーライドされる仮想関数は呼べないんだったっけ C#では出来るよ
567 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 11:03:33 ] >>563 してもいいけど、内容によっては立ち上がりが異常に時間がかかるプログラムになる。 その場合、最小限の初期化コンストラクタとクラス初期化メソッドを作る場合もある。
568 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 11:53:48 ] visual studioみたいなGUIのソフト作りたいんですけど そのためのサンプルとか無いでしょうか? 具体的には フォームにメニューがいくつかあって ツールボックスがあって 左側にはエクスプローラ的な表示があって 下側にはテキストのログウィンドウがあって 残りの領域にはMDIの子フォームを生成するようなGUIです。 いかがでしょうか。
569 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 14:01:25 ] Visual StudioというGUIのサンプルがそこにあるではないか。
570 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 14:09:14 ] Visual Studio のドッキングを自前でがんばったらマジで死ねるなw
571 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 14:14:20 ] Visual Studio以上の物ができたら教えてね 試してあげるから
572 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 17:24:15 ] DockPanelSuiteマジオススメ
573 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 18:41:08 ] MonoDevelopのソースじゃ参考にならんか…
574 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 18:43:22 ] >>572 すげーなこれw
575 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 19:49:33 ] >>572 凄いが、これを駆使したプログラムを少人数で作る気になれない。
576 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 20:04:01 ] ttp://www.codeplex.com/sdock made in Japan!
577 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:52:40 ] WinFormsか・・・ WPF版がほしい。
578 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 22:24:21 ] >>577 お前はこっち池カス WPF(XAML,XBAP,.NET3.5)GUIプログラミング pc11.2ch.net/test/read.cgi/tech/1211453941/
579 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 05:22:08 ] C#からWin32APIを使って子プロセスを起動し、 Win32APIのCreatePipe, WriteFile, ReadFileを用いてプロセス間通信をしようとしています このとき、立ち上げた子プロセスはコマンドを標準入力から読み込みんで処理をし、 結果を標準出力へコマンドごとに出力し、入力にEOFが来たら終了、みたいなプログラムです ここで、子プロセスがEOFを認識してくれず、子プロセスが終了してくれません なにかいい方法があるのでしょうか? それともWin32APIの質問ということでよその板の方がいいでしょうか? やっていること: ハンドルを用意 親プロセスが無名パイプを作成する パイプの一端のハンドルAを継承可能にする STARTUPINFO構造体のhStdInputに継承可能にしたパイプのハンドルAを指定 CreateProcess() 継承可能にしたパイプのハンドルAを閉じる パイプの閉じていない方のハンドルBにWriteFile() ハンドルBを閉じる ←ここで子プロセスに終了してもらいたい よろしくお願いします
580 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:02:32 ] そもそもWin32API使う意味がいったいどこに?
581 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:08:55 ] C++でパイプを使った経験があったのでパイプをやろうとして、 C#でパイプをやるためにWin32APIを使うことにしました
582 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:18:59 ] ProcessStartInfo.RedirectStandardInput Process.StandardInput この辺使う
583 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 06:59:47 ] なるほど 他プロセスの標準入出力を通した通信は明示的なパイプ以外に用意されていたのですね 自分で調べてた限りでは見つかってなかった情報なのでとても助かりました 試してみます ありがとうございました
584 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 10:37:20 ] string str = File.GetLastWriteTime(Path).ToString(); このようにファイルの最終更新時間を取得すると、 そのファイルのプロセスが使用中のままになるのですが、 CloseやDisposeのようにすぐに開放させるにはどうすればいいのでしょうか?
585 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 11:06:44 ] ならんが
586 名前:584 mailto:sage [2008/05/30(金) 11:10:07 ] すみません。 File.GetLastWriteTimeのせいじゃありませんでした。 File.GetLastWriteTimeタンごめんんささい。
587 名前:File.GetLast mailto:sage [2008/05/30(金) 22:49:58 ] んもー
588 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:36:30 ] 何言ってんだお前らは?釣りか? | 問 1 |(ア) (イ) (ウ) (エ) (オ) |D D D D D |C C C C C |B B B B B |A A A A A |@ @ @ @ @
589 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:37:34 ] 誤爆りました。スマソ
590 名前:579 mailto:sage [2008/05/31(土) 05:59:48 ] アドバイスいただけた方法でうまくいったので(ありがとうございます)報告します ちょっとはまった点としては、 改行コードをWriteしてもフラッシュされない →出力がほしい時はちゃんとフラッシュ 子プロセスのStdinに対するエンコーディングはProcessStartInfoから設定できない →StandardInput.BaseStreamを取得して新しくStreamWriterを作る ぐらいでした 当初の問題だったEOF云々は、Process.StandardInputのストリームを閉じると 問題なく処理されました 求めていた処理を考えていたやりかたよりずっと簡単に得られたので大満足です
591 名前:デフォルトの名無しさん [2008/05/31(土) 17:29:19 ] 今、とあるゲームの画面の各部をキャプチャして画面を認識し、指定した部分をクリックしたり文字を送ったりするプログラムを作っています。 VisualC#のデバッグモードで動かしていると、画面上の指定部分をキャプチャする関数の中で使っている、Graphics.GetHdc()の部分で、 「ArgumentExceptionはハンドルされませんでした。 使用されたパラメータが有効ではありません」 のメッセージがでて止まってしまいます。10回に1回くらいの頻度かな。 ローカル画面で変数の値をチェックしても、キャプチャ範囲に異常な値は無く(bmpのサイズなど正常)、何でこうなるのか心当たりがありましたら指摘してもらないでしょうか。 #複数の呼び出し元から、この関数が同時に呼び出されているときにこんなことおこるのかな・・・? ちなみに、キャプチャやってる関数を下に貼り付けてみます。 ----------- public Bitmap CapturePartFromA(int[] capval) { //capval[] はキャプチャ範囲を収めた配列。ここでは[3]と[4]のみ利用 Bitmap bmp; //座標系を変換する関数の戻り値保存用 int[] xxx = new int[4] { 0, 0, 0, 0 }; IntPtr hWnd = FindWindow("A Game", null); RECT winRect2 = new RECT(); GetWindowRect(hWnd, ref winRect2); //座標を変換する関数(クライアントの原点←→デスクトップの原点) xxx = ConvertCoordinates(capval); bmp = new Bitmap(capval[3], capval[4]); Graphics g = Graphics.FromImage(bmp); IntPtr hDC = g.GetHdc(); //←ここで 例外頻発 IntPtr winDC = GetDC(hWnd); BitBlt(hDC, 0, 0, bmp.Width, bmp.Height, winDC, xxx[0], xxx[1], SRCCOPY); g.ReleaseHdc(hDC); g.Dispose(); ReleaseDC(hWnd, winDC); return bmp; }
592 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:44:08 ] >>591 チートスレ池
593 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 19:41:13 ] MMORPGの自動プログラムを作ってどうする、それほど他を出し抜きたいのか? こんな所に来るな。
594 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 22:52:58 ] C# = D♭
595 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 15:20:56 ] >>591 評:もっとオブラートに包んだ質問のやりかたを覚えましょう。
596 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:22:52 ] エロシーンまだ?
597 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:27:52 ] せめて「GUIのテストを自動化したいです」位のうそをつく常識を持て
598 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:48:59 ] HttpWebRequest使ってゆうちょダイレクトのサイトから振り込み状況を確認するアプリ作ってるんだけど、 誰かできた人いる? UserAgentとかいじってもなぜかはじかれる。 同じアプリでほかのhttpsサイトとかはログインできるんだけどなぁ。
599 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 20:02:32 ] いません
600 名前:591 [2008/06/01(日) 20:49:22 ] ここで知恵ある人いるかと思ったのですが・・・残念。 自助努力するしかないですね。 どうもでした。
601 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 20:49:25 ] なぜかって、なんのエラーで帰ってきてるの?
602 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:21:28 ] UDP通信で、C#のクライアントにVC++のCプログラムからソケットでメッセージを送って表示 しているのですが。漢字が正しく表示できません。何かのコード指定だと思うのですが、 探してみたのですが見つからず。よろしければ教えてください。 C++の手順 WSAStartup(MAKEWORD(2,0), &wsaData); sock = socket(AF_INET, SOCK_DGRAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(XXXXX); // 送信先のポート番号 addr.sin_addr.S_un.S_addr = inet_addr("XXXXXXXX"); // 送信先のIP sendto(sock, str2.c_str(), str2.size(), 0, (struct sockaddr *)&addr, sizeof(addr)); closesocket(sock); WSACleanup(); 必要であればC#受け側も出します。 ちなみにc++側のプロジェクトの文字コードを有る分変えても変わりませんでした。
603 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:25:33 ] C#側も書こう
604 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:26:42 ] 文字コード意識せずにネットワークとか 大方StreamReaderをEncoding未指定でnewしてんだろ
605 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:32:39 ] 技術ある人はゆうちょダイレクトにログインするプログラムをC#でHttpWebRequestつかって組んでみてほしい。 思いのほかはまるよ。
606 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:33:57 ] >>601 サーバー側のエラーで帰ってきてログイン不可能。 エラーコードが書いてあるけど、意味がわからないので対応が難航してる。
607 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:36:26 ] >>606 (=605) そのエラーコードを書けってことじゃないのか? イミが分からないとか、技術ある人は作ってみ?とか 根本的にダメダメwww
608 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:38:18 ] サーバー側(cgi)のエラーコードなんてC#とまったく関係ないから書かなかっただけだが。
609 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:40:27 ] >>608 オマエには無理って事で終了
610 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:42:59 ] TP1/Webのエラーコードっぽいけどな。 マニュアルある人ならわかるかもしれん。 今ゆうちょダイレクトメンテ中でエラーコード再取得できなかった。
611 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:43:26 ] >>609 お前には聞いてないってw
612 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:45:14 ] >>603 >>604 の指摘でC#側を見て下記の点ではないかと思い enc = System.Text.Encoding.UTF8; // enc = System.Text.Encoding.Unicode; // enc = System.Text.Encoding.BigEndianUnicode; localPort = XXXXX; udp = new System.Net.Sockets.UdpClient(localPort); コメント部分を追加してみましたが変えましたが、半角英数もまともに表示できなかったです。 元々はUTF8でした。 何がいけないのだろう?
613 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:45:51 ] 逆ギレw
614 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:47:03 ] 技術もないのにあおるだけのアホは放って置いてできる人よろしく!
615 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:50:06 ] >>614 ここで聞く前に、先ず質問の仕方を勉強してきてね
616 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:51:20 ] だなw
617 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:52:55 ] >>615 ,616 キメェw
618 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 22:55:16 ] ゆうちょダイレクトは特に妙なところはなかったように記憶しているけど、 どこでひっかかってるの? 今確認しようとしたら、ちょうどサービス停止中だな。
619 名前:デフォルトの名無しさん mailto:age [2008/06/01(日) 23:03:10 ] C# 側のコードです。 どのコードを指定しても正しく表示されなかった。orz System.Net.Sockets.UdpClient udp; private Button button1; System.Text.Encoding enc; enc = System.Text.Encoding.UTF8; // enc = System.Text.Encoding.UTF7; // enc = System.Text.Encoding.ASCII; // enc = System.Text.Encoding.Unicode; // enc = System.Text.Encoding.BigEndianUnicode; localPort = XXXXXX; udp = new System.Net.Sockets.Udp System.Net.IPEndPoint remoteEP = null; byte[] rcvBytes = udp.Receive(ref remoteEP); string rcvMsg = enc.GetString(rcvBytes); udp.Close(); バッファーを見たら、シフトJISが送られてくるようでした。 わからない…orz
620 名前:デフォルトの名無しさん mailto:age [2008/06/01(日) 23:05:29 ] 一部切れていました。 udp = new System.Net.Sockets.UdpClient(localPort);
621 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:08:29 ] Shift_JISで送られてきてるのにUTF-8でデコードとかおかしいと思わないか?
622 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:11:50 ] 思わないでーす
623 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:17:29 ] なんか、荒らされてるな。 IDない板だから、釣りや煽りに反応するのはやめましょう。 質問者の暴言は、たいてい騙り。 もちろん、ときどきとんでもない質問者もいるが、いずれにせよ放置で。
624 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:19:15 ] 技術ある人に作れって時点でネタだろ
625 名前:デフォルトの名無しさん mailto:age [2008/06/01(日) 23:23:40 ] >>620 すみません、どの記号がどの文字コードかの知識が不足しています。orz
626 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:55:12 ] とりあえず、ゆうちょに不正アクセスしてる奴がいると通報しとくか。 3人くらいで通報すれば目付けられるから
627 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 01:27:36 ] 何が不正?
628 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 06:31:07 ] .Text.Encoding.GetEncoding(932)
629 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 06:59:26 ] >>628 出来ましたありがとうございます。
630 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 08:16:51 ] とりあえず、ゆうちょにログインも出来ないアホはほっとけよ
631 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 12:59:43 ] ゆうちょの件一晩頭冷やして考えたらできました。 お騒がせしました。
632 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:09:14 ] >>631 >>615
633 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:35:31 ] 結局何がまずかったの?
634 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:39:21 ] 態度
635 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 15:04:41 ] >>634 いや、頭だろ・・・
636 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:46:07 ] そもそも質問してないだろ 意外とはまるからやってみぐらいの勢いだったんだが。 それを勘違いしたこまったちゃんが質問の仕方が悪いだの、態度が悪いだのってこんな匿名掲示板で言われてもなw
637 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:48:37 ] >>636 ヨチヨチwww
638 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:51:25 ] >>636 明らかに誰か作って教えてくれってスタンスだったけどなw ヨチヨチwww
639 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:55:30 ] それはそうと、ゆうちょ興味あったら挑戦してみ。 興味なかったらいいけど。
640 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 19:57:56 ] ゆうちょダイレクトのアカウントなんて普通持っとらんがな(´・ω・`) 嵌るとかは単純に質問者の技術力不足だと思う
641 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:16:54 ] そうだね。 俺はそもそも技術者じゃないから技術力不足は認めるよ。 ネットショップを経営しててそれに必要な入金チェックをちょっと作ってみようかなって思っただけだし。
642 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:24:42 ] つ Python 無理にC#を使う必要性はない。
643 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:32:46 ] PythonってWinアプリ簡単に作れるの?
644 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:35:08 ] うん。GUIを扱うライブラリがあるし、IronPythonを使えば.netも使える
645 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:36:30 ] ゆうちょ房のスレ荒らしw
646 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:47:33 ] なるほど。 Python調べてみよう。Excelファイルいじくれるライブラリもあるといいけど。 C#始めて1ヶ月だけどフリーで開発環境まで全部まとめてインストールできるのが楽ではじめたんだよね。 今度は今手作業で集計してるバイトの勤怠管理でも作ってみるか。
647 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:08:48 ] ゆうちょが出てきてからスレの雰囲気がすごく悪くなった
648 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:21:13 ] 過去スレ読んだが同じようなもんだぞ ゆうちょに粘着している奴が悪くしてんじゃね?
649 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:14:43 ] >>648 ヨチヨチwww
650 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:21:49 ] なんかヨチヨチレスしかできないかわいそうなやついるな
651 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:52:27 ] なんで技術者、学生以外でこんな板見てんだか・・・
652 名前:デフォルトの名無しさん [2008/06/03(火) 02:16:25 ] 初心者スレで同様の質問をしたのですが、相手にされなかったのでこちらで再度お聞きします。 ListViewのdetail表示時に行間を広くするにはどうしたらいいのでしょうか?
653 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 02:42:12 ] ListViewItemのStyleあたりで設定できなかったっけ? 出来なかったらごめん。
654 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 09:19:23 ] ImageList使う
655 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 12:20:34 ] お前には無理だからさっさと諦めろ。
656 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 13:35:14 ] >>652 >初心者スレで同様の質問をしたのですが、相手にされなかったのでこちらで再度お聞きします。 馬鹿じゃないの? まじめな話。
657 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 14:07:08 ] UserControlを継承したクラスを作って クリックされた箇所に丸印を描画するようなプログラムを作るとしたとき。 Click()イベントで、クリックされた箇所を記憶し Invalidate()でPaint()イベントを呼び出してクリックされた箇所を描画する。 という動きになるのでしょうか?
658 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 15:01:12 ] はい
659 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 15:19:56 ] フォームエディタで上にコントロールを乗せないなら、 UserControlじゃなくて、ただのControlからの継承でいい。
660 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 17:57:36 ] >>658 >>659 どうもありがとうです。 ところで、趣旨が変わるんですが 折れ線(複数)グラフを書きたいのです。 ひとつの表示窓に複数のラインを書きたいのです。 そのライン単位でオブジェクトにしたいのですが、 (1)そのラインオブジェクトはControlから派生させて自分でライノブジェクト自身で描画させるべきでしょうか。 (2)それとも単なる(Control派生ではなく)オブジェクト化して、親表示窓Controlに個別に描画ルーチンを呼ぶ形にするべきでしょうか? 一般的にどうなのかなと思いまして。 (1)だったら、表示窓側の親オブジェクトは特に何も考えずに子が思いのままに描画する。 と思っていたのですが、背景処理が手間かと思えてきました。 子に当たるラインオブジェクトを描画すると親部分を上書きするからです。 リージョンを切れば親の描画部分を塗りつぶさなくても描けそうですが、折れ線なのでPATHが複雑になりすぎるかと思います。 (2)だったら特に背景塗りつぶし過ぎに関しては何も考えなくてよいのですが、 Paintルーチンで子オブジェクトにGrapicsオブジェクトを渡すサブルーチンコール形式になると思うのですが、なんだか嫌なのです。 一般的にこういうことをやりたい場合にはどうしますか? 変なことを言っているようだったら指摘してください。
661 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 18:02:28 ] 拡張性を考えれば当然後者だろ
662 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 19:57:03 ] WPFなら前者だね
663 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 20:56:09 ] Excel使え
664 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:37:46 ] どこかにチャートコントロールあったはず
665 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 21:39:16 ] ZedGraphとか
666 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:37:23 ] ZenGraphってスクロール機能つけられる?
667 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:45:33 ] 便乗で質問なんですが ZedGraphとかNplotを仕事(商用)として使ってる人いますか?
668 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 23:25:12 ] ListViewの編集はなんで先頭のカラムしかダメなの? 面倒だね。
669 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 00:59:59 ] WPFなら自由自在
670 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 01:18:50 ] いやそういう話じゃなくて。
671 名前:660 mailto:sage [2008/06/04(水) 10:13:48 ] 皆さま。 ZenGraphとかNplotとかあるんですね。 これらを使うかどうかはともかく、これらの実装を参考にさせてもらいます。 どうもありがとう。
672 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:17:36 ] Personクラスの派生クラスとして Man,Woman,Noneを考えます。 Man,Woman,NoneはPersonクラスのstaticなメソッドを介して生成されるものとします。 Man,Woman,Noneのコンストラクタのアクセシビリティをそれぞれ public,protected,privateにしております。 publicなManは生成されます。 protectedなWoman,privateなNoneは生成できません。 こういうときはコンストラクタのアクセシビリティをinternalにすればいいようです。 こういうinternalの使い方は正しいでしょうか?
673 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:20:56 ] クラスライブラリを作ってるなら全然アリ 単一プロジェクトなら無意味
674 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:29:34 ] 他のアセンブリに公開するつもりがないならinternalでいいんじゃね
675 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:49:20 ] Man,Woman,Noneクラスは外部に見せる必要がないならこういう手もある。 やりたいこととは違うと思うがクラス自体を見えなくすればコンストラクタの隠蔽は不要になる。 public enum PersonType { Man, Woman, None }; public class Person { public static Person GetInstance(PersonType x) { switch (x) { case PersonType.Man: return new Man(); case PersonType.Woman: return new Woman(); default: return new None(); } } private class Man : Person { public Man() {} } private class Woman : Person { public Woman() {} } private class None : Person { public None() {} } } class Startup { static void Main() { Person man = Person.GetInstance(PersonType.Man); Person woman = Person.GetInstance(PersonType.Woman); Person none = Person.GetInstance(PersonType.None); } }
676 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:53:36 ] C++から入ると、friendが無いのがちょっと不便に感じるね。
677 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:56:41 ] friendは邪悪だからなくていいよ。
678 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:22:41 ] partial使えば内部型でもファイルを分けて書けるよ
679 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:31:51 ] >>676 主にテスト用途だけどFriend Assemblyってのがある。 通常はprivateな型やメソッドをテストするのに使う。
680 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:57:45 ] >>675 コレって変だと思うのはオレだけ?
681 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:03:44 ] お前だけ Comparer<T>.Defaultとか例を挙げたらキリがない
682 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:10:23 ] ああすまんComparer<T>.Defaultは違うね Stream.Null(実際の型はStream+NullStream)とか
683 名前:デフォルトの名無しさん [2008/06/04(水) 23:40:00 ] >>680 君だけではないよ。 Factoryってこうやらないだろ?
684 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 23:59:22 ] XmlReader.Createとかあるでしょ 一応MS的にはこういうのも「ファクトリメソッド」と呼ぶらしい
685 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 00:09:09 ] どこが変だとか、どうあるべきかとか書いてくれないと答えようがない GetEnumerator()の実装例でyield returnを使わないケースで内部クラスを使っている なおC#の内部クラスはJavaのstaticな内部クラスと同等だから誤解のないよう
686 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 01:55:39 ] というか基底クラスであるPersonクラスが具体的な派生クラスを知っているのが不自然。 気持ち悪い。
687 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 03:35:19 ] 既定クラスがBuilderを兼ねてるのがいやだったらPersonとファクトリーを分離するのは問題ない。 ただ、拡張可能なようにBuilderやStrategyパターンで作ってゆくと、 クラスやインターフェイスの数がすごいことになるから過剰な汎用化には反対したい。
688 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 04:39:40 ] 突然質問してごめんなさい。 皆さんはC#とかってどうやって勉強してるんですか? こないだはじめたんだけど、資料が少なくて、学習がすすみません。 いい勉強法とかオススメの書籍があれば教えてください。 ちなみに今は実際にソフトウェア作ってみて、わからないことがあったら調べて・・・って感じです。
689 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 07:52:47 ] C#で資料が少ないとか言ってたら何も覚えられん。
690 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 08:05:32 ] MSDNに全て有る
691 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 08:47:31 ] >563-567 >690 の質問とかぶると思うのですが。 オープンなC#ソースでストラテジーパターンを実現しているらしき所を見かけたので、 newのコストについて教えてください。 【ソース概要】 ・クラスConcreteAとConcreteBは同じParentStategyクラスの派生。 ・それぞれのクラスには違う条件でこの方法で状態遷移する。 void override update(){ ・・・ if(hoge<hage) {parentStategyInstance = new ConcreteA()} else {parentStategyInstance = new ConcreteB()} ・・・ } ・update()は頻繁に発生する。 ・各コンストラクタはメンバを一つ更新する一行のみ。 ・ガベコレでメモリ使用量のコストが無いことは解ったつもり。 C++ならキャスト一択の所と思うのですが、JITのおかげでこの書き方が 実は最高にスマートって事になっちゃいないか知りたいんです。 ※JITのおかげさまで、簡単にベンチテストが作れない事が問題なんです>< ※オブラートに包んだ所にミソがありそうなら、どんどん公開します。 O!S!I! O!S!I!
692 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:07:15 ] Stategy自体選択ミスに1票
693 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:08:56 ] switch最強伝説を更新するんですか? ('A`) >692
694 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:14:22 ] C#自体の選択ミスに1票
695 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:19:38 ] C#のEnum型とswitchの相性の良さは無敵だぉ!! デザパタ厨涙目! プギャー(^0^)9
696 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:27:05 ] >695 私もそう言う事が聞きたかったので、ありがとうございました。 是非参考になるサイトをご紹介頂きたくお願い致します。 m(_ _)m
697 名前:デフォルトの名無しさん [2008/06/05(木) 09:28:56 ] ペイントを操作して、絵を描こうとしているのですが、 ドローイングエリアをうまくクリックしてくれません。 どなたか、どうすればいいのか教えていただけませんでしょうか? [StructLayout(LayoutKind.Sequential)] public struct RECT { public int left; public int top; public int right; public int bottom; } const uint WM_LBUTTONDOWN = 0x201; const uint WM_LBUTTONUP = 0x202; public void RemotePaint() { IntPtr hWnd; string sClassName = "MSPaintApp"; string sWindowText = null; sClassName = "AfxFrameOrView42u"; sWindowText = null; hWnd = FindWindowEx(hWnd, IntPtr.Zero, sClassName, sWindowText); SetForegroundWindow(hWnd); RECT winRect = new RECT(); GetWindowRect(hWnd, ref winRect); System.Threading.Thread.Sleep(1000); PostMessage(hWnd, WM_LBUTTONDOWN, 100, 100); System.Threading.Thread.Sleep(500); PostMessage(hWnd, WM_LBUTTONUP, 100, 100); }
698 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 10:39:13 ] >>566 サブクラスのコンストラクタが動く前に オーバーライドされた仮想関数が呼び出されるわけで ちょっと気持ち悪いですね。
699 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 10:41:09 ] >>691 あまりにも頻繁にUpdateが呼ばれるならやや効率は悪いだろうな。 でも多分誤差レベル。 大抵ほかの処理でそれ以上にメモリ使ってるだろうから。 ただ、作りとしてはぱっとしないな。
700 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:18:52 ] >ぱっとしないな ぶっちゃけそこなんです。 上の話の終わり方だと、ConcreteAとConcreteBを継承した大きなクラスを作って 処理部分だけ、switchかdelgate型で置き換え可能にする。 ・JITはswitchが強いってことは何処までか? ・一つの処理がどの程度長いとdelgate型が有利になるか? でバッチテストが作れるなと思ってました。 っていうか、そういうテストした人の本や社員のサイトがあっても良いなと。 これも「ぱっとしないな」と思ってくれたら、むしろ愉快なんですけどね。 あと >大抵ほかの処理でそれ以上にメモリ使ってるだろうから。 は 私の >・ガベコレでメモリ使用量のコストが無いことは解ったつもり。 への返事でそんなに深い意味は無いですよね? ※最大メモリ使用量より速度優先 ※速度ねらいで、ConcreteA、ConcreteBに変数名の重複を許さないぐらい程度は妥協範囲。
701 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:22:09 ] delegateの"e"が抜けてる。
702 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:25:28 ] デリゲートなんかは下手に保持しとくより毎回newした方が速いらしいね
703 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:32:07 ] thx delegateは捨てましょう。 …C的には、関数ポインタよりnewが早i(ry JITのnewまわりの最適化を見られれば、それでも疑問は解決できます。
704 名前:702 mailto:sage [2008/06/05(木) 11:36:07 ] >>703 意味わかってる? デリゲートが遅いって言ってるんじゃなくて,デリゲート型のオブジェクトをnewするときの話だよ
705 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:45:56 ] >704 ミスリードです>< すいません。 最初に戻ると、元parentStategyInstanceを持ってるクラスを作った時に、 デリゲート型のオブジェクトをnewできます。 あとは if(hoge<hage) {exceDelege = ConcreteAexceDelege} else {exceDelege = ConcreteBexceDelege} あと、 >※速度ねらいで、ConcreteA、ConcreteBに変数名の重複を許さないぐらい程度は妥協範囲。 これ、 ConcreteA、ConcreteBでずらずら並んで、20個ぐらいあったら一気に話が不毛になるな。('A`)
706 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:51:10 ] だから、逆なんだ。 if(hoge<hage) {exceDelege = ConcreteAexceDelege} else {exceDelege = ConcreteBexceDelege} よりも >702は if(hoge<hage) {exceDelege = new exceDelegater(ConcreteAexce)} else {exceDelege = new exceDelegater(ConcreteAexce)}
707 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:05:13 ] newの最適化っつっても、確保に関しては基本的にマネージヒープの 未割り当て領域へのポインタをオブジェクトサイズ分進めるだけだぞ。 もちろん頻繁にnewすればGC起動の機会を与えることになるから、 パフォーマンスを気にするならインスタンスのキャッシュは基本ではあるが。
708 名前:691 mailto:sage [2008/06/05(木) 12:34:44 ] 話を長引かせる様な書き方をしてしまってすいません。 >696 >700-701 >703 >705-706 まで私ですね。 >ConcreteA、ConcreteBでずらずら並んで、20個ぐらい は失言でしたが、>707にはそこまで考慮して貰ってありがとうございます。 「インスタンスのキャッシュは基本」 これを確認出来て良かったです。 ソースの出所が良い所ぽかったので、>704みたいな事は無いか色々勘ぐったんです。 <ちら裏> switchしかりnewも、CLRやJITの最適化って非線形で決めてナシなんだな。 皆さん好きですか? 私は、規模が変わるたびにバッチテスト・ベンチマークテストする事になりそうで('A`)
709 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:51:30 ] 大抵現実に影響があるようなパフォーマンス問題は そんな細かい話ではない。
710 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:53:58 ] デリゲートがキャッシュするよりnewってのは初めて聞いたな。 どこででた話? それかひょっとして非常に使用頻度の低いデリゲートの話?
711 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:56:14 ] >709 けどそれって、C#の開発経験があるって言えるんですか? 毎日好きな言語で遊んで、顧客が限定してきた時だけC#って奴と差がないじゃん。
712 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:03:29 ] visual studioでメッドを全部折りたたむ技ってないですか?
713 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:05:09 ] >>711 ?? 何のことを言ってるんだ?
714 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:06:11 ] こういう事を >そんな細かい話 って言い捨てること。
715 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:18:25 ] >>714 プロならコストと効率を考えて、大して効果の上がらない箇所の最適化に 拘って労力を注ぐくらいなら、もっと他にすることがあるだろうと思うがな そういうところをいじくり倒せるのはむしろ趣味で遊んでる奴のほうじゃね
716 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:25:04 ] >715 >プロならコストと効率 そりゃどの言語でもそうだよ。 話をループさせてることに気付いてる? 会話下手? 俺は優しいから"C#でのコストと効率"の経験って解釈してあげるよ。
717 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:28:38 ] >>716 煽る以外に言い返す言葉が見つからないならレスするなよ
718 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:33:19 ] >715のプロとしてのコストと効率の経験と、趣味で遊んでる奴との混同具合が心配です。
719 名前:デフォルトの名無しさん [2008/06/05(木) 13:46:50 ] usingを使ってStreamReaderを読んでますが、 whileで最後まで読んで、もう一度whileで読みたいのですが、 どうすればいいんでしょうか。
720 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:52:18 ] >>719 こういうこと? streamReader.BaseStream.Seek(0, SeekOrigin.Begin);
721 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:54:51 ] >>712 アウトラインのことなら、編集 - アウトラインで
722 名前:719 mailto:sage [2008/06/05(木) 14:00:03 ] >>720 おお!!出来ました!助かりました! ありがとうございます!
723 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:16:28 ] 優先度の問題。 そんな細かい話を気にする必要があることだってあるが、 現実には引っかかるのはもっと別のところであることがほとんど。 もっと気をつけるべきとこは他にいっぱいある。 ってだけの話、無意味とは言わん。
724 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:19:08 ] だろうね。 大概解ってるだろ。 俺、>709って初見じゃないもん。 定期的に湧く厨だと思った。
725 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:19:37 ] 条件分岐の効率なんて、文字列処理一発でも挟まれば全く無意味。 だから処理効率より設計の方を重視する方がいい、ほとんどの場合は。
726 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:24:24 ] >>724 誰かさんはこの程度でベンチテスト毎回やるんだと言ってるから相当優先度が高いんだろ 解ってるとは思えん
727 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:29:50 ] 次のようにXMLファイルを読み込もうとしてるのですが、 どうやら読み込みに失敗している環境があるらしいのです。 if (File.Exists(Directory.GetCurrentDirectory() + "\\" + "data.xml") == true) { Type[] et = new Type[] { typeof(Data) }; System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(ArrayList), et); using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open)) { DataList = (ArrayList)serializer.Deserialize(fs); } } そこでまず、本当にXMLファイルの読み込みに失敗しているのかメッセージボックスでチェックしたいのですが、 try { using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open)) { DataList = (ArrayList)serializer.Deserialize(fs); } } catch { MessageBox("読み込み失敗"); } こんな風に書いちゃってもいいのでしょうか?
728 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:32:37 ] その時も文字列処理を引き合いに出してたな。 だいたい、その辺りにC#の用途の向き不向きボーダーラインがあるんかな。 More Effective C++みたいなイメージでは不毛と。
729 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:00:24 ] >>727 肝心の例外情報握り潰したら話にならんだろ つか今時CurrentDirectoryかよ
730 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:02:22 ] >729は catch の後ろに何もない事を言っている様だ。 try .. catchのヘルプに戻ろう。
731 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:35:17 ] CurrentDirectoryの何が悪いのかわからん。 まさかレジストリやマイドキュメントに保存するのか?W
732 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:39:09 ] カレントにするやつは無知か手抜きだろ
733 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:46:27 ] exeのフォルダならともかく、 カレントは起動方法によって変わるから問題だろ 元々そういう仕様なら関係ないけど
734 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:46:32 ] カレントディレクトリがショートカットとかで変更されたらどうするんだ?
735 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:49:56 ] 俺の負けだ。 言わせてくれ。 そこは throw; //スルー だろ。 俺は敗者だ。 だけどなんかスッキリした。 質問者おいてこぼりだが、確かに>728の模範解答は期待。
736 名前:727 mailto:sage [2008/06/05(木) 15:54:41 ] 聞きたいのはCurrentDirectoryのところではなく、 usingステートメントをtryで囲んでもいいのかな?と思ったのです。 読み込み失敗時の例外情報はヘルプでFileStreamを調べたのですが例外の種類がわかりませんでした。 例外の種類はどうやって調べたらいいんでしょうか?
737 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:00:52 ] 起きえる例外がわからなければSystem.Exceptionで受ければいいだろ。 起きる例外はMSDNに載ってると思うけど。
738 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:13:54 ] MSDNでFileStream コンストラクタ (String, FileMode)を引いたら例外の種類が書かれていました。 try { using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open)) { DataList = (ArrayList)serializer.Deserialize(fs); } } catch(System.Exception e) { MessageBox(e.ToString()); } としましたが、usingをtryで囲ってもいいのかが知りたいです。
739 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:15:36 ] どうして駄目だと思った?
740 名前:727 mailto:sage [2008/06/05(木) 16:31:25 ] >>739 usingステートメントって例外が起きた時にステートメント内のdisposeを保証してくれるんですよね。 なのでtry句が複雑にネストしてしまう気がしたからです。 例外が自分の環境でも再現出来ればいいのですが、 他人の環境なので再現できないので、メッセージボックスを仕組んで原因を調べようかなと思いました。
741 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:43:55 ] try句が複雑にネストしてしまう、の意味が分からない。
742 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:45:18 ] usingをtry-finallyに展開してみる。 try { readonly System.IO.FileStream fs = new System.IO.FileStream("data.xml", System.IO.FileMode.Open); try { DataList = (ArrayList)serializer.Deserialize(fs); } finally { fs.Dispose(); } } catch(System.Exception e) { MessageBox(e.ToString()); } usingではcatchしてないからDeserializeで例外が起きた場合は外側のtry-catchブロックが補足する。 問題になるとすればcatchの段階でまだ開いている状態のfsにアクセスしたい場合。 Deserializeとfs.Dispose()の両方で例外が起きた場合。 こういったことが気になるなら、usingを使わずtry-catch-finally構造に変える。
743 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:50:38 ] 蒸し返してすまんが、CurrentDirectoryでひとこと。 コンソールアプリならカレントディレクトリは普通に使う。 GUIの場合は意味がない。 exeのあるディレクトリがカレントディレクトリであると考えているなら明らかに間違い。 Directory.GetCurrentDirectory() + "\\" + "data.xml", この部分は余計。相対パスならカレントからの相対パスになるので "data.xml" だけでで十分。
744 名前:727 mailto:sage [2008/06/05(木) 17:04:26 ] >>742 分かりやすい説明ありがとうございました。 >>743 参考になりました。ありがとうございます。
745 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 17:21:07 ] >>742 >Deserializeとfs.Dispose()の両方で例外が起きた場合。 キャッチされるのは後からの例外の方だったよね?
746 名前:デフォルトの名無しさん [2008/06/05(木) 20:00:17 ] 質問させていただきます。 フォーム上に画像を表示するプログラムを書きたいのですが、 イベントとして、フォームが表示されたと同時に描画したいのです。 このような場合、イベントはどのように記述すればよいのでしょうか。 もしくは、イベントを使わない方法があればそちらもご教授ください。
747 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 21:01:16 ] GUIのプログラムの中で GUIとは何の関係もないオブジェクトAが居ますが デバッグ用途でGUIのとあるメッセージウィンドウに文字列を出力させたいとします。 オブジェクトAのようなGUIに無関係なオブジェクトが大量に居るような場面で それらの出力文字列をGUIのとあるメッセージウィンドウに文字列を出力させたいわけですが。 どうやってそのオブジェクト達とメッセージウィンドウ間をインターフェイスさせればよいでしょうか? Qtをちょこっと触ったことがあるのですが、その場合はsignal/slot機構を使って、わりと簡単に実現できたのですが C#の場合はsignal/slotの代わりにeventを使うことになるかと思います。 eventの型となるdelegateをどこで宣言するかなぁ〜と考えるのですが、 どこにも宣言したくありません。 どうすればいいですか?
748 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 21:50:02 ] メッセージ表示するもしくは通知するTraceListenerでも作ればいいんでない?
749 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 22:16:43 ] >>735 ってどういう意味?
750 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:15:02 ] >>743 逆に言えば、カレントディレクトリがexeのあるディレクトリであることを プログラム側で保障すれば問題ないということでもある まあ、その場合でも相対パス使うだろうから、 Directory.GetCurrentDirectory()は不要だけどな
751 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:18:57 ] >>750 Open/Saveダイアログを使うとカレントディレクトリが動いたりしなかったっけ。 以前はまった記憶がある。
752 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:37:16 ] ていうか、おまいらデリゲート使うときに毎回宣言してるの? 自分はDelegate<Result,Param1>とか宣言しといて全部それつかってる。 おかげでFuncとどう整合性とろうか思案中だがなぁorz
753 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:42:08 ] イベントハンドラはEventHandler<TEventArgs>使え
754 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:59:49 ] outやrefに対応できないんだよな…
755 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:05:31 ] class Reference<T> { public T Value { get; set; } } こんなの作っとけば
756 名前:750 mailto:sage [2008/06/06(金) 00:07:58 ] >>751 確かに、FileDialog使うときは RestoreDirectory = true にしないとまずいな てか、既定値がfalseとかありえん
757 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:48:22 ] >>755 世の中そうもいかんこともあるのよ。 リモーティングとか。
758 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:29:58 ] >>752 まさにこういう使い方をするために、宣言時に識別子を省略出来たらいいのに。
759 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 04:03:17 ] >>754 それは知恵が足りないだけ。 できるよ。
760 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 07:08:25 ] マルチプルアイコンを含むIconインスタンスから、各アイコンを取得したいのですが、 どうすればよいのでしょうか。
761 名前:760 mailto:sage [2008/06/06(金) 07:46:58 ] 自己解決しました。 Icon.Save()でバイナリデータを得て、それを分割した上でIconコンストラクタに与えればいいですね。 もっとスマートな方法がありそうな気もしますが、とりあえずそれでいきます。
762 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 09:30:47 ] コンストラクタでSize指定だけはできる
763 名前:747 mailto:sage [2008/06/06(金) 12:09:04 ] >>753 >>イベントハンドラはEventHandler<TEventArgs>使え どうもです。 こういうのがあるんですね。 ただこれだとEventArgsカスタムクラスをどこかで定義しなければならないです。 EventArgsカスタムクラスに依存するのがなんだかシャクなんで。 たとえば talkerインターフェイスを用意するとして interface ITalkter{ public delegate void printf(string fmt,prams object[] args); } こういうことができたら、 ITalkerを継承したクラスを作ってしまえばそれでOKなんですけど ITalkerインターフェイスに依存するのは納得できるんで。 ただ、interfaceでは型宣言出来ないらしく。。。 なんで出来ないんだろう。。。。 ちなみにtalkerは大量に居ます。 listenerは1個だけっていう想定。 何かいい方法はありませんか。
764 名前:747 mailto:sage [2008/06/06(金) 12:19:13 ] もしくは public event void delegate(object sender,params object[] arg) printf; のような感じで 名無しの型を宣言すると同時に変数定義みたいなことができたらそれだけでいいですね。 こういうことって可能なんでしょうか?
765 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:25:10 ] interface ITalkter{ string PrintString{ get; } } こうとか interface ITalkter{ void Print(Action<string> print); } こうとか interface ITalker{ void Print(IListener listener); } こうとかじゃだめなの?
766 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:46:17 ] DebugListener/TraceListenerで十分だと思うけど。
767 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 13:27:34 ] >>763 talkerの役割がよくわからないな。 実際に表示する部分なのか、それともメッセージを発行する元なのか? それからdelegateをeventと1対1で作らなければいけないとか思ってないか?
768 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 14:49:41 ] >>761 P/InvokeでExtractIconExとか。
769 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:41:02 ] EventHandler<TEventArgs>を使いたくないのだったら、普通にAction<T>でも使うってのは? オブジェクトAの中に public event Action<string, object> printf; を実装する。 これならカスタムクラス使わんで済むでしょ。
770 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 23:54:33 ] >>747 >>764 デリゲートを使うにはデリゲート型が事前に作成されている必要がある また、匿名メソッドやラムダ式を使った場合でも、型が自動的に作成されることはない なので、君がやりたいと考えていること(デリゲートを使用して云々)は恐らく不可能 まあ、本来の目的からすると、出力タイミングをGUI側で制御するなら>>765 オブジェクト側で制御するなら interface ITalker { void SetPrintCallback(Action<string> print); } もしくは interface ITalker { void SetListener(IListener listener); } >>769 void (object sender, T e) where T : EventArgs に合致しないデリゲートをイベントにするのはやめれ # MSのガイドラインなんて知らん、というなら止めはしないが さらに言うと、 ・デリゲート型の名前のサフィックスは EventHandler ・第2パラメータの型(上記 T)の名前のサフィックスは EventArgs ・2つのパラメータ名は上記の通り(sender, e)
771 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 00:33:51 ] 正直msのガイドラインなんか知ったこっちゃ無い
772 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 00:55:01 ] なら使うな
773 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 06:58:46 ] ここはCompact Frameworkの質問はおk?
774 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:01:03 ] だから使わないんだって
775 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:01:24 ] C#にからめればOK
776 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:03:46 ] Compact FrameworkでWindows Mobile用2chブラウザを作ってるんだが、 スレ一覧にListViewを使ってるんだ。 ListViewItemCollectionにAddRangeが無くてforeachでスレデータ回してアイテム作ってAddさせてるんだが どうにも低速なんだ。 AddRangeの代わりになるものは回してAdd以外ないだろうか。
777 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:19:17 ] BeginUpdateやってる?
778 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:20:04 ] >>777 やってる。
779 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:53:10 ] ListViewへの追加はPCでもかなり遅いからなあ 1000件くらいになりそうなときはVirtualModeにしてるけど、Compactじゃ使えないのか
780 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:55:15 ] >>779 2chの板のスレ一覧データだし、700項目くらいPCでやった場合ドパァッって表示されるんだがなあ。 VirtualはCFからは使えないな。
781 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 08:36:09 ] 自分で擬似的なものを描画するのが一番速いのかな
782 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 08:56:03 ] MSのガイドライン無視したクラスライブラリって見てて恥ずかしい
783 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 09:15:58 ] Formの上でGridクラス作ったが、20万件でも一瞬で追加・表示されるようになった(´・ω・`)
784 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 09:17:25 ] ListViewってMSの中の底辺プログラマが作ったんだろうか
785 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:12:31 ] 作ったのがだいぶ昔のことで、 ここまで大量のデータが取り扱われるとは考えられなかったからだと思う。
786 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:29:20 ] 描いた円を上キーでジャンプさせるにはどうすればいい?
787 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:41:02 ] 意味が分かりませんがKeyDownイベントでそういう処理書けばいいんじゃないでしょうか
788 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:54:23 ] いや、そのKeyDownの中身が分からなくって
789 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:56:34 ] KeyDownイベントの中身で円を描く場所を変えて描画処理に投げる
790 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:56:35 ] 円をどうやって描いてるかジャンプってどういう意味なのか分からなくって
791 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 11:58:45 ] プログラミングが下手な人って質問も下手だよね
792 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:00:20 ] ダブルバッファにしろよ 画面ちらつくぞ
793 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:20:11 ] 上向きの初速を与えて、一定の下向きの加速度を受けながら運動するようにしたい。 例えば、20進んで一瞬停止して、15進んで一瞬停止して、の繰り返しでいいのか
794 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:26:27 ] v = v0 + gt と言う式を当てはめれば良いだけじゃん
795 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:32:28 ] ↑アホ
796 名前:デフォルトの名無しさん [2008/06/07(土) 12:37:46 ] tをどうすれば?
797 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:40:12 ] タイマーでも使ってろ
798 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 12:48:39 ] 変数tを入れれば位置まで出せる公式があったろ リアルにやるならtをタイマーを使って現実時間とぴったり合わせりゃいい
799 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:58:07 ] 加速度を9.8/sずつ減らせばいいんでね?
800 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:15:33 ] p0 : 初期位置 v0 : 初期速度 g : 重力加速度(約-9.8) p(t) : 初期時刻からの経過時間tの時の位置 p(t) = p0 + v0*t + 0.5*g*t*t
801 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:23:50 ] つかいつの間に重力加速度の話になったんだ
802 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:44:46 ] >>800 それをwhileに入れれば出来そうだけど、ジャンプ中も左右移動したい
803 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:46:52 ] なんかこのスレ方向性分かんなくなってきたなw
804 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 15:55:23 ] ジャンプ中左右移動したいなら new Timer( () => { 位置更新 描画 }); void KeyDown(...) { switch(key) case ←: 左にちょっとずらす ... } こんな感じで出来るのかな 普通は while(true) { 入力ゲット 位置更新 描画 時間が来るのを待つ } こんな感じなのかな よく知らん
805 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:46:12 ] >>802 物理的に表現したいならこんな感じです a:加速度 v:速度 p:位置 dt:微小時間 とすると、こういう微分方程式が成り立ちます v(t)/dt = a p(t)/dt = v(t) dtはゲームなら1フレームの時間(約16.7ms)と考えるのが普通です この式を例えば前進差分(ぐぐってね)で微分項を近似するとこうなります ( v(t+dt) - v(t) ) / dt = a ( p(t+dt) - p(t) ) / dt = v(t) t+dt時間における速度と位置を知りたいので式を変形します v(t+dt) = dt * a + v(t) p(t+dt) = dt * v(t) + p(t) この式をゲームのプログラムなんかではこう表現します void Update( float dt ) { velocity += dt * acceleration; position += dt * velocity; } で、左右移動したいとき、というのは速度に値が加えられている状態なんで、 velocityに対して基本速度を加えておけばOKです
806 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:51:23 ] って書き終わって凄く後悔した スレ違いにもほどが
807 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 19:23:48 ] >805はY方向だけなので、Xは別にしないとだめだぞ。 横への移動を表す加速がY方向へは関係しないとき、XとYは独立して扱えるからよい子のみんなは気をつけよう。
808 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 19:40:07 ] 気をつけるまでも無く自明だと思うのですが!
809 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 21:07:23 ] 型を書いてないからアレだけど ベクトル型を使うのが普通なんで
810 名前:デフォルトの名無しさん [2008/06/08(日) 10:51:16 ] 過疎
811 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 11:54:09 ] IDEの使い方に関するおすすめの書籍は?
812 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 17:17:44 ] ListViewで特定のカラムだけ非表示にすることは出来ますか? リストには追加するのに非表示にするという、一見無意味な操作なのですがそうしたいのです。
813 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 18:36:00 ] >>812 ListViewのColumnHeaderで特定のカラムだけWidth=0にすることが出来ませんか? リストには追加するのに非表示にするという、一見無意味な操作なのですがそうしたければそうすることもできるでしょう。
814 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:05:09 ] >>813 非表示にしたいカラムだけ幅調整不可って出来ますか? Widthを0にしただけでは幅調整されて見えてしまうので・・・。
815 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:00:43 ] ListViewItemから派生させたクラスで持つようにして そのオブジェクトをListViewに追加すれば?
816 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:12:26 ] つかTagで十分だろ
817 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 21:27:03 ] >>815 なるほど。ありがとうございます。 >>816 Tagは使ったこと無いので調べてきます。 ListViewの方ではなくListViewItemの方ですよね?
818 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:33:03 ] ColumnResizingとかそんな感じのイベントあるから、 そこで非表示にしたいカラムが幅調整されそうになったら制限すればいい。
819 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:34:14 ] >>818 なるほどありがとうございます。 Tagを使ったものがまさに用途にあった使い方でした。
820 名前:デフォルトの名無しさん [2008/06/09(月) 10:09:01 ] pc11.2ch.net/test/read.cgi/tech/1212972014/
821 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 12:07:21 ] メソッド呼び出し中にキー入力を受け取るにはどうすればいいですか?
822 名前:デフォルトの名無しさん [2008/06/09(月) 12:16:03 ] >>821 メソッド呼び出しを別スレッドにして、メインスレッドでキー入力を 待てばいいんじゃない? 全然はずしてたらご免。
823 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 12:17:01 ] モードレスダイヤログ? 全然外してるかも。
824 名前:あにす ◆sGTL1yK0.6 mailto:sage [2008/06/09(月) 18:46:26 ] DoEvents()? 外してるかな…。
825 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 05:54:09 ] >>702 for (int i=0; i<1000; i++) Hoge((a) => a + 1); のようなコードは次にように最適化されるようだ。 HogeDelegate f = null; for (int i=0; i<1000; i++) { if (f == null) { f = (a) => a + 1; } Hoge(f); }
826 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 06:30:01 ] >>825 ということは>>702 はデマってことか
827 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 07:01:43 ] デマというかもうちょい境界線が上なんだろうな。
828 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 11:32:48 ] 質問 以下のようにListのSyncRootで排他処理を行っている最中に Listの実体を入れ替えた場合、 この排他でLock開放待ちをしていたほかのスレッドはどうなるのでしょうか? lock (((ICollection)(mylist).SyncRoot)[ if(xxx){ mylist = new List(); } }
829 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 12:23:17 ] とりあえずそんなキモいことするな mylistの置き換えより先に別スレッドがmylist.SyncRoot取得してたら古い方でロック待ちするし 置き換え後にSyncRoot取得したら新しい方でロック待ちする 古い方でロック待ちに入ったらロック取得したスレッドのlockステートメント終了でロックに入る 新しい方ならロックされてないから待たないでそのままロック取得するだろう
830 名前:828 mailto:sage [2008/06/10(火) 12:45:29 ] やっぱり駄目ですよね。 コレでは排他処理の意味をなさない。 わかりました!!有難う御座います。
831 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 21:33:47 ] ListViewのTagで思い出したが、なんでシリアル化してもTagは保持されないのですか?
832 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 21:51:45 ] 何が入ってるか分からないから 保持しても意味がないものが入ってるかもしれないから
833 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 22:53:07 ] あまり納得できんが、そういうことなんだと納得しておきます。
834 名前:デフォルトの名無しさん [2008/06/10(火) 23:06:12 ] ADO.NET 2.0で、System.Data.SqlClientを使って、バッチ処理ってどうやんのが普通なの? なんかSqlCommandSetってのが昔はあったらしいけど、今は隠されてしまったみたいだし、 ていうか、 var cmd = new System.Data.SqlClient.SqlCommand(); cmd.CommandText = "begin transaction;" + "insert into t values(1,2,3);" + "insert into t values(2,3,4);" + .... "commit transaction;"; みたいにカンマで区切っただけのSQL文でも一応できたみたいなんだけど、 C#/ADO.NET2.0/SQL Serverでほかの人はどういう風にバッチ処理してるのか知りたいです。
835 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:19:11 ] ストアドプロシージャです。
836 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:21:23 ] リンクの冒険
837 名前:デフォルトの名無しさん [2008/06/10(火) 23:30:44 ] >>835 お返事ありがとうございます。 ところで、クライアント側でユーザーが複数項目を選んで、 編集して、それで更新みたいな処理の流れだと、可変引数が 使えないストアドでは対応しきれないのでわないでしょうか?
838 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:40:52 ] >>836 えーと……ゼルダの伝説? それはともかく、C#のバージョンが分からんが3.0ならLINQがおすすめ GUIでD&Dするだけでエンティティクラスが作れて、デフォルトでトランザクション処理 LINQ to SQLがSQL Server限定なのがあれだけど
839 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:58:07 ] >>837 「バッチ処理のパラメータを格納しておくテーブル」を作るという手もある。 そのテーブルにINSERTしてからバッチ用のストアドプロシージャを起動して、 ストアドの中でテーブルを読み込んで、それを元に処理を行う。 結果のサマリーも格納するようにすれば、バッチ処理の履歴も兼ねることができる。
840 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 20:40:20 ] C#中でエクセルのファイルを開こうとすると、下記のエラーが発生します。 ちなみに.NET Framework 2.0を使っています。 System.Runtime.InteropServices.COMExeption(0x80040154):CLSID{00024500-0000-0000-C000-000000000046}を含むコンポーネントのCOMクラスファクトリを取得中に、次のエラーが発生しました。:80040154 3台あるPC(XP)で1台で起こりますがその原因が分かっておりません。 作成したプロジェクトのbin\release以下には3個のCOMと関係がありそうなDLLがあります。 ・Interop.Excel.dll ・Interop.Microsoft.Office.Core.dll ・Interop.VBIDE.dll これら3個を C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe を使って登録しても結果は同じです。 どういった原因が考えられるでしょうか?
841 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:21:57 ] そこにはExcelがインストールされていないなんてオチじゃないよな。 「00024500-0000-0000-C000-000000000046 80040154」でググって 最初に出てきたところに書いてあった事例がまさにそうだっただけだけど。 forums.msdn.microsoft.com/en-us/netfxbcl/thread/5a338c18-b2e5-44b5-b15a-530d99a34656/
842 名前:840 mailto:sage [2008/06/11(水) 21:26:24 ] 確認させていただきたいのですが、 Excelがインストールされていない環境では、COMを通じたエクセルファイルの操作というのはやはり出来ないものでしょうか? というのは、 動作確認をした3台のうち 1台にだけExcelをインストールしていたつもりだったのですが、実際には2台にインストールされており、 上記の System.Runtime.InteropServices.COMExeption(0x80040154):CLSID{00024500-0000-0000-C000-000000000046}を含むコンポーネントのCOMクラスファクトリを取得中に、次のエラーが発生しました。:80040154 このエラーはエクセルがインストールされていないパソコンでだけ起こっていました。 レジストリのCLSIDに無理やりエクセルを登録たところエラーが変わって System.IO.FileNotFoundException: CLSID {00024500-0000-0000-C000-000000000046} を含むコンポーネントの COM クラス ファクトリを取得中に、次のエラーが発生しました: 80070002。 場所 NFSAutoGui.Tettou.product(String path) こういうことになってしまいました。 FileNotFoundExceptionってようするにExcel.exeが見つかりませんよ、ということかと思いますが。 ということで Excel.exeがインストールされていない状態では、COMを通じたエクセルファイルの操作というのはやはり出来ないものでしょうか?
843 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:31:00 ] >>842 そりゃ、できんわな。それができたら、みんなExcel買ってくれなくなってMSが困っちゃう。
844 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:36:37 ] >>841 >>843 どうも。。。 インストールしてないつもりのPCで動いたと思ってたんで動くかと思っていました。 アホ過ぎ。 ところで Excelのバージョン10が開発マシンに入っております。 COMの参照設定で、Microsoft Excel 10.0 Object Library のバージョン1.4を設定しているのですが、 これで配布した場合って、Excelのバージョン10.0が入っていないと動かないんですかね? Excel 2007しか入っていないようなPCでは動かないんですか?
845 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:43:55 ] >>842 だって、そのExcelファイルの操作って、 Excelが持っている機能を呼び出しているだけだ。 普段目にするUIはExcelの1つの顔にすぎない。
846 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 21:59:28 ] >>844 YES
847 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:01:05 ] 解放忘れとかやりまくってそうだな
848 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:10:55 ] こんなこと言ってる奴がまともに作れてるわけないだろ でバージョン依存したくないならせめてVB.NETにしとけ
849 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:15:41 ] WSHのVBSとか呼び出すのが楽だよ
850 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:19:02 ] >>845 そういうことですね。 >>846 了解しました。 >>847 一応タスクマネージャのプロセスタブにEXCELは居ないので大丈夫かと... ところで、 開発マシンにEXCEL10しか入っていませんが、 その他のバージョンのEXCELも扱いたい場合に必要になってくるのが PIAとかいうものなのでしょうか?
851 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:40:52 ] YES
852 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:42:04 ] あんたは質問を有料にしたいわ
853 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 23:58:05 ] DateTime型のToString()の書式設定はどんな環境の場合に変わるんでしょうか? たとえば("d")ならカルチャによって変わりますが、 カスタム書式の("yyyy/MM/dd")も環境によって変わるようです。 どんな環境で変わるんでしょうか??
854 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 00:37:13 ] >>853 質問の意味がよくわからないけど「カルチャが異なる環境で変わる」ということが聞きたいのかな。 CurrentThreadのCurrentCultureとかCurrentUICultureとかを色々変えながら動かしてみると わかりやすいかもしれない。 わかりにくいかもしれない。
855 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 00:37:53 ] カルチャによって変わるよ。 "/" はカルチャ依存の日付区切り文字だし、 この世には和暦とかヒジュラ暦とかあるだろ。
856 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 00:47:15 ] >>854-855 ありがとうございます。 "/"はカルチャ依存なのですね。 カスタム書式なら"/"も表示してくれると思っていたのですが、それすらも期待してはいけないのですね。 自分の環境では再現できない&相手の環境がよくわからないので質問しました。 では"yyyyMMdd"ならどの環境でも期待通り"20080612"になることを前提にしていいのでしょうか?
857 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:11:03 ] >>856 >>855 の最後の行を読んで下さい>< DateTimeFormatInfo.InvariantInfoわたしとけばいいよ。
858 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:17:15 ] >>856 CultureInfo ci = new CultureInfo("ja-JP", true); ci.DateTimeFormat.Calendar = new JapaneseCalendar(); Thread.CurrentThread.CurrentCulture = ci; Console.WriteLine(DateTime.Now.ToString("yyyyMMdd")); // 200612 Console.WriteLine(DateTime.Now.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo)); // 20080612
859 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:17:26 ] >>857 なるほどありがとうございました! yyyyでも和暦だと20とかになるんですね。 DateTimeFormatInfo.InvariantInfoで解決しました。
860 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:18:12 ] >>858 ありがとうございました。勉強してみます。
861 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 04:18:07 ] Compact FrameworkのWebBrowserでDocumentTextにHTML設定するとプログレスバーが出てくるのが嫌なんだけど 非表示にする方法はあるだろうか? それともHtmlView.dllをラップしたほうが賢明だろうか
862 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:14:25 ] できるだけメモリ使用量を減らすため、 IDisposableを実装したほうが良いクラスの判断でまよっています。 クラスA DataSetをプロパティとして保持 クラスB stringをプロパティとして保持 クラスC byte配列をプロパティとして保持 クラスAはDisposeメソッドを用意してデストラクタから呼び出していますが、 クラスBとCもDisposeを用意したほうが良いでしょうか? また、stringやbyte配列はDisposeメソッドがないので、どうやってメモリを解放するのかもわからないです。
863 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:38:41 ] 全部IDisposable無用
864 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:48:12 ] Disposeを実装するのは、自前でネイティブリソースを扱う時か Disposeを持つクラスをメンバとして持つ時だけで良い。 それ以外ではメモリの開放はGCにまかせた方が一般的にパフォーマンスは高い。 なんとなくメモリは少ないほうがいいよね的な考えしかないなら逆効果にしかならんよ。 性能を犠牲にしてでもどうしても局所的にワーキングセットの縮小をせまられるのなら 参照をnullにしてGC.Collectを呼び出す。
865 名前:862 mailto:sage [2008/06/12(木) 12:58:06 ] >>863-864 ありがとうございます。 なるほど、ではどうしても実装するならクラスAだけで 良いのですね。 Webアプリなのですが、特定のページにアクセスが集中し 使用メモリが大きくなってしまうので、できるだけ解放できるところは 解放したかったのです。 処理終了時にGC.Collectを呼び出すことにします。
866 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:22:05 ] GCでオブジェクトが回収されるときの動作は 1 デストラクタ(ファイナライザ)があればそれを実行する 2 メモリの回収 Disposeは1を代行するもので、メモリの回収はあくまでもGCが行う。
867 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:22:22 ] 質問 RichTextBoxに画像を挿入したいんですが、無理?
868 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:27:55 ] とりあえずクリップボード越しなら可能
869 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:35:42 ] >>868 サンプルコード貼ってある所知りませんか?
870 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:41:09 ] 検索エンジン様が知ってることを知ってる
871 名前:862 mailto:sage [2008/06/12(木) 17:31:00 ] >>866 ありがとうございます! だいぶ勘違いしていました。 デストラクタでDispose呼んでも意味ないのですね。
872 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:05:15 ] え、デストラクタとGCは関係ないんだと思ってた…。 じゃあデストラクタが実行されるタイミングってスコープを抜けた瞬間とは限らないの?
873 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:10:28 ] C#でデストラクタ?
874 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:13:38 ] >>872 全然関係ない。スコープと一致させたいときにはusingを使わないといけない。 逆に言えばそれがIDisposeとusingの存在意義。 >>873 まあC# 1.0のころはデストラクタって言っていたはずだし、いいじゃないか。
875 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:16:20 ] DisposeとGCも全く関係ないよ 種も仕掛けもない本当にただの普通のメソッド
876 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:18:11 ] あ、そっか。C#はデストラクタなんてほとんど書かないや。
877 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:20:35 ] 本当にどうしてもどうしても必要な場合でなければむしろ書いてはいけない
878 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:56:46 ] IDisposeを実装するときの基本パターン class DispBase : IDisposable { ~DispBase() { Dispose(false); } public void Dispose() { Dispose(true); System.GC.SuppressFinalize(this); } public virtual void Dispose(bool disposing) { if (disposing) { } } } GCとの関係といえばこの命令だけ。 System.GC.SuppressFinalize(this); 後片付けが終わったからファイナライザは呼び出さなくていいとGCに指示している。 これでファイナライザは呼び出されなくなる。
879 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:03:21 ] パフォーマンスとかメモリとかやたら気にする奴が こういうでたらめやって事態を悪化させやがるんだよな… GC呼ぶなんてやめとけよ、特にWebではな…
880 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:05:54 ] 余計な一言はいいから、ね
881 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:07:23 ] いつでも回収できるメモリは空いていると同じということを理解できるまでには修行が必要じゃて セッションにでっかいオブジェクトの参照抱え込んだままで、GC.Collect呼びまくるとかやってそう
882 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:08:02 ] これくらい言っとけばたまたま見かけて疑問を持つ奴が増えて好都合
883 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:12:21 ] そういやあれ不思議なんだよな。 メモリとか異様に気にするのにセッションとかは湯水のように平気で使うのな。
884 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:21:12 ] 結局、明確にスコープ抜けたときにリソースを即座に解放して欲しいという場合で複数から参照されてる場合には参照カウント的なものが必要になるんだ世根(´・ω・`)
885 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:27:41 ] COM InteropのRCWがそういう具合になってますね。 もう少しスマートにできなかったものか。
886 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:37:51 ] ファイル書き込みじのフォーマットのことですが。 下記プログラムを実行すると。 ===================== static void Main(string[] args) { StreamWriter sw = new StreamWriter("test.txt",false,Encoding.GetEncoding(932)); sw.WriteLine("{0,10} => {1}","ABCD",1234); sw.WriteLine("{0,10} => {1}","あいうえ",1234); sw.Close(); } ===================== 結果として ===================== ABCD => 1234 あいうえ => 1234 ===================== こういった出力になります。 説明を添えると、 ABCDの前に半角スペース文字6文字 あいうえの前に半角スペース文字6文字。 という出力結果になります。 理想としては、 ABCDとあいうえの右端をそろえたいので あいうえの前に半角スペース文字2文字が入って欲しいのです。(あいうえは8文字とみなす。) そのようなことは可能でしょうか? どのようにすれば可能でしょうか?
887 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 21:34:01 ] ttp://unicode.org/Public/UNIDATA/EastAsianWidth.txt ここに、UnicodeにおけるCJKの表示幅の規定があるから、 適当に文字列の表示幅を計算して残りを埋めれば良い
888 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 06:42:57 ] >>886 つまり、いわゆる全角文字を半角文字2文字分として処理したいってことか? Encoding.GetByteCount()で、各文字コードにおけるバイト数が得られるから、 Shift-JISにおけるバイト数を使ってスペースの文字数を計算すればいいだろう。 こんな感じで。 Encoding sjisEnc = Encoding.GetEncoding(932); string text = "あいうえ"; string space = new String(' ', 10 - sjisEnc.GetByteCount(text)); Console.WriteLine("{0}{1} => {2}", space, text, 1234);
889 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 14:35:46 ] インストーラーの起動条件でJ#2.0再配布パッケージを 必須にする方法教えて下さい。
890 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:12:29 ] スレ違い
891 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:16:12 ] いや 殆どC#で一部だけJ#使ってるんすよ…
892 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:17:38 ] いや、その理屈はおかしいだろ…
893 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:01:44 ] その発想はなかったわ ってかVSスレで聞いたら?
894 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:03:22 ] ほい 逝ってきます。 すまぬかった
895 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 12:56:58 ] delegateを使用して(使用しなくても同様のことができればいいのですが・・・) using System; using System.Collections.Generic; delegate int getItem(); class DelegateTest { public static void Main() { List<int> liList = new List<int>(); getItem a = new getItem(A); a += new getItem(B); a += new getItem(C); liList.Add(a()); } static void A(){return 1;} static void B(){return 2;} static void C(){return 3;} } この様なプログラムを走らせてliListに[1,2,3]が入って欲しいのです。 (当然ながらというか、)実際には[3]しかはいりません。 マルチキャストデリゲートにしたのは実行したいメソッドの数が実行時にしか分からず できればif文分岐を少なくしたいと思ったからなのですが、 やはりメソッドを一つ一つ実行しなければ無理でしょうか? もしくはメソッドの戻り値をリストにして、そのリストを次のメソッドの引数をリストにして、最後にaddrangeでしょうか? 何か上手いテクニックがあれば、どなたかご教授下さい。
896 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 13:04:03 ] 普通にgetItemコレクション作ってforeachでList<int>にAddしてけばよくね?
897 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 13:09:34 ] デリゲートの引数にコレクション渡してAddしてもらえば?
898 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 14:14:43 ] >>895 複数の、戻り値を持つデリゲートを一括で管理したい場合は、 マルチキャスト- ではなく、デリゲートのコレクション/リスト などを使う 例えば、こんなふうに var funcs = new List<Func<int>> { A, B, C }; var values = funcs.Select(f => f()).ToList(); あと、A,B,Cはvoidじゃなくてintな >>897 それだと、仕様外の操作(複数追加、Insert、Clear、etc.)まで出来てしまうのであまり良くない 自分しか触らないから何でもいいっていうなら構わないけど
899 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 15:34:56 ] add/remove付きのイベントにしてしまえばマルティキャストっぽく見せられるかも List<getItem> evlist = new List<getItem>(); public event getItem ItemsEvent { add { evlist.Add(value); } remove { evlist.Remove(value); } } this.ItemsEvent += () => 1; this.ItemsEvent += () => 2; this.ItemsEvent += () => 3; evlist.Select(f => f()).ToList();
900 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 19:01:37 ] >>897 の考え方が一番正当でしょ コレクションをそのまま渡すんじゃなくて,値を登録するためだけのクラスを作って引数に渡す
901 名前:900 mailto:sage [2008/06/16(月) 19:05:54 ] 考え方は,ってだけだよ マルチキャストは使うのはあんまり良くないかも
902 名前:895 mailto:sage [2008/06/16(月) 20:14:14 ] 皆さんレスありがとうございます。 とりあえずはコレクションを引数に渡すやり方で実装できました。 ラムダ式を使った方法を教えてくださった898,899さんのやり方は ちょっと理解ができませんでした・・・申し訳ありません。 デリゲートのコレクションは使ったことがないので勉強してみたいと思います。
903 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:28:26 ] ITfMessagePump(TSFのInterface)をC# Formアプリで使ってる人いる? メッセージループが競合してどうすりゃいいか、分からんのだが・・・。
904 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:32:33 ] いません
905 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:39:48 ] そうか。だよなー。
906 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:53:11 ] >>903 ご想像通りメッセージループを自前のものに置き換えるしかない。
907 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:09:54 ] その方法を知りたいな
908 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:26:33 ] >>907 メッセージディスパッチャに関してはP/Invokeで動くというか、 普通にITfMessagePump::GetMessage[A,W]でメッセージ取ってきて P/InvokeでDispatchMessageすればおk。 必要ならWinFormのApplicationクラスのソースでも眺めて見れ。 折角公開されたんだし。WPFももう公開されたんだっけ? WPFアプリケーションでWinFormsを併用するときのドキュメントも参考になるかも。 というかメッセージディスパッチャにWPFのApplicationクラスを使いつつ WinFormsを表示するのが楽かもしれんな。XP以降専用になっちまうが。 あとはExecutionContextの実装もちゃんとやっておくとベター。
909 名前:907 mailto:sage [2008/06/17(火) 03:29:53 ] >あとはExecutionContextの実装もちゃんとやっておくとベター。 SynchronizationContextの間違い。すまそ。 msdn.microsoft.com/ja-jp/library/system.threading.synchronizationcontext.aspx
910 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:31:08 ] ぐあ 909==908ね。
911 名前:908 mailto:sage [2008/06/17(火) 04:00:28 ] 実際試してみた。WPFのApplicationクラスでWinForms。 一応動くことは動くみたい。 この方法ならWPFのSynchronizationContextが使われるので SynchronizationContextはそのままでOK、なはず。 --------------- // PresentationFramework.dll // System.Windows.Forms.dll // WindowsBase.dll using System; static class Program { [STAThread]static void Main(){ new CustomApplication().Run(); } } public class CustomApplication : System.Windows.Application { protected override void OnStartup(System.Windows.StartupEventArgs e) { base.OnStartup(e); var form = new System.Windows.Forms.Form() { Width = 640, Height = 480, Text = "Test Window", }; form.Disposed += (_o, _e) => this.Shutdown(); form.Show(); } }
912 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:03:10 ] >>908 ありがと。 Application.csは見ていて、FPushMessageLoopでGetMessageWしてるのは確認したんだが、 ThreadContextの処理と整合性を取りつつも、 ITfMessagePump::GetMessageする確実な手段が分からなくてね。 ThreadContext周りの処理はinternal/privateがひしめいていて、 うかつに手を出せないし、お手上げ状態。 WPFは要件的に採用は厳しいかな。 いずれにせよ、overrideなり、Filter的なものでGetMessegeを自前の処理を行う仕組みはなさそうだね。 >普通にITfMessagePump::GetMessage[A,W]でメッセージ取ってきて >P/InvokeでDispatchMessageすればおk。 おkな理由を教えてもらえると嬉しいな。
913 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:24:01 ] >>912 >おkな理由を教えてもらえると嬉しいな。 PresentationFramework.dllが中でやっていることがまさにそれだから、で説明になる? System.Windows.Threading.Dispatcher.PushFrameImplおよび System.Windows.Threading.Dispatcher.GetMessageと全く同じことをすれば動く。 で、納得してもらえるんだろうか……
914 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:36:47 ] たとえばNetworkStreamのBeginReadでAsyncCallbackを指定したとする。 このコールバック中にEndReadで例外が発生したらアプリが強制終了してしまう。 この例外をメインスレッド、少なくとも呼び出したスレッドで処理するにはどうすればよろしいでしょうか?
915 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:42:52 ] 例外を補足できない?
916 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 14:27:34 ] >>914 Windowsアプリなら、Control.BeginInvokeでEndRead呼べば 発生する例外もメインスレッドの管轄になるはず ただ、例外チェインの最後のエラーしか取れないかも コンソールアプリならしらね
917 名前:デフォルトの名無しさん [2008/06/18(水) 10:06:15 ] xmlファイルからデータを取得する方法について教えてください。 下記のxmlファイルtest1.xmlを作成しました。 test1.xml <?xml version="1.0" encoding="utf-8" ?> <Items> <Item ID="001"> <Name>aaaa</Name><Age>10</Age> </Item> <Item ID="002"> <Name>bbb</Name><Age>20</Age> </Item> </Items> test1.xmlのデータを下記のプログラムで読み込みました。 001 XmlDocument xmlDoc = new XmlDocument(); 002 xmlDoc.Load("c:\\test1.xml"); 003 004 string wID = "002"; 005 XmlNode xmlNode = xmlDoc.SelectSingleNode("//Items/Item[@ID='" + wID + "']"); 006 string wName = xmlNode.SelectSingleNode("//Name").InnerXml; 007 string wAge = xmlNode.SelectSingleNode("//Item/Age").InnerXml; 私の予想ではwNameには"bbb"、wAgeには"20"が入ると思っていたのですが 実際にはwNameには"aaa"、wAgeには"10"が入ります。 プログラムの005行目の処理でxmlNodeには確かに<Name>bbb</Name><Age>20</Age>が抽出されています。 006-007行目で、そこから更に//Nameを抽出したのにwNameに"bbb"が入らず"aaa"が入ってしまうのは何故ですか? また,このような絞込みっぽい処理を行うには、どのようにすれば良いでしょうか。
918 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 10:10:56 ] そこで // 使っちゃ駄目だろ
919 名前:917 mailto:sage [2008/06/18(水) 10:17:43 ] >>918 Σ(゚д゚lll) //はずしたら上手くいきました。 なぜこういう事になるのか勉強して出直してきます。 ありがとうございました。
920 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:16:35 ] javaばっかりでいつも不思議に思っているんですが、 キーワードでas base isとかがかぶったらどういう回避方法があるんでしょうか。
921 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:21:07 ] 何を言いたいのか良く分からん
922 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:28:48 ] @as @base @is
923 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:36:16 ] ソース上で既に使っていて、キーワードとかぶっているときはどうなるんでしょうか。 またソースに手を入れて変更しないとダメなんでしょうか。
924 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:51:53 ] 1.0から3.0までで変数名に使えないキーワードは増えてなかったと思うが
925 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:38:42 ] c, javaのソースからc#に移植というか少し手を入れるときキーワードの問題が発生しませんか? 特にc#は独自のキーワード名が多いみたいですけど。
926 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:41:35 ] 勝手な拡張もいいんですけど、もとのソースの関数名がas, in, baseとかだとどうするんでしょうか? 関数名のAPIの方を変更できないし泣きませんか? そうするとC#で作る気力も無くなるんですけど。
927 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:43:58 ] C#はjavaじゃないから嫌いだとか 子供に生まれてこなくて良かったとか言い出す奴らは 来てもらわなくてもいいよ
928 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:48:49 ] いや、そういうことじゃないんですけど。 まともにプログラミングの話を出来ないなら、別にいいですよ。 噂どおり、C#の人はC++厨房と変わらないようですねw
929 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:53:56 ] asとかを使いたければ@asとしてくれ 他言語からの移植なんてそう簡単にはいかんよ
930 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:54:39 ] typedefとか#defineが欲しいといいたいのかな?泥沼だと思うがね。 同じ言語の世代間の違いならコンパイルオプションや pragmaのようなコンパイル指令で逃げるのだろうけど、 他言語からの場合は良識に任せるしかないな。 移植を前提にしたコードでbaseとかinとかselfとか変数に 使ってたらそういう名前を使った奴がアホだろ。
931 名前:デフォルトの名無しさん [2008/06/18(水) 20:56:23 ] 簡単なことだし、ここでちゃんと教えればすむことなのに、「C#の奴はやっぱり変人しかいないよ」とか噂を流される方がいいのかな? まあ、>>927 みたいなしきり屋がいるようなところじゃ、こっちの方がよくわかんないけど。 ここでは>>927 みたいなしきり屋に従わなければいけないのですか?
932 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:58:36 ] 伊武雅刀の「子供達を責めないで」のオマージュだろね。 フルすぎるネタで若い子にはわからないぞ;;
933 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:05:04 ] >>931 はいはい、とっとと噂を流す仕事に戻ってね。
934 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:05:46 ] これ聞いて落ち着け ttp://jp.youtube.com/watch?v=YaCkfvm3Oyw
935 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:16:13 ] >>930 Cならともかく、C#みたいなしんまい言語を前提にコードかけるかよw in selfとかをキーワードに設計する方が多言語からの移植を考えないようなアホじゃないのか。 おまえはいつも、次の言語のキーワードとぶつからないように考えながら書いてるのか?アホはおまえだなw
936 名前:デフォルトの名無しさん [2008/06/18(水) 21:18:57 ] >>933 Javaの世界ではC#の奴はめちゃ嫌われてるよ。 演算子オーバーロード―がどうとかうるさいしww VBほどじゃないけど(笑)
937 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:21:33 ] それをC#のスレで言って何がしたいのか分からん 嫌われてるからJavaやれってか? そんな気を使わなくてもC#一筋なやつの方が少ないだろ
938 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:26:14 ] C#一筋で食っていけるほど仕事がないな。
939 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:26:54 ] Javaの新機能はほぼ全てC#のパクリなのにな
940 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:28:49 ] だから移植前提で独自キーワード入れないでほしいんだけど。またMSの悪い癖(独自拡張?)がでちゃったんですか?
941 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:31:26 ] 昔COBOLという言語があってな。 ていうか独自キーワードってなんだよ。 Javaのキーワードが他の言語からの移植を考えて決められてるなんて初耳だ。
942 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:33:07 ] >>940 Javaを使い続ければすむことじゃないのか?
943 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:51:19 ] Javaって $_ みたいな名前定義できなかったっけ? CLIだとどうなってるんだろ?
944 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:59:50 ] Java屋? C#出たときあちこち馬鹿にしまくったくせに掌反してパクり始めた奴らだろ? そりゃあんだけ醜態晒せば嫌って、なかったことにでもせんとなwwww まあそれはいいとして @ つければキーワードとして扱われなくなるよ。VBなら[]で囲むんだっけかな 相互運用のためにその手の機能を持つことが推奨されてる。ちなみにCILは「どんな識別子でも」持てるから 限界はあるんだけどな
945 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:06:13 ] 移植するのに変数名まで同じにしたい痛い人がいるスレはここですか
946 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:07:26 ] 実際そんなに独特な予約語多くないだろ 2.0以降に追加されたキーワードは全て文脈次第だし
947 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:09:25 ] あそうそう、コンテキストキーワードも多いっての書き忘れてた
948 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:14:03 ] 半年も使わないと忘れちゃうしキーワード多すぎだろ。 いちいち覚えるのとか別に苦痛じゃないんだけど、なんかMSに束縛されてるみたいで嫌じゃないか? まあ、変なところがあったらコンパイラが叱ってくれるからいいんだけど…
949 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:17:23 ] …半年はさすがに記憶力悪すぎかろくに触ってなかったレベルだろう。
950 名前:デフォルトの名無しさん [2008/06/18(水) 22:19:51 ] scriptfpとかpackageはそのままでjavaに移植できるの? java使ったことないんでしらんけど。 そもそも多言語移植の時に変数名そのままで移植できなきゃやだやだやだ なんてバカかよ。ほとんど意味ないと思うんだが。 そこまでしたいならまずjavaの段階で適宜リファクタリングして移植すりゃ いいことなんじゃねーの?
951 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:21:05 ] ざっくり読むと アホがjavaからC#へ移植を試みて文句言ってる のに食いついたって感じ? 暇だなぁ、お前等
952 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:23:01 ] J#でもつかってろよ
953 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:26:15 ] おお、まさにJ#でこの話終わりだなww
954 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:26:25 ] コンテキストキーワードよりもはるかに気持ち悪いのは, インターフェイスとか抜きで特定の名前(引数)のメソッドの呼び出しに変換される機能 foreach→GetEnumerator()とかコレクション初期化子→Add(引数任意)とかクエリ式とか
955 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:28:08 ] C#コンテキストキーワードって get set partial where yield value と後はC#3.0で導入されたクエリキーワードぐらいだよな。 >忘れちゃうキーワード explicit implicit stackalloc unchecked volatile あたりは時々忘れそうになる。
956 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:30:41 ] add/removeとかも<コンテキストキーワード
957 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:30:57 ] そろそろ次スレ立てたほうがいい?970くらいでいい?
958 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:32:24 ] >>954 java5にも同じのあるじゃないか Iterable/Iteratorでfor ( : ) をお忘れではないか
959 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:35:22 ] >>958 C#のはダックタイピング的なのでちょっと違う。 多分>>954 はその事を知ってて書いてる。
960 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:52:38 ] Whereという名前のメソッドがあればクエリ式のwhere使えるんだよね
961 名前:デフォルトの名無しさん [2008/06/18(水) 22:53:33 ] >>955 ええ!それは忘れないだろ。 それ、使わないならC#言語じゃなくてもいいでない? ん・・・このスレのレベルは、理解に苦しむ・・
962 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:57:03 ] >>959 了解、インターフェイスがなくてもメソッドの名前が一致してればOKという話か。 usingはなぜかIDisposable.Dispose()でないと受け付けない。 これもメソッドの名前だけで使わせて欲しいよ。
963 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:57:17 ] >>956 リファレンスのキーワードの項に、 >>955 のとクエリキーワードは載ってるけど、add/removeが載ってない 中の人にも忘れられてる?
964 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:03:23 ] add/removeはデリゲートだけでデリゲートでも普通使わないからやっぱり忘れられていると思う。
965 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:03:48 ] C#というのは、Javaと比べるとポインタ演算unsafeとstackallocが売りだと思うんだけど…
966 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:07:13 ] いやなウリだな
967 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:08:34 ] >>964 WinFormでもWPFでもコントロールのイベントはカスタムしてるのがほとんどだぜ
968 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:11:15 ] 便利なものはどんどん積極的に組み込んでアピールしていこうっていうのがコンセプトでしょ
969 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:13:49 ] ヘジたんはむしろ抑え役っぽい
970 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:17:46 ] 抑え役だし押さえ気味だよなぁ。 というかあいつら基本的に自分たちでだいぶ使ってから出すから まぁそんなもんかという気はする。
971 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:32:38 ] VBと違ってクエリ演算子のサポートが消極的すぎ 中途半端に付けるくらいならクエリ式なんて無くてよかった メソッド形式だけだとどうしてもインパクトに欠けるからなあ
972 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:32:42 ] javaがいったいいくつ独自キーワードを取り入れたか
973 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:35:19 ] 今のC#のウリは関数型とラムダ式だろ JavaやC++とくらべて進んでるところは
974 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:38:10 ] 次はついに動的型くるかも
975 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:42:53 ] 動的型というか、動的っぽい記述が一時的につかるようになる dynamic ブロックになりそうかな。
976 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:45:46 ] GetEnumeratorは仕方ない。 ジェネリックがなかったころだから。
977 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:48:39 ] Mix-in 入れてくれんかな
978 名前:デフォルトの名無しさん [2008/06/18(水) 23:49:20 ] 相変わらずC#はキモイな どこがどうキモイかを気がついてないようだけどw
979 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:54:12 ] >相変わらずC#はキモイな 何言ってる? 現在進行形でキモクなってんだよっ