ふらっとC#,C♯,C#(初心者用) Part66
YouTubuのURLから動画のタイトルを取得することはできますか?
できません
いや、できるだろ、WebClientと正規表現で。
8 :
デフォルトの名無しさん :2010/11/28(日) 01:26:40
URLにはタイトル情報はないな URLにアクセスしてhtmlだけダウンロードしてくれば その中にテキストデータで埋もれてるからそれを抜き出せばいい
ちゃんとyoutubeのウェブAPIを使おうよ
初心者でスマン。 慣性スクロールのやり方教えてください。
11 :
デフォルトの名無しさん :2010/11/28(日) 02:41:47
>>10 windowsってそういうのを作りこむには向いてないかもねw
WPFでタッチインターフェイス使うなら慣性もAPI提供されてるんだけどもね。
picturebox使った対数グラフの描画のしかたを教えてください。
14 :
デフォルトの名無しさん :2010/11/28(日) 08:52:35
bmpを作って点を描画してpictureboxへ渡す
ここってGUI関連の話しちゃいけなかったのか
次スレからテンプレ変更
勝手に決めるなハゲ
C#以外の言語の質問をC#, C♯, C#相談室でしろってあほか わけわからん誘導すんなよ
「ここは初心者用だ!」 とは、質問者にではなく、答える側に言いたい。
答える側も初心者限定ってこと?
え?
何その茶番
初心者からしたら、何処までがC#言語の範囲でどこまでが.NET Framework なのか区別付かないこともあるだろ。GUIも多少はここでいいんじゃない?
というか、言語とフレームワークそこまで厳密に区別する意味ない。 フレームワークなしじゃ大したもの作れないし、 C# はフレームワークに乗っかった機能多いし、
GUIは相談室でやれとか初めて聞いたわ。 >「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 >ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、 >ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。 これが全て、GUIの質問もしていい。
先生、結論をお願いします
自称初心者は全員ここでおk 自称上級者に「お前は初心者じゃねえ」と叱られたら相談室へ
わかりにくいので真理値表でお願いします
A = C#初学者 B = 小規模なアプリケーションを完成させたことがある C = 大規模なアプリケーション開発に携わったことがある D = C#マニア | A | B | C | D | ------------------------- 初心者/質問 | O | O | X | X | 初心者/回答 | X | O | O | O | 相談室/質問 | X | O | O | O | 相談室/回答 | X | X | O | O | こんなとこか?
どうでもええわ
36 :
デフォルトの名無しさん :2010/11/28(日) 18:22:04
そのくらい自分でやれ
ここは質問スレであって、依頼スレじゃないよ。
どうやったら依頼を受けてくれますかという質問です
そいつはちと高くつくぜ
お金払えば受けてくれるんじゃない?
出来高払いで。
5000万ぐらいなら払えます ジンバブエドルで
両替手数料が高くつきそう
雑談はよそでどうぞ。
46 :
45 :2010/11/28(日) 19:58:00
DrawDoubleLogarithmicGridのxscaleの計算コピペしてr使うの忘れてたわ // スケールを計算 float xscale = r.Width / (float)Math.Log10(xmax); float yscale = r.Height / (float)Math.Log10(ymax);
そのバグにより報酬減額100%とさせていただきます
>>46 まあグラフだから実用上問題ないはずだけど、
本当はfloatにキャストするのは最後にした方がいいような
>>47 バグではないよ、どっちでも動作変わんないし
>>48 floatってそんな精度悪かったっけ?
>>49 使う範囲によるけどゲームのように速度重視じゃない場合は64bitになってるでしょ
C#も一部は明示的にfloat使うところもあるけど基本はdoubleだし
>>45 さっすが、仕事速いっすねえ
1000円しか持ってないけど、将来あなたが主任級まで昇進できることを俺が保証します。
もう880円しかなくて
ジュース飲んでんじゃねーよはげを髣髴とさせるな
56 :
デフォルトの名無しさん :2010/11/28(日) 22:22:33
すいませんが教えてください。 static class Program { static void Main() { Form1 form=new Form1() form.Show(); Thread t=new Thread(new ThreadStart(form.run)); t.Start(); t.Join(); } } public class Form1:Form { public Form1(){} public run() { this.Show() while(this.Created) { Application.DoEvents(); } } このコードを実行すると、Application.DoEvents()があるのに、どうしてWindowsの メッセージ処理をしてくれないのでしょうか?
また気色悪いコードだなあ
とりあえず何をしたいのか書いてくれ
59 :
デフォルトの名無しさん :2010/11/28(日) 22:37:16
ゲームループでググり、実験しています。 ちなみにform.Show()を runメソッド内に置くとWindowsのメッセージ処理をしてくれて フォーム右上の「x」でフォームが閉じます。
60 :
デフォルトの名無しさん :2010/11/28(日) 22:38:51
56:のコードで this.Show()は無しです。
61 :
デフォルトの名無しさん :2010/11/28(日) 22:40:16
>>56 Form1のメッセージループがメインスレッドで動いているのに、別スレッドでDoEvents
するって・・・。お前にはマルチスレッドは10年早い。
まずDoEvents自体勘弁して欲しいけどね
これでいいだろ [STAThread] static void Main() { Form1 form = new Form1(); form.Show(); while (form.IsHandleCreated) { Application.DoEvents(); } }
お前らホントにDoEventsが好きだな。DoEvents使っていいのは小学生まで。
66 :
デフォルトの名無しさん :2010/11/28(日) 22:55:31
56です。低レベルの質問、すいません。 「別スレッドでDoEventsするって・・・」 ってどういうことでしょうか?
67 :
デフォルトの名無しさん :2010/11/28(日) 23:03:05
>>66 ShowするスレッドとDoEventsするスレッドは同じでなければならない。
↓これなら気が済むか?
static class Program{
static void Main() {
var form = new Form1();
new Thread(form.Run).Start(); // background thread.
Application.Run(form); // または
>>64 の用にDoEventsでループする
}
}
class Form1:Form{
public void Run(){
while( this.Created ) ;
}
bool Created;
}
68 :
デフォルトの名無しさん :2010/11/28(日) 23:03:11
中学生からは何を使うの?
普通にプログラム書いてれば、DoEvents を使う必要はない。
きちんとイベントハンドラの制御を終えて、唯一のメッセージループで処理が回る 様に書くに決まってんだろ。
71 :
デフォルトの名無しさん :2010/11/28(日) 23:11:50
いろいろ勉強になりました。 ありがとうございました。 マルチスレッドはかなり奥が深いですね。
MS自身がDirectX SDKのサンプルで DoEvents使ってた経緯があったりするから困り者
74 :
デフォルトの名無しさん :2010/11/28(日) 23:20:33
あ、それだ。 どれくらい奥深いかは、分かりませんが、 質問に答えてくださったかたへの礼儀として 一文を書いた次第です。
ちょっとだけ時間のかかるような処理をループで回すようなときとか、 わざわざスレッドやバックグラウンドワーカー作るよりも DoEvents使っちゃうほうがコストが低いと思うがそれもだめなのか?
好きにすればいい。
イベントハンドラの中でDoEventsを使うとたのしいよ すっごく
イベントハンドラ以外のどこでDoEvents使えってんだ
79 :
デフォルトの名無しさん :2010/11/28(日) 23:43:09
67のコードで Application.run(form) の代わりにform.show()はなぜ駄目なの?
Application.Run(form);はformが閉じられるまで処理がそこで止まるから form.show()じゃそのままMainメソッド終了しちゃう
>>75 DoEventsでどんなイベントが実行されても安全なことが保証できてるなら構わないぞ。
イベントハンドラ中にFormがDisposeされてもいいんだな?
>>79 アプリケーション全体ではどこかでメッセージ処理をしなくてはいけない
メッセージループの開始をしてくれるのがApplication.Run()
だから、フォームが1つならApplication.Run() にするのがもっとも簡単
逆にメインフォームとは別のサブフォームの作成なら、すでにメインフォームで
メッセージ処理をしてるはずなので、Application.Run()ではなく、Show() を使う
83 :
デフォルトの名無しさん :2010/11/28(日) 23:58:57
56のコードであればメインフォームのメッセージループは開始されて おらず、62の意見は間違っているんでは??
>>81 ディスポーズされた後にコントロール操作したら例外発生するのかと思ったけどそんなことはなかった
>>83 while(this.Created) { Application.DoEvents(); }
というのがメッセージループ(≒Application.Run)に相当するんじゃないの
まあ、うまく動作してないわけだけど
86 :
デフォルトの名無しさん :2010/11/29(月) 00:05:57
もういいよ。pinvokeでWin32API使って直接ループ回せよ。
動いてないソースをあれこれするより
>>61 の動いてるやつ改造すればいいじゃん
>>83 メインスレッドでShowしてるでしょ
Application.Runは手っ取り早いメッセージループ開始方法ではあるが
方法はそれだけではない
89 :
デフォルトの名無しさん :2010/11/29(月) 00:11:42
showはメッセージループを開始するってこと?
90 :
62 :2010/11/29(月) 00:13:32
>>83 ちょっと間違えた。メインはJoinしているからメッセージループは実行されていない。
でもnewするスレッドとShowするスレッドとメッセージ処理するスレッドは同じでなければならない。
showはメッセージループを開始するってことではないよ でもshowした後はメッセージ処理しなきゃいけないから Application.Runやwhile(this.Created) { Application.DoEvents(); } で メッセージ処理をループさせなきゃいけない。 で、メッセージはshowしたスレッドで処理されるから >Form1のメッセージループがメインスレッドで動いているのに はこれからメッセージループが走るという意味ではまあそんなに外れてはいない。 で、DoEventsは現在のスレッドでshowされたメッセージを処理する命令だから、 new Thread(new ThreadStart(form.run))で新しく作ったスレッドで実行しても意味がないってことだろ。 まあ、それ以前に新しくスレッド作った直後にjoinするとか一体何をしたいんだと小一時間問い詰めたい訳だが ところでnewするスレッドって関係あるの?
C#でショックウエーブみたいな簡単なブラウザ3Dネトゲ作るには なにが最適でしょう? silverlightやらWPFやらブラウザ系はいっぱいあってメリットデメリットがわかりません
silverlightはWPFのサブセットで対象をブラウザに限定したのもって感じ 普通のブラウザゲームを作るならsilverlightのほうがお手軽だろうな ただゲームを作るなら素直にFlash勉強したほうがサンプルとかも豊富だし楽そうだが
SilverlightはFlexの方が近いような
ネイティブの3Dは今のところFlashでもSilverlightでも標準じゃ無理。 ソフトウェアレンダリングのエンジンならあるけど当然性能は全然出ない。 WPFはネイティブの3Dが使えるけど、ウィンドウ枠がブラウザか独立ウィンドウかの違いくらいで 全くブラウザ上で動かす意味がない。 あとはJavaアプレットも3Dいけるけど今時流行らないよね
3dに見える2dが限界だな
HTMLも3Dはまだまだ不透明 ソフトウェアレンダリングを使ったお遊びでお茶を濁してたり 標準と謳いながらネイティブのプラグイン使って騙してたりするレベル
適当に自作クラスの配列作ってみたけど、動かない //main部分 My[] my = new My[] { new My { Str1 = "あいうえお",Str2 = "かきくけこ",Str3 = "さしすせそ" } new My{ Str1="あ",Str2="い",Str3="う" } new My{ Str1="はあ",Str2="ひい",Str3="ふう" } } class My { public String Str1 { get; set; } public String Str2 { get; set; } public String Str3 { get; set; } } どこが間違ってるの?
もう全部匿名型にしちゃえよ
>>98 >動かない
ほんとに動かないであってるの?コンパイルエラーってことはない?
,がたりない
ベクタとビットマップの違いってなんですか? C#ではべクタは取り扱えないんですか?
せめてベクタとビットマップの違いぐらいは把握してから質問してくれ…PC初心者レベルじゃないか
はい。
VB6にあったDriveListBoxやDirectoryListBoxとかは、VS2010ではなくなったんですか?
106 :
105 :2010/11/29(月) 20:00:16
自己解決しました。
>>102 WPFはUI全体がベクタ グラフィクス
108 :
107 :2010/11/29(月) 21:32:15
間違えました。。
>>105 Microsoft.VisualBasic.Compatibilityを参照に追加して、ツールボックス アイテムの選択からDirListBox/DriveListBoxを追加すればC#からも使える。
オサレなGUIする必要ないから 軽くて安定してるwinformで十分 WPFで下手にデザイン凝ったり特殊なコントロール作られたりしたほうが迷惑
>>110 そうそう、モジの色がカラフルで、画像と合わせて、グラデーションかかったボタンが激しく動き回り・・・
おしゃれだけど、見づらくて使いづらそうだよね。
>>110 おしゃれなの?それ
楳図かずおみたいな奴だな
というか
>>111 がオシャレかな
派手でセンス悪いだけだろう
どんな恐怖アプリだよ
そういうセンスの人はblinkとかマーキーとか使いまくっちゃうんだよ
提供された機能は使い切らないといけないみたいな信条でもあるんじゃねえか
ボタンが動き回り・・・ の点々がいいよね ボタンなんかどんなGUIフレームワークでも動かせるけどお前ボタン動き回る画面なんか作ったことあんのかよとw
js覚え初めのころ逃げるボタンとか作ったよ
こらWPFスレのコピーすんなバカ
js覚え初めのころ逃げるボタンとか作ったよ
俺も作った カーソルにキラキラが追従するのとか
js覚え初めのころ逃げるボタンとか作ったよ
まだWPFがオサレなGUIするための物だと思ってる人居るんだ
無骨以外にFormsの威張る所がないんで
いまさらFormsなんてクソダサいのなんか使いたくねーよな GDI時代の遺物だよありゃ
ホームページでもよくあるじゃない 背景画像を明るいチェック柄にしてるのが みづらくて仕方がない 美的センスがないやつは素直にwinformで制作すべき WPFじゃなければ作れないことなんてないんだから 重いだけで使い物にならない
WPFって重いの?
VS2010が重いなら重いということになるな
>>126 まだ美的センスがないとWPFで作っちゃいけないって言う人が居るんだ
センス無い奴は何で作ってもだめだろ。 そういうやつはFormsでもイライラ棒みたいな操作を要求するメニュー階層作ったりする。
>イライラ棒みたいな操作を要求するメニュー階層 なにそれ怖い
Windows Formよりは重い、はず。 WIndows Formができたころよりも PCのハードウェア性能が圧倒的に伸びてるから その性能を十分に活かしたいならWPFでいい。 いまだにPen4とかメモリが1GBとかの古いパソコンならWindowsFormでいいんじゃない? WPFは確かに美しい外観がWinformと比べ圧倒的に作りやすいことも事実だが (たとえばWinformだと丸いボタンや、Labelを斜めに配置することが極めてめんどくさかったが WPFならプロパティやテンプレートで数行書くだけでできる) データバインディングも重要な特徴なんだけどな。 WPFたたくやつって美的センスとか外観部分だけしか見てないよね。
>>128 逆に考えるんだ。全てのアプリの中でも最大級の部類に入るVisual Studioよりは軽くなるはずだと
バインディングとテンプレートの素晴らしさが理解できないから見た目しか叩けないんだろう。 ちょっとぐらい勉強してから批判すればいいのにw
WPF重すぎワロタ
137 :
デフォルトの名無しさん :2010/11/30(火) 00:07:26
C#を使うにあたって一番のメリットそしてデメリットって なんですか?
どんな恐怖アプリだよ
GUIに求められるのは美的センスよりもユーザビリティや表現能力 単純な作業だけの定型アプリならWinFormsで十分だが 複雑な情報を視覚的に提示したり、インタラクティブな操作が 必要なときはWPFの表現能力が必要になる GUIの話で見た目についてしか評価できないのは 真面目にGUI設計したことないやつだろ
>>137 一番のメリットはVisual Studioのサポートを最も享受できること
一番のデメリットは.NET必須になること
デメリットの方は時間が解決してくれたので、今ではあまり問題視されなくなった。
(古い低スペックPCが淘汰された・Vista/Win7にプリインストール・XPにも十分に普及・ユーザの.NETへの理解が進んだ)
>>133 丸いボタン?そういうのがいらない
OS標準ボタンで問題ない
データバインディングはwinformでもできる
>>135 WPFでやるとコードが長くなるだけだが
ユーザーは独自性のあるGUIより
快適で安定しているものを求める
それにw2kじゃ使えない
>>139 具体的にどういう場面で必要ですか?
アニメーションツールや3DCGのソフトや
ゲームなどグラフィカルなものが沢山ありますが
それらはWPF使ってなくても実現できていますが?
もっと斬新なものでもあるんですか?
>アニメーションツールや3DCGのソフトや >ゲームなどグラフィカルなものが沢山ありますが >それらはWPF使ってなくても実現できていますが? >もっと斬新なものでもあるんですか? じゃあそれらをWinFormsで実現できるのか? WinFormsよりWPFのほうがはるかに簡単に実現できる
手で数値打ち込んで微調整していた頃から比べりゃどっちもすごい進歩だよ
アセンブラ書いてた頃と比べりゃ(ry
>>141 >データバインディングはwinformでもできる
WPF使った後だとショボすぎる
>独自性のあるGUI
なんで独自性のある斬新なGUIにしないといけないんだアホか
「実現できる」ことしか批判してないのがワロス たしかにWPF使わなくても使ってもどっちでも実現できるが、WPFのほうが圧倒的に楽だからWPFがいいつってんのにwww
そういやJAVAでGUI作ってた頃は座標やらなんやら全部手打ちだったなぁ
>>132 目的の機能がメニュー階層の深いところにあって、マウスポインタがメニューから
外れると今まで辿ってたのが消えちゃって1からやり直しになるってことだよ。
>>146 じゃあ、WPFでなぜゲーム開発しないんだ?
結局C++だろ?
WPFなんて重いだけ
作るのが簡単?利用者からしたら迷惑なだけ
衝撃イライラメニューだな、これは Formsでってことはわざわざメニューコントロールを自作したのか
>>150 そうだね、C++ならゲームも業務アプリもなんでも作れるし
とっても軽いから、もうC#やる必要ないよね
だから二度とこのスレに来ないでくれ
>>150 ゲーム開発の話が出てくるとは思わなかったw
お前はWPFを何だと思ってるんだwww
>>149 の問題は Reactive Extensions 使うと楽に対処できるね。
WPFは重いからダメ!Windows Formでも実現できる! ↓ WPFのほうがいろいろ簡単だよ? ↓ ゲーム作るならC++のほうがいい! 日本語が通じない人だw
まず、C++ 出すあたり、C# をなんだと思っているのかと。
まあそんなWPFを毛嫌いすんなよ。悪いもんじゃないから
たぶん例のトリップ付きの人だろ
MVVMだと1つイベント書くだけでもやたらコードが長くなる XAMLだとインテリセンスも効かないし 何よりIDEが糞重くてやってられん やっぱりコンソールアプリでいいやってことになる
Reactive Extensions は、複数のイベントの合成とか マルチスレッドしたりとかがめちゃくちゃ簡単にできる。
今回の問題だと、 メニュー部分のボタンの MouseEnter イベントを遅延して取得すればいいと思う。
WPFはすぐ消えるだろうな 2つの言語覚えなきゃいけないって面倒
>>160 最終的にLinux最高って結論に至るのであった
XAMLの記法なんて真新しいもんでもないだろうに。 プログラミングやっててXMLと無縁なんて今時考えられんだろ。
163はプログラム作ってるけどXML知らない無能なんだよ
>>163 XML使ってインスタンスツリー構築してるだけなのに見た瞬間思考停止しちゃう人ってw
べつにWPF消えてもらっても構わんが 早いとこ代わりを用意してもらわんとなあ GPU活用かつマルチメディア対応のやつ
全ての人がお前と同時に生まれて お前と同時にプログラミング初めて お前と同時に同じ言語を学習したとでも思っているのか? お前は自分以外のすべての人間を見下しているんだろうな お前が唯一できるXMLを楯にして 友達もいない、彼女もいない、誰にも愛されない人生を送っているお前が唯一自慢できるもの おまえにとってはその部分だけでしか人と比べることができない それ以外はすべて劣っている無能だから こき使われて、評価されなくて、自殺するタイプだな
先に生まれたから 先にプログラミング始めたから というだけで初心者を罵倒する奴は どの会社でも仲間はずれになる 先にやったんだから出来て当たり前 そんなことを自慢げに語るような奴は 会社にとって不利益
上を見て歩くのは諦めたみたいだね 常に下を見て、自分より劣っているところだけを抜粋して そいつのすべてをわかった気になる 社交性があって、人徳があっても、自分より少しでも プログラミング知識が足りないところがあると そいつは自分より劣っていると解釈して 自分の無能さを誤魔化しながら生きることしかできなくなっちゃったんだね はやく自殺すればいいよ
XMLなんて時間さえかければ誰でも理解できる 低脳なキミでさえ理解できたんだからね そしてすぐにキミは追い抜かれる そういう奴に対してキミは運がよかっただけと都合よく解釈し またきた新入社員をターゲットにして見下す そして気づいたら中年のPG 30以上にもなって役職も与えられない惨めな独身PG それでもキミは他人を見下すことをやめない そうしていないと、怖くて、情けなくて、惨めで自殺しちゃうから
気が済んだならお勉強に戻ろうね
見下すのは哀れだという文章で他人を見下すという矛盾について
それは小学生レベルの反論だな 最初に見下してきたのが悪い 人を見下すような奴は見下されて当然なのだからね 何も矛盾していない
馬鹿っていったやつが馬鹿理論かw
>>174 そんな理屈が世間で通ると思っているの?
人と会話したことあるの?
ま、どちらにしてもそういう幼稚な自己擁護しかできない時点で
お前が無能なのはよくわかるよ
まともな知恵があったら揚げ足みたいな反論じゃなくて
自分の正当性を論理的に証明すれば?(できるならね)
いつまでもそうやって幼稚な言い訳しながら生きていきな
ずっと自分を騙しとおせるなら自殺しなくても済むだろうよ
でも、他人を騙せるほどお前は利口じゃないから
いじめられるだろうけどね
;' ':;,, ,;'':;, ;' ':;,.,.,.,.,.,,,;' ';, ,:' : :、 ,:' \ ,,. 、./ ノ( ::::::::', :' ● ● ⌒ :::::i. i ''' (_人_) '''' * :::::i : {+ + +} :::::i `:,、  ̄ ̄ ::::::::: / ,:' : ::::::::::::`:、 ,:' : : ::::::::::`:、
何一つ言い返せなくなったから無関係の事で荒らし始めたwww
WPF関係で荒らしてるやつって例のコテハン君か
ちょっと冷静になれ。
XMLなんて知らなかったらム板に居る全ての連中から馬鹿にされるぐらい必修だろ??
>>180 コテハン君は一応使ってみてから理解できないと騒ぐ
今騒いでるのは使おうともしないコテハン君以下の存在。
人格批判はマ板でやってくれ。 XMLの記法はXAMLだけでなく設定ファイルやHTMLとしても利用されているから 学んで無駄にはならん。 2つの言語を学ぶのは面倒だなんて言ってたらプログラミングなんかできっこないぞ。 常に向上心をもて。
183 :
174 :2010/11/30(火) 02:26:53
>>177 まてまてwなんで俺がお前を見下したことになってんだよw
まあ、変なとこでちゃちゃを入れた俺も悪いけどさ
ところで
>>174 と
>>177 別の人なの?
184 :
174 :2010/11/30(火) 02:27:33
プログラム板は煽りたい性低いから楽しいわw
>>185 煽りたい性…煽るなら脇を固めてくれないと白ける
>>185 XML使えないのをちょっと馬鹿にしたらこれだからなw
>>186 実はそれコピペで釣られたのは俺らだったっておち
>>189 軽くググっただけじゃ出なかった。え?コピペじゃなくてマジで書いてんの?
タイピングの才能があるのは認める
WPFスレで似たような書き込み見たことある
524 :デフォルトの名無しさん:2010/11/11(木) 22:09:23
>>522 みたいな人間的に終わっている奴は
ある程度プログラミングできてもずっとこき使われるだけの平止まりだろな
根暗で誰からも相手されず、飲みにも誘ってもらえない童貞
いつか鬱病になって自殺するんだろうな
陰湿にネチネチとWPF批判を続けてるんだね。 人を貶すときは自分が言われたくない言葉を無意識に選んでしまうということか。
XAMLはBinding属性とかに指定するマークアップ拡張 (だっけ?) があるから、単純なXMLの知識だけじゃ駄目だと思う。 覚えるべき差分はすごく小さいとは思うけど。
マークアップ拡張で等価なXAMLツリーやC#コードに変換できないのって何かあるっけ?
196 :
妖犬 ◆youkenkF9Y :2010/11/30(火) 08:21:53
test
フォルダ削除するツール作ったんだけど 手動だと別のプロセスが〜と出て削除できないけど、ツールだと削除できる 特殊な削除の仕方はしてなくて普通にDeleteしてるだけなんだけどどうして削除できるの?
全く関係なくて どこかのプロセスでカレントディレクトリになってるか、 中のファイル掴んでるだけじゃないの?
だからそれをなぜ削除できるのかが知りたいんだよ わかんねーやつだな
だからただの勘違いじゃないだろ 本当に中のファイル確実に掴んでる状態で削除できたか確認したのか?
×だからただの勘違いじゃないだろ ○だからただの勘違いだろ
確かにコマンドプロンプトから rmdir e:\hoge ってやるとエクスプローラでe:\hogeを開いていても 削除できるな
エクスプローラが気を利かせて、そのファイルを使っているプロセスがある場合には 削除を実行しないようになっているだけじゃ? FileShare.Writeが指定されない状態でファイルを開いて、それでも消せるならそれは確かに不思議。
>>202 なるほどやっぱそういうもんか
エクスプローラ上じゃ削除できないファイル名を
コマンドプロントから削除するソフトとかあるもんな
エクスプローラは掴んでないよ 一番確実なのは別のコマンドプロンプト開いてそこにcd
C#関係ねぇよ
現在C#を使用しているのですが、コンボボックスやリストボックスにEnumをDataSouceとして 設定できるのでしょうか?よろしくおねがいいたします。
Enum.GetValuesとかで配列取得してそれをバインド
ありがとうございます。 System.Enum.GetValues(typeof(Enum型)); で取得できました^−^
エクスプローラでフォルダ削除しようとしても使用中とかで削除できないとき まずフォルダの中野ファイル削除してからフォルダ削除すると 問題なかったりするな。 まぁたまたま偶然そういうのが時々起きてるだけかもしれんが あとエディタとかメモ帳でファイル開いたままでも エクスプローラでファイル削除できちゃったりするね。
あれはロックの関係でしょ テキストエディタって開いててもファイルをロックしない物もあるし あと再起動しても消せないファイルがたまーにできることもあるよね 最近は遭遇しなくなったけど
ロックといえば俺妹
へえ
test
バックグラウンドでツリービューのツリーを生成したいんですが サブスレッドでフォームにはアクセスできないですよね? こういう場合いい方法はないでしょうか?
>>215 仮想モードがどうのって以前見たな
使ったことはないけど
大きなツリーなら最初に一気に作るんじゃなくて、 子があるかどうか+の制御だけして 後は開いたときに生成した方がいいんじゃないのかな
invoke のことじゃないのか
最初のツリーを最小限にして残りを別スレッド+invokeで作ってくと エクスプローラみたいな感じで作れるね
そっか。サブスレッド+invokeでよさそうです。 さんくす。
MSDN マガジン 読みながらMVVMについて調べてるんだけど、 ViewModelBaseみたいな奴らって毎度毎度自分で定義するの? それともどっかで公開されてるの?
222 :
デフォルトの名無しさん :2010/12/01(水) 17:21:22
C#で他鯖のサービスにアクセスしようとすると、 System.ServiceProcess.ServiceControllerを使用しているのだけれど 権限が足らないと言われてしまう NET USEすればいいのだろうけど、 C#だとどのように打てばいいの?
>.215 treenode をバックグラウンドで構成して それを UI スレッドでツリービューに放り込んでやれば良いんじゃないのかな。 バックグラウンドで treenode 構成するとき すでにツリービューに参照渡されてたらだめだけど。
>>222 権限のあるユーザーでプログラムを実行すべき。
C#とか関係ない。
226 :
221 :2010/12/01(水) 20:44:46
今、ダントツで人気なのはMVVM Light Toolkitだね。
公式はPrismでしょ MVVMというより大規模アプリケーション向けフレームワークだけど
アプリケーション向けフレームワークですね
>>227 ,228
情報ありがとうございます。
MVVMのサンプルいくつか覗いてみましたがそれらもMVVM Light Toolkitを使ってました。
Lightを使ってみて物足りなくなったらPrismにしてみようと思います。
おれもMVVM Light Toolkitいれてみたけど DLLの参照で!と出ているんだけど これってどこを参照しているの? どこにバイナリを配置すればいいの?
232 :
デフォルトの名無しさん :2010/12/02(木) 02:48:19
AnyCPUとかMixedPlatformsとかってなんなんですか?
233 :
デフォルトの名無しさん :2010/12/02(木) 02:55:50
AnyCPUってのは32bit(x86)/64bitを決めない感じかな? AnyCPUでビルドした場合、32bitOS上で動かすと32bitで動いて 64bitOS上で動かすと64bitで動く これは問題があってAnyCPUでビルドした物を64bit上で動かす場合 場合によってはトラブルの元になる まあ今のところはwebbrowserを使ってFlashが存在するページを表示した場合か 64bit版のFlash部品がないのでね・・・
234 :
デフォルトの名無しさん :2010/12/02(木) 03:06:13
それってintが64bitになることもあるってことですか? intってSystem.Int32のエイリアスだから32bit固定? MixedPlatforms と .NET はどうなるんですか?
C#としてintは32ビット固定。
c#といえども根底はネイティブ呼び出してるので その辺がAnyCPUとかの影響がでるんだっけ?
ポインタのサイズが変わる
どっちのコードが処理が早いか比べたい場合の良い方法ってある?
MVVM Light Toolkit これ全然だめじゃん VMでMessageBox使おうと思ったら リファクターでusingディレクティブ作ってくれないじゃないか
こういうことか parameter=>true これやればCanExcuteメソッド書かなくていいみたいだけど なぜこれでいけるのかがわからない
242 :
デフォルトの名無しさん :2010/12/02(木) 09:13:24
イベントってアンマネージリソースの扱いなの? 他の参照が外れても残ってる気がするのですが
デリゲートとかラムダ式とかC#はめんどいのー
any CPU/32bit/64bit はフラグを設定するだけで それ以外の出力内容は同じだったと思う。 基本的に Any CPU だとその環境に合わせて CLR がネイティブコード吐くんだったかな。 32bit だとかならず 32bitコードとして吐き出す。 これは過去のデータベースドライバとか 32bit版しかないものを使うためのフラグ。
リッチテキストで文字列表示するときのバインディングの仕方ってこれであってますか? 一応動くんだけど自信がない <RichTextBox > <FlowDocument> <Paragraph> <Run Text="{Binding テキスト}"/> </Paragraph> </FlowDocument> </RichTextBox>
あーあ・・・
>>248 あってるけどRichTextBox使う必要あるの?
>>242 イベントというのはつまるところ、イベントの発生元に受信先のオブジェクトの参照を渡して、
間接的にせよ直接的にせよ発生元が受信先のメソッドを呼んでいるだけだ。
発生元は受信先のオブジェクトの参照を保持してるわけだから、
当然、発生元のオブジェクトがGC対象にならない限り受信先がGC対象になることはない。
わかんなかったらObserverパターンを勉強すれば理解できるよ。イベントはそれを言語に組み込んだだけ。
WindowsAPIを呼び出すとき、引数や戻り値に構造体や定数が含まれるとき、 それらの詳細な設定値などは何処で調べればよいのでしょうか? MSDNやPInvoke.NETで調べましたが出てないことが多いんですよね。 定数の宣言とか、SDKのヘッダファイルを参照するとかいう記事も見ましたが、 そういうのはネットで公開されてるのでしょうか?
設定値っていうと、この引数にNULL渡しても良いかどうかって話に聞こえる 定義なら.hが一番確実さね Windows SDK 自体は普通にダウンロードできる まあほとんどはネットで検索すれば見つかるけど 日本語じゃないと無理とか言う奴はシラネ
var a = new Person{ Age=20, Name="ひろゆき", }; ここの最後のセミコロンをよく付け忘れる。 あとAge=20; みたいにセミコロンにしちゃう。 なんてこったい
ヨッシー「でっていう」
>>253 JavaScriptもやってるとついAge:20とか"Name"="ひろゆき"とか書いちゃったりする
スニペット自作たのしいな
Windows API 利用するときdllimport をどう書くかは .NET Framework のソースコードが参考になる。
ソースコードが参考になるね。
このオウム返ししてる人はBOTかなんかですか?
このオウム返ししてる人はBOTかなんかですか?
なんでそこで このオウム返ししてる人はBOTかなんかだね。 にしないんだ
このオウム返ししてる人はBOTかなんかですか?
このオウム返ししてる人はBOTかなんかだね。
人力BOTという暇人の極みに居る御方です。
codeplexとかにSDKヘッダファイル指定して 解析結果をP/Invoke形式で吐くようなのあった気がする
人力BOTという暇人の極みに居る御方です。
すいません。 System.Collections.Generic名前空間の、Queue<T>使って、Stringを格納してるのですが、foreachでテキストファイルへ書き出しすると、キューへ入れた順に出力されます。 これをキューへ入れた新しいほうから順に出力させたいのですが、どうすればできるのでしょうか?
それキューやないスタックや
foreach (var item in queue.Reverse()) queueには影響を与えない
Stackに入れ直すかLinqのReverse使うかお好きな方で
ロガー的な使い方するので、ある件数たまると古いほうから消していかないといけないので、キューを選択しました。 でも、ファイルへ出力する時は新しいほうから出力する必要がありました。 queue.Reverse<String>() でうまく行きました。 ありがとうございました。
273 :
デフォルトの名無しさん :2010/12/02(木) 21:54:09
1回のGCが即プチフリになるような環境なので、使うものは最初に確保して あとはずっとそれを使いまわすようなプログラムを組んでいるのですが、 yieldつかったコルーチン使う場合、IEnumerator<T>.MoneNext()呼ぶと 鬼のようにヒープを消費するんですが、これは回避できないのでしょうか?
初心者板で聞く内容じゃないようなw yieldつかったコルーチンに問題があるんじゃないの?
yieldはGetEnumeratorで列挙子が作られるときにヒープを消費するけどMoveNextは関係ないはず yieldの内容次第
MoveNextの中身はコルーチンから自動生成されるからyield使ってるところを見直す。 それでも分からなきゃリフレクターでどんなコード生成されてるか覗いてみれ
MSDNの説明のわかりづらさは異常 あの説明でわかるような人はそもそも見る必要ないだろ っていうような説明のページばっかり
え、めっちゃ見るけど
ある程度分かっている人がリファレンス的にみる分には便利だけど
メソッドの挙動調べるのにmsdn見ちゃダメって言われたら もうソースコードしか頼るとこないじゃん 個人ブログじゃ間違いがあるかもしれないし
MSDNはハウツー系のページが糞すぎる
ここでそんなこと言われてもな。日本語で説明あるだけでも良心的だぜ
基礎が理解できてればMSDNほど正確で集約された情報源は他にない。 たまーに間違ってたり英語版にしか書いてない情報あるけどねw
時々メンバ名しか書いてないクラスもあるけどな
本当に必要としてる情報はだいたい英語版しかない。w
解説サイトも英語のほうがいい。 でも英語わからん。 いちいち辞書で variableってどういう意味? とか調べちゃう。 高校中学時代にもっと英語勉強しておけばよかった
>>286 同意。俺ももうちょっと勉強しておけば
statiku voido mein(storingu...なんて書いて笑われずに済んだんだよなぁ。
>>287 スタチクってなんだよw
プログラムで使うキーワードに関しては単純に記憶力の問題だろ
あと英語のリーディングなんて努力すればいつでも習得できるぞ
もっと勉強しとけばよかったなんていって逃げてないで今すぐ始めなさい
289 :
デフォルトの名無しさん :2010/12/03(金) 00:17:55
プログラムやるなら英語できないと。 特にC#は日本語でアクセスできる情報量と、英語でアクセスできる情報量が10倍以上は違うと思う。 CとかC++なら日本語でもそれなりだけど。
プログラムとか技術的な文章で使われる英語はそんなに難しくないからな 俺は読みならサクサクいける。でも海外ドラマとか何言ってるか全然分からんw
単語の正確な綴りが思い出せなくてもプログラムが書けるインテリセンスは偉大だと思う
偉大だと思うね
自分でメソッドとか変数とかの名前作るときに大変じゃないか。 既存のクラスを利用するならいいけど。 たとえばAngleというスペルをAngelって書いたらかっこわるいだろ。
英語分かんねー!と言いつつ翻訳サイトで調べながら読んでたら、何となく言ってる事が分かるようになってきた。 でも、リスニングは全然ダメだからイベントでのオンライン中継が理解できねぇ…
エンジェルw ある意味かっこいいな
英語ベースの言語を日本語で説明するのは無理があると思うな 俺は英語のほうがわかりやすい
ふーん
以下英語できる自慢禁止
英語でおk
You is big fool man. だったっけ?
英語できるのが自慢になるのか?そりゃすまなかったな
お気になさらず 英語でどうぞ
いんくるぅど すたぢお えいち
Is My English AweSome? So Sorry
staticでnewするメソッドかプロパティ作っておけば便利なんだね。 class MySample{ int year; static public MySample NowYear(){ return new MySample{year=2010}; } } こんな感じで。
if(英語ができない人==低学歴) if(英語ができない人==海外サイトを閲覧できない) if(英語ができない人==仕事ができない) return 無能; return エリート;
All your base are belong to us.
>>305 staticとpublicの順が逆
あとその例なら定数のほうがいいんじゃない?Color.Emptyみたいに
インテリセンスでたまに 候補にstringとString objectとObject が出てくるんだけどこの頭が大文字/小文字の二つって違いあるの?
string 文字列 String クラス じゃなかったっけ? 色みてみなよ
C#キーワードになってるのが小文字、 .NET の System 名前空間のクラスの方が大文字。 キーワードは .NET クラスへのエイリアスなので、実質は一緒。
だれかNowYearに突っ込んでやれよ
ナウイやん?
正確なのか知らんが分かりにくい文章だ。
thread.sleep(1)とdoevents()は何が違いますか?
List<filePath>でファイルパスが格納されているリストを最終更新順にソートするには どうしたらいいでしょうか? List<filePath,lastWriteTime>のように2値のリストを作った後に並び替えをすればいいんだろうけど・・・ 上記のList<filePath>のみで行うにはどうすればいいですか・
間違えた、KeyValue< , >とかだね><
list.Sort((x, y) => x.LastAccessTime.CompareTo(y.LastAccessTime))
320 :
316 :2010/12/03(金) 15:57:08
>>318 さんと
>>319 さんのを参考に修正してみました
filesPath.Sort((x, y) => File.GetLastWriteTime(x).CompareTo(File.GetLastWriteTime(y)));
としてみました。ありがとうございます^−^
321 :
316 :2010/12/03(金) 16:55:14
あいかわらずだねw^−^
?
TEST
リストのインスタンスが入れ替わってもよければ
>>316 で言ってるようにいったん別のリストに入れるか
filesPath = (from path in filesPath
select new KeyValuePair<DateTime, string>(File.GetLastWriteTime(path), path) into pair
orderby pair.Key
select pair.Value).ToList();
みたいな風にしたほうがよさそうな気がする
比較関数中でファイルのAPI呼ぶのは効率悪そう
>>324 filesPath.OrderBy(file => File.GetLastWriteTimem(file)).ToList()
で十分
すばらしい
>>315 Windowアプリケーションにはメッセージループというものがあります。これは、
画面がクリックされるなどしたらそのイベントハンドラを呼び出すものです。
DoEventsはメッセージループを処理します。その結果イベントハンドラが
呼ばれることがあります。
Thread.Sleepはその場で少し休むだけでイベントは処理されません。
>>324 そういう考えならSortedList<DateTime, string>を使うのも手だな
まあ追加してから変更があった場合に対応できないけど
型変換がわけわかんね intのデータをbyte配列に入れるとかまたその逆とか stringのデータをbyte配列に入れるとかまたその逆とか C言語でいうところの memset(&data[100],0,size-100); 的な100番地から後ろをクリアみたいなことしたいときにどうするだとか とにかく知恵と勇気でどうにもならない言語で困る なんか型変換(型解決?)一覧表みたいなのがほしいね どっかにない? なかったら俺がアフィ目的で作ってお金稼ぐけど
>>329 >intのデータをbyte配列に入れるとかまたその逆とか
BitConverter.GetBytes/BitConverter.ToInt32
>stringのデータをbyte配列に入れるとかまたその逆とか
BitConverter.GetBytes/BitConverter.ToString
指定されたエンコーディングのバイト配列が欲しいならEncoding.GetBytes/Encoding.GetString
>memset(&data[100],0,size-100);
そういうのは危険だからできないようになってる。
unsafeなら可能だけど一括でクリアするような用途では誰も使わない。
>なかったら俺が作る
需要がない。古い考え方を捨てるとこから始めようか。
>>329 そんな中途半端な知識で作るとかマジ迷惑だから勘弁してくれ
>>329 それ、知恵と勇気じゃない。
無知と無謀。
エンディアンの違いとか、
バイトアラインの違いとか、
int のサイズの違いとか、
色んなものに悩まされた結果、memset は使えないという英知にようやく到達したのに。
知恵と勇気で勝ち残れ
メダロットとはまた懐かしいネタを
>>330 いちいちそんなクラス知ってないといけないっつーのがなんかすげー嫌だよ
>そういうのは危険だからできないようになってる。
なんで?
すげー使うのに
かりにやりたいときはいちいち全部コピーしないといけないのか?
ウンコー
>需要がない
あるよ
絶対ある
だって現にBitConverterとか長ったらしい名前のクラス知らないとこの操作できないだろこの言語
> クラス知らないと そういってオレオレライブラリ作られる方が面倒って直ぐ分からないですかね
BitConverterが明らかにC#使って書かれていないであろう事実にウケル
>>335 だったらC#じゃなくてC++/CLI使えばいいんじゃない?
.netを利用しつつC言語の資源も使いまわせるわけだし
C++/CLIとかきもすぎる 使ってみて一時間でアンインスコしたわ。
C#でBitConverterは作れないからな 他にも作れないものありそう
C--か
いつもの荒らしが騒いでるんだろ。 僕は馬鹿ですとアピールして何がしたいのやら?
346 :
デフォルトの名無しさん :2010/12/04(土) 02:08:28
C#が不便なら他を使えばいいだけだ。 1つの言語だけを使わなきゃいけないわけでもないし。 BitConverterで済むこと程度なら、ちょっと調べりゃいいことだと思うけどな。
作れるね。
>>350 この子もC使えないと思う。
まともなC使いならこの程度の問題で困るわけない。質問書く時間で検索してMSDN見て終わり。
memset(&data[100],0,size-100); が使えて BitConverterが使えないってのも不思議な話ではあるな 結局思い通りにコードが書けなくて愚痴りたいだけなんだろ まあそれで気が済むなら好きなだけ書きこんでいってくれ
>100番地から後ろをクリアみたいなことしたいときにどうするだとか ライブラリじゃなくて基本文法だと思うが。 for (var i = 100; i < ar.Length; i++) ar[i] = (byte)0; それか配列なんだからArrayクラス調べれば Array.Clear(ar, 100, ar.Length - 100); ぐらいすぐ見つかるだろ。
アレィ見てたのね〜
うむ
コールバックを受信するウインドウのハンドルを取得するのに、 VBではForm1.hWndでいいようなのですが、C#はどうすればいいですか?
ありがとうございます。IDEのプロパティ一覧しか見てませんでした。
属性はC++のマクロによる言語拡張と同じイメージでよいのですか?
ぜーんぜん
361 :
デフォルトの名無しさん :2010/12/04(土) 10:54:27
へえ
組み込みカスタム属性には[ThreadStatic]のように付けとくだけで実行結果が変わるものもあるけど、 一般的には単なる付加情報で、ライブラリ側で意識して属性をチェックしない限り特に意味はない 自作カスタム属性の用途としては、エンティティのプロパティにDBやファイルの定義を持たせることや、 ContextBoundObjectやRealProxy派生クラスでメソッド呼び出し前後にログ出力とかが代表的かな
実行結果も、「コンパイラが認識する付加情報」と考えるべきで、 基本的には単なる付加情報。 他には Visual Studio が認識する付加情報になるものもあるし、 自作の場合は、自作のライブラリがリフレクションでその情報読み出す、 というもの。
初心者的なスレ・・・・か?
>>353 クリアだけだったらそれでいけるけど
関数で引数に100番地から後ろに値を入れてもらいたい的なことができないから不便なんだよね
え
C言語でいうとこんなん unko(&p[100]); 関数unkoが終わるとpの100番地から後ろに値が入ってる
int配列に入ってる文字コードを文字列にしたいときの絶望感
それは関数の実装に依存していて言語の機能でも何でもねえと思いますが
369じゃないと368の話がよくわからないのだけど var array = new[] { 97, 98, 99 }; var str = new String(array.Select(i => (char)i).ToArray()); // abc とか……?
実装に依存してるといってんだろ unkoの中で何をどうしてるか知らないのにお前の頭の中想像して書けってのかドアホ
C#なら普通はvoid ICollection<T>.CopyTo(T[] array, int arrayIndex)って感じのシグネチャにするんじゃねーの?
100番地から後ろ埋めるだけなら void unko(Array a, int s){ for (var i = s; i < a.Length; i++) a[i] = 100; } で終わりよな 説明が下手糞かつ片手落ちすぎて何が言いたいのかまったく伝わってこないね
なんでCには組み込みの正規表現がないの?と同レベルの言いがかりだな。 誰かが一言でもC互換と言ったのかねぇ? 俺は知らないけど。
配列にオフセットつけたいんでしょ
ArraySegment<T>なんてのもあるが使ってるの見たことない
普通は
>>373
名前がよくないんだろう
>>374 やっぱ、インデックスいるよなぁ
っつーことは汎用的に処理したいもん全部にインデックスいるのか・・・死んだ・・・orz
100以降すべての要素に対する処理なら、Cの配列だと要素数渡さないといけないじゃん .NETではそれはいらないからどっちもどっちだろ
なんか配列の一部だけ取り出す機能ってあるじゃん 名前覚えてないけど あれはあると便利だなあ 具体的に言うとGoのスライス
入力だけに使うならIEnumerable<T>で受けろ スキップとかスライスとか射影とか自由自在
Cの方の例の100ってインデックスじゃないんだ へえ hoge( &p[ 100 //←これ ] )
列挙子を使うのはフィルタするコストとか値型の扱いに難があるからヤダ
Cに挫折したから簡単とされるC#に移ってきて何これ状態の人っぽい。
>>382 いや、こういうドンブリな関数が結構あるんだよ
unko(&p[100]);//実は後ろ30〜50個にとある計算の値を入れる
unkoはC言語から移植した関数でunkoに引数は1個しかねーわけよ
なのでこれからこれ系の関数全部に開始インデックスを入れる作業をしなきゃならんわけ
ゴミの移植作業とカスごいっすね あこがれないなー(笑)
>>385 もしかしたらC++/CLIで超幸せに慣れるんじゃね
ちょっと調べてみ
どうせポインタのインクリメントとかif (*p)とかも全部修正しないといけないだろ こういうの作ってCのコードを無理やり移植したことある struct ArrayPtr<T> { public T[] Array; public int Offset; public T item[int index] { return Array[Offset + index]; } ++, ==, != , +, -などの演算子のオーバーロード T[]からのimplicit operator }
なんでC#に移植しようと思ったんだろう
>>387 いや、なんかC#に移行してもっとPGコストの低い人間に仕事やらせたいって話らしい
.netframeworkでできりゃいいってもんじゃなくて
なのでこの仕事終わったらクビなわけですよ
自分の十字架もって坂登ってる状態
初心者本片手に移植とかちっともすすまねーよ
そいつは煽って悪かったな
無理に移植したコードなんて余計に保守が困難になるだろ
>>388 みたいなことしたらそれこそ誰にも触れないコードになるわ
移植なら機能列挙してリライトした方が保守性がいいけどな 経験上
>>392 でもこれ
>>388 よくね?
とか思ったけどC#ビギナーにソースみせて('A')ワカンネ・・・って言われても困るから
普通に組まないと金もらえなさそう
388=392だけど
>>388 は結構うまくいって、if (*p)をif (p[0] != 0)に置き換えたりする程度の修正で済んだよ
二度と触らない前提ならいいんじゃない
折角C#にしても扱い方がC臭かったら意味無いだろw
unsafe使えって C側が void test(int *arr){ for(int i = 0; i < 10; i++){ arr[i] = 100; } } こんなんだったら、C#はこんな感じでラッパー作ってやればいい [DllImport("////.dll")] public static extern void test(IntPtr arr); static void CallTest(int[] arr, int offset) { unsafe { fixed (int* z = arr) { test((IntPtr)(&z[offset])); } } } static void Main(string[] args) { int[] arr = new int[100]; CallTest(arr, 10); }
C#にするのはポインタとかわからなくてもメンテできるようにしたいんだろ 本末転倒じゃねえか
unsafe使うんだったら、unsafe static classにCのコードを丸ごと放り込んで、 mallocをMarshal.AllocHGlobalに、静的配列をstackallocに置き換えてやれば だいたいそのまま動くんじゃね それこそ本末転倒だけど
つか配列のサイズくらい渡そうぜ
作り直せば?
WinAPIでWindowProc関数を呼び出すために、 SetWindowlong関数の引数としてWindowProcのアドレスが必要なのですが、 VBならAdressOf演算子で取得できるのですが、C#の場合どうすればいいのでしょうか? またこの場合のWindowProcは、C#のパブリックなメソッドでいいのでしょうか? クラスにしないといけないのでしょうか?
VBでもC#でもWndProcメソッドをオーバーライドする
AddressOfを使う必要はなくて、delegateをそのまま渡せる。
delegateってのがよくわからんよな
406 :
デフォルトの名無しさん :2010/12/04(土) 19:22:46
あ、VBもC#と同じようにメソッド名をデリゲートとして扱えるようになったのか知らんかった。
407 :
デフォルトの名無しさん :2010/12/04(土) 19:23:27
Cなんかのコールバックだよ
WindowProcを直接使う場面はほとんど無いだろ コントロールに流れてきたものはWndProcで拾えるし 対応する.NETのコントロールを持たない場合はNativeWindowを使う
デリゲートを関数ポインタとしてpinvokeで渡すのは結構危なくて 生存期間に注意して使わないとデリゲートが先にGCされて死ぬ
え? 受け取る方はメソッドのアドレスを受け取るだけだからGCは無関係じゃないの常識で考えて。
GC.SuppressFinalizeじゃだめなん?
GC関係あるよ。
ああ、インスタンスメソッドのデリゲート渡した場合は確かにそうか。 可能性としてはありえるけど、でもそんなアホなミスするかね。
ふー、着いた
デリゲートの運用が終了するまで、デリゲートへの参照は保持する必要がある
さもないと
>>409 この点さえ気を使えば危なくない
だから、ネイティブコードが受け取るのはただのメソッドのアドレスだから(当たり前) それは全然ない。
何いってんの? バカ?
で、デリゲートって何よ? そんなの使ったこと無い
必要がなければ使わなくていいよ。
そんなガサツなことではいかん もっと優しく繊細にだな
GCの考え方自体がガサツだよ
デリケートな部分のかゆみに
>>416 class NativeDelegateProvider
{
private int recv = 0;
public int nativeCallBack(int param){
this.recv = param;
}
}
こんなのも考えられるけど
ホントーにあぶなくナインすか?
ちなみにnyaruruちゃんがそんなことを言っていた気がします
言ってる意味がわかりません
じゃあお勉強してから発言してね
>>416 そのアドレスが回収されちゃうってことだよ頭わりーな。
どれがどれへのコメントかまったくわからん。
安価つけて喋れくそがき
* あ ど れ す は む か ん け い だ よ *
今お勉強中だから戻ってきませんよ。
>>430 だから、それはオブジェクトのインスタンスそのものがGCされるから問題なわけ。
デリゲートじゃないでしょ。
アホかと言いたくなる。
ぽかーん
413 名前:デフォルトの名無しさん[sage] 投稿日:2010/12/04(土) 20:01:31 ああ、インスタンスメソッドのデリゲート渡した場合は確かにそうか。 可能性としてはありえるけど、でもそんなアホなミスするかね。 じぶんでこんなはつげんしといてかおまっかすなぁ
MSDNにもそう書いてあるのに何が「ぽかーん」だろ。 馬鹿丸出しな奴が今日は多いね
どうみてもお前がバカ。
ところで、オブジェクトが死んでるのにデリゲートだけ生きてる状態ってあるの? 詳しい人教えてよ。
>アンマネージ コードによって保持されるマネージ デリゲートへの関数ポインターを参照する場合、 ネイティブコードに渡される関数ポインタはデリゲートのものなんだろ デリゲート回収されたらまずいようにしか受け取れないけどな ははは
はははじゃねーよアホ。
>>430 のサンプルは謎。なんでこれで大丈夫なのか理解できないし他の情報と矛盾してる。
CallBackClass cb;
public static void SetChangeHandler() {
cb = new CallBackClass();
ExternalAPI.SetChangeHandler(new ChangeDelegate(cb.OnChange));
}
どういうことなんだろう。実際もしかしたら
>>410 の言うとおりなのかもしれないけど、
それにしたってどこにもそんなこと書いてない。
メソッドってインスタンスごとに別のアドレス割り当てられるのか データクラスにはあんまりメソッド持たせないほうがいいのね
>>444 よく考えたらメソッド参照してる時点でインスタンス参照がくっついてるはずだし、そりゃそうか。
真面目にLanguage Specification読むか…
>>447 そんなわけない。
非 virtual なクラスならメソッドは固定アドレスだし、
virtual な場合でも、virtual メソッドテーブルみたいな奴はクラスごとに1個。
各インスタンスは virtual メソッドテーブルのアドレス1個持ってるだけ。
デリゲートは、インスタンスメソッドも代入できるわけだけど、
この場合には、C 言語的にいうと、
struct DelegateToInstanceMethod
{
void* instance;
Func* pointerToMethod;
}
みたいなデータの持ち方される。
>>447 違う。マネージ関数のアンマネージ関数ポインタを取得するときにはかならずマーシャリング処理が入って
ラッパーみたいなものを通す形になるので、デリゲートの方がGCされてしまうとアンマネージ関数ポインタが
無効になる。
>>449 言語仕様もCLIも関係ないよ。MSの中の人に聞くしかない。
タイプセーフぇ・・・
>>447 マーシャンリングされるのはあくまでデリゲートのインスタンスで、単なるメソッドは関係ないんじゃねーの?
混合モードで動かしてみればどうだかわかると思うが
>>450 そういうことか
てかデリゲート作るときnewしてるんだからそう考えるのが普通か
単なるメソッドって何?
このthunkって何のためだと思ったら オブジェクトが移動されても大丈夫なようにってか はぁ〜ん
>>451 >デリゲートの方がGCされてしまうとアンマネージ関数ポインタが無効になる。
デリゲートが参照してるインスタンスがGCされるなら分かるけど、
デリゲート自体がGCされることなんてあるの?
どっかで呼び出すからにはどっかで参照持ってると思うんだけど
>>455 デリゲート化してないインスタンスメソッド、だと思う
そんな深く考えて書いてないから突っ込むなよ
459 :
デフォルトの名無しさん :2010/12/04(土) 21:29:18
>>454 というかクラスをnewしても実際のところ複製されるのはC的に言えば関数ポインタであって
関数の実態は固定のはずだしねえ
>>457 この場合デリゲートを参照してるのはアンマネージド関数に渡されるthunkだから無駄じゃねえかな。
thunkとデリゲートが閉じた輪になってれば回収されるでしょう。
何の話かよくわからんけど、そういう状況が生まれるならそういうプログラムが書けるって 事でしょ。試してみればよいのでは?。それとも試せないような空論で言い争ってるの?。
常識で考えてメソッド呼ぶにはインスタンスへの参照もいるだろ・・・ 関数ポインタばかりに夢中になり過ぎ
1.staticメソッドならどうなのか
2.デリゲートがGCされてインスタンス参照は残ってるケースはどうか(これは普通にあり得る)
が問題
>>439 やMSDNの記述を読む限りでは両方ダメとしか考えられないんだが
>>430 のサンプルコード(
>>446 )では2が大丈夫であることを前提にしている
465 :
464 :2010/12/04(土) 21:46:27
すまん言葉が変だな 2.デリゲートがGCされているが、そのデリゲートが指していた呼び出し先のインスタンスは生存しているケース
結局何が正解なのさ
ChangeDelegate d; public static void SetChangeHandler() { cb = new CallBackClass(); d = new ChangeDelegate(cb.OnChange); ExternalAPI.SetChangeHandler(d); } これなら大丈夫てこと?
>>463 >常識で考えてメソッド呼ぶにはインスタンスへの参照もいる
あんまそこは問題ではないのよ
誰を参照していても自分がGCされる条件を満たすかどうかとは関係ないからね
あくまでもGCされないためには「被」参照が必要なのね
ポイントになってんのはこのデリゲートとThunkの参照の輪がどこからか被参照もらってるかって事ね
>>439 を鵜呑みにするならどっからも貰ってない
>>468 アンマネージドコードからの参照はGCの計算に入んないから気をつけてね
こういうことですか?
そういうこと。
いやデリゲート自体は確実にGCされるよ。それは間違いない。 だってデリゲートがGCされないなら、それが参照してるインスタンスがGCされるわけがない。 問題は、デリゲートがstaticメソッドやまだGCされていないオブジェクトのインスタンスメソッドを指していた場合 デリゲートがGCされても関数ポインタが有効なのかどうか。
そんなところが気になるのかよ
有効ならThunkの必要性がなくなる ThunkってPinedを指定しなくて良いように挟んでるんだろうから
474 :
デフォルトの名無しさん :2010/12/04(土) 22:08:08
>>471 内部的な話をすればメソッド本体は固定だよ
クラスだってメソッドへのデリゲートを持ってるに過ぎない
クラスをインスタンス化する際に考えてみなよ
メソッド全部コードをそのままコピーするか参照だけコピーするか
みす >クラスだってメソッドへのデリゲートを持ってるに過ぎない クラスだってメソッドへの参照を持ってるに過ぎない
>>473 それにマーシャリングが挟まる余地がなくなるよな。どっちにしろ。
>>439 を鵜呑みにするなら
>CLR creates a thunk, which forwards the calls from native code
って書いてあるからデリゲート回収されたら一巻の終わりだね駄目駄目だね
じゃあ
>>430 の最後のサンプルコードは間違ってることになるよ
そうやって何でもかんでも鵜呑みにしないの!
>>478 フォーラムに聞きにいったらいいんじゃね
>>474 >メソッド全部コードをそのままコピーするか参照だけコピーするか
インスタンス化する際にメソッドの参照をコピーする必要あるの?
ないない 静的型の言語では、メソッドは型が持ってるテーブルから検索する
483 :
デフォルトの名無しさん :2010/12/04(土) 22:22:24
>>481 クラスの基本的な構造は多分C++と変わってないと思うから
C++のあの糞構文みてきなよ
ヘッダとCPPのソースで見事に分離して書かれてるじゃん
あれが実は実態だよ
486 :
デフォルトの名無しさん :2010/12/04(土) 22:24:39
>>482 そんなことしなくてもクラスにあたる部分を固定で持ってて
メソッドの参照貼っとけばnewの時にコピーすればいいだけじゃん
487 :
デフォルトの名無しさん :2010/12/04(土) 22:25:41
インスタンスメソッドも実体はAppDomainにつき1つだけだけど、 必ずインスタンスのコンテキストで実行されるから(内部的には引数でインスタンスを渡す)、 インスタントがGCされたら想定した動作はしなくなるでしょ。
>>486 そんなことしなくてもコンパイルするときに直接アドレスに変換すればいいじゃん
100レス弱デリゲートの議論してるのにマルチキャストデリゲートの存在が忘れられてる気がする
>>489 これはちゃんとデリゲートをKeepAliveしてんのな
もう何がなんだか/^o^\
>>488 コピーするのはクラスの話で静的なメソッドの場合は貼ってあるのはあたりまえ
というかメモリーイメージを想像したらクラスとメソッドの関係ってわかりそうなもんだけどな メソッドが消えるときはプログラム自体をアンロードしたときくらいじゃね?
>>493 すまん、何いってるのかぜんぜんワカンネ
>コピーするのはクラスの話
クラスのインスタンスごとにメソッドの参照をコピーして記憶する必要はないんじゃないかって言いたいわけでして
C#は欠陥言語
>>490 今の話とマルチキャストデリゲートってなんか関係あるの?
499 :
デフォルトの名無しさん :2010/12/04(土) 22:46:42
>>496 そうだよ。メソッドはクラスにつき1つ用意されてるだけだから。
インスタンスごとにメソッドがあるわけじゃない。
CLR的にはインスタンスが隠し持ってる「型オブジェクト」への参照を辿って、
動的な型は決定できる。それさえ決めれば型の持つテーブルからメソッドは特定できる。
新しくインスタンスをnewするときは、そのインスタンスの持つ型オブジェクトの参照がセットされるだけだ。
オブジェクトのヘッダにRuntimeTypeHandleの値が入ってるんだっけ
>>499 前半部分は理解してる
でも
>新しくインスタンスをnewするときは、そのインスタンスの持つ型オブジェクトの参照がセットされるだけだ。
ってのがわかりません、先生
型オブジェクトって何?
>>501 型のメソッドテーブルなど、メモリ上に読み込まれた型の実体のことを
Javaなどでは便宜的にクラスオブジェクトなどと呼ぶことがある。プログラム上で扱うオブジェクトとは違う。
オブジェクトは、フィールドの他に「型情報」というものを持ってる。
「型情報」っていうのは自分がどの型のオブジェクトかを示すハンドル。それを
>>499 は参照と呼んでいる。
どうでもいいよ。
[型オブジェクト] ・コンストラクタ ・メソッドA ・メソッドB [インスタンス] ・型オブジェクトへの参照 ・フィールド1 ・フィールド2 こんな感じ?
分かってるのかどうか不安だが、わりとどうでもいい
どうも。
>>402 です。僕の質問をネタに盛り上がってくれてありがとうございます。
じっと見てました。とても勉強になります。が、僕の疑問はまだ解決してません。
SetWindowlong()の引数としてWindowProcのアドレスを取得する方法を教えてもらえないでしょうか。
object.Addressではメソッドのアドレスは取れないんですね・・・
まあ僕のやろうとしてることは、VB(多分.NET以前)で書かれたWin32APIのプログラムをなぞって、
バカ正直にPinvokeでC#に書き換えようとしてるわけで、幼稚なのはわかってます。
週末プログラマなんで御容赦を。
皆さんの言ってるデリゲートは、ウインドウプロシージャのset、callの部分でAPIを使わなくてもC#でやれよ、
ということなんだと想像してますけど・・・正直、高度すぎて解りません。
でも、僕としては幼稚でもいいからプログラムを作ってみたいので、、、
それと「こんなことがしたい。けど関数がわからない」みたいなときの逆引き辞書みたいなのって無いですか?
みなさん初心者の頃はどうやって探してました?すみませんねー初心者なので。orz
だからデリゲート渡せ、って言ってんだろハゲ
Marshal.GetFunctionPointerForDelegateってのはあるけどな。
まるで成長してない・・・
ダメだな
デリゲートって何?
ゲリのままデートするんですよ
人の話を聞く方法からレクチャーしないと駄目なのか?
また話題がループするのかw
デリゲートは関数を入れる変数みたいなもん
デリゲート(delegate: 代表、委譲、委託)なんて言葉採用しなきゃよかったのにね
>>516 みたいっていうか、その通りだろ。
あるデリゲーにはMessageBox.Showが入っていて
デリゲートは関数の呼び出しを抽象化したクラス でもそれを毎回プログラマが作るのは面倒だから言語仕様として取り込んだって感じ
Path.GetFileName() これが特定のファイルだと上手く動作しないんだけど どんな理由があるのですが? ファイル名がUnicodeだったりするとだめなのかな
オツムに栄養が行っていないだろ?今日はもう寝ろ。
デリゲートって、デリケートですね。(´Д` )
どんなパスかって恥ずかしくて言えません(///)
なんだってこんなコールバック関数をボコボコ使わなきゃいけない設計にする必要があるのか
527 :
デフォルトの名無しさん :2010/12/05(日) 08:47:23
ゲーム屋のタスクシステムを現在でも使おうとするとコールバック地獄になるのかな?
System.Windows.Forms.DataVisualization.Charting 名前空間の、チャートコントロール使ってる人います? 片対数グラフ書いてみようと思ったのですが、使い方がよくわかりません。
突然そんなことを言い出すのもアスペっぽいです
しかも、まったくリンク先見えんし
アスペルガーかどうかはともかく、2chで「荒れるから〜しろ/するな」という奴に限って
妙に喧嘩腰なのは、まあ鉄板の法則と言っていいだろうね。
>>530 みたいな奴って、たぶんこの嫌味の意味すら理解できないと思う。
原因が単に頭が悪いからなのか、あるいは精神科的な問題かは分からないが、
自分を客観的に見る能力が著しく欠けていることは間違いない。
本物ワロタ
533はホンモノさんでしたか 街頭で出会いたくない人no.1だわ
客観と感受性って単語が大好きなんだよねその人。 2つの単語だけですげぇ矛盾をはらんでるけど。
WPF=Html C#=JavaScript ではCSSは何?
540 :
デフォルトの名無しさん :2010/12/05(日) 18:48:12
>>539 ちょっと違うな
XAML=html+CSS
C#=JS
こんな感じ
XAMLにstyleでCSSのような機能があるから
>>529 .NET4.0だとそんなのあるのか、ちょっと感動した
(この前1から手書きしたのがばかみたいじゃないか)
で、片対数だけど
プロパティ→ChartAreas→Axes→Y軸を選択→IsLogarithmicをTrueに設定でできたよ
VS2008の時代からあったんだけどね。後だしではあったけど。 知らない人結構いるのな
使わないしなあ
まあChartなんて使う使わんがはっきり分かれる類だからな おいらも使ったこと無いわ
プログラマーは情報こそが資本ということか もっとアンテナを伸ばさいないといかんなぁ
そういう面白げなライブラリ関連の情報をレポートするサイトはないもんかね 作るのはさすがにだるい
ああそのスレか 俺も見てるけど役に立たないよね
>>548 便所の落書きと呼ぶにふさわしい、ある意味2chらしいスレッドだなあ
8パズルの盤面に対しての最短距離を知りたいのですが、どのようにすれば分かりますか?
各数字の正解とのマンハッタン距離の和のこと?
>>554 すみません
8パズルの最短経路の経路です
二人とも何言ってんだかわかんねw
558 :
555 :2010/12/06(月) 00:53:10
さすがに日本語が不自由でした。。。 実験で8パズルの初期状態に対する最短経路の組を使いたいのですが、 どのようにすれば求められますか? 例えば、最短経路が5の8パズルの状態を出力するプログラムなどです。
A*の評価関数に最短距離を使うのかと思ったんだが 最短手順探索のことか
ワーシャルフロイト
初期状態が8!通りしかないんだから、 全初期状態分の最短手数求めてテーブルに持っておけ
>>558 > 例えば、最短経路が5の8パズルの状態を出力するプログラムなどです。
最短経路5って、5手でクリアできる状態という意味?
それだったら、そろってる初期状態から5手動かしたのを出力すればいいじゃん
直前で下げたコマを上げるみたいな動きは許さないでさ
>>562 ありがとうございます
完成状態から同じ盤面を通らないでパズルを動かした盤面は最短ということでいいのですか?
最短ではない場合があるのではないかとちょっと不安なんですが
この手の質問はアルゴリズム系の板で聞いたほうがいいんじゃないか?
>>564 そうですね、そこで聞いてみます
どうもありがとうございました。
アルゴリズム系の板ってここじゃないのか?
また自分で問題出して自分で回答するパターンかよ 学生の宿題をプロにみせてどうすんだよ…
別に俺質問者じゃないけど もしかしてコード作って掲示しちゃいけないパターン?
VIPのプログラミングスレでやればよくね? というかあそこの連中が今ココにいるだろw
>>568 ドカタに学生の宿題が解けるわけないよな
空気読めよ
572 :
デフォルトの名無しさん :2010/12/06(月) 02:41:45
質問させてください MessageBox.Show( (2/3*100).ToStriong()); がなぜ0になるのでしょうか?
>>572 2/3が整数型で計算されると0になるから
2*100/3か2.0/3*10にすればいいんじゃない
2.0/3*100だな
2f/3*100だな
>>567 おおーありがとうございます
これみてちょっと勉強してきます。
ご覧のとおり私にはこんなプログラムをすぐに作る力はありません・・・
ごらんの有様だよ
とっくにご存知なんだろ?
うん!
お前らほんと煽るの好きだな
実社会で他に優越感感じられることがないからだろ
ゴラン高原で修行してくるか
荒らししかいないのに 2chで質問するのが間違っている
何の言い訳になっているのかわからない
何の言い訳になっているのかわからないですね
ゴラン高原で修行してくるか
>>567 横からなんだけど
>>567 のコードをc++に変換できる?
#スレで聞くのも何なんだけどさ
張り倒すよ?
Reflector使え
今、VBAで作ったプログラムをC#に置き換えてるんだが 標準モジュールみたいなの使えないのかな? それとも標準モージュールの中にある関数を無理やり クラスに置き換えないとあかんのかね?
クラスを使うように設計し直すのが一番だけど とりあえず移植したいってだけなら静的クラスにでも押しこんだら?
はじめた頃は正規表現すら知らなくて 特定の文字検索するのに大量のif文を書いてたなぁ
>>588 ググッたらc++→c#ならあるみたいだね
逆はないみたい
宿題だろ? 自動変換丸出しの機械みたいなソースコード提出したら単位もらえないよ
596 :
567 :2010/12/07(火) 09:41:52
>>588 なぜC++のコードがほしいのか、
まっとうな理由があるならやってあげるよ
でも横からってことは
>>553 と
>>588 は別の人だろ?
同じ時期に同じ問題で別の言語ってのがどういう訳なのかちょっと聞いてみたかった
>>598 同じ目的のものを違う言語で作ってみろ!という宿題もありなのでは?
同じ言語だとコピーして少し弄って出す奴続出するだろうし
最近、ネットで調べてそのまま提出する子供が多いらしいよ
業務で使うプログラムもネットで調べてそのまま、ならいいけどね
C++/CLIで作成したライブラリをC#の4.0ライブラリから読み込むと次のエラーが出ます
混合モード アセンブリはバージョン 'v2.0.50727' のランタイムに対して作成されており、追加の構成情報がないと 4.0 ランタイムでは読み込めません。
そこでこう言った所↓を参考に、対象のTest.dllの隣にTest.dll.configを作成し、以下を記述しました
http://nky-tech-sdt.blogspot.com/2010/02/net-framework-40.html <configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
しかしエラーは変わりません、構成ファイルって、隣にある同名+.configでいいんですよね?
dll側のビルド再ビルドは難しい状況なのですが、dllビルド時に何か設定が必要でしょうか。
DLL側のコンフィグかと思ってたら、呼び出し側だったんですね。 気付かせてくれてありがとう!
604 :
588 :2010/12/07(火) 12:53:14
>>596 今ルービックキューブの解法を探す研究をしてるんだけど
これを参考にできないかなって思って
そんなもん解法ググって実装すれば終わり 一日で終わる研究だな
研究っていうからには新しいアルゴリズムを考え出すに決まってるだろ なにが参考になるのかは良く解らんが
>>567 って要は総当たりだろ
アルゴリズムもクソもないわ
608 :
588 :2010/12/07(火) 13:57:54
正確には参考にするというか、自分の提案手法の経路と最短経路にどれほど違いがあるか見る為なんだけど まあ、自分で1から作れって言われたらそこまでなんだけど
609 :
デフォルトの名無しさん :2010/12/07(火) 14:44:01
朝飯のお味噌汁の旨さは異常
質問です。 ReadStreamやTextFiedlParser等は使用時に using(var parser= new TextFiedlParser(path,encode)) { } などと使うのですが、もし仮にファイルが排他ロックなどをしている場合に 複数回試行するにはどうすればよいのでしょうか? for(int i=0; i>10 ;i++) { 処理 Thread.Sleep(100) } のような感じで行いたいです。よろしくお願いいたします。
スレッド立ちあげて気が済むまで待機すればいい
>>607 その総当たりをどうやって重複なく、しかも確実に最短経路のみを列挙するかが問題なわけで・・・
てか問題を解くための手順がアルゴリズムだよ?わかってる?
ID表示が無いと便利だな 宿題をやってもらえなかったら今度は批判か
>>614 ID表示がないと訳の解らんいちゃもん付けてるくやつがいるからホント迷惑だわ
ただの謙遜だろよ
ReflectorでSystem.Windows.Forms.ImageList.ImageCollectionのところをぼーっと見てたんですが、 .Add( Icon ) のメソッドをところでパラメータのIconをCloneして使ってました。 これって元のアイコンは自前で解放しないとリークするってことですよね!? なんでこんなウンコなことになってるんでしょうか? .Add( Image )はそのまま使ってるのに! アホかーーーーーっ ----------------------------------- ここまで書いてドキュメント読みました。 >Icon は、リストに追加される前に Bitmap に変換されます。 ∧||∧ ( ⌒ ヽ ∪ 。ノ ∪∪
619 :
デフォルトの名無しさん :2010/12/07(火) 20:12:29
>>591 VBAの標準モジュール自体が、実質的に静的クラスみたいなもんだから。
そのままのモジュール名で静的クラスを作って、
その中に関数入れればそっくりそのまま移植になるでしょ。
リークつっても、そのうちGCされるよ? まあ一気に何万とかやったらちょっと大変だろうけど
617ですけど何か勘違いしてたみたいです imageだって解放しないといけないっすよね マジで吊ってきます
>アイコンは自前で解放しないとリークする どういうこと?誰か解説してくれ
>>610 よくわからんが、こんな感じでだめなの?
TextFiedlParser parser = null;
for (var i = 0; i < 10; i++) {
try { parser = new TextFiedlParser(path,encode); }
catch { Thread.Sleep(10); continue; }
break;
}
using (parser)
>>622 newしたら必ずDisposeしないといけないって思ってんじゃないの?
ルートから辿れるImageCollectionに突っ込んだまま放置したら GCとか関係なくメモリリークだよ
IDisposabeインターフェースを実装するクラスはDisposeしないといかんだろ
>>625 それをリークと呼ぶのは違和感があるな。
リークと言うからには開放したくても開放できない状況じゃなきゃ。
リークなんてしたら 逮捕されちゃいます><
コレクションに入ってるイメージがGCされたら一大事だな
アサンジ
リークスさん・・・
すいません、 DataGridViewに、Queue<String>は、バインドできますか?
できません
C#はReflectorで逆コンパイルできると聞いて色々なソフトで試してみましたがどれもできませんでした 自分で作った簡単なプログラムは逆コンパイルできました C#が人気ないだけ?それとも何か防ぐ方法があるんでしょうか?
色々なソフトって具体的には?
難読化されてて読みにくいのはあるけどReflectorで開くことも出来ないのは見たことないな
あ、SharpDevelopを試したら見れました。メモ帳とか電卓は.NETじゃないんですね
そんな、3.1の時代からある歴史あるアプリはそうそう新技術に置き換えない。 今後新規で作るものが徐々に WPF 化されてく。
ズコー
Windows7で、ふとペイント立ち上げたら凄くなっててワラタ
俺用メモ ICommandSourceを実装したクラス(Button、MenuItemなど)→Commandというプロパティを持ってる
プロパティって絶対型をもってるよね? void型のプロパティってないよね?
ないよ
void型ってgetもsetもできないプロパティに何の意味があるんだ…。
どっかで見かけたのか?
古の言語には void *型 という物があったらしい。 え、C#でも使える?なにそれこわい
>>648 なにその古代言語みたいな書き方w
そういやunsafeなクラスなら
public void* prop { get; set; }
みたいなプロパティ作れるね
IEがWPFで作られたら、WPFはじめる
VSをXPでやっている人ってもしかしていないの?
ここにるけど? Z510で軽快にVS2010が動いてる俺が
軽快ってどんな設定してるの?
silverlight4ってどうよ?業務アプリにもってこい?
リッチテキストボックスにクリップボードからペーストしたときに 書式情報が失われないようにするにはどうしたらいいんでしょうか。 具体的には、web等で表示されているテキストをコピーして、リッチテキストボックスに ペーストしたときに、色情報、フォント指定、文字サイズ等そのまま残したいんですが。 c#固有の話じゃないんでアレなんですが・・・
webページだと Clipboard.GetData(DataFormats.Html); で拾ってきたHTMLタグを解析して書式情報を復元するしかないんじゃないかな
クリップボードに何が入ってるか見て プレーンテキスト以外の情報があったら それを元にRichTextBoxに書式を付けていけばいいんじゃね
658 :
デフォルトの名無しさん :2010/12/09(木) 11:33:45
>>655 テキストを構成するフォーマットが違うけどその辺をうまく吸収してくれるのかね?
webはhtml
リッチテキストボックスはrtf
もしかしたら受け取る処理側で変換処理かかないとダメかな?
やっぱりWebBrowserに張り付けるか、自前で書式変換するしかないんですかね。 うーん・・ 何はともあれ、ありがとう
うーん・・ ふーん
ListViewのアイコンImageを表示した後に差し替えて、まではうまくいきました (クリックして選択カーソルを乗せると切り替わってくれます) 差し替えた後に随時アイコンの再描画をしたいのですが 全体の再描画となってしまいパタパタしてしまいます アイコンだけ再描画する方法ってないですか?、宜しくお願いします
ダブルバッファ使えばいいのかな?
663 :
661 :2010/12/09(木) 13:10:44
Webのサムネイルのように空サムネイルを表示しておいて DLが出来た順にアイコンのImageをサムネイルとして順次表示したいのです
再描画するところだけInvalidateしてやればおkだよ
そもそも何がしたいのか分からん
666 :
デフォルトの名無しさん :2010/12/09(木) 13:16:34
668 :
デフォルトの名無しさん :2010/12/09(木) 13:22:34
>>666 そこまでいじるならFormをダブルバッファにした方がいいだろ
>>666 それではListViewのちらつきは抑えられないよ
もしかしたらここで質問することではないかもしれませんが・・・ MVPモデルで作成する場合においてモデル(M)側のプロパティが変更(OnPropetryChange) された場合の処理内容は通常M側に置きますよね?もし、プロパティが変更された場合に View側を変更する処理の場合であってもM側に配置するのでしょうか?
MVPモデルってなんだ
>>661 OSはwindowsXP?
Aeroを搭載してて有効な場合は多分問題ないだろうな・・・
windowsXPの場合ティアリングを完全に回避はできないんじゃなかったっけ?
>>666 の方法でも軽減できるってだけで
ちらつきを気にするのは素人
っと、MVPパターンのことだね
C++との連携で疑問なんだけど C#の配列の要素はメモリ上できれいに並ぶの? それとも stackalloc で領域確保する必要がある?
M モデル V ビュー P パーソン つまり人力でビューとモデルを繋ぐという考えかw
USB接続の外部記憶装置を特定して、ドライブ番号が変わっても追従させることは可能でしょうか? 特定のUSBメモリを毎回参照させて、他の外部記憶装置が加わってUSBメモリのドライブ番号が変更されても自動で参照出来るようにしたいのです。 USBメモリのボリュームラベルをあらかじめ変更しておいて、接続しているドライブから探すくらいでしょうか? 同じボリュームラベルは存在しないという前提になってしまいますが。
C#ではクラスのインスタンスは必ずヒープにあるようになってるんですか?
はい
>>661 FormにListView貼り付けて実験してみたけどwindowsXPだとどうしても
情報が多くなるとちらつくね
http://ideone.com/d4pew この辺は仕方ないんじゃねーかな?
vistaと7はAeroが有効になってればちらつきは無いはずだよね・・・
>>676 実装まで追ってないけども、たぶん並んでるんじゃないかな。
stackalloc は不要。
てか、そういうことはプログラマーが気にしなくても Marshal クラスがやってくれる。
>>679 class で作ったやつは全部ヒープにインスタンス作られる。
スタックに入れたければ struct で。
ちなみに、コピーGCとか持ってる言語だと、ヒープのパフォーマンス意外といいんで気にスンナ。
>>682 じゃあ、配列を渡したいときはこんな感じでいいのかな
fixedとかいる?
[DllImport("Hoge.dll", EntryPoint="Hoge")]
extern static void Hoge(out byte buffer);
public static void NewHoge(byte[] buffer)
{
Hoge(out buffer[0]);
}
はい
>>683 こう
> ([In, Out] byte[] buffer)
In, Out属性は必要に応じて片方だけとか
配列の固定はマーシャラさんがやってくれる
よく分からなくなってきた [DllImport("Hoge.dll", EntryPoint="Hoge")] extern static void Hoge([In, Out] byte buffer); と書いたとしてNewHogeはどうすればいいんでしょうか?
勘違いしてましたw outって書けばいいんすね
>>686 ([In, Out] byte buffer);
じゃなくて
([In, Out] byte[] buffer);
なるほど、ちょっと今すぐテストはできないんですが、これだけでいいのかな [DllImport("Hoge.dll", EntryPoint="Hoge")] extern static void Hoge([In, Out] byte[] buffer);
クリックすると保存ダイアログがポップアップするような URLが分からないファイルをダウンロードする方法はありませんか?
_, ._ (;゚ Д゚)?
URLが分からないんじゃ 総当りでURLを生成するしかないな
まじでやめて。 サーバーの負荷も考えてあげて。
最終的にはPOST/GETしてるので、そのURLに対してHttpWebRequestとかすればいいです。
>>695 そのURLの取得方法が知りたいっす.
説明悪くてすみません.
色んな方法があるから、すべてに対応するのは無理だろうね。
上級者が一番間違えやすいのって、単純なうっかりミスかな 変数や関数の名前を間違えちゃうとか。
インテリセンス最強のC#でそれはない
インテリセンスはVisualStudioの機能であってC#の機能ではない。
わざわざメモ帳でC#やるやついるのかよw
>>702 いやでも、言語設計の時点でツールサポート前提の設計されてるしなぁ。
あと、今どき、文法だけで言語語れないし。
C#の機能でっつーんなら、単純な名前ミスとかコンパイル時に サクッと検出出来るんだからそんな問題でもないわな
706 :
705 :2010/12/10(金) 02:02:36
これでコンパイルが遅ければそれはダメだけど、幸いC#はかなり速いので。
文法チェックのためにコンパイルするのが当たり前になるね
C# に至っては、ビルド時チェックどころか、 書いてる最中のリアルタイムチェックだしなぁ。
クラスならnewするとインスタンスを生成してくれるけど、構造体はnewしてもインスタンスとはいわないの?
別に言いたければ言えばいいんじゃね
なんか、MSDNの説明 日本語のMSDNは英語のMSDNに比べ クラスのメンバとか書いてると子明らかに足りない部分あるんだが そんなもんなの?
713 :
[―{}@{}@{}-] デフォルトの名無しさん :2010/12/10(金) 07:50:37
714 :
[―{}@{}@{}-] デフォルトの名無しさん :2010/12/10(金) 07:53:42
インスタンスという語のもともとの意味からして、 構造体だろうとクラスだろうと、個別の実体(変数)に対してはインスタンスと呼ぶのは自然。
>>701 using未指定時のクラス名補完って出来る?
手打ち後にusing追加は出来るけど。
うん、using ない状態では補完聞かない。 その手打ち後に ctrl + . で using 追加、かなりの頻度で使うけども。 (一度ソースコードの上の方に移動して using 追加して戻ってくるとかまずしない)
ctrl + . でよかったのか。 Alt + ctrl + F10使ってたよ
右クリメニューでなんちゃらの解決してたわ
そんな機能あったのか まだまだ知らない機能沢山ありそうだ
久しぶりです。といってもご存じないかもしれませんが、 初心者でなんどもお世話になったものです。その節はほんとにありがとうございました。 最近すこし書けるようになったので、あまり顔を出しませんが。 で、C#はだいぶ書けるので、欲を出して、Objective-Cに手を出しました。 で、相変わらず書けないので質問したら、またばか扱いで。 なんか、以前にこちらでお世話になったことを思い出して懐かしくなって戻ってきました。 Objective-CのふらっとC#みたいなとこ、あるといいんですけどね。
そうですね。
今ならまだ間に合う WP7まで待て
Appleワールド以外では全く使われない糞言語か
せめてC++にしとけばいいのに なんでいきなり初心者がわざわざガラパゴスに突っ込むのか
C++ のほうがガラパゴスじゃないの?Obj-C 知らないけど
全然関係ない言語を二つくっつけるという暴挙を果たした言語だよ
VB.NETのこと?
Appleが使わなければ消えるのはVB/C#とMSだって同じだけど Appleのそれは囲い込みだけが目的で、開発者にとって何のメリットも無いからな
objective cは独特だよな。Mac使ってた時に少し触ったけどメソッドの呼び出しがどうも気に食わなくてやめたw
そもそも、ジョブズの死亡=Appleの死亡=Obj-Cの死亡なんていう図式が見える言語をやりたくない
Oracle死ね
MS的にはオラクルさまさまでしょう 見事にJavaをぶっ潰してくれた
アップルワールドではC++も使えると聞いたけど違うのん?
iPhoneのアプリ作ろうとするとObj-C使うしかないんじゃね まじプログラマいじめだよなw
いえ、カスグラマフィルターです。
これ以上その話はしないでくれ思い出したくもない
新人(信心)チェック
iPhoneもSilverlight対応してほしい
>>734 C++ も通るんじゃなかったっけ。
なんかグルーコード的なもの通してAPI呼べて。
まあ、踏絵よね、Apple 信者フィルター。
houhou
へえ
C#ってC言語と違って変数宣言の前に変数つかえるのな class Test{ public Test(){ a=10; } int a; みたいな
わかってて言ってる?と思うけど、クラスのメンバとかはその通り。 メソッド内で宣言した変数は無理だよ。当然だけど。
C#に宣言って概念はあるんだっけそもそも。 しかしいつも思うけど、"forward reference"の訳語が「前方参照」なのはややこしいよね。 日本語って一般的には英語より語彙豊富なはずなんだけど....
ごく普通の訳かと
どこに違和感を感じるんだ?
落語のオチを説明するような野暮なことは言いたくないので自分で考えて欲しいが、 ソースコードの前方ってのは行番号が若い方か逆かどっち? ついでに後方ってどっち? それとも前方参照の意味を知らないのかなw
もしかしてプログラム初心者なのか? 歩く為には右足から?左足から?レベルの質問されてるわけだが
ただの屁理屈君か。
>>747 │ \ __ /
│ _ (m) _ピコーン
│ |ミ|
│ / `´ \
│ ('A`) 体技:スルー!
│ ノヽノヽ
│ くく
│
│ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
↓ ≡ ノノノノ ノ サッ
どんなネタでもそうだけど、打っても響かない奴との会話は楽しくないね。 まさに話にならない。 これ割と有名なネタなんだけどね。
またおまえか
これは酷い・・・
響かないのはつまらないからだろw
WPFスレで論破された奴がこっちに来てやがる(゚A゚;)ゴクリ
空間的な前と、順序や時間的な前の違いだね。 コードを上から下に進むものと捉えれば前方でしっくりくるが、 行番号という順序として捉えると違和感がある。 その点forwardはどっちの意味でも進行方向だから分かりやすい。
アホすw
forward referenceを前方を参照すると考えちゃってるのかw
イベントロガーみたいなの作ろうと思うんですが、普通はログ画面とログ収集通信とか同じプロセス内でスレッド分けてやるもんなんですかね? それともログ表示画面とログ収集通信とは別プロセスに分けて、プロセス間通信使ったりするもんなんですかね?
form上でマウスクリックが3秒以上続いたら〜っていうのをやりたいのですが、どう書いたらいいでしょうか。
>>759 ログ対象のプロセス、イベントが分からないと何が適切か分からないけど
サービス化しなければインプロセスで十分じゃねーの?
C#ってMSのオナニー言語だよね・・・ 今後AndoroidやGoogleOSが普及してくると C++は生き残ってもC#は資産価値ゼロだろうな
またおまえか
>>760 3秒間マウスボタン押しっぱなしを検出したい ってこと?
MouseDownでTimer起動してMousuUpで時間を測れば?
クリックってボタンのダウンとアップの組み合わせのことをいうんだけど クリックが3秒続くってことかクリック、クリック、クリック・・・・とひたすら続くのか たんにボタンを押したまま(つまりボタンのダウン)のことなのかでかなり違うんだけどな・・・
>>742 今となっては使えない方が不自然。
>>744 インターフェイスのシグネチャだけ書いて本体持たないのを宣言って言ったりはする。
>>762 そういうこと言ってると、Mono な人に怒られるよ。
変数宣言は普通にある 他にもデリゲートは定義じゃなくて宣言する
>>769 逆にコンパイル言語で出来なかったら時代遅れだろ
>>760 です。
3秒間マウスボタン押しっぱなしたら、別フォームを呼び出すっていうのをやろうとしてます。すいません説明不足で
MouseDownでタイマー起動→タイマーでフォーム呼び出す
C++は前方宣言してなくてもコンパイルできるようにしろよカス
C++信者はJavaやC#でヘッダファイルが無いのは 実装と宣言が分かれてなくておかしいとか平気で抜かすからな
抜かしますね
あと MouseUp でタイマ起動中なら解除
別にタイマー使わなくても Downした時刻をとっといてUpした時刻と比べれば良いだけだろ
778 :
デフォルトの名無しさん :2010/12/12(日) 15:32:40
遷移元フォームがMouseUp拾えないよな、ちょっとキモイ
3秒経過後マウスを離さないのか?
「何秒間そのままだと〜する」って処理は場合によってはよく使うと思うけど、 タイマーオブジェクトってたくさん作ってもいいんだっけ? どこかでパフォーマンス落ちるって見たような気がする。
ほんとにパフォーマンスが目に見えて落ちていて それがタイマのせいだった場合に考えましょう
783 :
デフォルトの名無しさん :2010/12/12(日) 18:58:29
プロパティが分からない 教えろks
変数のようにアクセスできる関数
分からないのはプロ? それともパティの方?
∧_∧ ( ´・ω・`) ∧_∧ / \ ( ) .__| | .| |_ / ヽ ||\  ̄ ̄ ̄ ̄ / .| | | ||\..∧_∧ (⌒\|__./ ./ ||. ( ) ~\_____ノ| ∧_∧ / ヽ \| ( ) | ヽ \/ ヽ. | |ヽ、二⌒) / .| | | .| ヽ \∧_∧ (⌒\|__./ /
787 :
760 :2010/12/12(日) 19:48:10
できましたーみなさんありがとうございます!
あるクラスから継承されたクラスを全部取得することってできますか? HumanクラスからJapaneseやAmerican,Chineseなどたくさんのクラスが継承されていて すべての継承クラスがBool require( Human human )という必要条件を調べる関数を持っています。 (たとえばJapaneseだと黄色人種で日本語を話していたらTrueと判定,という感じ) そしてどこの馬の骨ともわからない人間ひとりひとりについて すべての継承クラスのrequireを走査して,True判定されたらそのクラスを継承させることで めでたく"認定"という処理をしたいと考えています。 このとき「すべての継承クラスのrequireを走査」という処理の仕方がわからなくて困っています。 requireをそれぞれの継承クラスの中にいれずに独立したサブルーチンにすれば簡単ですが, これだと継承クラスが増えるたびにこのサブルーチンも書き換える必要があるので 上記のような処理をしようと考えました。
日本語でOK たぶん、オブジェクト指向がわかってないと見た。
リフレクション使って全ての型のTypeオブジェクトを取得して基底クラスを調べる たぶん数秒単位の時間がかかって使い物にならないけどな なんでもかんでもクラスにしたり継承使ったりしない
>True判定されたらそのクラスを継承 が意味不明。C#では動的にクラスを継承したりできないけどどっかのスクリプト言語か?。 でもどんな言語だろうと普通そんなわけのわからない構造にはしないと思うよ。 後で動的に関連付ける必要があるならHumanクラスの属性(プロパティ)として JapaneseやAmericanなどの情報を持たせたほうがいいと思う。 A is B だからって継承使うのが適切とは限らない。
792 :
デフォルトの名無しさん :2010/12/12(日) 20:49:13
分からないから教えろ foreach クラス インデクサ
793 :
デフォルトの名無しさん :2010/12/12(日) 20:50:30
配列
を
795 :
デフォルトの名無しさん :2010/12/12(日) 20:54:28
インスタンス
あきらめろ
V !ヽ ト! ヽ、 | ! / //| / ヽ! \ハ` 、 ヽ、__ノ ,.イ/ // | / ┌/)/)/)/)/)/)/)/)/)/)lー/ ` ー‐┬ '´ レ//l/ |/ |(/(/(/(/(/(/(/(/(/(/│|| |\ 〃 r'´ ̄ヽ. | | ト / \ /  ̄`ア | | | ⌒/ 入 〉  ̄二) 知ってるが | | | / // ヽ 〈! ,. -' | | ヽ∠-----', '´ ', | \| | .お前の態度が | |<二Z二 ̄ / ', | | | _r'---| [ ``ヽ、 ', | | | 気に入らない >-、__ [ ヽ ! \.| l. ヽ、 [ ヽ | ヽ| \ r' ヽ、 |
教えてやりたいけどここに書くには余白が足りない
購入したDLLライブラリをつかってアプリを作ったのですが、他のPCにそのアプリとDLLをインストールしてもDLLが無いみたいなメッセージでうまく動きません。 なにか設定をしておく必要があるのでしょうか?
サポート先にこのスレが記載されてたのか?
うん
お姉さん、うそつきは嫌いですよ
そんな ><
教えてやれよw
実は俺、DLLの作り方、しらないっす(´ω`*)
D・L・L!! D・L・L!!
そういえばdllは何かの略語だろうか、 ダイナミック ライブラリ ロード? ロードではないかw ぐぐれかす!
DLLなんぞぐぐれば作れるし
それで、なんで動かないの?
Dynamic Link Libraryでした。 汎用性の高いプログラムはわかるんだけどDLLにするとそんなにメリットがあるのかな?。 C#のバイトコードより効率的でなければDLLに拘る必要ないはずだからDLLの中身は つまり機械語?
すいません。質問です。 Hoge h = Hoge.Open("filename"); h.Write(hogehoge); h.Close(); として渡されたデータを整形して、ファイルにデータを出力するクラスがあります。 次の作業で整形されたデータが必要なので、このファイルを再度開いて読み込んで処理を行っています。 いちいちファイルに出力しないで、パイプ?などを使用してファイルではなくメモリに出力するようには出来ないでしょうか。 このクラスはあいにく出力先にファイル名しか指定することが出来ません。 よろしくお願いいたします。
System.IO.MemoryStreamをどうぞ。
あ、すまん文をしっかり読んでなかった。
>>800 ホントにそのDLLが無いってメッセージだったの?
DLLはどこにインストールした?
>>813 そのクラスが内部で何をやってるかによると思うけどおそらく無理
>>800 EXEと同じ場所か、パスが通っている場所にDLLをおいてみれば?
あとは、複数DLLがあって、忘れてるとか。
>>813 そのクラスの設計が正しいなら、ファイル出力することに何か意味があるのでは。
例えば、出力データサイズが大きい多いので、メモリで扱いたくてもできなかったとか。
とりあえず、クラスを修正するしかないね。
Dynamic Lolita Library 23万件もヒットしたよ
>>818 ストリームを引数に取れば済むことじゃん。設計が悪い。
正当な理由としては,外部のプロセスを使っててそれがファイルに出力してるくらいしか考えられん
DLLたっていろいろ種類があるからね。 Windows API互換のDLL COM(ActiveX)のDLL .NETのアセンブリDLL
>>814 , 815, 817, 818, 819
お返事ありがとうございます。
以前に他の人が作った DLL (ソース無し) を使わなくてはならなくなり、何か良い方法はないかなと質問させて頂きました。
再度作り直すには少し手が込んでいるので、ファイルのまま使用することにします。
ありがとうございました。
でも種類は別でもDLLなんだから基本的にみんな同じなんでしょう?
ぜんぜん違うよ
>>823 目的というかやろうとしてることは似てるけどね
>>823 COMのDLLはCOMの規約に従ったごく普通のDLLなので、基本的には同じ
ただし、DLLが提供する機能の使い方は違う
COMのDLLはDllGetClassObjectという名前のごく普通の関数で機能を公開してるが、
ユーザはその関数は直接呼ばずに代わりにCOMのAPIを使ってアクセスする
.NETのDLLもふつうのDLLと同じでPEフォーマットなので、ある意味では同じだけど
Cリンケージのネイティブな関数で機能を公開しているわけでもなければ
いわゆるリソースDLLでもないので、普通のDLLとは言いがたい
便宜上PEフォーマットを使っているだけ、かな
827 :
デフォルトの名無しさん :2010/12/13(月) 17:06:11
質問です。 データをlistBoxのItemsにAddメソッドで追加して表示させ、 listBoxの表示行数を超えると自動で下にスクロールして、最新データが見えるようにしたいのですが、 どうすればいいのでしょうか?
こんな質問にすぐ回答するのは本人のためにもよろしくないかと
つ ListBox.TopIndex
教えてやれよ
834 :
デフォルトの名無しさん :2010/12/13(月) 21:22:01
C#の使い方教えろ
いいよ。毎日、少しずつ教えてやるよ。その替わり毎日、みんなに挨拶してお願いしろよ。 まず、VC#をダウンロードしろ。
>>834 ここだけの秘密だけど、拡張子が sln のファイルをダブルクリックすると、C#が起動するよ。
おれはこれに気がつくまで、半年以上かかった。
そういえばソリューションファイルから開くことってあんまりないな
おまいら優しいな・・・。
<TextBox Text="{Binding Name}" /> VMのコンストラクタでNameプロパティに値を設定 開発画面のTextBoxにはその値がちゃんと表示されているのだけど 起動すると何も表示されていません 何が間違っているのでしょうか? 初期値を設定しておきたいんだけど
VMのほうのコードも書いてくれ おそらくDataContextに代入してるんだろうけど
MvvmLightを使っているんですが VMコンストラクタのBlend用のところに記述していただけでした そうじゃないほうに書いたらうまくいきました Blendのほうだとすぐに開発画面のWindowに反映されるのに Blendじゃない方は開発画面では値が表示されず、起動してから表示されるんですね
843 :
デフォルトの名無しさん :2010/12/13(月) 21:59:58
C#で使えるORマッパーって何がある?
Linq to Entities
C言語でいう printf("%3d",a); みたいに、数字の前にスペース入れて表示するのは Console.WriteLineだとどうやんの?
String.Format
フォルダAをフォルダBにコピーさせるため、一旦Bのディレクトリを削除してからコピーしようと思うのですが Directory.Delete(path, true); 仮に誤ってパスをC:\\なんてした場合に恐ろしい結果になるのですが 何か良い方法はありますか?
誤らない
気をつけて下さい
気をつけて下さい
C#初心者で、C#のプログラミングで悩んでいます。 機能ごとに、名前空間をA,Bといった感じで分けようと考えていたのですが、 クラスを作成後に、そのクラスの名前空間をBに変更したところ、 エラー1 型または名前空間名 'ComponentModel' は名前空間 'B' に存在しません。 アセンブリ参照が不足しています。 なるエラーが発生して、先に進みません。 C#では名前空間は一つしかつけることができないのでしょうか? それとも、複数設定するには、何か特別な設定が必要なのでしょうか?
Bに変更に変更したら、Bを呼び出しておけば問題ないんじゃないの?
854 :
852 :2010/12/13(月) 23:51:42
自己解決しました 名前空間Bというのは、XXXX.Systemという名称だったんですけど、 この場合に、VC#が自動生成したコードがSystemという部分に反応してエラーになったようです。 XXXX.SystemをXXXX.Test(別の名称)に変更したら、問題なく動作するようになりました。
そういうときはglobal::System.ComponentModelというふうに書く
SystemとContextって名前つける奴とは友達になれない Contexって具体的に何なんだよ!
system, context, temp, buffer, state, manager
あっそ
AesCryptoServiceProviderによる複合化についての質問です 本関数から複合化用に生成したICryptoTransformに対して、暗号化したデータを渡すと 初回は16byteを渡せば0byteが、32byteを渡せば16byteが複合化されます 次回からは、前回複合化されなかった物を含め、渡したデータの最後の16byte以外が複合化されます このように16byteずれるのは仕様なのでしょうか? マニュアルやブログ等あちこち探したのですが何処にもそのような記述が無いため困っています なにか設定等があるんでしょうか。
CryptoStreamを使った方がいいんじゃないかな? 暗号化も自前でやっているならそちらも末尾のデータが 欠落している可能性がある
よくわからんが、 cryptAlg.Mode = CipherMode.EBC; cryptAlg.Padding = PaddingMode.Zeros; にしたらどうなる?
862 :
861 :2010/12/14(火) 11:53:11
訂正: EBC→ECB。 ECBにしたら16に対して16返ってくる様に見える。 CBC処理に1ブロック前のデータが必要なんじゃない? でもセキュリティを確保するためにCBC以外のモードはおすすめできない。
>渡したデータの最後の16byte以外が複合化されます
元データがブロックサイズの整数倍になっていて、最後のブロックには
無駄なPKCS7パディングの10 10 10 10・・・が詰まってるのでは?
復号時だけPadding = PaddingMode.Zeros;にして復号するとパディングが見えるよ。
>>862 とはまた別の理由によるもの
久しぶりC#やったら List<T>.ForEachやFildAllなどが追加されているけど これは使わなきゃ損?
損って言うかForEachの方がはやいから普通に使うべき
それ追加されたの2.0からだけど、1.x使った後で5年も離れてたん?
>>861-863 若干スレ違いかと思って質問しましたが回答頂けてうれしいです。
元データはブロックサイズの整数倍ですが、最後のブロックにそのようなデータはありませんでした
ECBはセキュリティー上使いたくなかったのですが、CBCでもPaddinをZeroにしたら複合化されました!
Paddingについてこれから調べてみようと思います。
有難うございました!
>>864 使わなくていいよ
2.0で匿名メソッドが中途半端にサポートされたときの宣伝のために追加されたようなもんで
Silverlightでは削除されてる
補足
>>868 はFindAllの話。LINQのWhere使うのが推奨。
ForEachはSilverlightにもあるけど,LINQが絡むと統一性がなくなるので個人的には使いたくない
// Find a book by its ID. Book result = Books.Find( delegate(Book bk) { return bk.ID == IDtoFind; } ); これってboolが戻り値っぽいけど、Bookを返しているんですよね
ForEachはList使うなら使うべきでしょ オライリーの本や@ITの本でも推移してるんだぞ
これぞラムダ式って感じ
>>870 bool返してる
匿名メソッドでtrueが返された時点で,Findメソッドがその要素を返す
Books.FirstOrDefault(bk => bk.ID == IDtoFind) と書くのが今風
質問です。 class A{ public static string[] foo; : : public string[] bar = new string[2]; //@ : /*その他の処理*/ : } とし、別のクラスBで class B{ A.foo = SerialPort.GetPortNames(); //A : : } とすると、A部分で初期化子が例外をスローします。(A.fooは宣言できてるのですが、値が格納できずnullとなっています。) @を配列ではなくstringにするとエラーがなくなるのですが、原因としてはなにが考えられるでしょうか。
なんか省略しすぎじゃね?
ユーザーコントロールのGUIを、タブのページにAddして表示させる時、 このタブ上に表示させるユーザーコントロール名を動的にというか、外部ファイルとか別の所で定義することは出来るのでしょうか? 例えば、今、次のように2ページあるタブに、UserControl_1、UserControl_2をそれぞれ表示させるのですが、 ある場合はUserControl_Aにしたい、あるいは、この部分だけ任意の名前で後から作って、表示させたいのです。 その場合でも、この部分のコード変更をしなくても出来るようにしたいのですが。。。。 UserControl[] myUser = new UserControl[2]; myUser[0] = new UserControl_1(); TabPage[0].Controls.Add(myUser[0]); //1ページ目のタブにUserControl_1を表示 myUser[1] = new UserControl_2(); TabPage[1].Controls.Add(myUser[1]); //2ページ目のタブにUserControl_2を表示
>>874 型が違うか、そもそも SerialPort.GetPortNames() が null を返している。
同じようなif文がいっぱいある場合はどうやればいいのかな 大雑把に言うと methodA { もしチェックボックスがオンなら なんかやる もしオフなら なんかやる } methodB { チェックボックスがオンなら ・・・ オフなら ・・・ } methodC もしオンなら ・・・ オフなら ・・・ } こういうときってどうやってる?そのまんまifをいっぱい書いてる?
>>878 おれはたぶんやらないけど、methodA、B、C の I/F を作って、
オン用処理クラス、オフ用処理クラスを作るとか。
つデリゲート
つflag
>>878 俺なら一概に言えない
今後ずっとその全てのメソッドに条件の変更が無いならデリゲート使ったりしてまとめちゃう
メソッドBだけちょっとだけ違う条件になる可能性が少しでもある場合、完全に個別に書いちゃう
用途によると思う
イミフ
>>878 OnClassとOffClassを二つ作って使い分ければいいんじゃないの
例えば、人間か動物かの判断をオンオフでしていて 毎回、オン(人間)なら○○させるみたいにしちゃってるんじゃないの?
デリゲート使うと管理が面倒そうだ。
面倒だよね
methodA~Cに関連性があるならインターフェース、そうでないならデリゲートだな
結局全部面倒ってことで、とりあえずif文に落ち着く。 実は一番シンプルでわかりやすい。テストやるんだし問題ないよ。
もしそうならこんな質問はされないだろw
話は聞かせてもらった! NullObjectかその応用だな! さらだば
methodA、methodB、methodCのメソッド分割を見直した方がいいんじゃない?
>>878 多分↓のどちらかのパターンだと思うけど的が外れてたらすまん。
(1)
interface ICheckAction { void On(); void Off(); }
class SomeClass {
ICollection<ICheckedAction> Actions { get; }
void DoAction() {
if (checkBox.IsChecked) {
foreach (var action in Actions) action.On();
}
else {
foreach (var action in Actions) action.Off();
}
}
}
(2)
interface ICheckState { void DoAction(); }
class SomeClass {
IChekcState On { get; set; }
IChekcState Off { get; set; }
void DoAction() {
if (checkBox.IsChecked) {
On.DoAction();
}
else {
Off.DoAction();
}
}
}
test
class Noobs{ Action methodA, methodB, methodC; //Updateを呼ぶタイミングはチェックボックスのイベントに登録するとかお好みで void Update(){ if(checkBox.Checked){ methodA = method1; methodB = method2; methodC = method3; }else{ methodA = method2; methodB = method1; methodC = method3; } } void method1(){ } void method2(){ } void method3(){ } }
な。結局ifだけの方がわかりやすいだろ。 同じことやるにしても、人によって実装方法が変わりそうだし。
どうせUIに依存しまくってんだから、1ヶ所に押し込む方が後で分かりやすいと思う。 UI依存の前提がなかったり、数が増えそうだったら別の方法にするけど、それは別の話。
>>899 はシンプルな方だと思うけど、条件分岐が単純な時はif文で十分だな
他人と共同作業の時だとデリゲートが分からない奴とかいるしな
WPFのListViewにバインドしたコレクションをソートする場合どのようにすればいいですか? 最初List<MyData>をバインドさせてたのだけど ListにMyDataを追加してもListViewに反映されないので ObservableCollection<MyData>でしたのですが 今度はSortやFindメソッドが無くて使いづらい ListViewをソートするとSelectIndexとコレクションのIndexも対応 するようになっているので、見た目の削除と実際のデータの削除が違ってくる どのようにするのが一般的なんでしょうか MyDataはstring 名前とstring 説明があるだけの簡単なものです
フォームで作ったダイアログで、どのボタンが押されて終了したかを、親のプログラムが知りたいんですが、どうすれば良いのでしょうか?
できました。どうもありがとうございました
<script src="jquery-1.4.4.min.js"></script> って感じで、jsやcssの外部ファイルをwebbrowser上で適用したいのですが、 うまくいきません。 htmlファイル感覚でexeを外部ファイルと同一のフォルダにいれてみても参照してくれませんでした。 外部ファイルを適用する方法はございませぬか。 以前、cssを使ったときはcssファイルを読んで、全行書き出すという荒業でwebbrowser上のhtmlに適用しました。 それ以外のスマートな手を開拓したいのです。(´・ω・`) ■テスト用ロジック ※外部ファイルの読み込みがうまくいってないのでもろちんスクリプトエラーが起きます。 . StringBuilder sbTest = new StringBuilder(); . sbTest.Append("<html>\n"); . sbTest.Append("<head>\n"); . sbTest.Append("<script src=\"jquery-1.4.4.min.js\"></script>\n"); . sbTest.Append("<script>\n"); . sbTest.Append("</script>\n"); . sbTest.Append("<head>\n"); . sbTest.Append("<body>\n"); . sbTest.Append("</body>\n"); . sbTest.Append("</html>\n"); . webBrowser1.DocumentText = sbTest.ToString();
絶対パスで書けばいいんじゃね?
911 :
デフォルトの名無しさん :2010/12/15(水) 16:08:55
>>910 完全に目と脳が凍っていた、その手があったね。
けど、絶対パスで試したけどできなかった。
. sbTest.Append(Application.StartupPath);
. sbTest.Append("\\jquery-1.4.4.min.js");
表示されたwebbrowser上のページをで右クリして、htmlソースをコピペしてIEで開くとちゃんと動いた。
javaスクリプトが動かないようになってるのかと思って、アラート表示してみたら見事に動いた。
. sbTest.Append("alert(\"ようこそ!\")");
死にたい
>>910 ありがとう、試してみる
生きたい
普通のクラスもWPFみたいに簡単にBindingできたらいいのに
設計古いから仕方ない。当時はあれで良かった。
INotyfiChangeだのDependency Objectだの普通より複雑なコードになるし 処理も重くなるからね。仕方ない。
>>916 いやそんな面倒なことしなくてもhtmlをちゃんと与えるとhtmlヘッダに書かれた
パスからjsやcssを読み込む
>>911 の先を読めばいい
2chブラウザだとhtmlの$APPPATHの部分を自アプリのパスに書き換えてから読み込んでるよね
いったんhtmlファイルを吐き出して webbrowder.navigate("file://hoge.html"); とかしたらだめなんだろうか
例えば専ブラから書き出したhtmlのスクリプトファイルのパスは 絶対パスがかかれている そのhtmlをWebBrowserでそのまま読み込ませたらスクルプトが適用される でも、絶対パスが書かれているから、このhtmlをそのまま他人がみることはできない
921 :
デフォルトの名無しさん :2010/12/15(水) 17:17:42
>>919 ebBrowser1.DocumentTextへ正しいhtmlを渡せばnavigateと同じ動作が起きる
writeだかはnavigateが起きない
うは コピペしたのでいろいろおかしいww >ebBrowser1.DocumentText WebBrowser.DocumentText
お前らってエロいんだな
htmlに吐き出してnavigateしたらうまくいった。
ソフト作ったのだけど誰かに見せたい でも友達いない ベクターにうpるほどのものでもない どうすればいい?
>>925 ブログかgeocitiesでうpする。
ブログって画像しかうpできないとこが多いよね HP作るしかないか
skydriveの公開フォルダに突っ込んでおけばおk
ぐああああああああああああああああああああああああああ
できねええええええええええええええええええええええええ
おかしくなるあああああああああああああああああああああ
ふぅ
@
>>911 の通りにフォルダ作って、Debugにもフォルダ作る
Ascript src=のパス部分をDebug内に作ったフォルダのjsファイルの絶対パスに置き換えて実行
⇒スクリプトエラー
BWebbrowser上で右クリしてソース表示、htmlファイルに保存
CwebBrowser1.Navigate(Bで保存したhtml)
⇒エラーなしで想定どおりに動く
ドッカン
ドッカン
☆ゴガギーン
.______
. | | |
∩∩ | | |
| | | | | | |
( ,,) | | |
/ つ━━"....ロ|ロ . | l
〜( / | | |
し'∪ └──┴──┘
>>930 ソースが違っているはずだからそこを確認
>>930 動かないとかいうソースだせよ
あとIE側の設定もやったか?
>>924 敗北を認めてこれでいくよ
ありがとう(;ω;)
934 :
デフォルトの名無しさん :2010/12/15(水) 18:25:54
あと適当なhtml書いてるけど文字コードとか大丈夫なの?
>>929 ちょっと前までskydriveにソフト公開してたんだけど
アクセス数が多すぎたのかやばいものと判断されたのかわからんが
ダウンロードできなくなったんだよな
あそこってなんか制限とかあんの?
>>930 ローカル参照の場合セキュリティが発生するから
それを無効にするコードはhtmlに書き込んだ?
938 :
デフォルトの名無しさん :2010/12/15(水) 19:01:25
IE8だとスクリプトエラーになるな スクリプトの動作確認できてるの?
>>940 そりゃだめだろwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
ローカルのjsを読みにいく話かと思ったら そんなの無理に決まってるだろ
え?だめじゃないだろ
他人のサイトのjsを参照してデスクトップアプリから利用したり 自分のサイトで利用できたら問題だろ
最近のブラウザはURIから所有者が同じかどうか分かるのか凄い技術だな
そのスクリプトエラーは単に文字コード関連じゃないの?
tosjisしてる?
jquery.jsにアプリから毎回直リンとかやっていいの? prototype.jsとか直リン弾くようになってなかったっけ
というかC#だけの話じゃないのでもうちょっと自分で調べろ
951 :
デフォルトの名無しさん :2010/12/15(水) 21:34:10
お前らっていい奴だよな
お前だっていい奴らだよ
日本人は複数形が苦手だな 特に英語の場合それが顕著に現れる
どう見ても日本語だで
すれ違いとか言われそうだけど、C#の方がわかるのでここで質問。
引数により生成するオブジェクトを変えたいファクトリークラスを作ろうとしています。
調べてみるとシンプルファクトリとファクトリーメソッドという方法があることがわかったのですが
この2つの使い分けがいまいち分かりません。
ソースはこんな感じにしようとしています。
シンプルファクトリ:
http://ideone.com/JIXmc ファクトリーメソッド:
http://ideone.com/UTwhn もし後から生成するクラスの種類が増えることがある場合、ファクトリーメソッドにした方が良いのでしょうか。
それぞれの利点を教えてくださると助かります。
それぞれの利点というか併用されることも多いみたいだけど・・・ ま、それはいいとしてJava時代のデザインパターンってC#に合わないものも多いんで 本当にそのパターンが有益かどうか考えた方がいいよ
observerパターン! stateパターン! visitorパターン! C#にはこんなんいらねーよな
抽象クラス使うものは全部いらないなw
今の C# だと、ファクトリクラス用意するよりも、 Func<IProduct> のデリゲート受け取る設計の方が楽だしシンプルだしいいかもしれない。
>>960 要らないっていうと語弊招きそう。
ちゃんと、言語自体に機能持ってるからプログラマーがパターン意識する必要がないって言わないと。
stateはstateのメソッドが複数あるなら使うだろ visitorは無駄に複雑になるしインターフェイスも汚くなるから列挙体とかで 振り分けた方が好ましいけどそれはC#の機能関係ないし dynamic使えば動的に振り分けられるがまずそんなことしない
某「猫でも〜」のサイトを見ながらC#を始めたのですが、 私は猫以下のようです・・・ でも、VS2010Expressに特化して解説したサイトとコーディング全然違うし・・・ まあコンソール編は当然違うだろうけど、フォーム編のコーディングもちょっと特殊ですよね? あのサイト本当に分かりやすいですか? 本を売るために、わざと解りにくく書いてるのかな?
>>966 今見てみたけど、情報が古そう。デザイン部分もコーディングしてるし。
見なくて良いと思う。
>>967 そうですかぁ。特殊なのかと思ったら、古いのですか・・・
2010Expressでフォームアプリを中心に解説してるお勧めサイト無いですか?
ないな いろんなブログ見ていくしかない
>>968 >>911 の2chの専用ブラウザあたりを試してみては?
2008で説明されてるけど2010でも問題ないと思うし
ブログとか、多くのサイトって断片的過ぎて、それらをまとめる能力無いんよね、初心者は。 完結したプログラムを幾つか作って改造したりして、半年くらい繰り返したら、そういう情報を寄せ集めもできるようになるんじゃね?
知りたいことは断片的なものだろうけど 初心者に必要なのはコピペ能力じゃないんだよな IDEが親切過ぎて盲目になっちゃうのは仕方がない
初心者への説明で テンプレート メソッド プロパティ などの単語を使って説明したりするけど 初心者はまず、その単語の意味すらわからない 参照する という言葉も日常の意味とはまったく違う プログラミングにおける参照はどういう意味があるのか この説明もしなければいけない 日常的な言葉で説明して一見わかりやすそうに見えるが 初心者には逆に難しい 一般的な言葉の意味だけで説明していかないとまず理解してもらえない
自動生成されたラジオボタンのグループを、別に用意したボタンを押した時に状態を 参照するスマートな方法ってありますか? if文でsenderかを比較するとか、下記のswitch文にするくらいしか思いつきません private void button1_Click(object sender, EventArgs e) { RadioButton[] rbnTable = { radioButton1,radioButton2,radioButton3 }; foreach(RadioButton btn in rbnTable) { if(btn.Checked == true) { int pos,btnNum; string btnPref = "radioButton"; pos = btn.Name.IndexOf(btnPref); if(pos == 0) { btnNum = int.Parse(btn.Name.Substring(btnPref.Length,btn.Name.Length - btnPref.Length)); switch (btnNum) { case 1: break; case 2: break; case 3: break; default: break; } } break; } } }
>>975 イメージがよくわからんけどラジオボタンの状態を管理すればいいだけとちゃうの?
チェック先を変えればイベント発生するし
if(btn.Checked == true) ↓ if(btn.Checked) From rb in RadioButtons Where rb.Checked Select true
>>975 ボタン_click()
{
if (radioButton1.Checked) 処理;
if (radioButton2.Checked) 処理;
if (radioButton3.Checked) 処理;
}
ではないのか?あまりにも単純な話すぎて、勝手に難しい問題に解釈されているような。
>>979 それは効率悪いだろ・・・
どういうことをやりたいかもうちょっとわかればコードもかけるが
よくわからないところがあるしなあ・・・
981 :
975 :2010/12/16(木) 13:51:47
例で書いたcase文の中の処理が重要で、それ以外を上手く手抜きできないかと考えました。
本当はcase文ではなく、配列化された処理を呼び出すために連番となっている番号を取得したかったのです。
言葉足らず過ぎて失礼しました。
>>976-977 ラジオボタンのCheckedChangedで変数に番号を代入してButton1_Clickで参照する方法は
定石でしょうし、条件分岐も楽なのは解ります。
ただ、一カ所だけで処理したかったので
>>978 Linqはまだ良く解らなくて...
select trueなのかselect rbなのか、varに入れた内容からradioButtonの番号を抽出する方法とか
foreachで回すよりは良いとは思います
>>979-980 すいません。
関数[btnNum];
という処理をやってみたかったのですが、関数の配列化はこれから勉強するつもりです。
Linqなんて簡単だよ。 覚えてると楽になるからさっさと覚えれ。
class MyRadioButton:RadioButton { public int Number{get;set;} } if(TypeOf(btn).Name=="MyRadioButton") { switch( btn.Number ) { } }
初心者ってクラスやメソッドを自作しないで あるがままのを使おうとするよね
>>988 まあそういう試行錯誤も悪くはないよ
知らないんだし
でもそのまま突っ走られるより質問しただけいいんじゃないの?
試行錯誤しないまま答えだせや!!と言わんばかりにこの辺のスレに
来られるのもあれだけどw
童貞のくせに偉そうだなw
switch((rbnTable.Where(rb=>rb.Checked)).Num) { }
>>983 SQL構文をそのまま実装してくれればいいのに.
ReactiveExtension便利だよね。
using System.Runtime.InteropServices [DllImport("○○.dll")] で呼び出したAPI関数は、その呼び出したclassの中でしか使えないのでしょうか? 他のクラスから、コンストラクタを呼び出して普通のメソッドと同じようにやると、 アクセスできない領域にあるとエラーが出ます。
>using System.Runtime.InteropServices [DllImport("○○.dll")] これ管理用のC#のクラスを作ってそれを呼び出せば?
呼び出したんじゃなくて定義したんだろ エラーメッセージは正しく でそれをぐぐってみた? ていうかMSDNで該当するエラー番号調べた?
997 :
975 :2010/12/16(木) 17:42:16
ソースを晒してくれた方へ >>ラジオボタンのCheckedChangedで変数に番号を代入してButton1_Clickで参照する方法は >>定石でしょうし、条件分岐も楽なのは解ります。 >>ただ、一カ所だけで処理したかったので の変なコダワリによって、今回の件での使用は控えさせていただきますが、 将来、マトモなソフトを作る時の参考にさせてもらいます。 Linqでやろうと思いますが、まだ濃い霧の中。 とりあえず御礼まで
999 :
994 :2010/12/16(木) 18:00:49
自己解決しました。 APIの定義をPublicにして、インスタンス参照から型参照に変えたらエラーがでなくなりました。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。