[表示 : 全て 最新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
ヘッダとかフッタ…
印刷可能領域外に描けるということ?
ちなみに、印刷可能領域が用紙の端から何インチか知りたいのだけど、方法が分からない
(>_<)。






[ 続きを読む ] / [ 携帯版 ]

前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