[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 07/02 11:43 / Filesize : 233 KB / Number-of Response : 945
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっとC#,C♯,C#(初心者用) Part47



1 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 18:23:31 ]
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

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

前スレ
ふらっとC#,C♯,C#(初心者用) Part45 (実質46)
pc12.2ch.net/test/read.cgi/tech/1255658236/

577 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:00:10 ]
マルチモジュールアセンブリってどういうときに使うの

578 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:06:00 ]
>>577
msdn.microsoft.com/ja-jp/library/168k2ah5.aspx


579 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:08:42 ]
>>557
自分なら、そう言う判定は牌クラスにはやらさない。
麻雀はやらないから良くはわからないけど、手牌を管理するクラスの基底クラスか、
役を判定するクラスを作って、そこで判定させる。

麻雀を知らないから良くわかんないんだけど、牌のグループを判定する目的ってなに?
そんなのなくても判定できそうに思うんだけど。。。

580 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:11:23 ]
どうせアルゴリズム主体だからどうでもいい

581 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:20:02 ]
>>579
牌の情報は牌が知ってる方が妥当な設計かなーと思ってそういう設計にしてました。
実際そういった情報を使うのは役判定クラスだけになりそうなんですよね。

グループの判定がしたいと思った理由は、以下のような役で
ある牌がどのグループに属してるか判った方が実装が楽かなと思ったからでした。
・清一色(全部の牌が萬子、筒子、索子のうちの一種類)
・字一色(全部字牌)
・混一色(清一色に字牌の面子あり)



582 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:28:25 ]
Win32APIのCreateProcessを使っているのですが
C++だと終了前にCloseHandleをするように決められています
これはリソースの解放をいうことだと思うのですが
ガベッジコレクション?があるからC#では特に解放したりする必要はないのでしょうか?

583 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:32:34 ]
>>582
自分で解放しなきゃダメ。
GCに回収/開放されるのはC#の管轄内で生成されたオブジェクトだけ
具体的にはそのインスタンスの為に処理系が用意したメモリ領域だけ


584 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:33:18 ]
当たり前に必要。というかなんで Process クラスを使わん
.NET でまじめに Handle を使うのなら SafeHandle を使う
必要もあるし、P/Invoke は素人にお勧めできない。

585 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:41:38 ]
>>581
なるほど。知識不足、すまん。

それなら、牌種類 enum の他にグループ enum を牌クラスのプロパティに持たせるかな。
やっぱり牌クラスにはその手の判定メソッドは持たせない。自分なら。



586 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:49:41 ]
private void GetTextBlocks(UIElement p)
{
  if (p is TextBlock)
  {
    list.Add((TextBlock)p);
  }else if (p is Panel)
  {
    var pa = (Panel)p;
    foreach (UIElement c in ((Panel)p).Children)
    {
      GetTextBlocks(c);
    }
  }else if (p is ContentControl)
  {
    GetTextBlocks((ContentControl)p);
  }
}

再帰的に TextBlock の一覧を取得するメソッドですが、
これを Linq とか ラムダ式とか使ってメソッドを定義せずに
短く書くことってできますか?

587 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:51:05 ]
>>585
なるほど、属するグループもenumにしちゃうってのは盲点でした。
[Flag]属性付けとけば数牌かつ萬子とか風牌かつ字牌なんてのも容易に表現出来そうですね!


588 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:55:27 ]
>>583
やっぱそうなんですか
うーん管理が必要だな

>>584
そっちは
作成時にウインドウスタイルをいじれなくて困ってます
作成、MoveWindow(Win32API)でサイズ変更
とやると管理は必要ないですが
プロセスが立ち上がるまでサイズがデォルトなので支障がありまして・・・
せめて、非表示でプロセスを立ち上げる方法があれば・・・・と思ったのですが検索しても見つからず
CreateProcessを使用するしかないかという結論に至りました

589 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 23:59:03 ]
ダメだこりゃ。

590 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:01:28 ]
C#のみでの解決法も提示できないくせに口だけは御達者のようで^^

591 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:03:36 ]
msdn.microsoft.com/ja-jp/library/system.diagnostics.processstartinfo_members(VS.80).aspx
>>598 じゃないというか >>584 だけど少しはまともに調べたら?

592 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:04:23 ]
>>587
なんでもかんでも[Flag]使って一つのプロパティに収めるのは如何なものか?
でもenumが継承出来ない以上無理ないのか。


593 名前:588 mailto:sage [2009/11/15(日) 00:07:03 ]
ちなみに現在の状況としてはプロセスを起動
WaitForInputIdle()でIdleを待ち
MoveWindowでサイズを変更すると言った感じのことをしています
Idleをまつのだから、プロセスがデフォルトの設定で開かれるのはしかたないことではあるのですが
ちょっとそれだと支障がありまして

594 名前:588 mailto:sage [2009/11/15(日) 00:11:10 ]
>>591
みなさんからすれば調べ方が悪いのでしょうが自分でも半日以上調べてたのですが
どうしようもなくこういう結論に至ってました
そんなものがあったのですね
ありがとうございました

自分で考えて導き出した結論はたしかに初心者なので間違ってることも多いかと思います

でもなにも考えずに
あれやるのどうするの?これやるのどうするの?
って全部聞いた方がいいんですかね?

自分で必死に考えてだした結論をそうやってバカにされるのは正直不快ですね

595 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:14:00 ]
バカなんだからしょうがない。



596 名前:588 mailto:sage [2009/11/15(日) 00:15:41 ]
>>595
ここは初心者スレじゃなくて
分からない人をバカよばわりして上級者が偉ぶるスレですか?

597 名前:588 mailto:sage [2009/11/15(日) 00:16:22 ]
うそですdb

598 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:16:30 ]
煽られるのがいやなら、2ch なんて来るなよ。

599 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:17:54 ]
>>598
お前の2ch論を勝手に初心者におしつけんなよwwwwwwwwwwww
2ch利用すると煽られなきゃいけないとかお前の世界はどんだけゆがんでるんだよwwwwwwwwwwwww

600 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:18:59 ]
少なくとも煽り耐性くらい付けろよ…
2ch初心者までは歓迎してなんだが。

601 名前:588 mailto:sage [2009/11/15(日) 00:19:30 ]
>>598
>>597
さんはどなたでしょうか

不快なのは確かですが
自分がバカなのも確かですので仕方ないです
他の方が教えていただけたので自分は満足です
ありがとうございました。喧嘩はしないでください

602 名前:588 mailto:sage [2009/11/15(日) 00:20:40 ]
>>600
2ch初心者wwwwwwwwwwwwwwwwwww
ぼくは2chのプロですwwwwwwwwwww
あおっちゃうし偉そうに初心者を見下すけど解決法も提示しませーんwwwwwwwwwwwww
ってかwwwwwwwwwwwwwwwww
どんだけゆがんでんだよwwwwwwwwwwwwwww

603 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:20:42 ]
気にせずに、また来いよ。バカ

604 名前:588 mailto:sage [2009/11/15(日) 00:21:26 ]
うそですdb

605 名前:588 mailto:sage [2009/11/15(日) 00:21:31 ]
うそですdb



606 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:22:11 ]
>>604
わろたwwwwwwwwwwww

607 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:22:49 ]
>>594
煽るやつにしか煽り返さんよ。自覚ないのかよ?不快いう
お前が不快だ。

それはそれとしてやっていることの内容的に CreateProcess でも
不自然でもないかもな。Vista や 7 で問題があるから使われなく
なりつつある API だけど。

で、まじめに使う場合の話したが、具体的にはハンドル型を
SafeHandle から継承して作成してうんぬんってややこしいことを
しないといけないので大変って話だ。やりたいんなら説明は長く
なるから SafeHandle でぐぐってその辺の知識を入れてからやれ。


608 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:27:22 ]
香ばしいスッドレですね

609 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:27:56 ]
>>586
メソッドは必要
無理やり最近のC#っぽく書くならこんな感じか
private IEnumerable<TextBlock> GetTextBlocks(UIElement p)
{
 var textBlock = p as TextBlock;
 if (textBlock != null)
  yield return textBlock;
 else
  foreach (var textBlock in LogicalTreeHelper.GetChildren(p).SelectMany(c => GetTextBlocks(c)))
   yield return textBlock;
}

610 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:31:38 ]
はい次の方どうぞ

611 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:33:59 ]
なんか根本的なところが間違ってる、とまではいわないまでも、考え違いをしているような気がする。
もういちどスタートラインに戻って考え直してみてはいかが?

612 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:49:16 ]
WebBrowserのこんとろーる?
を使ってるんだけど
IEデフォルトのショートカットを無効にして自分で設定したショートカットを使うにはどうすればいいの?

613 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 01:18:17 ]
>>573
ありがとう。研究してみる

614 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 01:52:12 ]
神回答者の俺がいなくなるとすぐに荒れるな
まったくおまえらの役立たずぶりには困ったもんだ

615 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 02:17:39 ]
さっきのものですが非表示起動はできたのですが
その後、非表示から表示にきり変える方法が分かりません
msdn.microsoft.com/ja-jp/library/system.diagnostics.processwindowstyle%28VS.80%29.aspx
に、
Hidden 非表示のウィンドウスタイル。ウィンドウは表示または非表示のいずれかにできます。システムは、ウィンドウが非表示であることを示す場合は、そのウィンドウを描画しません。
ウィンドウが非表示の場合、そのウィンドウは無効になります。非表示のウィンドウは、システムまたはその他のウィンドウからのメッセージを処理できますが、ユーザーからの入力を処理したり
、出力を表示することはできません。アプリケーションは、新しいウィンドウを非表示にして、そのウィンドウの外観をカスタマイズしてから、ウィンドウ スタイルを Normal にすることがよくあります。

と、描いてあるのですが非表示で作成したプロセスをどうやって表示状態に戻すかが分かりません
作成したプロセスのWindowStyleを再度変更するにはどうすればいいのでしょうか?

win32APIも試してみたのですが

ProcessStartInfo startInfo = new ProcessStartInfo(save.memosoft);
startInfo.WindowStyle = ProcessWindowStyle.Hidden;

Process p = new Process();
p.StartInfo = startInfo;
p.Start();

p.WaitForInputIdle();
Win32API.MoveWindow(p.MainWindowHandle,200,200,480,640,1);
p.WaitForInputIdle();
Win32API.ShowWindow(p.MainWindowHandle,1);
こんな感じで表示を切り替えようと思ったのですが非表示のウィンドウが表示されてくれません
ShowWindowの2や3最大化・最小化なんかは、普通に動くので表示・非表示切り替えの部分だけ
Cと、C#では別のものなのでしょうか?

よろしくお願いします



616 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 02:25:23 ]
>>615 すまん、Win32系のスレで聞いた方が早いかも
対象言語はC/C++になるとは思うが

617 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 02:29:22 ]
どう考えてもC#の領域だろうが

618 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 08:52:57 ]
>>569
Console.WriteLine("{0}, {1}, {2}", x, y, z); 
Console.WriteLine("{0:F18}, {1:F18}, {2:F18}", x, y, z); 
Console.WriteLine("{0:E18}, {1:E18}, {2:E18}", x, y, z); 


619 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 09:11:00 ]
ばかばっか

620 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 09:14:55 ]
>>619
自覚しているんだねw

621 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 09:39:25 ]
>>620
自覚しているんだねw

622 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 10:05:50 ]
>>619-622
自覚してるんだぜ

623 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 10:33:39 ]
ねぇ、オウムって賢いと思う?w

624 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:02:33 ]
コンニチハ!オハヨウ!ボクピーチャン!ヨロシク!

625 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:04:39 ]
>>586
やっぱContentControl渡すとスタックオーバーフローするな、これ。
何か窺い知れないオーバーロードあるかと試してみたんだが。
例示としては不適切だし、実コードなら見直しを薦める。



626 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:23:05 ]
try catchってなるべくつかわないほうがいいの?

627 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:25:41 ]
なんでそう思い至ったのか言ってみ

628 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:49:52 ]
ム板の感じの悪さは異常。
無駄にプライドばっかり高くてスルー能力も足りず、話を脱線してでも一言いわずにはいられない。

勿論冷静な人も大勢いるだろうが、一部の幼児脳は単芝と^^を付けて顔真っ赤なのを隠しつつ
煽らずにはいられない。

‥あ、このレスはスレチで、かつ釣りなので絶対にスルーして下さいね。
言わば例外ですが、これは仕様想定外の例外なので catch はしないで下さい。
こんなレスがある事自体が誤りなのです。その他はスルーしないで下さいね。


629 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:54:55 ]
簡単に画像を表示したり
graphics gとか使ったりするのはフォームでもできるけど
やっぱり画像処理はPictureBoxつかってやったほうがいいですか?

630 名前:デフォルトの名無しさん [2009/11/15(日) 11:55:46 ]
>ム板の感じの悪さは異常。

結構学歴あって立場のある人間でも変態がいるからなぁw

631 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 12:28:29 ]
>>615
なんでだろうな? CreateProcess() して、ShowWindow() なら表示されるんだよね?
表示・非表示以外はできる、ってことだから、ウィンドウハンドルはちゃんと取れてるんだろうし。

632 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 12:29:06 ]
煽り煽られはマの基本的な習性です。言語論争など尽きる
ことがありません。そうやって知識とか整理されたり解決策を
導く兵達の世界なのです。でもこれを忘れて暗黒面に落ちる
のは自重しようね!

>>629
「画像処理」をもうちょっと詳しく。拡大縮小とかそんなの?

633 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 13:12:37 ]
楽しいからいいよ

634 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 13:20:44 ]
axWMPコンポーネントを使い、

wmp.PlayStateChange +=
new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(st);

public void st(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
MessageBox.Show("StateChanged");
}

こうして、停止/再生を繰り返してもメッセージが表示されません。
何か間違っていませんか?

635 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 13:36:13 ]
>>634
なんか最後の1行でフイタ

そのライブラリって有名なのか?
リファレンスにはその状況下でそれでハンドル出来ると書いてあるの?
最早知らないとわからない話の類だと思う




636 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 14:21:56 ]
>>635
新規プロジェクトで、>>634だけ張るとちゃんと機能してくれるんですが・・

637 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 14:51:27 ]
WindowsMediaPlayerSDK見ると、サンプルで
Player = new WMPLib.WindowsMediaPlayer();
Player.PlayStateChange +=
new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(Player_PlayStateChange);

private void Player_PlayStateChange(int NewState)
{
・・・・・
}
になってるな。

638 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 16:29:55 ]
>>626
try に入る部分で負荷がかかるから
try のネストはするなってのをむかーし Java か C++でのなんかで読んだ気がする。
C#はどうなのかはあんまり気にしたことなかったなぁ。

あと .NET だとこんなの見つけた
msdn.microsoft.com/ja-jp/library/ms973839.aspx
>.NET アプリケーションのパフォーマンス関連のヒントとトリック
>送出する例外の数を減らす
>例外の送出にはきわめて高いコストがかかることがあるので、.......



639 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 17:04:30 ]
string s="abcd";
//いろいろやる
s="efgh";

これって、いろいろやるを行っている間は"abcd"はガベジコレクタンの対象にならずに
s="efgh"が実行された瞬間"abcd"がガベジコレクタンにぶっこわされるの?

640 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 17:23:56 ]
例外が投げられない時のtry catchのコストは無視していい。
まぁ例外のパフォーマンスを気にしないといけないほど、大量の例外を投げる作り方ってどうなのさ?

641 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 18:03:29 ]
>>640
あるとしたらフロー制御に例外を使うとかじゃない?
それが推奨されないやり方だからMSも注意を促してるってことかと。

>>639
瞬間に"対象になる"ってのが正しいんじゃね?すぐにぶっこわされるわけじゃないよ。
あと当然ながら何かに参照されてるインスタンスはガベコレ対象外だよ。
あれこれしてる最中にぶっこわされるとかあったら怖すぎるww




642 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 18:05:53 ]
>>639
リテラルだからガベコレも何もない

>>640
正常系で例外を利用するようなとんでもない実装も、
異常系が頻発するような滅茶苦茶な設計も普通に駄目だろ

643 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 18:07:03 ]
>>640
ループの中でcatchしまくり&別にそれでループ脱出はしない、とか。
直接そういう書き方しなかったとしても、ループ内で呼び出してるメソッドの中の方でcatchしてたりすると
なかなか見つけづらいんじゃないかな。


644 名前:デフォルトの名無しさん [2009/11/15(日) 18:42:50 ]
部分的に文字列の色やフォントサイズが変更されている1つのリッチテキストボックスの書式の内容を、1つのRectangle構造体の中に同じ書式で印刷することは可能ですか?



645 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 18:45:43 ]
テキストボックスの文字列を数字のみか確かめるときに
Parse使うのは駄目なの?



646 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 18:52:51 ]
>>645
try catch の流れで聞いてる?
なら TryParse を使いましょう。

647 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 19:10:06 ]
>>637
どういうことですか?


648 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 19:16:37 ]
>>642
リテラルかどうかなんて一切関係のない話だと思うけど。

649 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 19:18:44 ]
>>647
宣言が違うってことじゃね?

650 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 19:19:55 ]
>>645
正規表現使うのがオーソドックスなんじゃないの?
まあ扱う数字が非整数かつ国際化対応を考えるとちょっと面倒だったりするんだけど。

651 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 19:21:14 ]
Parse でいいだろ。指数表現とかをどうするか? とかって問題はあるけど。

652 名前:634 mailto:sage [2009/11/15(日) 19:30:38 ]
>>647は私では無いです
>>637
wmpはprivate AxWMPLib.AxWindowsMediaPlayer wmp;
こう宣言していました。
AxWMPを使って同じ事出来ませんか?

653 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 19:32:01 ]
そういうのはParseとかTryParseで充分じゃね?
正規表現使う程のもんじゃないと思うが。

IsDigitでシコシコチェックするメソッド作るのも別にありだと思う。

654 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 19:52:04 ]
>>648
リテラル文字列の参照はなくならないから、ガベコレの対象にはなり得ない

655 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 19:55:18 ]
>>652
何をやって何がどうできないのか、全然わからんよ。
環境やら手順やら、落ち着いて書いてみ。



656 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 20:02:58 ]
>>655 だけど、少なくとも、俺の環境(Vista 64bit + VS2008 SP1) では、
Windows フォームアプリケーションでツールボックスに Windows Media Player を追加して、
それをフォームに貼り付けて、プロパティウィンドウから PlayStateChange イベントが追加できるよ。

そんで、↓みたいな感じでイベントも取れてる。

private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
  System.Diagnostics.Debug.WriteLine(e.newState);
}


657 名前:634 mailto:sage [2009/11/15(日) 20:07:58 ]
>>655
AxWMPコンポーネントをデザイナで配置し、
AxWMPLibのPlayStateChangeEventHandlerを使い、曲が終了すれば、
次の配列にある曲を再生、というプログラムを作ってました。
先日、機能拡張を図ろうと、幾つかの機能(次曲移動等の簡単なもの)を制作した後、
プログラムを起動してみると、曲の終了が検知できていなく、これに気がつきました。
それまではちゃんとイベントも捉えられていたのですが、どこを編集したのかも分からなってしまい・・・


658 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 20:09:49 ]
もう一度最初っから作り直せよ。

659 名前:634 mailto:sage [2009/11/15(日) 20:15:33 ]
>>656
実際に試して貰ってありがとうございます。こちらの環境でも、新しくプロジェクトを作成すると、
void Form1_Load{axWMP.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(ax);}
void ax(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
これでちゃんとイベントは取れています。
>>657のソースでも同じように記載してありますが、何度そこを書き直しても駄目でした。
今気がついたのですが、>>657のプログラムだと、新しくWMPのコンポーネントを生成しようとするとエラーが出て生成できませんでした;
コンポーネント 'AxHost' を生成できませんでした。エラー メッセージ:

'System.Reflection.ReflectionTypeLoadException: 要求された型のうち 1 つまたは複数を読み込めませんでした。詳細については、LoaderExceptions プロパティを取得してください。

場所 System.Windows.Forms.Design.DocumentDesigner.AxToolboxItem.CreateComponentsCore(IDesignerHost host)

場所 System.Drawing.Design.ToolboxItem.CreateComponentsCore(IDesignerHost host, IDictionary defaultValues)

場所 System.Drawing.Design.ToolboxItem.CreateComponents(IDesignerHost host, IDictionary defaultValues)

場所 System.Windows.Forms.Design.OleDragDropHandler.CreateTool(ToolboxItem tool, Control parent, Int32 x, Int32 y, Int32 width, Int32 height, Boolean hasLocation, Boolean hasSize, ToolboxSnapDragDropEventArgs e)'

>>658
かなり膨大なプログラムになってしまいましたので、書き直すのは本当に最終手段にしたく思いまして;

660 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 20:19:36 ]
なんか参照とかその辺がおかしくなっちゃってるんかな。
ソース管理を使ってれば、機能拡張以前にロールバックするところだけど・・・。

変に直すより、最初っから作り直した方が早いかもよ。

661 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 20:28:38 ]
>>660
ですか。。
取りあえず参照周り弄ってみて、
駄目そうなら書き直すことにします。。

ソース管理?なるものがあるんですね。調べてみます。

662 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 20:36:02 ]
つーか、デザイナから配置したなら、わざわざコードでイベント書かなくても、プロパティウィンドウから
追加できるだろ?

実際に配置したコントロールと別のものを使っちゃってるんじゃないの?

663 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 20:37:48 ]
初めてなら TortoiseSVN あたりが無難かと>ソース管理

664 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 20:42:02 ]
>>662
それも考えましたが、そこから書いても同じでした。
現時点でwmpコンポーネントは1つしか使ってないので、
間違うというのも無いはずなので・・・

665 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 20:51:41 ]
廃棄周りの処理の流れを追うと何かヒントがあるかもしれなかったり

知らない内に廃棄してる、あるいは廃棄と同等な処理を呼んでしまってる
あるいはそこら辺の動きが理解できていなくておざなりになってる

とか



666 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 20:56:10 ]
あるいは意表を突いてイベントのハンドラをRemOveしと再設定してる処理がある、とか
曲再生の度にDisposeやHandleの解放もせずに新たにnewしてたりして、そっちにハンドラAddしてないとか

こういう謎な時は「それはありえない」って部分含めて丸ごと疑ってみるしかない

667 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 21:04:32 ]
>>665,666
それはないと思います。
StateChangeのイベントハンドラでプロジェクト全体に検索かけましたが、
問題有りそうな箇所は見つけられませんでした。
dispose、new周りも確認しました。
曲再生はただURIをwmpに与えているだけなので、問題は無いと思います。

これでも数日間ソースとにらめっこしてたので、
もう新しくソース書くことにしました。。

668 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 21:09:08 ]
QuartzTypeLibを使用して動画再生をさせているのですが、動画表示部(Panel)のクリックを拾ってくれません
クリックイベントを拾う方法を教えてください

669 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 21:09:51 ]
>>668
できますん

670 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 21:32:07 ]
>>644
日本語になってねぇぇぇ。
リッチテキストボックスの内容を書式込みで印刷するのは出来る。
support.microsoft.com/kb/812425/ja

「1つのRectangle構造体の中に」がイミフ。


671 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 22:53:02 ]
>>669
ど、どっちなんでしょうか?
可能であれば方法を教えていただけないでしょうか?

672 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 22:57:33 ]
try{
>> 1-671
} catch {
//確かに重い
}


673 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:15:08 ]
>> 1-671
何でスペース入れてんの?w

674 名前:デフォルトの名無しさん [2009/11/15(日) 23:17:41 ]
>>670
ありがとうございます!

会社の各店舗がお客さんに配布する広告を作成しようとしています。
大半は、DB登録済みの商品内容を表形式で印刷するだけなのですが、
用紙の左下部分に、店舗ごとのフリー記載欄を設けたいんです。

例えば
「横浜西口店ではこんなキャンペーンを行っています!」←MSゴシック太字
であったり、
「三宮店ではこの商品がお得!!!!」←MS明朝の赤字
など、店舗ごとのオリジナルコメント登録フォームを設け、
リッチテキストボックスにコメントの内容と書式を設定してもらっておき、
その書式内容をそのまま、帳票の左下部分に反映させたいんです。

PrintDocumentコントロールなどの中で、
そのようなことを実現するにはどうすればよいでしょうか。

675 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:58:02 ]
>>674
printメソッド見ると分かるけど、GraphicsのHDCの中に印刷領域決めてその中に
リッチテキストをEM_FORMATRANGE送ってレンダリングしている。
そこいら辺をゴチャゴチャと直して使えばなんとかなると思われる。
また印刷領域がGraphicsで来ることから分かるけど、普通にg.DrawXXXXとかで
他の部分も描ける。ヘッダとかフッタとか。



676 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 00:00:45 ]
その辺のメソッド流用すれば印刷プレビューが作れることも確実。俺やったもの。

677 名前:デフォルトの名無しさん [2009/11/16(月) 00:42:08 ]
>>675
ヘッダとかフッタ…
印刷可能領域外に描けるということ?
ちなみに、印刷可能領域が用紙の端から何インチか知りたいのだけど、方法が分からない
(>_<)。

678 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 03:58:09 ]
ReleaseモードのときとDebugモードのときで
出力する実行ファイルの名前を変えるにはどうすればいいですか?


679 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 04:05:47 ]
プロジェクトでReleaseモードのときとDebugモードのときで
出力する実行ファイルの名前を変えておけばいいよ

680 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 04:27:55 ]
馬鹿はレスしなくていいよ

681 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 04:52:27 ]
バカはレスしなくていいけど
初心者相手に意味不明な専門用語をならべるベテランもレスしなくていいよ

682 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 04:54:41 ]
馬鹿は質問しなくていいよ

683 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 05:06:44 ]
なんだよジェネリックって!中で足し算できないのかよ!ファック!

T func<T>(T x,T y)
{
return x+y;
}

intでもdoubleでも使える関数作るとおもったらできねー!ゴミ!考えたやつ死ね!

684 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 05:11:12 ]
つ dynamic
.NET 4.0からだけどね。

685 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 05:26:19 ]
>>683
すんげー微妙だけど一応逃げ道はあるww
T func<T>(T x, T y)
{
 return (T)Microsoft.VisualBasic.CompilerServices.Operators.AddObject(x, y);
}
まあ、このコードもゴミだなw



686 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 06:40:39 ]
T Func<T>を.net2.0でも使えるようにしたいんだけど何か方法無い?

687 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 07:27:23 ]
Generic自体は2.0からサポートされてるんだから
自分で定義したらいい。

688 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 07:53:04 ]
>>678
つ [ビルド後のイベント コマンド ライン]

689 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 10:26:58 ]
完成したアプリを大幅に変更したいのですが、
現時点でバックアップを取りたいです。

出来れば毎日バックアップが残ればいいのですが、
プロジェクトのフォルダごとコピーしておく以外に良い方法はありますか。


690 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 10:53:23 ]
>>689
バージョン管理ツールを使う
VisualStudioがStd以上ならフリーのアドインが使えるsvnがいいかも。
まあEEでもツールや文献の多いSubversion(svn)から使い始めるのがいいかな。

691 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 10:58:59 ]
git が流行ってる?

692 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 11:01:13 ]
>>689
VisualSVN+AnkhSVNオヌヌメ


693 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 11:22:44 ]
>>688
ありがとうございます
解決しました


694 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 11:29:00 ]
>>683 定義の段階ではTが何の型かわからない訳だから
たとえ中で足し算が出来ない仕様だとしても仕方無いような

渡される型にオペレータオーバライドでもできて「自型+自型と書かれた場合はどうする」が
定義出来るならテンプレ中で + が使えないとおかしいとは思う


695 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 12:34:56 ]
>>691
git流行ってるけどあれは個人で使ってもあんまり旨みがなさそうな気が・・・



696 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 12:38:58 ]
IComparable みたいに加減乗除もインターフェースあったらよかったのにねえ。


697 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 12:44:36 ]
>>696
それって演算子のオーバーロードじゃ

698 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 12:58:12 ]
ドングルみたいなUSBメモリを自分で作りたいけどハード的な知識がやっぱ必要だろしC#なんかでは作れないよね?


699 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 12:59:57 ]
プロテクトするんだったら
通常アクセスしない特定のセクタに特定のデータ書き込んでおく


700 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 13:04:06 ]
>>698 ハードのドライバは難しいかもしれない。
結局C/C++などでI/O処理書いてDLLにする形になると思う。


701 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 13:19:07 ]
>>697
いや、インターフェースがあったら
T max<T>(T a, T b) where T : IAddable, ISubable, .....
みたいなことできるよねーみたいな。
もちろん IComparable と同様に Int32 とか Double が実装してること前提だろうけど。

702 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 13:24:05 ]
VC# .NET3.5、 VS2008、WinXPProで開発を行っております。

あるファイルに、下記のような列挙型が定義されています。コメントの通り、近い将来何かの値が追加される予定の列挙型です。
このような列挙型を別のファイル・別の場所で使用する場合、予定された仕様変更に備えて、Exceptionを吐いたり、何かしら忘れないような処理を入れたいと思うのですが、どのような処理がよろしいでしょうか?
一応、思いついたのは下記のようにif/elseで分けた場合には、throw new XXXXExceptionすることでしたが、これでは列挙型が変更された後、実際にプログラムを動かさない限り、追加されたことに気づけません。
できれば、コンパイル時に忘れを防ぐような方法があればいいと思っているのですが……

よろしく御回答お願いいたします。

//あるファイル。
enum Hoge
{
  abc, def, ghi
  //近い将来、 jkl(?)が追加される予定。
}

----

//別のファイル
Hoge hoge = Hoge.abc;
if (hoge == Hoge.abc) {
  //何かの処理
} else if (hoge == Hoge.def) {
  //何かの処理
} else if (hoge == Hoge.ghi) {
  //何かの処理
} else {
  //仕様変更により、Hogeに値が追加された場合、変更を忘れないようにするための備忘録?
  throw new NotImplementedException();
}


703 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 13:28:24 ]
>>699-700
ナイスな情報サンクス!

なるほど・・・
C++とかでローレベルI/O書いて.NETから呼び出せばいいのか
でその書込みアドレスは普段使わない(これまた調査が必要そうだけど・・・)位置に書き込んでおけばいいだけなのか・・・

なんとなく方向性はつかめた気がする!
やれるだけやってみよう!!


704 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 13:37:08 ]
>>703
汎用IOドライバ使えば読み書きできるとおもわれ。
ただし、バルク転送に限られるけど(確か)

705 名前:デフォルトの名無しさん [2009/11/16(月) 14:32:59 ]
C/C++やってました。
VS2008買ってC#を勉強しようとしていますが、
エディタの設定がデフォルトでタブが空白になるような設定になっています。
タブを空白にするメリットって自分には思いつかないのですが、どうなんでしょうか。

タブをスペースにするメリットってなんですか?
またそういう人は結構多いんでしょうか?



706 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 14:38:29 ]
ハードタブは環境によって見かけの桁数変わるから嫌う人もいる
コマンドラインでダンプする時も調整利かないから見づらい
半角空白はUnix系の人に多い気がする


707 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 14:44:44 ]
あとタブ文字は元々見たままの空白文字では無いから(機能文字/プリンタの制御コードだから)、
単にソースの見栄え整えるのに処理系で変わる機能文字使いたくない/使わない
って言う文化もある。

タブ文字に別の意味割り当ててる処理系もあったはず


708 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 14:46:42 ]
>>706
なるほど、納得です。ありがとうございます。

709 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 14:52:45 ]
VisualStudio2010ただでロードしたwww
なにこれwwwインテリセンスの強さとかマジヤバくてVC#2008Expとかウンコに見えるんですがwww

機能制限とか使用期限とかあんの?

710 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 14:57:02 ]
VisualStudioのスレなら誰か答えてくれるんじゃね

711 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 15:28:19 ]
ttp://www.dotup.org/uploda/www.dotup.org363416.jpg

これを広告したかっただけでしょう

712 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 15:43:08 ]
ちょっと和んだ

713 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 16:39:58 ]
2つのListboxにContextMenuStripを関連付けた場合。ContextMenuStripのメニューがクリック
された時にどちらのListboxから呼び出されたのか調べる方法はありますか?。

714 名前:713 mailto:sage [2009/11/16(月) 16:44:07 ]
SourceControlで取れるのかな
ちょっと行ってきます

715 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 18:35:17 ]
>>709
バージョン情報の右上に残り日数が出てるだろう。



716 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 18:44:22 ]
>>711
厨房仕様だな・・・・・


717 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 20:06:26 ]
>>711
おー、いいねえ
コードに詰まった時の気分転換になるな

718 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 20:13:13 ]
>>698
USBデバイスはVendor ID(メーカー固有)、Produce ID(製品種固有)、
シリアルナンバー(個体固有)の3つの識別子を持っているから、
これらを使えばどんなUSBデバイスでもドングルとして使えそう。
(正確には、シリアルナンバーを持ってないUSBデバイスもあるんだけど、
USBメモリのように一人のユーザーが複数個使用する可能性があるデバイスでは
まず間違いなくシリアルナンバーを持っているはず。)

これらのIDの取得方法は、ここが参考になりそう。
ぱっと見た感じマネージドコードだけで意外と簡単に出来そう。
supermab.com/mikan.html

719 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 20:14:10 ]
ソースに目がいかない

720 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 20:21:41 ]
無意識に長いコードを書いてしまいそうだな

721 名前:デフォルトの名無しさん [2009/11/16(月) 20:21:53 ]
Winフォームアプリケーションを作成しています。

入力予定のcsvデータは、次のような内容となっています。

さくら組,Red
こすもす組,White

このデータを読み込んで、帳票に、1項目目の組名を印刷したいと思います。そして2項目に組名の文字の色があるので、
その文字列をそのまま引用して文字列の色を指定したいと思います。

string a;
a = ゙Red゙(入力したcsvデータの内容);

としたとき、aの値を直接代入して色を指定することは可能ですか?
よろしくお願いいたします。

722 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 20:33:49 ]
>>721
Color 構造体を引数に取るメソッドに文字列を直接与える事はできないので、
なんとかしてその文字列を基に Color 構造体の値を得る必要がある。

KnownColor 列挙体に存在する名前だけを使うのなら、
Color.FromName("色名") でその色の Color 構造体が取得できる。
だから Red や White なら偶然にもこれでOK。

でも、KnownColor 列挙体に無い色名も使うのなら、
Color.FromName メソッドは諦めて
独自の色名から rgb 値を得る Dictionary を作っておくといい。

723 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 21:01:28 ]
>>677
サンプルにある e.PageBounds がページサイズ、e.MarginBounds がマージンの内側。
このサンプルはマージンの内側にリッチテキストをレンダリングするわけ。
インチ換算もサンプルをよく読むと
//Convert the unit used by the .NET framework (1/100 inch)
//and the unit used by Win32 API calls (twips 1/1440 inch)
private const double anInch = 14.4;
とある。


俺はどうしたっけかなーと、ソース確認。
// 正直、位置は適当・・・
graphics.DrawImage(logo, PageBounds.Width - 60 - logoWidth, 10, logoWidth, logoHeight);
とか書いてあってフイタ。


724 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 21:30:33 ]
>>702
意図的に判断文に入れていないのかどうかはコンパイラには判断できないからねー

725 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 21:39:06 ]
条件分岐だから忘れるんだろう。ということで、ClassFactory みたいな形の
メソッド呼び出しにするとかどうかな?

Enum じゃなくなっちゃうけど。



726 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:30:02 ]
listviewにアイテムを追加する時にソートというか日付順に入れたいのですが、以下のような
方法だと上手く並びません。どのように書いたら上手く並べられますでしょうか?。


int insert_point = -1;
foreach (ListViewItem lvis in listView1.Items)
{
if (DateTime.Parse(lvis.Text) < InsterDateTime)
{
insert_point = lvis.Index;
}
}

if (insert_point == -1)
{
lvi = listView1.Items.Add(insert.DateTime);
}
else
{
lvi = listView1.Items.Insert(insert_point, insert.DateTime);
}

727 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:37:40 ]
DateTime.Parse(lvis.Text);

これが
原因のような
気がする

728 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:38:36 ]
普通にList<DateTime>かIEnumerable<DateTime>.OrderByかなんかでソートしてから
突っ込めばいいじゃん

729 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:43:26 ]
一番単純には
×insert_point = lvis.Index;
○insert_point = lvis.Index+1;
じゃないかな?
例えば一個しかない場合にDateTime.Parse(lvis.Text) < InsterDateTimeだった
としてlvis.Index==0だから先頭に突っ込んじゃう。

730 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:46:58 ]
>>727-729
複数のRSSを時間をずらしながら習得しているのでその度に全部List等に入れてソートするのは
どうなのだろうと思うのです。それから日付が新しい(現在時刻に近い)ものほど上に持って来たい
ので+1だと下に来ちゃいますよね。

731 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:47:14 ]
ダメな人って問題の切り分けが出来ないんだな本当。
ソートはソートであって、ListViewなんか一切関係ないと思うんだが。

732 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:47:25 ]
他の手段は、listView1.ListViewItemSorter に IComparer 実装した無名クラス
ぶちこんどけ。

733 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:49:39 ]
ちょっと気になっているのですがDateTimeの比較は秒?に変換されてから行われているのですか?

734 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:50:37 ]
秒ではないな。Tick だろ。

735 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:51:08 ]
>>702
列挙型の値が追加されるだけならswitch構文が適切じゃないかな。
defaultでNotImplementedExceptionを返してあげればいい。



736 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:52:25 ]
>>733
なんでMSDNで調べてからものを考えないの?

737 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:53:10 ]
msdn.microsoft.com/ja-jp/library/system.datetime.aspx

738 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:53:23 ]
>>733
100ns刻みの内部表現で比較される

739 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 23:07:29 ]
みなさん、ありがと。break;を追加したらちゃんと動きました、が何故・・・あぁ・・下に行くほど
小さくなるから当たり前ですね;。

insert_point = lvis.Index;
break;

740 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 01:22:22 ]
Form1.csをデザイナで開こうとすると、何故か変な文字列(XML?)が表示されるようになってしまいました。
元のようにフォームデザイナで表示するにはどのようにすれば良いでしょうか?

741 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 01:26:21 ]
手動で何かのコード追加した?

742 名前:デフォルトの名無しさん [2009/11/17(火) 01:33:25 ]
>>722
ありがとうございます。
感謝感謝感謝です。

743 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 01:34:27 ]
どんな文字列? 頭の2行ぐらい <?xml ...?>はいらんけど

744 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 01:36:11 ]
>741
はい。ただ、何が原因なのかは分かりません。
追加部分を削除しても戻りませんので…。
ちなみに実行後は通常通りフォームが表示されます。

745 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 01:40:36 ]
コンストラクタに引数増やしちゃったとか



746 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 01:41:01 ]
>743

すみません、普通のHTMLのようでした。htmlファイルに突っ込んでブラウザで開くと、
こんなかんじの分が表示されます。一部抜粋

クラス Form1 はチE��インできますが、ファイルの最初��Eクラスではありません。
Visual Studio では、デザイナ��Eファイルの最初��Eクラスを使用する忁E��があります。
クラスがファイルの最初��EクラスになるよぁE��クラス コードを移動して、デザイナを再度読み込んでください、E

747 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 02:00:23 ]
ああそれなったことある
フォームより前の部分に自分でクラスのコードを追加したでしょ
追加したクラスを別ファイルに移せば直ると思うよ


748 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 02:30:38 ]
>747
解決しました!
ありがとうございます。

749 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 03:36:16 ]
DirectXの音楽再生機能(using Microsoft.DirectX.AudioVideoPlayback)を使って
Form上のボタンを押したときにmp3を再生する、
という動作を実現したいのですが下記のようにエラーが出て完全に詰まっています。
「FileLoadExceptionはハンドルされませんでした。
混合モード アセンブリはバージョン 'v1.1.4322' のランタイムに対して作成されており、追加の構成情報がないと 4.0 ランタイムでは読み込めません。」
(※こんな感じです→gyazo.com/4b23a2794878de446303f7841d75d8d4.png)

音楽ファイルを読み込んでいる箇所は以下の通りですが、特に読み込みに関して問題があるとは思えません。
Audio a = new Audio("C:\\test.mp3");
a.play();

SoundPlayer等は使わずにDirectXのこの方法で再生したいのですが、助言をいただけないでしょうか?

750 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 03:41:35 ]
それ自分のソースの書き方云々じゃなくてエラーメッセージにある通りなのでは
dxdiagでバージョン見てみた?

751 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 08:35:25 ]
Buttonコントロールってフォーカス設定されてるときに
矢印キーを押したら勝手にフォーカスうつってウザイんだけど
あの設定無効化する方法ない?

752 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 08:37:04 ]
>>751
親フォームになげるようにして
そっちで潰せばいい
コントロールへの入力を親フォームが奪う方法はぐぐれ

753 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 08:39:56 ]
もしくはボタン全部に、キープレスイベントで矢印おされたらキャンセル

754 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 09:10:48 ]
>>753
無能は黙ってろよ

755 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 09:36:59 ]
>>754
初心者スレで何ふぁびょってんだおまえ?



756 名前:698 mailto:sage [2009/11/17(火) 09:41:49 ]
>>718
遅レスですが 情報サンクスです!
確かにUSBのシリアルとかあると・・色々応用の幅が広がりそうです。


757 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 09:54:19 ]
>>755
実際にどうなるか試してみりゃ意味わかるんじゃね?

758 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:07:58 ]
>>754じゃないが>>753じゃできないよ

759 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:21:46 ]
>>758
追試してみた。確かにカーソルキーもタブキーも>>753では検出できんな。

760 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:27:36 ]
キーボードプレスイベント設定するだけで簡単にできたら質問しねーよ
できねーから質問してるんだろうがボケが
バカは回答するな

761 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:31:14 ]
質問者が偉そうにする理由もないけどなw

762 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:34:13 ]
>>753では無理

でも、>>760見て教えるのやめたわ
初心者は嘘でもいいからへこへこしてろ
俺らが何年もかけて培ってきた知識、技術の一端をただで提供してやるって言ってるのに
そんな態度で教えてやるわけ無いだろボケ

763 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:39:52 ]
>>749
ttp://hightechrider.blogspot.com/2009/10/mixed-mode-assembly-errors-after.html
app.configにこれでどうか
// Managed DirectXは今更感漂うが

764 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 10:59:37 ]
そんなちょっと捻ればわかるようなことも
自分でできない>>760みたいなやつは正直PGやってほしくねぇな

765 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:01:30 ]
次は>>760は偽物ですと言い訳のレスが



766 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:04:26 ]
>>762
もともと答える気無いくせに偉そうなこと言うな
回答する気のあるやつなら、こういうシンプルな質問なら即レスしてるわ
おまえみたいに答えるスキルもないくせに、スレに常駐して
だらだらとケチ付ける奴はウザイから消えてくれマジで

767 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:05:29 ]
Windows7を含めてC#でDirectXやる場合、
今ならどういうアプローチをすればいいの?
Managed DirectXは古いの?

768 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:06:05 ]
>>764
何が「やってほしくない」だよ
選ばれたもののつもりか?だいたい趣味か遊びでプログラム組んでるやつはPGじゃねーし。
市ねよアホンダラ

769 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:06:32 ]
お前の都合で消えるわけねーだろw

770 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:07:05 ]
>>767
XNA使うんだ

771 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:07:58 ]
>>767
slimdx

772 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:09:40 ]
つぎのC#5はメタプログラム的なことになるらしい。
メタメタメタ!

773 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:09:52 ]
>>767
APICodePack

774 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:10:33 ]
メメタァ

775 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:15:56 ]
コンストラクタ1() : Base()
コンストラクタ2(int x) : this()

これでコンストラクタ2実行したらコンストラクタ1が呼ばれるけど
Baseもよばれるのか?実行すりゃすぐわかるけどめんどくせーから誰か答えろ



776 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:17:50 ]
ウンコして死ねボケ

777 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:18:15 ]
>コンストラクタ1() : Base()

これ意味なくない

778 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:22:06 ]
>>772
よくわからんからkwsk どうなるんだ?

779 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:24:17 ]
ああ、意味ないな。
質問にすら値しないレベルだ。

780 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:25:47 ]
コンストラクタ1() : Base()
コンストラクタ2(int x) : this()

これでコンストラクタ2実行したらコンストラクタ1が呼ばれるけど
Baseもよばれるのか?実行すりゃすぐわかるけどめんどくせーから誰か答えろ


まず、コンストラクタ2実行してコンストラクタ1がよばれるわけないよね

781 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:28:07 ]
じゃあそのまま死ねよ^^

782 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:28:41 ]
答えるのもめんどくせーわ

783 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:30:32 ]
継承時のコンストラクタの呼ばれ方すら知らないとか低脳極まりない

784 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:31:50 ]
もう こう言ってる間に実行が終わっている件について

785 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 12:06:06 ]
C#は良い言語なのになんで使ってる人少ないんだろうな



786 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 12:10:06 ]
このスレを見れば分かるとおり
使ってる人のレベルが低いからだよ^^

787 名前:デフォルトの名無しさん [2009/11/17(火) 12:14:59 ]
y=sin(ωt+θ)の波形を描くプログラム
ωとθは各フォームによって指定できるようにするって問題なんですが、、、
すいません、さっぱりです。
助けてください。

788 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 12:15:35 ]
中途半端な実力でわざわざ難解な言語を使ってきたというプライドがある

C分かってねー奴はゴミとか未だに言う人がいるだろう?
新しい世代に数分で自分の所まで到達されたらイラッとくんのさ

プロだったら最新言語の情報収集も欠かすなよと言いたいが

789 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 12:16:05 ]
>>787
宿題スレにお行き

790 名前:デフォルトの名無しさん [2009/11/17(火) 12:18:11 ]
>>789
スレ違いでサーセン

791 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 12:18:12 ]
>>787
C#,C#の宿題片付けます。
pc12.2ch.net/test/read.cgi/tech/1197620454/

792 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 12:20:24 ]
>>785
えっ、少ないって一昔前だろ

793 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 12:23:27 ]
むしろJavaとC#しかない

794 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 12:46:23 ]
JavaとC#とPHPとRubyかね
PerlとPythonは減ってきたイメージが。



795 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 12:51:12 ]
C#は派手な機能は標準ライブラリや、Win環境ならMSのライブラリが沢山あるので
作りたい物の実現までの道のりが短く、敷居がずいぶんと低い。

言語構造自体もJavaから引き継いで型厳密なため単純なので理解しやすく、
そのため大昔のBASICよろしく初心者が大勢いるイメージ


>>788 新しい世代が新しい道具で時間を飛び越えてきたとして、イラッとする奴なんているのかww

道具が旧式でも最新でも、プログラミングで重要なのはロジックを展開させる為のノウハウの方なので、
その人の歴が何年であっても、役に立つ人もいるし立たない人もいる

あと重要なのは「自分にとっての新しい知識」である為、例えどれだけ道具が最新だとしても、
自分が不勉強であれば何の役に立たない。




796 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 12:57:25 ]
ツボ抑えればどの言語でもビジネスレベルのアプリなんて簡単に組めるだろ
しょせん目的を達成する手段

でもWinアプリならC#の使い勝手の良さは抜群だと思う

797 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 12:59:30 ]
人力車と自動車の利便性は同率じゃない

798 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 13:42:23 ]
test

799 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 13:44:21 ]
苦労すりゃするほどいいものが出来るなんてのは幻想だよな

800 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 13:45:15 ]
自己満足は得られますよ

801 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 13:49:43 ]
そもそもどの言語が優れているとか考えずに
とにかく多数派の言語を使う奴が大半で
C#のよさが分かる奴なんかほとんどいないんだお
笑うお

802 名前:デフォルトの名無しさん [2009/11/17(火) 13:51:50 ]
苦労すりゃ良い物が出来るのは幻想で間違いない

ただ他人から見て苦労に見えたとしても、本人が知りたくて能動的にがつがつ掘り下げて
深部まで把握していく気持ちがあるなら、確実に地力にはなってくる

その辺りでかなり大きな差は出てくるぜ
例なんて枚挙に暇が無いくらい

803 名前:デフォルトの名無しさん [2009/11/17(火) 13:55:08 ]
>>801 深入りが面倒とか興味がない、あるいはそもそも別言語に柱を置いてる人が遠巻きにみてる
って場合で、かつ何らかの理由で使い始めた人はそうなるかもなww



804 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 14:02:13 ]
徐々に市民権は得てるんだからどうでもいいと思うけど


805 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 14:02:31 ]
dynamic便利すぎwwwwwなにこれwwwwwww



806 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 16:35:53 ]
プログラミング全くの初心者なのですが、どうか教えてください。
ある文字を入力した時にその文字にあらかじめ設定しておいた別の文字を出力するにはどうすればいいのでしょうか?
例えば1と入力した場合には50、5と入力した場合には7Aと出力し1 5と入力した場合に50 7Aと出力させる感じです。
面倒かと思いますがご教授お願いいたします。

807 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 16:54:31 ]
private const string _illigalStrig = "?";
private Dictionary<string, string> _list;
private void SetConstData()
{
_list = new Dictionary<string, string>();
_list.Add("1", "50");
_list.Add("5", "7A");
}

private void Text1_Change(object sender, EventArgs e)
{
label1.Text = GetNewString(Text1.Text);
}

private string GetNewString(string text)
{
if (string.IsNullOrEmpty(text)) return null;
List<string> resList = new List<string>();
for (int i = 0; i < text.Length; i++)
{
string temp = text.Substring(i, 1);
if (_list.ContainsKey(temp))
resList.Add(_list[temp]);
else
resList.Add(_illigalStrig);
}

return string.Join(" ", resList.ToArray());
}

適当に試してもいないけどこんな感じ?
予定外の文字とかの処理はどうするか知らんが・・・・

808 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 16:58:16 ]
switch(nyuuryoku){
case "1":
syuturyoku="50";
break;
case "5":
syuturyoku="7A";
break;

いこうがんばって書く

809 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 17:29:52 ]
>>802
枚挙に暇が無いっていいうなら
幾つか実例挙げてくれよ

810 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 18:18:25 ]
dynamic使えば見た目は普通のオブジェクト正体はディクショナリとか
変態的なことヤリ放題だな

811 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 18:21:44 ]
使いすぎるとわけわからなくなるだろ・・・


812 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 18:26:59 ]
実際、演算やメンバ選択などオブジェクトに対するほとんどの操作を
自由に定義できるんだぞw

813 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 18:29:25 ]
>>812
その代わりに.NET CLRのもっとも強力な点である静的型付けの最適化が無効になるから程々にな。

814 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 18:33:38 ]
dynamicはDLRのキャッシュ使うから意外に遅くないよ
せいぜいボックス化+デリゲート呼び出しのコストが入るだけ

815 名前:デフォルトの名無しさん [2009/11/17(火) 18:47:51 ]
>>809 そのくらい想像してくれよ。簡単な誰でも知ってる経験してる話だよ

ポトペタやパーツの組み合わせ以外にアルゴリズムやロジックや、元々の仕組みを掘り下げた時、
目的だけでなく副次的にや必然から知るようなノウハウってあるだろ

例えば効率のいい分岐、ノード的な表現、ビット演算使った手法など色々

知ってる人には慣れて当たり前に感じる内容でも、知らない人は知らなくて
その点で表現手段が変わってきたり手狭になったり実現できなかったりする。

掘り下げるのも広げるのも自分の技術広げるって意味で同じだから、
興味沸いたら色々試したり調べたりするといいぜって話さ

人はそれを努力と見るかもしれないが、そんな事はどうでもよくて



816 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:00:02 ]
ぜんぜん具体的じゃねー

817 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:02:35 ]
>>810
だんだん言語仕様が太ってきた気がする

818 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:02:51 ]
関数とメソッドってどう違うんですか

819 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:06:35 ]
オブジェクトに紐付いてるかどうかぐらいの違いじゃないの?


820 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:22:56 ]
>>818
OSで言えばディレクトリとフォルダの違いのようなもの。さほど気にすることはない。

ただ、はっきり言ってしまえばC#に関数はない。
あるのはdelegateと通常のメソッドと静的メソッドだけだ。
他にイベントハンドラやらラムダやらもあるが、その辺は自分で勉強してくれ。

821 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:33:43 ]
え?関数ってreturnでなんか戻ってくるメソッドのことじゃないの?

822 名前:デフォルトの名無しさん [2009/11/17(火) 19:42:36 ]
>>816 なにもかも全部他人に書かせる気か
口移ししないとエサ食えないみたいな事言うなよ

823 名前:デフォルトの名無しさん [2009/11/17(火) 19:49:24 ]
関数は単純に関数だよ
メソッドはひとかたまりの処理を模したオブジェクトって概念に対して、例えとして
「ふるまい」として名付けられた物

コード部分にだけ逐次的に注目すると変わらないように見えるけど、意味付けが違う、みたいな

例えばC/C++の世界では関数とメソッド(メンバ関数なんて言い方もするが)は、完全に別物
文脈的に話が混線しないならどっちも関数と呼ぶ場合もあるけど、
クラスに紐付いてないただの関数はメソッドとは呼ばない

そんな感じ

824 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:58:13 ]
>>815
まあ技術の変わり目にはどんな分野でもこういうアナクロ指向な人っているんだよ。
もちろん、アナクロな彼の言うことにも一理はあるけどね。
そりゃ、洗濯機があるのにあえてたらいで洗濯することで身につく技能だってあるよw

こういう人の欠陥は、視野が狭いから引いた視点から全体を俯瞰して
物事のプライオティを考えることが出来ない点だな。

825 名前:デフォルトの名無しさん [2009/11/17(火) 20:04:42 ]
>>824 ??誰に向けて言ってんだ?

視野を広げる手段の一つを話してる文脈が理解できないとしたら
ちょっと想像力も読解力も足りなくねww

なんでアナクロ扱いなんだよ。思考停止はよくないぞ



826 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 20:05:12 ]
なんだ、しったかかよ

827 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 20:06:50 ]
>>821
数学でいう関数だとそうだよな。


828 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 20:11:38 ]
釣ったほうも釣られたほうもスレ違いだ

829 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 20:12:18 ]
単純に
int func(int x,int y){
return x+y;
}
これが関数で

void func(int x,int y){
printf("%d",x+y);
}
これがメソッドだという風に覚えてたわ。

830 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 20:22:22 ]
イベントのやり方わからん。
.netに最初からついてるフォームとかボタンとかのイベントはわかるんだが・・・

自分でクラスつくるときにどんなイベントを入れればいいのかわからん。
ただのメソッドやデリゲートをクラスに組み込むのと
イベントを組み込むのは機能面でどういう違いがあるんですかい?
メソッドとデリゲートだけじゃ不可能なことでもイベント使ったらできることって例えばどんなの?

831 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 20:35:58 ]
> ただのメソッドやデリゲートをクラスに組み込むのと
> イベントを組み込むのは機能面でどういう違いがあるんですかい?
メソッドは方向が違う。クラスの利用者がクラスに処理を依頼する形。
デリゲートやイベントはクラスがクラスの利用者に処理を尋ねるようなもの。
で、本質的にはデリゲートは処理の委譲のためのもの、イベントは通知のためのもの。
実際的にはイベントはデリゲートをラップするプロパティみたいなもの。
add/removeの操作限定なので他の利用者がいきなりnull入れたりすることを気にしなくて済む。

> 自分でクラスつくるときにどんなイベントを入れればいいのかわからん。
状態の変化とかをクラスの利用者に通知したいとき。

> メソッドとデリゲートだけじゃ不可能なことでもイベント使ったらできることって例えばどんなの?
デザイナで扱える。
コールバックに優先順位を付けるとかもやろうと思えばできる。

832 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 20:41:04 ]
>>830
まず、質問はどれかにまとめてくれw
C#のイベントはデザインパターンで言えばObserverパターンにあたり、情報の発信元と受け取り先を分離するために使う。
つまり、発信元ではどこに送るのか、受け取り先ではどこから受け取るのかを考える必要がなくなる。
またイベントハンドラの結びつけさえやればどんなオブジェクト同士でも信号のやり取りができる。
だからこそSystem.Formsではすべてのコントロールのイベントを親のFormで受け取ることができるわけだ。

『メソッドとデリゲートだけじゃ不可能』というが、基本的にチューリング完全なら何でもできるので、
できるかどうかではなく、簡単かどうかで考えるといいよ。

ちなみに大抵は初期化時に静的なイベントパイプラインを構築するだけだと思うが、
これを実行中に動的に切り替えるようにすればさらに強力。Stateパターンなんていらねー。

833 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 20:43:47 ]
デリゲートって何ですか?

834 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 20:45:36 ]
イベントは一応
他クラスから実行出来無いって保証が付くんだよな



835 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 20:52:59 ]
>>833
WikipediaやMSDNくらいは読んでから質問してるんだよな?



836 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 20:58:31 ]
サーバへFTP接続する実行ファイルを不特定多数へ公開した場合
ID,パスの流出可能性を出来るだけ抑えるにはどうすればいいと思いますか?

837 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 21:03:08 ]
>>834
リフレクションの前には儚い保証ではあるけどな

838 名前:デフォルトの名無しさん [2009/11/17(火) 21:32:17 ]
>>836 それはまさかIDパスワードを埋め込むつもりって話か
なにをやりたいのか知らないが、俺なら間にCGIでも挟む
直でFTPでなくて80番経由

839 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:02:02 ]
CGI、PHP挟められるならそうするんですが
鯖に環境が入っていないのでそうすることも出来ないです

やっぱり、どう暗号化してもパス埋め込むのは駄目ですかねぇ。。

840 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:16:39 ]
あきらめろよ。

841 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:18:33 ]
大丈夫って保証は取れないねえ。
それに暗号化してもパケット見たらばれるし。
自PCにならパケットスニファなんて好きなだけ入れられるもんな。


842 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:19:04 ]
そもそもFTPじゃユーザ名パスワードが平文だぜ。

843 名前:デフォルトの名無しさん [2009/11/17(火) 22:24:16 ]
質問です。.NET3.5 C#3.0
サイズの大きい画像を256四方で分割したいのです。
実際分割してみると、エクスプローラ上では256*256と表示されるのですが、
Fireworksで読み込ませると、256*256, 255*255, 256*256といった具合に、
元の画像のSizeによって256*256にならず、
切り取った画像を256四方に並べると隙間ができてしまいます。
ペイントに貼り付けるとx=0, y=0のラインが真っ黒になります(255*255)。
元画像のImageオブジェクトの
HorizontalResolution,VerticalResolutionは96.01199 なのですが、
コピー先 bmp = new Bitmap(256,256);
のHorizontalResolution,Vert(ry は96.0と異なるのでこの辺で誤差が出てる?
Graphics.FromHwnd にてモニタのdpiを取得すると96.0と表示されます。
でもReadOnlyプロパティなのでbmpのResolutionを96.01199にできない。

矩形画像を正しく切り取り、保存する方法を教えてください。

844 名前:843 [2009/11/17(火) 22:25:52 ]
//ソース
int pixel = 256;
Bitmap bmp = null;
Graphics g = null;
Rectangle rect;
System.IO.FileInfo fInfo = new System.IO.FileInfo(filePath);
Image origin = Image.FromFile(fInfo.FullName);
int wBlocks = (int)Math.Ceiling((double)origin.Width / (double)pixel);
int hBlocks = (int)Math.Ceiling((double)origin.Height / (double)pixel);
Console.WriteLine(filePath);
for (int h = 0; h < hBlocks; h++)
{
for (int w = 0; w < wBlocks; w++)
{
bmp = new Bitmap(pixel, pixel);
g = Graphics.FromImage(bmp);
rect = new Rectangle((w * pixel), (h * pixel), pixel, pixel);
g.DrawImage(origin, 0, 0, rect, GraphicsUnit.Pixel);
string destName = fInfo.Directory + "\\" + fInfo.Name.Replace(fInfo.Extension, string.Empty) + "_" + h.ToString("000") + "_" + w.ToString("000") + ".png";
bmp.Save(destName, System.Drawing.Imaging.ImageFormat.Png);
g.Dispose();
bmp.Dispose();
}
}
origin.Dispose();

845 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:26:55 ]
抑えるのではなく、逆にIDとパスワードは流出してもOKにすれば問題ない。



846 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:30:52 ]
LockBitsで直接コピーするのが確実じゃね

847 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:38:57 ]
>>845
繋ぐ先のFTPサーバのアカウント操作権があるならそれもありだよね。
ダウンロードのみならanonymous FTPにしちゃうってのもありだ。


848 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:43:11 ]
ユーザーID を本名にして、パスワードをクレジットカード番号とかにしておけばいいな。

849 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:45:27 ]
>>845,847
あー、なるほど。
でもアップロードも必要なので、anonymousは出来ないですね
サーバ側のFTP制御設定弄ってみます。

850 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:45:55 ]
>>844
どうやったかなぁ。とりあえず座標系とかオフセットモードが
関係してた希ガス。PixelOffsetMode.None してみると駄目?
補間モードとかもいじらなあかんかもしれん。

851 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:45:55 ]
そもそも自分でFTPアカウントを発行できない環境でそんな利用の仕方が許されるとは思えない

852 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:46:59 ]
>>843
Fireworks以外のドローソフトだとどうなるの?

853 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:56:04 ]
>>844
ツッコミどころは色々あるが、さしあたりはバグというほどのものはなさそうだな。
FireworksがDPIを真正直に解釈して誤動作起こしてるのかもしれんね。
まずはbmp形式で保存して、バイナリエディタで眺めてみたら?

854 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:56:54 ]
暗号化ってさ、
そんなに効果あるものなの?
実際使うのなら、起動時に複合化して、
ずっと変数に持たしておいてもいいの?

855 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:58:36 ]
>>854
何を? パスワードとか大事なモノを扱うときは、SecureString とか使う方がいいね。



856 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:59:10 ]
FTPの話は前のスレでも出たな
プロトコルの用途がちげぇって結論になった気がする

857 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:06:23 ]
DrawImageの描画先をint,intじゃなくてRectangleで指定する

858 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:07:55 ]
>>856
だな。まずはその腐った要求仕様を窓から投げ捨てろといいたい。
で、代わりのプロトコルを考えるとするならどうするか、なんだが。

ユーザーのPCから特定のバイナリデータを手元のサーバーに送りつけるというのでいいんだな?
――とはいうものの、考えてみると、案外これというやりやすい方法が見当たらないので困ったもんだ。
さしあたり思いつくのがHTTPのPOSTで送るかメールで送るか、あとRDBにクエリで送りつけるかだが。
IISが運用できるならC#で解決できるからHTTPで決まりだろう。

メールの場合、LinuxやMacならともかく、Windowsは送信できる環境が保証されてないので
メールを正しく送信できることが保証できない。

企業アプリみたいにこちらで動作環境を自由に決められるなら何とでもなるんだけどね。

859 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:09:24 ]
>>854
パスワードを暗号化して埋めこんだんだとしても
IL解読して複合化の手順読みとられたらそれで終りだし
メモリに持ったり通信したりするときに取られちゃ意味ないし


860 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:10:09 ]
>>856
それは、プログラムからFTPは利用しないほうがいいってことですよね?
といっても、CGIやPHPが使えればそちらを使うのですが、
使えないので、ファイルの書き換えを行うには直接FTPするしか無いと思いまして・・・
取りあえずアカウント制御で、ディレクトリ制限を掛けてみました。
これでしばらく挙動見たいと思います

861 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:11:50 ]
どっかのCGI設置可能なレンタルサーバでも借りてゲートウェイでもするしかないな


862 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:13:12 ]
プログラムっていうかクライアントから直には止めた方いいかもね

863 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:13:37 ]
>>860
そのユーザIDとパスワードはFTPアカウント専用なん?
そこが分離されててchrootとかされてるならまだなんぼかマシなんだろうけど。


864 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:16:30 ]
telnetで接続可能なパスワードとかだったら笑えるな

865 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:21:01 ]
>>858
IISも無理です、基本サーバ動作のモノは全てアウトでして。
RDBは思いつきませんでした、が・・・見た感じ無理そうです・・・
>>861 レンタルサーバはちょっと厳しいです
>>863 chrootされてますです



866 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:24:51 ]
ftp内でのコマンドの制限とかquotaとか適切に設定されてるなら
とりあえず大丈夫なのかもしれないね

867 名前:デフォルトの名無しさん [2009/11/17(火) 23:26:06 ]
そもそもなんでこんな危なっかしい事しなきゃいかんのだ?

868 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:31:02 ]
自分で試してみましたが、取りあえずchroot周りはうまく制御されてるみたいです
もっと良い方法があれば教えてください。
これでしばらく試してみます。ありがとうございました。

869 名前:749 mailto:sage [2009/11/18(水) 00:44:38 ]
>>750 >>763
遅くなりましたが、ありがとうございます!
こちらにある通りApp.configを修正して実行してみましたが、やはり上手くいきませんでした(固まっちゃって再起動)
ttp://hightechrider.blogspot.com/2009/10/mixed-mode-assembly-errors-after.html

あまり理解できていませんが、最近のランタイムでは使えなくなった可能性が高いということでしょうか。
とりあえず今回は他の方法で実現するという方向性に逃げました。

870 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 00:56:52 ]
つーか、環境ぐらい書けば? .NET Framework 4.0 なんて入れてんの?

871 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:01:42 ]
そりゃ入れてるから「4.0 ランタイムでは読み込めません」なんてメッセージが出るんだろう

872 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:02:13 ]
Windows SDKってどこからダウンロードできますか?
ググって飛んだら

申し訳ございません。ご指定のページが見つかりませんでした。

といわれました

873 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:04:26 ]
ベータのランタイムなんて入れてんのが悪いんだろ?

874 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:32:13 ]
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=c17ba869-9671-4330-a63e-1fd44e0e2505&DisplayLang=en
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=71deb800-c591-4f97-a900-bea146e4fae1&DisplayLang=en
最新はコレ ISOとWebインストール
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=7bbe5eda-5062-4ebb-83c7-d3c5ff92a373&DisplayLang=ja
こっちは日本語版MSDNライブラリの最新

875 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:34:42 ]
C#では、C,C++における『CLOCKS_PER_SEC』のようなものってありませんか?



876 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:03:51 ]
switch(foo){
 case BAR: /*....*/ break;
 case BAZ: /*....*/ break;
default:
// バグってなければ絶対こないところ
}

↑のプログラムで default:にいっちゃった時に例外投げたいんだけど、
引数エラーのときの ArgumentException みたいに投げるべき
例外ってある?


 

877 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:07:55 ]
ArgumentExceptionとか

878 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:10:44 ]
>>875
のようなものっていわれても
それでなにしたいのさ

879 名前:843 [2009/11/18(水) 02:24:33 ]
>>846
一回のプロセスで一度に大量の画像を分割するので
LockBitsは結構しんどかったりします。
unsafeでポインタ使えば?とか言われそうですが^^;

>>852
ペイントの例をすでに書いています。
ほかのソフトはためしてません。

>>853
色々ある突っ込みどころ 教えてください。
rectだけ宣言時にnull代入してないぞ、とか
そういうのは無しでおねがいします。

bmpで保存すると、
fireworksで表示するとペイントのときのように
x=0,y=0のラインが黒になります。

>>857
描画先をRectangle(0,0,pixel,pixel)にしたら
正常に動作しました。

ありがとうございました。


880 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:29:46 ]
>>876
InvalidFooException

881 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:35:28 ]
>878
すみません。定数が用意されているならそれを使おうかと思いまして

882 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:51:33 ]
>>876
メソッド利用者にパラメータが間違っていることを通知したい場合
 → InvalidEnumArgumentException

コーディングミスによってありえないフローになっているのを検出したい場合
 → Debug.Fail(), Trace.Fail()

883 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 03:31:43 ]
>>879
>857の言うように、GraphicsUnit指定による呼び出し方によって発生する内部の変換処理を避けるわけか。
まあそりゃあそうだわな。そこが今回の不具合の直接の原因なわけだし。

>色々ある突っ込みどころ 教えてください。
じゃあ手短に。
・wBlocks、整数演算で十分。pixel-1を足してpixelで割ればいい。
・Disposeするオブジェクトはなるべくusing構文で初期化する。明示的な後始末はなるべく書かないのがベター。
・切り出しファイルの名前と形式は外から変えられるように書く。というかこんなところで書くものじゃない。あとstring.Format()
・オブジェクト、=nullの初期化なんてイラネ。何そのC++もどき。むしろ必要なところでvar構文で初期化して使う。

こんなとこかな。

884 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 04:07:59 ]
大規模なプログラムになるとプロパティ使うんだろうけども
個人で使う小規模なプログラムってメンバ変数をpublicにしおいても問題ないよね?

885 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 04:12:18 ]
自動実装プロパティにしとけば?



886 名前:843 mailto:sage [2009/11/18(水) 04:45:56 ]
>>883
いろいろある突っ込みどころ ありがとうございます。
・wBlocksの件
アルゴリズムの問題ですね。
たしかに整数演算で簡潔するのでその方がスマートです。
勉強になりました。

・usingについて
例外が発生するとdisposeされないのでusingを書くべきですが
動作検証用サンプルでしたので急ピッチですのであしからず。

・切り出しファイルの名前を外から指定について
同じく、動作検証用サンプルですので大目にみてください。
StringFormatもargs指定ミスはコンパイル時に発見されないので +でつないでます。

・必要なところでvar指定 
2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは?
ループ内部で使いまわせる変数は外出しすべきだと僕は思います。
また、null代入は無駄なのは分かってますが
「初期化してますよ」ってメッセージをこめたソースを書くのは悪くないと僕は思います。
ちなみにBitmapを毎回new(必然的にGraphicsもnew) してるのは画像サイズが256の倍数でないときに
右端と下端の矩形を描画すると、前回の描画が残ってしまうための回避策です。
Graphics.Clearで思った動作するかも。テストしてないのでなんともいえませんが。

varは メソッドの戻り値の型をそのまま受けるとき
linq+foreach使うときなど、ジェネリックの型名なんだっけってなるとき
使用するのはいいと思うのですが、
C#使ってるんだからその場で初期化する変数は型はしっかり書いたほうが
いいと自分は思ってます。賛否はあると思いますが。
(型付DataSetのテーブルアダプタみたいに型名が長いと初期化が冗長になるので
そういうときは見易さを考慮して左辺はvarで受けたりします。)
コーディング規則が決められているときはもちろんそれに従います。

887 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 05:25:45 ]
C#ってマイクロソフトが作ったの?

888 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 05:37:22 ]
>>886
俺はおまえさんの主張に大体同意だな
そもそも宗教的なことまで突っ込みを入れるのは回答者の分を超えてると思うよ

889 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 06:11:25 ]
>>886
俺もおまえさん寄りの意見だが、
突っ込んでくださいと言っておきながら、
それは違う、あれは違うと条件を付けて反論するのはどうかと思う。

自信があるなら最初から聞くな。
聞いた以上は真摯に受け止めるか、
変なやつに聞いちゃったとスルーなさい。

890 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:30:40 ]
プライドだけは一丁前

891 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:39:05 ]
>>889
それはおかしい
教えを請うたからといって間違った回答や、
自分の方針と反する内容を無条件で聞く必要はない
かといってスルーするのは礼を失している
886の対応は真摯な態度だと思うぞ

892 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:40:20 ]
>>886
>2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは?
>ループ内部で使いまわせる変数は外出しすべきだと僕は思います。

少なくとも今回のケースでは、変数宣言を外に書いても速度的にメリット無いよ。
変数宣言を一回通るたびに実行コストがかかるとか杓子定規に考えてない?


893 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:44:00 ]
なんでC#はmain()じゃなくてMain()
なんだろうな。
cもc++もjavaもmainで始まったのに、なぜC#はMainなの?それだけ気になる。

894 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:45:57 ]
横だけど・・・
え、そうなの?
スコープ入ったときにスタックに確保、
スコープ出るときにスタックから解放って処理普通にやってんのかと思ってた。


895 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:47:47 ]
>>893
命名規約の問題でしょ。
メソッド名はUpperCamelCaseで表すってルールにしてるから"M"ainになってるだけ。
なんでUpperCamelCaseを採用したのかは言語設計者のポリシーなんだろね。



896 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:56:40 ]
黎明期の言語じゃあるまいし

897 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 07:57:42 ]
>>891
無条件で聞けなんてどこにかいてあんの?

ま、どっちもどっちだ

898 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:01:58 ]
>>897
>聞いた以上は真摯に受け止め

899 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:09:20 ]
>>894
C#で書いたコードをReflectorで逆コンパイルしたときに現れるgotoだらけのコード見たことない?
見てみれば分かるけど、結構オブジェクトの寿命が変わるような書き換えがされている。
変数スコープが終わる前にGCされてファイナライザが呼ばれることがあるのはこのため。


900 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:12:42 ]
>>899
なるほど
ちまちましたコードレベルの最適化はほんとに意味なくなってきてるんだなぁ
勉強になった

901 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:41:55 ]
>>898
日本語が理解できない人だったんですね。
これは失礼しました。

902 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:48:42 ]
>>886
>StringFormatもargs指定ミスはコンパイル時に発見されないので +でつないでます。
なんでやねん。テストコード書けばテストできる範囲でしょ。
>2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは?
実行時最適化が行われる.NET Frameworkの世界でそんな議論しても無意味だよ。
そして、むしろvar構文自体より(便利なものは積極的に使うべきだと思うが)ローカルインスタンスの明示的な初期化(=null;)のほうが問題。
C#ではすべての変数はデフォルト値で初期化されることが保証されているので
object obj=null;
などという初期化は無意味。それどころか変数が使われなくなると初期化なしだとワーニング出してくれるけど
初期化してると出してくれなくなったりするので余計に悪化している。


903 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:14:39 ]
>>893
Javaの皮を被ったDelphiだから

904 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:18:19 ]
varはなんか、なんかちょっと多様したら不味いことがおきるんじゃないかって気がしてならない
具体的に何が起きるのかはわからんけど

dynamicもしかり・・・

905 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:19:59 ]
メソッド名がCamelCaseなのはMSの旧来の伝統
>>904
むしろvar使ったら読みづらくなるようなスコープの長い変数を作るのが悪い



906 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:21:56 ]
>>902
> object obj=null;
> などという初期化は無意味。
可読性的には意味がある

>それどころか変数が使われなくなると初期化なしだとワーニング出してくれるけど
> 初期化してると出してくれなくなったりするので余計に悪化している。
ダウト


907 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:23:41 ]
object obj;
object obj = null;

どう可読性に違いが

908 名前:905 mailto:sage [2009/11/18(水) 09:25:02 ]
すまんPascalCaseだった
フィールドを既定値(default(type)の値)で初期化するとFxCopで警告出るよ

909 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:29:30 ]
FxCop日本語版は有料なのか・・・

910 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:33:25 ]
ttp://msdn.microsoft.com/ja-jp/library/ms182274.aspx
これだな
パフォーマンスは今のコンパイラでは関係ないが冗長だからやめろということらしい
FxCopはコメントのルールだけ外しとけば日本語ソースでも普通に使える

911 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:35:13 ]
ローカル変数の確保は内部的にはメソッドスコープだよ。
そんなのを気にしながらBitmapをループ内で作るって…


912 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:39:02 ]
世の中富豪的っていうかこまけえ最適化はコンパイラがやってやんぜ!!な方向に
確実に進化してるんだなぁ

913 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:39:09 ]
>>907
皆が皆C#だけやってると思うなよ?

914 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:39:59 ]
nullの方がヌルヌルして入りやすい

915 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:42:13 ]
ローカル変数はデフォルト値で初期化されるって、されないよ。
だから必ずどこかで代入してから参照する必要があり、でないとエラーになる。
もちろん宣言と同時に代入するのでなくとも、どこかで入れればいいが、
宣言で代入するのが普通は分かりやすいけどな(というかできるだけ最初に代入する必要がある場所で宣言する)。

初期化が保証されてるのはフィールドだ。




916 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:45:37 ]
>> 2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは?
>実行時最適化が行われる.NET Frameworkの世界でそんな議論しても無意味だよ。
実行時最適化関係ないよ。
ILの時点でローカル変数はメソッドスコープで確保される。


917 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:51:52 ]
実際ループ内でしか使わない変数ならループ内で宣言してくれた方が
コード読む時も余計なこと考えなくてすむしメソッド化する時とかも便利だしなぁ。
#メソッド化すると呼び出しコスト↑と結局毎回確保になっちゃうけど


918 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 10:00:03 ]
まあちっちゃなメソッドならインライン展開されるけどな。
とはいってもかなり小さい場合だけだったとは思うけど。


919 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 10:11:41 ]
>>915
ttp://msdn.microsoft.com/ja-jp/library/aa691170(VS.71).aspx
これか、なるほど
俺ずっと勘違いしてたわ。

920 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 10:16:40 ]
最終的にILになれば同じつうならあとは好みの問題だろう・・・

ギリギリの極限まで速度を追い求めない限り 
些細な速度UPを得るよりも可読・メンテ性を維持したい

というのが俺の持論
もちろん事務系とかの話でFA系の処理とかになれば必要なところは可読性捨ててでも速度UPとるけど

921 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 10:18:50 ]
みんながどのコードを前提に話してるのか見えないんだが・・・
ループ内で宣言したくないのって言うと、
よっぽどでかいインスタンスを毎回newして捨てるとか
そいういう場合?

922 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 10:49:08 ]
変数のスコープを最小限にするのは宗教でもなんでもなく常識だろ
宣言だけループ外に置いて、わざわざミスが起こる確率を増加させる必要はない

あと、理由もなくローカル変数を規定値などに初期化するのも良くない
たとえば、未初期化の変数を参照するとコンパイルエラーになるので即座に分かるが、
無駄に初期化していると問題の発覚が遅れ、デバッグに要する時間も増える

923 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:28:52 ]
>>922
処理上で意味のある値で初期化するんであって
常に null で初期化すると勘違いしてるから
そういう的外れな反論が飛び出すんだろう

924 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:45:14 ]
インスタンス化の削減も微妙だけどな。
もちろんサイズがでかかったりインスタンス化が重いもので
かつ再利用できるものならループ内でのインスタンス化を削減するのもいいが、
何でもかんでも削減すりゃいいってもんじゃない。
よっぽどタイトなループなら別だが。

個人的には、よく言われるStringBuilderの再利用なんかも微妙だと思ってる。
平均的にはある程度効果はあるが、常識のようにやるべきこととは思えない。


925 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:46:59 ]
「理由もなく」初期化すんなよってことであって
意味あって null で初期化すんのはべつにかまわんと思うけどな。





926 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:48:26 ]
>>924
そういうのは最適化部分を狭いメソッド内に押し込めればOKってルールでやってるなあ。


927 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:50:40 ]
なぜなら、StringBuilderのToStringは内部バッファをそのまま流用してString化するから。
その後StringBuilderに変更を加えた時点でバッファは複製される。
当たり前だけど結局メモリの再確保は起こるわけで、
StringBuilderを新たにインスタンス化するのと大差があるわけではない。


928 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:56:54 ]
そんな細かいこと考えるよりもっとロジック工夫して高速化しろよ

929 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:57:56 ]
だれに言ってんだよ

930 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 13:00:19 ]
今日もお前ら絶好調だな

931 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 13:04:50 ]
もっと褒めて


932 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 13:22:08 ]
結局そういうのもバッドノウハウになってくんだろな

933 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 13:27:34 ]
>>906
スマンカッタ。確かにフィールド、ローカル変数共に初期化してても他で使ってなかったらワーニング出るな。
初期化してないときとワーニングの内容は変わるけど。

>可読性的には意味がある
意味がないことが多い。922の言うように未初期化参照のコンパイルエラーを出させるほうが素直なコード。
初期化コード自体がif文で分岐してるとかなら初期値を与えることはあるが、それは例外的な措置だよね。

>>923,925
844のBitmap、Graphicsインスタンスのnull初期化は不要だよな?

934 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 13:32:32 ]
まあ初期化なくす前に明らかに宣言位置を変える方向だが。
宣言位置が適切なら、多くの場合その場で初期化が自然になるからね。
もちろん意味のない初期化はするべきではないけど、
上記を守れば基本的にそういうのはなくなるはず。

935 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 13:54:00 ]
>>933
>844のBitmap、Graphicsインスタンスのnull初期化は不要だよな?
不要だがあったからといって悪い訳じゃない



936 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 14:05:32 ]
チームの規約にしたがうレベル
戦ってまで守らなきゃいけない一線ではないわな
どっちにしても

937 名前:デフォルトの名無しさん [2009/11/18(水) 14:14:32 ]
>>935
>Bitmap、Graphicsインスタンスのnull初期化は不要だよな?
インスタンスのnull初期化じゃなくて変数(ry


938 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 15:48:55 ]
formAからform.showでformBを開いた後、不要になったformBを×ボタンで閉じます。
この時、formBのリソースは全て開放されますよね?。

939 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 15:52:19 ]
ガベージコレクションの対象にならないと開放されないよ。

940 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 15:57:44 ]
そのformという変数を保持している間は解放されないかな

941 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 16:17:16 ]
規定のインスタンスを使用している場合はアプリ終了まで保持されるというような話を聞いた。
(でもこれってたしかVB.NETの話だったような。C#では規定のインスタンスってあるんかな?)

942 名前:938 mailto:sage [2009/11/18(水) 16:27:33 ]
そうなるとFormClosingでちゃんと処理してから終了させた方が良さそうですね
ありがとうございます

943 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 16:32:41 ]
>>942
いあ、そういふ意味ではないんだが。
Form_Closingイベントとメモリ開放は別話。

944 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 16:43:17 ]
>>942
モーダルダイアログならFormAで次のようにFormBを表示し
using(Form formB = new FormB())
{
 formB.ShowDialog(this);
}
formBフォームの中で使ってるリソースはFormBのDisposeをオーバーライドして行う






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<233KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef