C♯相談室 Part25

このエントリーをはてなブックマークに追加
941デフォルトの名無しさん:2005/09/18(日) 16:21:33
>>939
WindowsUpdateで入れようと思えば入れられるものを
入れてないから普及してないと言い張るのは根拠としてはいまいちだな。
942デフォルトの名無しさん:2005/09/18(日) 16:25:19
どうでもいいだろそんなことより940に誰か応えてやれよ
943デフォルトの名無しさん:2005/09/18(日) 16:32:08
>>931
MSCommってCOM(ややこしいな)でしょ?
COMってスレッドセーフ違うんじゃなかったっけ?
というか、0.1秒も眠らせるなら別にスレッドでやることないと思うんだが。

>>940
普通にOnPaintかPaintイベントで再描画するだけでしょ。
正直「どうすればいいでしょうか」なんて他人に質問する以前の問題だね。
944デフォルトの名無しさん:2005/09/18(日) 16:52:58
>>943
コンテナPaint→レイヤー描画→コンテナ無効領域発生
のコンボはどうするんだ?

945デフォルトの名無しさん:2005/09/18(日) 17:02:25
意味ワカンネ。
因果関係の順番が狂ってないか。
無効領域が発生したからOnPaintが呼ばれるわけだが。
946デフォルトの名無しさん:2005/09/18(日) 17:34:02
PointF[]で1000〜1M個くらいの座標リスト作って(Y座標のデータはMAX-10〜+10くらいなので拡大処理)
それを画面サイズ内で縮小して描画したいのですが、
普通にg.ScaleTransformしてからg.DrawLinesで描くと線が拡大されて表示が汚くなります。
座標データの位置だけを画面サイズに変換してその間を結ぶ線は細いままにしたいのですが
どうしたらいいでしょうか?

色々見る感じだと、g.TransformPointsってのがあるのですが、
System.Drawing.Drawing2D.CoordinateSpaceとかがよくわかりません。
よろしくお願いします。
947デフォルトの名無しさん:2005/09/18(日) 17:57:18
Penを細くしたらいいんじゃない
948946:2005/09/18(日) 18:01:20
自己レスです。色々見てたのですが、
Matrixを定義してやればいけるっぽいです。

グラフィクス周り触るのは初めてで変換行列の定義から読んでるので時間がかかりそうですが…

949デフォルトの名無しさん:2005/09/18(日) 18:18:25
Threadは、voidでかつパラメータ無しのメソッドでしか使えないんですか?
用途が限られてくると思うのですが。
950デフォルトの名無しさん:2005/09/18(日) 18:20:07
ようは、Javaのパクリじゃん
951デフォルトの名無しさん:2005/09/18(日) 18:21:13
そのためにそれ用のクラスを作るの。必要なパラメータと起動メソッド持たせて。別に不自由ないよ。
ちなみに.NET 2.0でParameterizedThreadStartってobjectを一つ引数に取るデリゲートが追加される。
952デフォルトの名無しさん:2005/09/18(日) 18:21:47
940とかぶるが

コンテナにいくつかコントロールが足されている場合
もともとのコンテナ領域分レイヤー描画ってどうするん?

普通に描画してもコンテナにコントロールが
足されていない部分は描画できるが
足されたコントロール上の領域にもかかなきゃならんやん

953デフォルトの名無しさん:2005/09/18(日) 18:28:32
>>951
なるほど、クラスを作るんですね。
954デフォルトの名無しさん:2005/09/18(日) 18:55:30
C#で角が丸い四角を描画する方法ってどんな感じになりますかね
Pointを8つ指定してDrawCurveを使うしかない?
955デフォルトの名無しさん:2005/09/18(日) 19:09:32
>>953
Thread じゃなくて Delegate を使えばよろし
956デフォルトの名無しさん:2005/09/18(日) 19:48:49
>>954
GraphicsPathを作ってAddLineとAddCurveを繰り返し、FillPath/DrawPath
957デフォルトの名無しさん:2005/09/18(日) 19:49:53
AddCurveじゃなくてAddArcだった……
958デフォルトの名無しさん:2005/09/18(日) 21:15:34
>>946
やりたいことがいまいちよく理解できないけど、
要は座標変換だけしたいってこと?
Graphics.PageScaleの使い方は知ってるのかなあ。

この辺は読んだ?
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/_gdiplus_types_of_coordinate_systems_about.asp
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdnprogvbnet/htm/chapter18.asp
959デフォルトの名無しさん:2005/09/19(月) 00:28:58
非同期デリゲートがあれば、スレッドっていらないんじゃないの?
960デフォルトの名無しさん:2005/09/19(月) 00:30:49
いらないよ
961デフォルトの名無しさん:2005/09/19(月) 00:33:40
まじかよ
962デフォルトの名無しさん:2005/09/19(月) 00:34:57
まじだよ
963デフォルトの名無しさん:2005/09/19(月) 00:49:14
ちがうよ。要るよ。非同期デリゲートは ThreadPool の中で待機している Thread によって実行されてるんだよ
964デフォルトの名無しさん:2005/09/19(月) 00:54:51
つ、つれた
965デフォルトの名無しさん:2005/09/19(月) 01:03:44
な、なんだって〜
966デフォルトの名無しさん:2005/09/19(月) 01:07:21
そんな中学生みたいなやり取りして楽しいか?

まあリアルで厨房のとき友達がいなかったからそういう精神的成長段階を
卒業できてない可哀想な奴らなんだろうけど。
967デフォルトの名無しさん:2005/09/19(月) 01:19:14
StreamReader型をHashtable型に変換する方法をご存知の方がいましたら
御教授お願いします。
968デフォルトの名無しさん:2005/09/19(月) 01:22:50
ありません
969デフォルトの名無しさん:2005/09/19(月) 01:23:45
あ、ごめん。単純にキャストすればいいだけかも
970デフォルトの名無しさん:2005/09/19(月) 01:27:02
うむ。やはりキャストはだめだった。ということで 「ない」 が正解
971931:2005/09/19(月) 01:43:30
遅くなりました。
>>932>>943
ありがとうございました。
972デフォルトの名無しさん:2005/09/19(月) 01:49:54
質問です
[Q]キーを押した時にアプリケーションを終了させる事を意図して、
次のようなコードを書いたのですが、
qキーではなく、Shift+qキーを押さないと、思った通り終了してくれません。
qキーを押した事を拾うにはどのように書いたら良いのでしょうか・・・?
ご教示お願いします

protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
{
switch ((int)(byte)e.KeyChar)
{
case (int)System.Windows.Forms.Keys.Q:
this.Dispose();
break;
}
}
973デフォルトの名無しさん:2005/09/19(月) 01:57:54
Shift + q を押したら q になるようなキーボードレイアウトになってんじゃないの?
974972:2005/09/19(月) 02:00:59
>>973
PC2台で確認しましたが、両方とも駄目でした。
975973:2005/09/19(月) 02:05:33
switch ((int)(byte)e.KeyChar)
   => switch (e.KeyChar)
case (int)System.Windows.Forms.Keys.Q:
   => case 'q':

紛らわしいから間違えちまったよ
976名無しさん♯:2005/09/19(月) 02:13:45
次スレです。( ゚д゚)ノ
http://pc8.2ch.net/test/read.cgi/tech/1127063469/l50
977972:2005/09/19(月) 02:25:30
ああ、なるほど…
ありがとうございました
あと紛らわしくてすいませんでした
インデントしてたのですが反映されなかったもので…
978デフォルトの名無しさん:2005/09/19(月) 02:49:40
複数のコントロールでCreateGraphics()つかって
描画しようとしているのですが

各コントロールの描画を一端メモリ上に書き込んで
全てのコントロールでの描画を一括で画面に反映させるには
どうしたらいいんでしょうか
979デフォルトの名無しさん:2005/09/19(月) 10:15:38
ControlへのDrawStringについて質問です。
可変領域へ文字列を書き込む必要がありDrawStringしてるのですがうまくいきません。

例えば、FormのOnPaintをオーバライドして実行し
フォームをリサイズしてWidthを0にして、少しづつ大きくするとStringが描画されないのですが
どなたか解決方法を知っている人いますでしょうか
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint (e);
e.Graphics.DrawString("WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW",
this.Font, Brushes.Black, this.DisplayRectangle);
}
980デフォルトの名無しさん:2005/09/19(月) 10:24:38
ResizeRedraw?
981デフォルトの名無しさん:2005/09/19(月) 11:20:59
>>976
982946:2005/09/19(月) 11:35:11
>>958
二個目のリンクを発見してワールド変換することで対応しました。
一個目のリンクもよんで勉強します。

ご丁寧にありがとうございました。
983デフォルトの名無しさん:2005/09/19(月) 11:37:32
>>979
>this.DisplayRectangle
これの中身ヲチしてみた?
これって画面座標なんじゃないの?
コントロールGraphicsに描画するんだから、座標系はコントロールのクライアント座標を
つかわなきゃダメでしょ。

984979:2005/09/19(月) 12:14:20
>>980, >>983 解決しました。ありがとうございました
StringFormatのStringTrimmingをNoneに設定で解決しました。
(ResizeRedrawを有効にするのもOK)
985デフォルトの名無しさん:2005/09/20(火) 08:05:12
埋めないか
986デフォルトの名無しさん:2005/09/20(火) 16:24:16
うほ、いいC#
987デフォルトの名無しさん:2005/09/20(火) 16:35:11
            , '´  ̄ ̄ ` 、
          i r-ー-┬-‐、i
           | |,,_ C#_,{|
          N| "゚'` {"゚`lリ
             ト.i   ,__''_  !
          /i/ l\ ー .イ|、
    ,.、-  ̄/  | l   ̄ / | |` ┬-、
    /  ヽ. /    ト-` 、ノ- |  l  l  ヽ.
  /    ∨     l   |!  |   `> |  i
  /     |`二^>  l.  |  | <__,|  |
_|      |.|-<    \ i / ,イ____!/ \
  .|     {.|  ` - 、 ,.---ァ^! |    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l
__{   ___|└―ー/  ̄´ |ヽ |___ノ____________|
  }/ -= ヽ__ - 'ヽ   -‐ ,r'゙   l                  |
__f゙// ̄ ̄     _ -'     |_____ ,. -  ̄ \____|
  | |  -  ̄   /   |     _ | ̄ ̄ ̄ ̄ /       \  ̄|
___`\ __ /    _l - ̄  l___ /   , /     ヽi___.|
 ̄ ̄ ̄    |    _ 二 =〒  ̄  } ̄ /     l |      ! ̄ ̄|
_______l       -ヾ ̄  l/         l|       |___|
988デフォルトの名無しさん:2005/09/21(水) 01:00:59
いいこと思いついた。お前メモリの中でお漏らししろ
989デフォルトの名無しさん:2005/09/21(水) 01:44:25
それを許さないのがC#のいいところ。
990デフォルトの名無しさん
>>988
「これがホントのメモリリーク」
「山田君、座布団ぜんぶとっちまいな」
とか言いたいのかテメコノヤロウ