トップページ⇒tech
1001コメント291KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001ななしぃ#2007/11/18(日) 15:53:41
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

前スレ: ふらっとC♯, C#(初心者用) Part20
http://pc11.2ch.net/test/read.cgi/tech/1191036844/
0149デフォルトの名無しさん2007/11/25(日) 17:27:14
>>148
それは分かったから、FontDialogのDialogResultとForm2のDialogResultとの因果関係は?
0150デフォルトの名無しさん2007/11/25(日) 17:30:50
Clickイベントが発生してから、DialogResultに従ったフォームを閉じる動作が行われる。
0151デフォルトの名無しさん2007/11/25(日) 17:50:21
>>150
Form2をShow()で呼べばFontDialogを閉じてもForm2は閉じないことを確認しました。
つまりはそういうことなんですね。
0152デフォルトの名無しさん2007/11/25(日) 19:34:00
変なの沸いてんな
0153デフォルトの名無しさん2007/11/25(日) 22:32:43
>>142
>>144
>>147
0154デフォルトの名無しさん2007/11/26(月) 00:20:12
やべーなこのレベルはww
0155デフォルトの名無しさん2007/11/26(月) 00:22:39
そのためのふらっと
相談室に来るレベルじゃないってこと
0156デフォルトの名無しさん2007/11/26(月) 14:50:16
charからint、intからcharの変換ってこれの他に方法あったっけ。
値のチェックとかしてないけど。

private const int prefixDigits = 48;

public static int ToInt32(this char c){
return (int)c - prefixDigits;
}

public static char ToChar(this int n){
return (char)(n + prefixDigits);
}
0157デフォルトの名無しさん2007/11/26(月) 15:07:51
ちょ待
0158デフォルトの名無しさん2007/11/26(月) 16:33:45
>>156
冗談だよね
0159デフォルトの名無しさん2007/11/26(月) 16:40:54
変数名や 48 より、 '0' のがわかりやすい。
0160デフォルトの名無しさん2007/11/26(月) 17:00:34
>>157-158
おかしな所があったら指摘してね。

>>159
なるほど、その発想は無かったわ。
0161デフォルトの名無しさん2007/11/26(月) 17:03:35
ParseやToStringやその類を使えと言ったらダメなんですか
0162デフォルトの名無しさん2007/11/26(月) 17:18:50
だめだろどう見ても。
0163デフォルトの名無しさん2007/11/26(月) 17:19:40
じゃないわ勘違いw
0164デフォルトの名無しさん2007/11/26(月) 17:54:44
Int32.Parse(c.ToString())
(char)n.ToString()

一旦stringのインスタンス作ってるのが気持ち悪いYO
0165デフォルトの名無しさん2007/11/26(月) 18:00:45
>>160
’A' とかの文字が入ったときはどうすんの?
0166デフォルトの名無しさん2007/11/26(月) 18:12:57
>値のチェックとかしてないけど。
0167デフォルトの名無しさん2007/11/26(月) 18:21:24
int.TryParseを使った方が例外処理がいらないから楽だろうな。
0168デフォルトの名無しさん2007/11/26(月) 20:20:06
>>156
それはcharからint、intからcharの変換とは言わない。
0169デフォルトの名無しさん2007/11/26(月) 20:32:29
範囲が正しいってわかってるならわざわざメソッド化しなくてもc - '0'でいいしねえ。
範囲チェックして例外投げるのを主な目的にするならメソッド化する意味もあるだろうけど。

あとToInt32やToCharみたいな名前を使うのは混乱するのでやめていただきたい。
0170デフォルトの名無しさん2007/11/26(月) 20:34:17
君には影響ないから心配いらないよ
0171デフォルトの名無しさん2007/11/26(月) 21:34:05
うるせー馬鹿
0172デフォルトの名無しさん2007/11/27(火) 06:31:54
Disposeとデストラクタのどっちに終了処理かけばええんすかね
0173デフォルトの名無しさん2007/11/27(火) 07:09:37
内容によるが、デストラクタに書くことはほとんどない
0174デフォルトの名無しさん2007/11/27(火) 07:22:09
むしろデストラクタ書くな
たぶん使い方間違ってるから
0175デフォルトの名無しさん2007/11/27(火) 11:11:18
ていうか、あれをデストラクタだと思ってはいけないような気がする。
0176デフォルトの名無しさん2007/11/27(火) 11:44:56
だな、ってかデストラクタって呼び方やめただろ、紛らわしいから。
0177デフォルトの名無しさん2007/11/27(火) 13:12:26
>>176
ファイナライザだな
0178デフォルトの名無しさん2007/11/27(火) 21:20:34
しかしフォームから呼んだフォントダイアログのダイアログリザルトの値が
フォームに送られてフォームが閉じるって仕様の意味が分からんな。
通常のウィンドウ操作じゃあり得ないし、何を思ってこういう仕様にしたのだろうか。
0179デフォルトの名無しさん2007/11/27(火) 21:32:17
それは勘違いを基にした情報だろう
0180デフォルトの名無しさん2007/11/27(火) 21:40:19
ファイナライザっていうとコナミのガンダムもどきゲームを思い出して
0181デフォルトの名無しさん2007/11/27(火) 21:56:34
>>178
意味分からんな。使い方間違ってんだろ
0182デフォルトの名無しさん2007/11/27(火) 22:01:57
おいおいwwwまだいたのかよResult君ww
0183デフォルトの名無しさん2007/11/27(火) 22:24:55
ためした。
普通のプログラムでは何の問題もない。

多分こうなってるだけ。
DialogResult = fontDialog1.ShowDialog();

みなおせ。
0184デフォルトの名無しさん2007/11/27(火) 22:28:16
ワロス
馬鹿ばっか
0185デフォルトの名無しさん2007/11/27(火) 22:31:02
エスパーの俺からすると結論は、
>>183のように子フォームのダイアログリザルトを
親フォームのダイアログリザルトに設定している
01861832007/11/27(火) 22:41:16
エスパーの割にはたいしたことかいてないな…
憶測だけど
DialogResult = fontDialog1.ShowDialog();
は、
DialogResult dr = fontDialog1.ShowDialog();
あたりの書き間違いじゃないかな?

if(dr == DialogResult.OK)
{} else if(dr == DialogResult.…)

憶測の域を出ない。
0187デフォルトの名無しさん2007/11/27(火) 22:47:57
そんな立派なもんじゃなくてなんとなくそう書いただけじゃないか?
なんとなく書く奴って意外なほど多いぞ。
理解できないが。
0188デフォルトの名無しさん2007/11/28(水) 00:01:44
ただ悩むまでも無く、ソッコー気付くはずなんですが・・・
0189デフォルトの名無しさん2007/11/28(水) 00:07:39
まあ世の中色々な人がいる。
0190デフォルトの名無しさん2007/11/28(水) 01:28:08
普通はこう書かないか?
if(fontDialog1.ShowDialog() == DialogResult.OK){
//
}
0191デフォルトの名無しさん2007/11/28(水) 01:57:09
俺は switch 派だな
0192デフォルトの名無しさん2007/11/28(水) 02:00:45
列挙体の判定はswitchの方がシンプルになるからなー
0193デフォルトの名無しさん2007/11/28(水) 02:17:02
>>142
>>144
>>147
>>149
>>178
>>184
0194デフォルトの名無しさん2007/11/28(水) 05:15:03
Form2 f2 = new Form2();
f2.ShowDialog();

Form2で
if(DialogResult.OK == FontDialog.ShowDialog()){...}
で帰ってきたDialogResultがForm2に送られてForm2も閉じる
0195デフォルトの名無しさん2007/11/28(水) 05:15:34
>>194
何故じゃー
0196デフォルトの名無しさん2007/11/28(水) 05:42:22
もう、あきた
0197デフォルトの名無しさん2007/11/28(水) 09:24:31
ToolStripProgressBarってデフォルトだと鮮やかな緑なんですが、
プロパティとかで簡単に黄色とか赤に変更できたりしないのでしょうか?

カスタムコントロールから作らないと駄目ですか?
0198デフォルトの名無しさん2007/11/28(水) 13:20:44
ForeColor
0199デフォルトの名無しさん2007/11/28(水) 14:40:14
ForeColorじゃ�_
0200デフォルトの名無しさん2007/11/28(水) 15:08:34
プログレス程度なら自分で作れるだろ?
0201デフォルトの名無しさん2007/11/28(水) 15:26:02
Vistaのビジュアルに似せて作るのは少し面倒じゃね?
なんかグラデーション動いてるし角が丸っこいし
似せなくてもいいならいいけど
0202デフォルトの名無しさん2007/11/28(水) 15:37:29
Paintイベントにプロパティでswitchさせて描画させるだけだろ?
グラデーションやクリッピングなんてそんな難しくないだろ?
0203デフォルトの名無しさん2007/11/28(水) 15:42:03
頼んだ。
0204デフォルトの名無しさん2007/11/28(水) 15:42:07
Vistaのバーを見て言ってる?
つーかこれ、貼り付けてるときからてかりが動いてるなw
0205デフォルトの名無しさん2007/11/28(水) 16:15:13
上の端掴んでぐりぐりサイズ変更すると動きのスピードが変わるな
0206デフォルトの名無しさん2007/11/28(水) 17:39:51
>>201
Theme APIで描かせればそういう風になるんじゃないの?
やったことなくて憶測だけど。
0207デフォルトの名無しさん2007/11/28(水) 20:48:32
変数の値が変化した時に起こるイベントを作る事はできますか?
0208デフォルトの名無しさん2007/11/28(水) 20:51:17
Theme APIで描画=VisualStyleRendererで描画

つまり現在のビジュアルスタイルの色と形で描画されるんでしょ
質問者はその色を変えたいと。単純に色変えたいなら自前描画、
ただビジュアルスタイル風でかつ色を変えるのは不可能っしょ
0209デフォルトの名無しさん2007/11/28(水) 20:53:18
>>207
変数を直接外部からは(内部でも?)触らないようにしてプロパティでラップ
setterでイベントを起こせばそれらしくなるんじゃ
0210デフォルトの名無しさん2007/11/28(水) 21:16:03
Observer パターン?
0211デフォルトの名無しさん2007/11/28(水) 21:28:46
set {
 if (this.hoge != value) {
  this.hoge = value;
  this.OnHogeChanged(EventArgs.Empty);
 }
}
ただこれだけのこと
○○Changedはこんな感じで実装するのが普通
0212デフォルトの名無しさん2007/11/28(水) 21:40:23
>>194
いい加減つりはやめろ。
その前に見た瞬間に動かないとわかるコードを貼るのはやめろ。
0213デフォルトの名無しさん2007/11/28(水) 22:01:02
>>211
PropertyChangedをつかおう
0214デフォルトの名無しさん2007/11/29(木) 00:10:48
分かってなかった時代に(今も分かってないけど)書いたコードで、
ToolStripMenuItemを実行したときの引数として構造体を使ってしまった。
今クラスにしとけばよかったと激しく後悔してるんですが、
構造体って相互運用以外で使い道ってあるんですか?
0215デフォルトの名無しさん2007/11/29(木) 00:17:25
bool int double DateTime …
冗談だスマン
0216デフォルトの名無しさん2007/11/29(木) 00:25:16
構造体は参照を使いたくないときに使うだけ。
0217デフォルトの名無しさん2007/11/29(木) 01:40:18
DB(DataSet)が変更した時にスグに、DataGridViewに表示させたいんんだけど、無理かなあ
02182072007/11/29(木) 07:12:18
勉強になりましたm(_ _)m
0219デフォルトの名無しさん2007/11/29(木) 11:43:35
テキストファイルを行単位で読み込んでいくときに、先頭行から全て読むなら
以下の感じになると思うのですが、途中の行から最後まで読みたい場合には、
どうしたら良いのでしょうか?
srを途中まで進めてからwhileループに入れば良いような気がしますが、
StreamReaderを任意の希望の位置まで進めるメソッドってあるのでしょうか?

StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("UTF-8"));
string line;
while ((line = sr.ReadLine()) != null) {
0220デフォルトの名無しさん2007/11/29(木) 11:51:07
Stream.PositionをいじってからStreamReader作ればいいが、
[n行目以降]ならStreamReaderで読み捨て
0221デフォルトの名無しさん2007/11/29(木) 11:54:56
>>220
どうも勉強になりました。有難うございます。
あまり速度に影響しないようなので、この場合、読み捨てにします。
0222デフォルトの名無しさん2007/11/29(木) 17:58:35
Bitmapオブジェクトを24ビット形式のBMP形式で保存したいのですが
自動的に32ビット形式になってしまい困っています。
以下のプログラムのどこをどうしたら良いのでしょうか?
よろしくお願いします。

// 24ビットBMP形式のファイルを読み込む
Bitmap bmp = new Bitmap(@"before.bmp");
// 保存するとなぜか32ビットになっている
bmp.Save(@"after.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
0223デフォルトの名無しさん2007/11/29(木) 18:09:48
3引数のSave使いなよ。
0224デフォルトの名無しさん2007/11/29(木) 18:23:22
>>223
3引数のSave、今はじめて知ったので調べてみました。
今ヘルプ見てるんですが、ImageCodecInfoとEncoderParametersに
何を設定するのか全然書いてないのよ;;
具体的にどのような値を記述するのか分からないです;;
0225デフォルトの名無しさん2007/11/29(木) 18:46:33
3引数のSaveについて調べていたところ
これってjpegで保存するときの圧縮率などの質を指定して
saveするパラメータだということがわかりました。

bmp形式には使えないので、引き続き24ビットBMP形式で
保存する方法をご存知の方、よろしくお願いします。
0226デフォルトの名無しさん2007/11/29(木) 20:24:38
>>225
Bitmapオブジェクトを24bitRGBで作ってからSaveで24bitにならんかな?
0227デフォルトの名無しさん2007/11/29(木) 22:11:06
P/Invokeに関してちょっと自信がないので確認させてください。

関数のアンマネージシグネチャがvoid UnmanagedFunction(STRUCT*)、
P/Invokeのシグネチャがvoid UnmanagedFunction(IntPtr)
だとして、
スタックに置かれた構造体に対して

STRUCT st;
UnmanagedFunction(new IntPtr(&st));

という風にポインタを直接渡すことは安全ですよね?
0228デフォルトの名無しさん2007/11/29(木) 22:16:43
直接ではないのではないのかな?
02292272007/11/29(木) 22:23:34
>>228
言葉足らずだったかも。
ここでいう直接っていうのは、HGlobalなどのアンマネージな領域に再確保することなく
マネージスタック上のアドレスを直接アンマネージ関数に渡す、という意味です。
0230デフォルトの名無しさん2007/11/29(木) 22:24:10
向こうで変なことしてなければ
02312272007/11/29(木) 22:30:40
>>230
どうもありがとうございます。安心しました。
0232デフォルトの名無しさん2007/11/29(木) 22:55:52
>>226
できますた。ありがとう
0233デフォルトの名無しさん2007/11/29(木) 23:31:36
>>231
あっちが非同期な関数だと死ぬるよ?
普通にref STRUCTでマーシャラにおまかせしないのかい?
02342272007/11/29(木) 23:49:49
>>233
refにしないのは場合によってNULLを渡す必要があるためです。
というか非同期だったらref渡しでもまずいことになるような?
0235デフォルトの名無しさん2007/11/29(木) 23:59:51
ちなみに、MSDN の「コピーと固定」を読んどくといいよ
02362272007/11/30(金) 00:33:54
>>235
どうもありがとうございます。読んどきます。
0237デフォルトの名無しさん2007/11/30(金) 09:14:18
Listでジェネリックを使ってisExistsを実装するやり方がいまいちよく分かりません。

List<string> list;
//listに要素を入れる
list.Exists( delegate( string value ) { return list.IndexOf( value ) >= 0; } )

のように、IndexOfで引っかかるかどうかという判定にしているのですが、
意図した動作をしません。
おそらくみんなこう書くという、典型的な実装があるのではと思っているのですが、
ちょっと教えていただけませんでしょうか。
0238デフォルトの名無しさん2007/11/30(金) 09:21:44
意味が分からん。Containsを求めてるのか?
Existsは例えばList<string>内に「**で始まる文字列が存在するか」調べるとかそんなんだが。
ていうか実装?
0239デフォルトの名無しさん2007/11/30(金) 11:08:54
IndexOfで存在は確認できると思うけど?
0240デフォルトの名無しさん2007/11/30(金) 11:20:45
引数が string で 戻り値 bool の関数作って
bool b = aaa.Exists(new System.Predicate<string>(function1));

こんな感じでいいみたいだぞ
0241デフォルトの名無しさん2007/11/30(金) 11:57:36
listの要素のひとつひとつがそのlistに含まれるかどうかをテストしてるわけで
なかなか哲学的だ。
0242デフォルトの名無しさん2007/11/30(金) 12:15:45
>>240
デリゲートの暗黙のインスタンス使ったほうが
コンパイラが良きにはからってくれて効率良かったりする
0243デフォルトの名無しさん2007/11/30(金) 12:59:59
>>242
え、例えばどんなとき?
暗黙だろうが明示だろうが生成される型は同じだから変わらない気がするけど。

もしかして匿名デリゲートのことを言ってるのかな?
それにしてもどういう風に最適化しうるのか気になる。
0244デフォルトの名無しさん2007/11/30(金) 13:04:37
>>242
効率ってのは実行効率?コーディングの効率?
0245デフォルトの名無しさん2007/11/30(金) 13:19:17
型推論するだけじゃなくてILも変わるの?
0246デフォルトの名無しさん2007/11/30(金) 13:42:12
namespaceの効果とか機能がよくわからないのですが
ソースを大きく括って見やすくするためと思っていいですか?
0247デフォルトの名無しさん2007/11/30(金) 13:51:43
>>246
同じ名前の宣言を複数実装できるからやないん?
ポリモーフィズムの延長線かもしれんけど
0248デフォルトの名無しさん2007/11/30(金) 14:04:54
>>246
例えば、
System.Drawing.Image と
System.Web.UI.WebControls.Image を
区別できるようにするため。
■ このスレッドは過去ログ倉庫に格納されています