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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

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

前スレ
ふらっとC#,C♯,C#(初心者用) Part45 (実質46)
http://pc12.2ch.net/test/read.cgi/tech/1255658236/
2デフォルトの名無しさん:2009/11/01(日) 18:24:07
3デフォルトの名無しさん:2009/11/01(日) 21:24:18
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
4デフォルトの名無しさん:2009/11/01(日) 21:44:47
よりによって、京都大学を騙るとは。
京都府警の管轄だぞ。
5デフォルトの名無しさん:2009/11/02(月) 09:57:33
いや、アイちゃんはたしかに京都大学所属だ
ttp://www.pri.kyoto-u.ac.jp/ai/
6デフォルトの名無しさん:2009/11/02(月) 10:21:32
ワロタ
7デフォルトの名無しさん:2009/11/02(月) 11:46:20
アイちゃんがまだ生きてることに正直驚いた
8デフォルトの名無しさん:2009/11/02(月) 14:03:08
どんなに優れたプログラムを作ってもアイちゃんの脳には勝てない
9デフォルトの名無しさん:2009/11/02(月) 20:56:50
マウス座標を固定したい場合、どうやってやればいいでしょうか?
Timer座標変更する以外で方法はありますか?
10デフォルトの名無しさん:2009/11/02(月) 23:10:55
なぜわざわざ腐ったUIにしたいのさ
11デフォルトの名無しさん:2009/11/02(月) 23:14:14
>>10
キチガイがわいたよ
12デフォルトの名無しさん:2009/11/03(火) 00:04:14
LL でフックして、位置を変えなきゃOK。
13デフォルトの名無しさん:2009/11/03(火) 00:13:13
それが一番スマートなやり方だな
14デフォルトの名無しさん:2009/11/03(火) 02:36:15
ListViewのDetailsViewを使い、
3種類のカラムにデータを表示させています。
これで、1,2番目のカラムは起動時に取得するのですが、
3番目のカラムは、起動後ボタンを押したタイミングで表示するようにしたいのです。
ボタンを押したら、一度ListViewをClearして、3番目のカラムを含むデータを、
再度表示させることも出来るのですが、何番目のアイテムの3番目のカラムデータを、
更新する、ということは出来ませんか?
15デフォルトの名無しさん:2009/11/03(火) 04:17:59
>>14
ListView.Items[n番目].SubItem[2].Text
16デフォルトの名無しさん:2009/11/03(火) 11:00:20
XMLの名前空間なんですが
http://hogehoge.com/hoge/1.1
http://hogehoge.com/hoge/1.2
とか微妙に違う場合、DOMから名前空間を取得してXmlNamespaceManagerにaddするか
DOMから名前空間削除しちゃうか
って選択肢があるんですが、取得するメリットってなんでしょうか
特定の名前空間しか受付ないって仕様なら納得できますが
取得してaddするくらいなら削除した方がただしいような気がします
ご意見お願いします
17デフォルトの名無しさん:2009/11/03(火) 11:31:04
>>15
ありがとうございます。解決しました。
18デフォルトの名無しさん:2009/11/03(火) 11:45:19
>>16
名前空間が何で(どういう場面で)必要なのか考えれば自明。
19デフォルトの名無しさん:2009/11/03(火) 14:06:25
>>18
xml要素がDOMの中で重合しない限り名前空間など無用ってことですね?
20デフォルトの名無しさん:2009/11/03(火) 17:06:49
一部処理をしてる間だけ、画面にその結果を反映させたくなく、
処理が終わったら表示を更新する・・・のようなものはありませんか?
update..とかで何か出来た気がするのですが・・・
21デフォルトの名無しさん:2009/11/03(火) 17:13:04
BeginUpdate() 〜 EndUpdate() のこと?
22デフォルトの名無しさん:2009/11/03(火) 18:28:28
>>21
それです!
やってみますね、ありがとうございました。
23デフォルトの名無しさん:2009/11/04(水) 03:58:29
大分前だけど、プログラマとして会社面接に行って
C++、C#できますと言ったら、面接官(多分SE?)にC#って何?って言われたw
24デフォルトの名無しさん:2009/11/04(水) 04:07:47
外部のコンポーネントを使用したいと思ってるんだけど著作権絡みの質問ってどこですればよい?
25デフォルトの名無しさん:2009/11/04(水) 04:32:54
C#も知らんとは無知すぐる
26デフォルトの名無しさん:2009/11/04(水) 04:55:32
そこの会社ではシーイゲタと呼んでとか
27デフォルトの名無しさん:2009/11/04(水) 08:13:34
シープラプラプラプラ
28デフォルトの名無しさん:2009/11/04(水) 08:34:23
C丼
29デフォルトの名無しさん:2009/11/04(水) 10:37:42
>>23
その面接官をこのスレに連れてきなさい!

(やってきた)
仕事くださいお願いしますorz
30デフォルトの名無しさん:2009/11/04(水) 11:32:59
>>23
どのくらい説明できるか試したんじゃない?
31デフォルトの名無しさん:2009/11/04(水) 11:40:18
まあC#なんて最近だし
32デフォルトの名無しさん:2009/11/04(水) 11:44:56
このスレを見てる俺もよく知らないし
33デフォルトの名無しさん:2009/11/04(水) 11:45:41
俺もよく分かりません
34デフォルトの名無しさん:2009/11/04(水) 12:29:17
そんなやつらに聞いてたのか
35デフォルトの名無しさん:2009/11/04(水) 12:32:59
string に入ってる一文字がa-z 0-9 の半角小文字かどうかを判定する簡単な方法教えてください
なるべく正規表現使わない方法で
36デフォルトの名無しさん:2009/11/04(水) 12:34:57
どう考えても正規表現が一番簡単だが
まあ36文字ぐらいならchar配列で持っておいてループでチェックしても良いんじゃね
37デフォルトの名無しさん:2009/11/04(水) 12:42:08
1文字って文字列中の1文字?
まあChar.IsLowerとChar.IsNumber使うのかな
38デフォルトの名無しさん:2009/11/04(水) 12:43:30
まあ性器表現は重いからな
39デフォルトの名無しさん:2009/11/04(水) 12:48:18
>>37
全角とか色々引っかかるから不可よん
40デフォルトの名無しさん:2009/11/04(水) 12:57:14
ありがとうございます

stringのままだと不等号が通らなかったので
char[] ch = al.ToCharArray();
if ((ch[0] < 'a' || ch[0] > 'z') || (ch[0] < '0' || ch[0] > '9'))
としてみました。
これではまずいでしょうか?
41デフォルトの名無しさん:2009/11/04(水) 13:15:07
それだと合致しすぎだろ
42デフォルトの名無しさん:2009/11/04(水) 13:25:03
あ こう?
if ((ch[0] < 'a' || ch[0] > 'z') && (ch[0] < '0' || ch[0] > '9'))
43デフォルトの名無しさん:2009/11/04(水) 13:27:57
>>39
エンコーディング指定すれば問題ない
44デフォルトの名無しさん:2009/11/04(水) 13:35:46
おちょくってるのか
45デフォルトの名無しさん:2009/11/04(水) 13:39:35
that's right
46デフォルトの名無しさん:2009/11/04(水) 13:51:04
プロセスが使用しているファイルのパスやファイルの起動時刻のデータを取得することは可能でしょうか?
Windowsでの実装を考えています
C#ではウィンドウを持つプロセスからタスクバーに表示される文字列を取得できることは調べてわかりました
しかし,これではファイルのパスやファイルの実行時刻,さらにはファイル名がタスクバーに表示されなければファイル名も取得することができません
Windowsのどこかにファイルの使用履歴を保存している情報があれば,そこから取得できるかなと思っているのですが・・・
47デフォルトの名無しさん:2009/11/04(水) 13:59:29
if( (ch[i] >= 'a' && ch[i] <= 'z') || (ch[i] >= '0' && ch[i] <= '9') ){
  //string に入ってる一文字がa-z 0-9 の半角小文字
}
48デフォルトの名無しさん:2009/11/04(水) 15:54:58
フィルタドラバ書けばなんとかなりそうだけどスレちがいですね
49デフォルトの名無しさん:2009/11/04(水) 16:05:38
>>35
他には辞書型にマッチする文字を全部放り込んでしまうとかが考えられるけど、
まあ正規表現を使うのが一番簡単。
なぜそれを避ける必要があるのかが逆に分からんな。
50デフォルトの名無しさん:2009/11/04(水) 17:34:30
宿題なんでしょ
51デフォルトの名無しさん:2009/11/04(水) 17:46:38
だからエンコード指定してIsLowerとかIsNumberしろよと・・・
52デフォルトの名無しさん:2009/11/04(水) 17:53:02
エストニア語環境でバグるんですね。わかります。
53デフォルトの名無しさん:2009/11/04(水) 17:53:45
もし宿題なら、前に出てたif文の使い方とか教えたいんじゃなかろうか
54デフォルトの名無しさん:2009/11/04(水) 18:04:21
>>51
全角の1とかaまでマッチするだろ。あほは黙ってなさい
55デフォルトの名無しさん:2009/11/04(水) 18:05:25
>>51
.NETの標準ライブラリにはIsLowerとIsNumberはCharにしかなくて、
どっちもEncodingは引数に取らないんだが……
一体どういう操作なの?
56デフォルトの名無しさん:2009/11/04(水) 18:21:49
Encoding設定できないのに全角の1を数値と判断してると思える方がどうかしてる
57デフォルトの名無しさん:2009/11/04(水) 18:24:30
数値じゃなくて数字でしょ
5835:2009/11/04(水) 18:24:52
役に立たねえやつらだな
59デフォルトの名無しさん:2009/11/04(水) 18:26:42
じゃあ>>51は2重にまちがってんじゃんw
60デフォルトの名無しさん:2009/11/04(水) 21:00:29
これでOK。
ASCIIコード相当の文字セットはユニコード内で同じ値がマッピングされてるから
127以下 = 半角英数字と思って良い。

string text = "123";

if ((int)text[0] < 128) // is ASCII code
if (Char.IsLower(text[0]) || Char.IsNumber(text[0]))
Console.WriteLine("Lower or Number.");
61デフォルトの名無しさん:2009/11/05(木) 03:21:07
後出しなのにすげー間抜けなの出てきたw
62デフォルトの名無しさん:2009/11/05(木) 03:39:46
間抜けとは何だ
プンプン
63デフォルトの名無しさん:2009/11/05(木) 04:34:12
c#の参照型とC言語のポインタ型って同じだと思うんだけど
何か違うのか?

c言語
int x=30;
int*p;
p=&x;//pには、1923536みたいな数値が入ってる
で、アドレス1923536に30という数値が入る。

d#
TestClass tc = new TestClass();
tc.x=30;

tcには1923536みたいな数値が入ってる
で、アドレス1923536に30が格納されるんだろ?

何か間違ってる?
64デフォルトの名無しさん:2009/11/05(木) 04:41:23
>>60
だからアクサンやセディーユやウムラウトはどうなる。
65デフォルトの名無しさん:2009/11/05(木) 04:45:44
>>63
C#の参照はオブジェクトのアドレスを直接指していない(オブジェクトはいつ移動するかわからないから)。
値を自由に変更できない(現存するオブジェクトを指すかnullかしかなく、適当なアドレスを指したりできない)。
キャストが自由にできない(Cのポインタのように全く関係ない型に変換できない)。
66デフォルトの名無しさん:2009/11/05(木) 05:29:25
なるほどなるほど
unsafe使ってもメモリ管理面ではc言語より弱いのか。
無理やり型キャストしてデータ書き換えするとコンピューターが内部でどんな動きをしてるか実際にチェックできて楽しかったのに残念だのぉ。
67デフォルトの名無しさん:2009/11/05(木) 05:47:40
あ、unsafeのことは言ってないか。
unsafe使えば他のアプリケーションに干渉することが可能かね。
68デフォルトの名無しさん:2009/11/05(木) 05:49:59
他のアプリケーションに干渉って具体的に何言ってんの
69デフォルトの名無しさん:2009/11/05(木) 06:03:07
Windowsゲームのメモリを直接書き換えて改造するとか
コマンドプロンプトの文字をA⇒Cにしたりとか
そういううやつ。

アセンブリ?で無理やりアドレス書き換えたらできるようなやつ。
70デフォルトの名無しさん:2009/11/05(木) 06:17:23
Cでやれよ
71デフォルトの名無しさん:2009/11/05(木) 06:31:52
お、できた。
unsafe使ったら
他のプログラムに干渉できた!


unsafe private void Form1_Load(object sender, EventArgs e)
{
try
{
int* p;
p = (int*)12345678;
this.Text = ((int)*p).ToString();
}
catch
{
MessageBox.Show("他のプログラムが使用中です");
}
}

ここでテキストボックスとかに入力したアドレスに直接干渉できる
うまく使えばメモリマスターになれるなC#すごいな
72デフォルトの名無しさん:2009/11/05(木) 06:58:06
メモリマスターが誕生した瞬間である。
73デフォルトの名無しさん:2009/11/05(木) 07:03:40
ワロタ
74デフォルトの名無しさん:2009/11/05(木) 07:14:31
すげー。





















仮想メモリについて勉強しような。







75デフォルトの名無しさん:2009/11/05(木) 07:20:45
>>71
それ他のプログラムのメモリを指してないと思うけど
76デフォルトの名無しさん:2009/11/05(木) 07:24:58
これからもどんどん干渉してくださいね
77デフォルトの名無しさん:2009/11/05(木) 09:16:03
まさにMVPにふさわしい実力の持ち主がここに!!
78デフォルトの名無しさん:2009/11/05(木) 09:27:11
まぁ本気じゃないだろ
だよな?
79デフォルトの名無しさん:2009/11/05(木) 09:34:35
Win32sで.NETを動かすツワモノが
80デフォルトの名無しさん:2009/11/05(木) 09:38:03
>>79
sの意味を詳しく
81デフォルトの名無しさん:2009/11/05(木) 09:39:56
サブセットのs
82デフォルトの名無しさん:2009/11/05(木) 10:38:32
なぜつわものなのだろうか・・・・
83デフォルトの名無しさん:2009/11/05(木) 10:51:56
文字列に@が付いてるソースがありますがこれは何でしょうか?
@"hoge"
とかいうやつです。
84デフォルトの名無しさん:2009/11/05(木) 10:53:34
古い奴だけど・・・
ttp://msdn.microsoft.com/ja-jp/library/aa691090(VS.71).aspx
85デフォルトの名無しさん:2009/11/05(木) 10:57:12
>>84
ありがとうございます。なんとなくわかりました。
自分的には@は使わなくてよさそうです。
86デフォルトの名無しさん:2009/11/05(木) 11:08:07
GCでぶっ飛べば。
87デフォルトの名無しさん:2009/11/05(木) 13:24:41
"c:\\windows\\system32"とか書くときは
@"c:\windows\system32"ってするだろ
88デフォルトの名無しさん:2009/11/05(木) 13:29:59
正規表現書くときも使うしな
89デフォルトの名無しさん:2009/11/05(木) 13:33:26
普段使わないけど正規表現はねぇ…
90デフォルトの名無しさん:2009/11/05(木) 13:40:37
なるほど
91デフォルトの名無しさん:2009/11/05(木) 14:01:40
正規表現を@なしとか読みにくすぎて泣ける
92デフォルトの名無しさん:2009/11/05(木) 14:10:55
自分のXPでは、エラーが出ないのですが、
VistaのPCで何故かWebClientの例外が発生します。
自分でVistaの開発環境を持てばいいのですがそれが出来ず困ってます。
93デフォルトの名無しさん:2009/11/05(木) 14:15:29
どんなエラーかをとりあえず出すべきじゃないか?
94デフォルトの名無しさん:2009/11/05(木) 14:30:47
>>58はおれじゃないです・・・荒れてしまってすいません
>>42でとりあえず実装してますがまずいですかね?
95デフォルトの名無しさん:2009/11/05(木) 14:34:08
>>94
・・・なんでもいいけどテストちゃんとしろよな
96デフォルトの名無しさん:2009/11/05(木) 14:52:35
{0:yyyy/MM/dd dddd hh/mm/ss ffff}, DateTime.Now
97デフォルトの名無しさん:2009/11/05(木) 14:54:06
あー・・・やはりそうですよね;
e.Massageで取得した文は
WebClient要求がで例外が発生しました。
こうなんですが、
具体的な内容では無いので、どうするべきか迷ってました。
98デフォルトの名無しさん:2009/11/05(木) 15:03:02
WebClientの何の処理でエラーなんだ?
99デフォルトの名無しさん:2009/11/05(木) 15:04:09
メソッド、パラメータくらいかけよ
100デフォルトの名無しさん:2009/11/05(木) 15:09:38
ひとまず例外のスタックトレースコピペるとかさ
なんで自分で書いちゃうんだよwwww
101デフォルトの名無しさん:2009/11/05(木) 15:16:01
>>98
それが特定できないんです、
エラー構文にその処理位置を特定するようにしてませんでしたので;
>>99
Webclient.DownloadFileAsync(downUri, fileName)で開始し、
イベントハンドラDownloadFileCompletedで、e.Error != nullのとき、
WebClient例外が発生します。これだけでは特定できませんか?
102デフォルトの名無しさん:2009/11/05(木) 15:19:18
書き込みできないフォルダにダウンロードしようとしてるんじゃね?
program filesの下とかさ
103デフォルトの名無しさん:2009/11/05(木) 15:19:30
わかるかぼけ
104デフォルトの名無しさん:2009/11/05(木) 15:22:15
だからメッセージだけじゃなくて例外の種類とかスタックトレースとかステータスコードとか
いっぱい情報があるだろうが。
その辺を全部出せ。
105デフォルトの名無しさん:2009/11/05(木) 15:23:55
>>102はありそうだな。
106デフォルトの名無しさん:2009/11/05(木) 15:29:50
正しいアクセス権がなかったらエラーになってたような気がしたが?
107デフォルトの名無しさん:2009/11/05(木) 15:32:25
とにかく自分でファイルを書くときはマイドキュメントに作らないと
108デフォルトの名無しさん:2009/11/05(木) 16:00:21
いやそれはどうか
109デフォルトの名無しさん:2009/11/05(木) 16:13:46
VISTAでUAC切って同じことやらせてみてはどうか
恐らく制限に引っ掛かってるんじゃね?
110デフォルトの名無しさん:2009/11/05(木) 16:23:13
WebBrowserコントロールで使用するプロキシサーバーの設定ってデフォルトだとIEと同じ設定になるんだけど
これを自分で設定することって出来ないかな?
WebClientとかHttpWebRequestだとProxyプロパティがあって設定出来るんだけどいくら探してもそれっぽいのが見つからない
111デフォルトの名無しさん:2009/11/05(木) 16:36:45
c#ってすごいな。フォームを半透明にできるのか。
かわいい幽霊の画像を用意して
ゆっくりと透明度を上げ下げすれば、簡単にうらめし屋のできあがりだな。
112デフォルトの名無しさん:2009/11/05(木) 16:39:59
C#ってかWindowsの機能でしょw
113デフォルトの名無しさん:2009/11/05(木) 16:44:17
>>104
利用者向けのメッセージだったので、Error.Messageしか表示させてませんでした。
Vistaの方に協力してもらいやってますので、それから質問するべきでしたね。
>>102
SystemDriveでルート取得して、その直下にファイルをDLしているのですが、
VistaだとSystemDrive取得出来なかったりします?
114デフォルトの名無しさん:2009/11/05(木) 16:45:18
>>110
自己レス
WinInetのInternetSetOption()で出来る気がしてきたからちょっとやってみるわ
115デフォルトの名無しさん:2009/11/05(木) 16:49:13
>>113
Vistaでシステムドライブ直下は書き込めないよ
Vistaのセキュリティは万全なのだ
116デフォルトの名無しさん:2009/11/05(木) 17:25:37
どうやら、UACが原因のようです。
UACを無効にすると、普通に起動することが出来ました。
>>115どうやらそのようですね・・・
ユーザに気づかれないようにファイルをDLしてきて、処理をしたかったのですが、
となると、皆さんならどこに保存しますか?
117デフォルトの名無しさん:2009/11/05(木) 17:29:34
>>116
ログインユーザーのデスクトップとかマイドキュメントとか
118デフォルトの名無しさん:2009/11/05(木) 17:32:42
>>117
そうですよね、マイドキュメントでやってみようと思います。
ありがとうございました。
119デフォルトの名無しさん:2009/11/05(木) 17:39:45
UACを無効にすることがいかに怖いかわかるな
120デフォルトの名無しさん:2009/11/05(木) 17:44:10
VISTあの場合は使う側としては異常にうっとおしいけどな・・・
121デフォルトの名無しさん:2009/11/05(木) 17:48:49
うざいよりウィルスにかかってもいい人
UAC無効

普段の面倒さよりウィルスのほうがやな人
UAC有効
122デフォルトの名無しさん:2009/11/05(木) 17:52:19
>>114
自己解決しました
123デフォルトの名無しさん:2009/11/05(木) 18:34:17
>>116
いやまて、ファイルをユーザーに見せたくないんなら
Temp とかある程度永続が必要なら Local AppData
あたりじゃないのか
124デフォルトの名無しさん:2009/11/05(木) 19:42:15
>>94
まずいっていうか明らかにおかしいじゃん。もう正解でてるよ
125デフォルトの名無しさん:2009/11/05(木) 19:54:49
intとかstring型ってSystemに入ってるみたいだが
using System;
を入れなくてもintやstringを使用できるのはなぜ?
126デフォルトの名無しさん:2009/11/05(木) 20:21:30
>>125
System.Stringの別名がstring
System.Int32の別名がint

※規制解除かな・・・テスト兼
127デフォルトの名無しさん:2009/11/05(木) 22:03:44
>>124
うーむ・・・>>60ですか?
128デフォルトの名無しさん:2009/11/05(木) 22:11:36
accessの熟練者から、
C#なんてなくてもaccess2007で十分じゃん。ランタイムも無料になったし。
と言われました。
なんか腹が立ちます。
C#の優位点を教えてください。
今、C#を猛烈に勉強しているので悔しいんです。
よろしくお願いいたします。
129デフォルトの名無しさん:2009/11/05(木) 22:14:26
C#使えるようになってからにしような
130デフォルトの名無しさん:2009/11/05(木) 22:14:31
Accessって何?ああ、Officeのオマケか。まだ出てたの?
131デフォルトの名無しさん:2009/11/05(木) 22:17:37
較べるようなもんじゃねーよ
Accessで十分な用途ならそりゃAccessでやった方が楽だ
AccessでPythonの処理系作れるか?
132デフォルトの名無しさん:2009/11/05(木) 22:19:20
プログラマーとかじゃなくて普通の仕事なら
accessの方が役に立つだろうから
その人が正しいといえなくもない
133デフォルトの名無しさん:2009/11/05(木) 22:22:15
accessって2Gの壁とかいろいろ制限あったんじゃね?
あと同時に複数で使うと論理破壊が起るでしょ?
134デフォルトの名無しさん:2009/11/05(木) 22:23:42
AccessとC#は立ち位置が違うよな・・・
JavaとC#とかならまだ議論しようがあるけど。
135デフォルトの名無しさん:2009/11/05(木) 22:24:25
Accessあるのに職場内で使うようなデータベースソフト作るのに
C#とSQLServerとか使ってたら「ば〜かぁ」って言われるだろうけど
それ以外使い道ないじゃんAccess
136デフォルトの名無しさん:2009/11/05(木) 22:24:34
その情報はあまりにも古い
137デフォルトの名無しさん:2009/11/05(木) 22:27:53
それに比べたらゲームから書類まで作れちゃうExcelの万能さは異常
138デフォルトの名無しさん:2009/11/05(木) 22:28:32
結局VBAだらけになって、全部プログラムで作っちゃったほうが楽だったんじゃね?となる
139デフォルトの名無しさん:2009/11/05(木) 22:30:05
VBAは使えるけどワークシート関数とか全くわからん
140デフォルトの名無しさん:2009/11/05(木) 22:33:54
ExcelはVBA使ったら負け
141デフォルトの名無しさん:2009/11/05(木) 22:58:34
ExcelはVBA言語によるリッチクライアントプラットフォーム
142デフォルトの名無しさん:2009/11/05(木) 22:59:10
農作業車とセダン比べてどうとか言ってる感じがする
143デフォルトの名無しさん:2009/11/05(木) 23:52:01
で、Accessに勝っている点って何?
劣っている点は心当たりあるけど。
…AccessはDBそのもので作業が楽。
同じものを作成するといってもC#の方が8倍くらいの時間がかかると思う。
144デフォルトの名無しさん:2009/11/05(木) 23:53:11
Accessって共同作業できる?
145デフォルトの名無しさん:2009/11/05(木) 23:53:14
accessでasp作れるの?
146デフォルトの名無しさん:2009/11/05(木) 23:55:28
WMPlibでWMPのUIをそのまま貼り付けて、
mp3の再生を行っています。
このとき、繰り返し再生機能を実装したいのですが、
どのように書けば良いのでしょうか?

また、WMPのUI上で停止ボタンが押された場合のイベントは有りませんよね。。
147デフォルトの名無しさん:2009/11/05(木) 23:56:00
Windowsフォームアプリケーションを作るという前提ならば、
Accessに負ける?
148デフォルトの名無しさん:2009/11/05(木) 23:57:24
>>147
負ける。
ただ、Accessのフォームはどうも見た目が安っぽいんだよね。
149デフォルトの名無しさん:2009/11/05(木) 23:58:16
>>147
負けねーよ。馬鹿。
表入力は劣るけど。
150デフォルトの名無しさん:2009/11/06(金) 00:02:17
AccessはC#で作れるからC#の勝ち
151デフォルトの名無しさん:2009/11/06(金) 00:06:46
>>146
Settings あたりにあるだろ確か
イベントは MouseDown とかそんなのなかったか?
俺は C++ で COM 直でしかいじったことないからあいまい
だけど
152デフォルトの名無しさん:2009/11/06(金) 00:08:31
accessの方が有利点が多い?
153デフォルトの名無しさん:2009/11/06(金) 00:11:53
Accessの優位点ってプログラムレスでお手軽にDBアプリができる点かね。
それを言うならもうとっくにお亡くなりになったロータスのAproachは
もっとお手軽だった気もしたけど。
154デフォルトの名無しさん:2009/11/06(金) 00:15:44
Accessはなんとなく適当に作ってもなんとなく動いちゃうんだよな
それはそれで楽っちゃ楽なんだけれど、きっちり作り込もうとすると融通が利かなかったり
VBAであれこれ書かなきゃいけなかったりするのよねぇ
155デフォルトの名無しさん:2009/11/06(金) 00:16:20
荒しだろ。しつけぇ
156デフォルトの名無しさん:2009/11/06(金) 00:33:06
だがAccessの領域はSalesforceにとってかわりつつある
157デフォルトの名無しさん:2009/11/06(金) 00:35:52
throw new ArashiException();

try{
通常書き込み
}

catch(ArashiException){
むし
}
158デフォルトの名無しさん:2009/11/06(金) 01:00:54
>>156
salesforce は表で編集するの苦手だからなぁ
1レコードづつフォーム開いて編集するの限定なら代わりになるが・・・
159デフォルトの名無しさん:2009/11/06(金) 01:37:52
何を作るのに十分なんだろうな・・・
マルチスレッドも使えないし
160デフォルトの名無しさん:2009/11/06(金) 02:18:18
内部的にどういう動きしてるかしらないけどフォームやボタンのMouseClickイベントとかって

while(true){
if (マウスがクリックされてる){
なんかする
}
0.0001秒待機する
}

みたいな処理をやってるの?
裏では大量のwhile分がマウスやキーボードのチェックを行ってるの?
161デフォルトの名無しさん:2009/11/06(金) 02:37:27
うん
162デフォルトの名無しさん:2009/11/06(金) 04:38:56
("{0:hh:mm:ss.ffff}",DateTime.Now)
hはhour、mはminute、sはsecondをあらわすのはいいとして
ミリ秒をあらわすfって何の略よ?
163デフォルトの名無しさん:2009/11/06(金) 04:49:20
few
164デフォルトの名無しさん:2009/11/06(金) 07:44:18
fractionだろ
ミリ秒ではなく秒の端数
165デフォルトの名無しさん:2009/11/06(金) 16:06:23
.net Framework Compactには画像を回転させる関数がないので
http://homepage2.nifty.com/tsugu/sotuken/rotation/
のサンプルをC#で動かすためにいじってみましたが

最後のサンプルで計算領域がはずれてしまい、画像が大きくゆがむ現象で困ってます
アルゴリズムのどこかがコンパイルは通るもののCとC#の言語仕様で
うまくいかないようです

ちなみに最初に出てくるサンプルはちょっと変更を加えると動きました
高速化ってのを試したいんですが・・・
166デフォルトの名無しさん:2009/11/06(金) 21:40:41
わかるわけないだろ
うまくいかないコードを晒せ
167デフォルトの名無しさん:2009/11/06(金) 22:04:33
では・・・
//画像回転
public void MapRotat(double A, int DstCX, int DstCY, int SrcCX, int SrcCY)
{

Bitmap BmpBufRot = new Bitmap(BmpSource.Width, BmpSource.Height);

//http://homepage2.nifty.com/tsugu/sotuken/rotation/
// SrcCX, SrcCY : 入力画像の中心座標
// DstCX, DstCY : 出力画像の中心座標
// : 入力画像の幅高さ
int SrcWidth = BmpSource.Width;
int SrcHeight = BmpSource.Height;
// : 出力画像の幅高さ
int DstWidth = BmpBufRot.Width;
int DstHeight = BmpBufRot.Height;
// pSrcImg : 入力画像ポインタ
// pDstImg : 出力画像ポインタ
// A : 回転角度(ラジアン)
// PI : 円周率(3.14159265358979323846)


int int_sin; //SIN値に1024を掛けて整数にした値
int int_cos; //COS値に1024を掛けて整数にした値
int x1, y1; //入力画像内の座標
int x2, y2; //出力画像内の座標
int x1_mult, y1_mult; //入力画像内走査用変数(1024を掛けた値)
int StX, StY; //入力画像内の走査開始点座標
int DXX, DXY; //入力画像走査時のXループ内の増分
int DYX, DYY; //入力画像走査時のYループ内の増分

168デフォルトの名無しさん:2009/11/06(金) 22:06:50
//SIN,COS値を整数に変換
int_sin = (int)(Math.Sin(A) * 1024);
int_cos = (int)(Math.Cos(A) * 1024);
//走査開始点の計算
StX = int_cos * (-DstCX) - int_sin * (-DstCY) + (SrcCY << 10);
StY = int_sin * (-DstCX) + int_cos * (-DstCY) + (SrcCY << 10);
//Xループ内の増分を計算
DXX = int_cos;
DXY = int_sin;
//Yループ内の増分を計算
DYX = int_sin;
DYY = int_cos;
169デフォルトの名無しさん:2009/11/06(金) 22:07:39
//回転処理メインルーチン
//出力画像の座標でループを行う
for (y2 = 0; y2 < DstHeight; y2++)
{
//走査用変数の初期化
x1_mult = StX + y2 * DYX;
y1_mult = StY + y2 * DYY;
//走査用変数にXループ内の増分値を加算
for (x2 = 0; x2 < DstWidth; x2++, x1_mult += DXX, y1_mult += DXY)
{
//走査用変数から入力画像内の座標を取得
x1 = x1_mult >> 10;
y1 = y1_mult >> 10;
//入力画像内の座標が有効な値ならコピーを行う
if (x1 >= 0 && x1 < SrcWidth && y1 >= 0 && y1 < SrcHeight)
{
BmpBufRot.SetPixel(y2, x2, BmpSource.GetPixel(y1, x1));
}
}
}
Graphics g = Graphics.FromImage(BmpBuf);
g.Clear(Color.Blue);
int x = (BmpBuf.Width - BmpBufRot.Width) / 2;
int y = (BmpBuf.Height - BmpBufRot.Height) / 2;
g.DrawImage(BmpBufRot, x, y);
g.Dispose();
this.Image = BmpBuf;
}
170rrr:2009/11/06(金) 23:25:53
rrr
171デフォルトの名無しさん:2009/11/07(土) 00:29:27
あまり関係ないと思われるが
× StX = int_cos * (-DstCX) - int_sin * (-DstCY) + (SrcCY << 10);
○ StX = int_cos * (-DstCX) - int_sin * (-DstCY) + (SrcCX << 10);
172デフォルトの名無しさん:2009/11/07(土) 00:38:58
いや、「画像が大きくゆがむ現象」はともかく、「計算領域がはずれてしまい」は
こいつが原因くさいか。
173デフォルトの名無しさん:2009/11/07(土) 09:43:17
ありがとうございます
変更してテストしてみました
やはり現象はほぼ同じです

180度回転はうまくいきます
90度回転は (x1 >= 0 && x1 < SrcWidth && y1 >= 0 && y1 < SrcHeight)の領域に入ってこないので
描画されません
中間の角度で描画されない部分とゆがむ部分がでてきます
ピクセルの位置の増分を決定している変数

x1_mult
y1_mult

が適切でないっぽいですね
しかし理屈が理解できてないのでどこが間違いかわかりません
174デフォルトの名無しさん:2009/11/07(土) 11:54:32
訂正しても現象がほぼ同じなことの原因

最初から回転を考えててコピー元、コピー先ともに正方形にしてたからです
たまたまですね
175デフォルトの名無しさん:2009/11/07(土) 12:15:03
C#とかの仕様の問題じゃなく、単にアルゴリズムの間違いだと思う。
ネタ元ページの走査開始点の式に出力画像の幅高さが出てこないのが変。
アイデアとしては、図の通り斜めにコピーするのは納得できる。
でも、コピー先の領域(出力画像の幅高さ)を適用しないと、コピー元での走査
開始点座標が求まるはずが無い。
幾何学的意味は、回転中心を元先で合わせて、先領域を回転させて先領域の
(0,0)が該当する位置を、元領域での走査開始点とするから。
よって、式が疑わしい。

回転の中心と画像の中心をごっちゃにして間違ってるんじゃないかなコレ?
書かれているように画像の中心なら幅高さとは別に用意されてる意味がない。
176デフォルトの名無しさん:2009/11/07(土) 12:31:00
>>175
そうなんですか

じゃー動くやつであとはLockBitsして高速化してみます
177softbank221086123053.bbtec.net:2009/11/07(土) 13:47:07
たとえば、string変数の
abc[def]ghi があるとして、
[と]の間にある文字列を取得する場合はどのように書けばいいのでしょう
178デフォルトの名無しさん:2009/11/07(土) 13:49:58
いや、回転中心も原点からの座標値だから正しい。175は勘違い。
179デフォルトの名無しさん:2009/11/07(土) 13:52:18
>>177
String#Substring メソッド
180デフォルトの名無しさん:2009/11/07(土) 13:56:21
>>177
Regex
181デフォルトの名無しさん:2009/11/07(土) 14:18:07
>>142
セダンの運転手を雇ってる人が一番エライ
Access使いだろうがC#使いだろうがただのしもべ
182デフォルトの名無しさん:2009/11/07(土) 14:26:56
はいw
183デフォルトの名無しさん:2009/11/07(土) 14:36:22
>>173
× int_sin = (int)(Math.Sin(A) * 1024);
× int_cos = (int)(Math.Cos(A) * 1024);
○ int_sin = -(int)(Math.Sin(-A) * 1024);
○ int_cos = (int)(Math.Cos(-A) * 1024);

× DYX = int_sin;
○ DYX = -int_sin;

× BmpBufRot.SetPixel(y2, x2, BmpSource.GetPixel(y1, x1));
○ BmpBufRot.SetPixel(x2, y2, BmpSource.GetPixel(x1, y1));

で動いた。
184中学生:2009/11/07(土) 14:36:42
じゃあセダンの運転手を雇っててACCESSとC#の使える俺が一番偉いんかったんや!!
185デフォルトの名無しさん:2009/11/07(土) 15:02:55
もっと面白い事言えんのかね
186デフォルトの名無しさん:2009/11/07(土) 15:05:06
名前欄に中学生とか書いちゃうような人に期待するだけ無駄
187デフォルトの名無しさん:2009/11/07(土) 15:30:03
>>183
うおおお 神! ばっちりでした!
188デフォルトの名無しさん:2009/11/07(土) 15:49:36
ちなみに>>171の変更は必要ですか?
189デフォルトの名無しさん:2009/11/07(土) 16:21:54
>>183
1つ目必要ないし
190デフォルトの名無しさん:2009/11/07(土) 16:45:42
>>188
必要。

>>189
ああっっ、いらんわ確かに。
191デフォルトの名無しさん:2009/11/07(土) 17:15:24
AxWindowsMediaPlayerを使い音楽ツールを作っているのですが、
プレイリストを作り順再生/ランダム再生を行おうと思い、
AxWMP.currentPlaylist.appendItem(newsong);
こうすれば追加は可能ですが、
何番目の曲をプレイリストから削除することや、
現在プレイリストに入ってる曲をリストボックスに表示する方法が分かりません。
プレイリストを配列で取得・・・できるようなメソッドはありませんよねぇ・・・
192デフォルトの名無しさん:2009/11/07(土) 17:27:17
SDK見ただけだけど
IWMPPlaylist.Item (VB and C#)
The Item property (the get_Item method in C#) gets an interface to the media item at the specified index.
とか
IWMPPlaylist.count (VB and C#)
The count property gets the number of media items in a playlist.
とか
IWMPPlaylist.removeItem (VB and C#)
The removeItem method removes the specified media item from the playlist.
とかあるけど、駄目なのか?
193デフォルトの名無しさん:2009/11/07(土) 20:48:35
>>189
ありがとうございます
>>190
了解です ありがとうございました
194デフォルトの名無しさん:2009/11/07(土) 20:48:51
Graphics
195デフォルトの名無しさん:2009/11/07(土) 20:50:44
お、やっと解除された。
>>173
モバイル環境で開発してるみたいだけど、PixtureBoxもGraphicsも使えるんだろ?
そしたら拡大だろうが回転だろうがその範囲で自由にできると思うんだけど。
なぜそれくらいでゴリゴリベタなバイナリを触ろうとするのかがよく分からないな。
196デフォルトの名無しさん:2009/11/07(土) 21:22:53
CompactFrameworkには回転もアフィン変換も無いんだよ
197デフォルトの名無しさん:2009/11/07(土) 22:18:40
RectangleFとかPointFとかfloat座標使えないし、コンストラクタのオーバーロードも
軒並みアウトで作ってからシコシコとプロパティ設定とかだしな。
まあしかし、手作り感がたまらないという。なんというかマゾヒズム?
198デフォルトの名無しさん:2009/11/07(土) 22:43:07
VisualStudioのc#で実行したら
binのDebutにexeができて
ビルドを選んだらReleaseにexeができるけど

ビルドで作られたexeとDebugのexeはなんか違いあるの?
199デフォルトの名無しさん:2009/11/07(土) 22:49:54
それは自分で設定する。最適化の有無とかDEBUG定数の定義とか。
200デフォルトの名無しさん:2009/11/07(土) 23:03:37
まあC#の場合は大した違いはない
201デフォルトの名無しさん:2009/11/08(日) 06:31:04
191です
AxWMPのプレイリスト機能を使うのではなく、
配列でプレイリストのかわりにURIを持ち、
PlayStateChangeイベントハンドラで
再生終了後、配列から次のURIを読むようにしているのですが、
axwmp.Ctlcontrols.stop();
axwmp.URL = SongsPlaylist[i].ToString();
axwmp.Ctlcontrols.play();
この最後のplayメソッドが働らいていないようです。
これはどうすれば良いでしょうか?
202デフォルトの名無しさん:2009/11/08(日) 09:07:22
BeginInvokeでplayの呼び出しを遅延させる
203デフォルトの名無しさん:2009/11/08(日) 13:02:12
>>202
ありがとうございます。
URIが送られてPlayStateChangeイベントが発生したからのようですね。
初歩的なことでした;ありがとうございました。
204デフォルトの名無しさん:2009/11/08(日) 14:49:35
VB、C#とやってるんですが、
次手を出すなら何が良いと思いますか?
205デフォルトの名無しさん:2009/11/08(日) 14:54:52
他の言語に手を出す前に、VB と C# を究めたら?
206デフォルトの名無しさん:2009/11/08(日) 14:55:24
何がやりたいかによるんじゃ?
.NETつながりでIronPython、、つまりPythonとかどうよ
207デフォルトの名無しさん:2009/11/08(日) 14:55:35
>>204
プログラミング言語はプログラムを作る道具であって、
それに手を出すこと自体に意味があるわけではないよ。

とはいえ異なるプログラミング言語に触れることで思考の引き出しは増えていくので、
暇があるときに他の言語を試してみるというのも悪い話ではない。
208デフォルトの名無しさん:2009/11/08(日) 15:02:31
繋がり重視ならIronPython。
引き出しを増やすならHaskellを勧める。
209デフォルトの名無しさん:2009/11/08(日) 15:11:46
色々触るのもいいけど、ひとつを極めるのも面白いと思う
210デフォルトの名無しさん:2009/11/08(日) 15:49:13
.NET Compact Frameworkネタでもうひとつお願いします
キーロックと画面を横にしたりするのを実装したいんですが
どうしたらいいんでしょうか?
さっきから探してるんですがヒントさえ見つかりません
211デフォルトの名無しさん:2009/11/08(日) 15:55:48
言語なんてどうせ手段なんだし極めるもなにもないような・・・
オブジェクト指向を極めたぞ!とかならまだしも。
212デフォルトの名無しさん:2009/11/08(日) 16:08:07
だよな
いかに優れたアプリケーションを作るかの方が大事だよ
213デフォルトの名無しさん:2009/11/08(日) 16:14:38
C#極めたってのがどのレベルを指すのかはわからんけど(言語仕様の把握??)
.NETを極めたぞ、とかならそれなりに意味があると思う。
それだけでも仕事取れるんじゃない?
214デフォルトの名無しさん:2009/11/08(日) 16:15:18
いやいや、例えば車にだって低回転時のトルクがどうとかステアリングがどうとか
車種によって特性があるじゃないか。

車なんてどうせ手段だし極めるもなにもないような・・・
運転を極めたぞ!とかならまだしも。

と、特定車のスレで言い放っているのと同じだぜ、それ。
215デフォルトの名無しさん:2009/11/08(日) 16:15:26
自分で言ってておかしいと思わないのかな
手段を極めることとは、すなわち生産性を高めることだろ
216デフォルトの名無しさん:2009/11/08(日) 16:16:05
>>211
>オブジェクト指向を極めたぞ!
すごく胡散臭さを感じるw
217デフォルトの名無しさん:2009/11/08(日) 16:19:44
極めるなんて言う程奥深いか?
生産性高めるのって言語に対する習熟より他の部分に依る部分の方が大きくない?
218デフォルトの名無しさん:2009/11/08(日) 16:21:01
極めるとか高校生が言いそうですね
219デフォルトの名無しさん:2009/11/08(日) 16:21:34
>>217
よくわかってないなら黙ってろカス
お前がC#の深さを全然知らんだけだろ
220デフォルトの名無しさん:2009/11/08(日) 16:24:40
C#の深さwwww

マジレスすると、VB、C# ってきたらあとはPython、Perl、Rubyあたりのスクリプト言語に慣れとくと
色々便利じゃないかね。
221デフォルトの名無しさん:2009/11/08(日) 16:25:46
言語を究めたって言われてもいまいちイメージできない
その言語つかって思い通りのソフト作れるってこと?
222デフォルトの名無しさん:2009/11/08(日) 16:31:54
だとしたらだいぶ浅いな。
223デフォルトの名無しさん:2009/11/08(日) 16:35:51
エスパーレスが出来ることだろ
224デフォルトの名無しさん:2009/11/08(日) 16:43:11
自分で処理系作れたらおk
225デフォルトの名無しさん:2009/11/08(日) 16:55:32
極めたっつったら、その言語のコンパイラーを自作しちゃうくらいの勢いだな
226デフォルトの名無しさん:2009/11/08(日) 17:00:08
言語極めててもその言語のコンパイラは作れないだろ。
もっと別種の知識が必要で、それさえあればあとはその言語の仕様書さえあれば
極めてなくても作れると思うぞ。

227デフォルトの名無しさん:2009/11/08(日) 17:19:49
ネタだろw
228デフォルトの名無しさん:2009/11/08(日) 17:20:48
C# を極めてもねぇ…。
極めるってほどじゃないと思う。

言語を極めてもクラスライブラリを使いこなせなけりゃ意味ないんだから
.NET の CLR と クラスライブラリを極めないと…。
229デフォルトの名無しさん:2009/11/08(日) 17:23:43
コアとあなたは、クラスメイト♪
230デフォルトの名無しさん:2009/11/08(日) 17:26:56
CLRの理解を深めるといい。
231デフォルトの名無しさん:2009/11/08(日) 17:47:24
Form_Load後、300ミリ秒程度間を開けて処理をしたいのですが、
それだけのためにtimerを利用するのもどうかと思いますし、
同じスレッドで他の処理はしたいので、Threading.Thread.Sleepは使えません。
こんな時に使えるモノはないでしょうか?
232デフォルトの名無しさん:2009/11/08(日) 17:48:10
C#極めましたっていったらまあ.NET極めましたって意味に取っちゃうかな
233デフォルトの名無しさん:2009/11/08(日) 17:50:43
>>231
Timerでいいよ
234デフォルトの名無しさん:2009/11/08(日) 17:51:58
よっぽどヒマならアセンブラ辺りやっとけば。
その上でネイティブの C をちゃんと覚えれば無敵状態になれるかもよ。
235デフォルトの名無しさん:2009/11/08(日) 17:57:07
ネイティブのCって開発環境無いよね
236デフォルトの名無しさん:2009/11/08(日) 18:00:56
いくらでもあるだろ。
237デフォルトの名無しさん:2009/11/08(日) 18:06:31
>>231
用途に合うかどうかは知らないが、
フォームの表示が済んだらすぐ程度でよかったらShownイベントでいいんでない?
238デフォルトの名無しさん:2009/11/08(日) 18:24:00
プロパティの get 内でウェブアクセスして情報取得をしたいのですが、問題ありますでしょうか?
それともメソッドにすべき?
239デフォルトの名無しさん:2009/11/08(日) 18:44:04
>>237
それは試してましたが、
Loadから呼ばれる関数内から300ミリ待たせたかったので、
Shownだと早すぎてアウトみたいです。
とりあえず暫定的にタイマー使っておこうかと思います。
240デフォルトの名無しさん:2009/11/08(日) 19:45:54
>>238
さすがにそれは絶対ダメ
メソッドどころか専用のクラス作ってもいいくらいだ
241デフォルトの名無しさん:2009/11/08(日) 20:31:19
>>240
だめですか・・・
大人しく SetXX と IsXX を作ります。

ガイドライン見てみるとたしかに書いてありますね。
http://msdn.microsoft.com/ja-jp/library/ms229054.aspx より
>以下の場合は、プロパティではなくメソッドを使用してください。
> 操作がフィールド セットの場合よりも格段に低速の場合。
> スレッドのブロックを避けるために非同期バージョンの操作を提供することも検討している場合は、
> プロパティでは操作の負荷が大きくなりすぎる可能性があります。
> 特に、初期化時以外にもネットワークやファイル システムにアクセスする操作は、
> 多くの場合、プロパティではなく、メソッドにする必要があります。

多くの場合って書いてあるけど、例外的にOKな場合もあるんだろか・・・
242デフォルトの名無しさん:2009/11/08(日) 20:38:40
バインディングやリフレクションの都合でどうしてもプロパティにしたい場合はあるだろうな
243デフォルトの名無しさん:2009/11/08(日) 20:49:39
じゃあ、form上の複数のコントロールのenable値を変えたい時にプロパティで設定するのはおk?
244デフォルトの名無しさん:2009/11/08(日) 21:27:07
>>243
論理値でだとすると微妙。
一度にfalse/trueにする機能ならメソッド推奨。
複数コントロールのenable値の組み合わせは論理値じゃ返せないだろうし、
そしてget無しのset専用プロパティはガイドライン違反だから。
※ 無理矢理にでも返すとか言い出すなら「ご勝手に」かな。
245デフォルトの名無しさん:2009/11/08(日) 22:22:27
副作用起こすプロパティ作って、うまいことやった気になるのは初心者によくあること
HogeControl.Enadled = true; これで他のコントロールが無効になったり
ネットワーク通信始めるようになったら、次にソース見たときに
それが本当に何をやっているのか中まで全部見ないと理解できないものになる
小さいプログラムのうちはなんとかなるが、大きくなるにつれて
たまねぎの皮を剥くような精神力の戦いに引きずり込まれることになる
246デフォルトの名無しさん:2009/11/08(日) 22:28:51
>>245
どういう意味で「副作用」と言っているのか不明瞭な気がするが、
それは抽象化と命名が適切かどうかという問題であって、
「それ」がプロパティかメソッドか、という問題ではないと思うが。
247デフォルトの名無しさん:2009/11/08(日) 22:50:25
メソッドは操作、プロパティはデータを表すのが一般的だとガイドラインに明記
されているし、俺もそう思う。
抽象化と命名の問題かもしれないが、区別して使うに越したことはない。
248243:2009/11/08(日) 22:51:48
>>244
一括ではない。
組み合わせをcase式で処理してる。
さらにいえば、それは親フォームにある共通のコントロール。
getsetで渡す値はenumな値で表示モードです。
子フォームからgetsetして共通コントロールの制御を親のプロパティで行い、子は自formのコントロールの制御をおこなう。
状態としてコントロールの管理をしたかったんた゛。
249デフォルトの名無しさん:2009/11/08(日) 23:09:08
>>248
それは別にいいんじゃないの?
250デフォルトの名無しさん:2009/11/08(日) 23:10:25
それはイベント使った方がいい気がする
せっかく親フォームを抽象化しようとしているみたいなのにもったいない
251デフォルトの名無しさん:2009/11/08(日) 23:38:54
XmlSerializerでメンバをシリアライズ/デシリアライズする際、
独自の日付方式で書かれた文字列をDateTimeに変換したい場合に
属性のみの記述で変換することは不可能でしょうか?
それとも大人しくラッパークラスを作るしかないんでしょうか?

・日付文字列(W3Cで定義された形式とは違う)
Sat Jan 24 22:14:29 +0000 2009

・メンバ
[System.Xml.Serializer.XmlElement("date")]
public DateTime Date {get; set;}



252デフォルトの名無しさん:2009/11/09(月) 00:01:57
>>251
言ってることが支離滅裂に聞こえる。
独自の日付方式で書かれた文字列って何?

>public DateTime Date {get; set;}
このプロパティの型はDateTimeであって文字列ではないと思うけど。
253デフォルトの名無しさん:2009/11/09(月) 00:05:29
>>252
カスは黙ってろ
254ISO 8601:2009/11/09(月) 00:09:55
まあ、アメちゃんに国際規格とか言っても、北米が全世界で他は異世界と思ってるしな。
255デフォルトの名無しさん:2009/11/09(月) 00:29:33
DateTimeは構造体ダス
256251:2009/11/09(月) 00:30:22
>>252
XML上の「文字列」をDateTime型のプロパティにデシアライズしたい、というわけです。
その際、W3Cで定義された形式の日付文字列は特になにもしなくてもDateTime型に相互変換出来るんですが、
>>251 で挙げてるようなW3C標準じゃない形式の場合は変換してくれないんですよ。

で、属性にフォーマット指定したり変換用のデリゲートとかクラス指定したりして
シンプルに書く方法はないのかなぁと・・・

>>254
REST API実装してるアプリが返す日付形式って結構ばらばらな上適当ですよねぇ。
257デフォルトの名無しさん:2009/11/09(月) 00:36:45
DateTimeの書式を決めるカルチャ設定はスレッドごとに云々
DateTimeFormatInfo使えんかね
258デフォルトの名無しさん:2009/11/09(月) 00:39:13
>>256
そういうことなら、(当たり前のこと言うなと思うかもしれないけど)

>public DateTime Date {get; set;}
このプロパティにはXmlIgnore属性をつけておいて、このプロパティの値を
「独自の日付方式」の文字列で設定/取得するデシリアライズ用のダミーの
プロパティーを用意するだけじゃないの?
259251:2009/11/09(月) 01:04:58
>>257
シリアライザの方はカルチャ設定の書式ではなくW3Cの仕様にしたがって変換してるみたいです。

>>258
そうするとパブリックな日付のプロパティが2つ出来てしまうわけですよね。
あんまり無駄なパブリックメンバは作りたくないというのが正直なところです・・・

とりあえず、IXmlSerializable を実装した DateTime の子クラスを作って使うことにしてみます。
W3C規定の形式以外はこれが正解になるんだろか?
260251:2009/11/09(月) 01:07:02
って、DateTime は継承出来ませんね・・・
261デフォルトの名無しさん:2009/11/09(月) 01:09:13
それは255で既に指摘されてるじゃん
262251:2009/11/09(月) 01:30:57
ググったところ、
DateTimeをラップして IXmlSerializable を実装するクラスを書くか
日付のプロパティ持ってるクラス自体で IXmlSerializable を実装して
他のプロパティでも属性使って楽するのを放棄するかの2パターンぐらいみたいですね。

うう、なんかすっきりしないなぁ。
263デフォルトの名無しさん:2009/11/09(月) 09:07:39
以下のようなクラスがあった場合

public class A {
public A(string id) {...}
public string Id {get; set;}
}

public class B {
public B(string id) {...}
public string Id {get; set;};
}

A.Id と B.Id がお互い代入出来なくするためにはそれぞれクラスや構造体(AidとかBidみたいな)を
作るしかないのでしょうか?
264デフォルトの名無しさん:2009/11/09(月) 10:46:30
>>263
イマイチ意図が読み取れないけど
GETだけのプロパティアクセスはだめなの?
265デフォルトの名無しさん:2009/11/09(月) 12:37:34
>>264
Cのtypedefみたいなことがしたかったんですが、C#のusingだと別名なだけで
相互に代入してもコンパイルエラーにはならないみたいですね。

やりたかったことは、以下でした
・A.IDとB.IDはお互いに採番体系が異るのでコード中で混ざらないようにしたい
(コンパイラにミスを見つけさせたい)
・ID自体にはメソッドもプロパティも不要なのでなるべくクラスは作りたくない
・プロパティはセッタもゲッタも必要

一番目か二番目を妥協するしかないのかしらん
266デフォルトの名無しさん:2009/11/09(月) 12:50:14
えっ
267デフォルトの名無しさん:2009/11/09(月) 12:50:38
ますますわからんw
268デフォルトの名無しさん:2009/11/09(月) 12:59:22
メリットがいまいちわからんな…
269デフォルトの名無しさん:2009/11/09(月) 13:15:18
>>210です
ロケーションの変更は
http://msdn.microsoft.com/ja-jp/library/cc825750.aspx
でわかったんですがキーロックの方法がわかりません
画面コピーしたモーダルウィンドウを全画面で出すとかですかね?
イベントをおおもとでキャッチしてしまえばいいんですが
作成しているのがコントロールオブジェクトなので親のイベントを
横取りするのも作法としてどうなのかと思いますし、方法もわかりません
ご意見をお願いします
270デフォルトの名無しさん:2009/11/09(月) 13:41:33
>>269
通常はAPIのSetWindowsHookExを呼んでキーボードフック(WH_KEYBOARD_LL)でやるんだけど
WMだとどうかな。一応、非公式でこのAPIそのものはあるみたいだが。
271デフォルトの名無しさん:2009/11/09(月) 13:58:57
>>268
たとえば、A.IDとB.IDを受けとってなにかするメソッドHogeがあったとして、
> public static void Hoge(string aId, string bId) {....}
コーディング中に第一引数と第二引数が逆になっちゃってもコンパイル時にはねて欲しいんですよ。
この場合はプロパティを直接渡すんじゃなくてクラスで渡せば問題ないですが。
272デフォルトの名無しさん:2009/11/09(月) 14:16:40
typedefってエラーになったんだっけ?
273デフォルトの名無しさん:2009/11/09(月) 14:21:42
>>272
俺も疑問に思ったんで今試したが普通に通るな。警告すらでなかったぞ。
#cygwinのgccで警告最大でコンパイルした結果。彼は何か勘違いしてる気がする。
274デフォルトの名無しさん:2009/11/09(月) 14:23:56
クラス(とかstruct)で渡せばいい話じゃない
275デフォルトの名無しさん:2009/11/09(月) 14:28:08
IDだけのクラス作ってもいいと思うよ
IDクラスからAIDとBID継承させるとか
276デフォルトの名無しさん:2009/11/09(月) 14:40:14
>>273
VC++のclで警告レベル最大でコンパイルしても警告出ないね
277デフォルトの名無しさん:2009/11/09(月) 14:44:43
C#やJavaは基本型もオブジェクトとして扱っていることが優れた言語仕様だと思うし
intという抽象度で表現出来る範囲を逸脱したオブジェクトなら専用のクラスにすべきだと思う
278デフォルトの名無しさん:2009/11/09(月) 14:59:05
> 基本型もオブジェクトとして扱っている

思いっ切り間違ってるんだが
279デフォルトの名無しさん:2009/11/09(月) 15:06:32
Javaとは違うのだよ、Javaとは
280デフォルトの名無しさん:2009/11/09(月) 15:07:57
構造体なんか廃止すればいいのに
281デフォルトの名無しさん:2009/11/09(月) 15:08:37
>>270
ありがとうございます
一度キーワードがわかると情報がざくざくあつまってきますね
SetWindowsHookExを読んでフックする方法の弱点として
フックを登録できるのが1つだけのようです
なので他のアプリが使ってたら不具合が出たりするようです

サブクラス化というキーワードも出て来ましたが、これは
フックするというより盗み見するだけですか?

情報が集まったので方針を決めたいと思います
ありがとうございました
282デフォルトの名無しさん:2009/11/09(月) 15:22:43
そんなことないです
グローバルフックもローカルフックもCallNextHookExってのを使ってチェーン状に管理しています

サブクラス化はイベントの起動に利用するだけでメッセージ潰したりはできません
283デフォルトの名無しさん:2009/11/09(月) 16:18:57
まあキーロックが目的なら握りつぶすわけで、どんな方法でも
他のキー入力当てにしてるプロシージャに影響出ないわけないなw
284デフォルトの名無しさん:2009/11/09(月) 16:41:18
private ContextMenuStrip cms_tasktry = new ContextMenuStrip();
と自分で書いて関連付けた時に最初のクリックではメニューが表示されず
二回目以降にしか表示されるのですがこれを最初のクリックで表示する
方法はないでしょうか?。

また以下のように書いた場合にexitをクリックしてもタスクトレイのアイコンが
消えないのですが、これを消えるようにできないでしょうか?。

private NotifyIcon tasktry = new NotifyIcon();
cms_tasktry.Items.Add("Exit").Click += delegate(Object obj, EventArgs ea)
{
tasktry.Visible = false;
Close();
};
285デフォルトの名無しさん:2009/11/09(月) 16:55:53
tasktry.Dispose() 呼んだらどうかな。
286デフォルトの名無しさん:2009/11/09(月) 17:00:44
って>>284のだけで1回のクリックでメニュー出るし終了時に消えたけど。
環境は?
287デフォルトの名無しさん:2009/11/09(月) 17:13:22
Openingで書いているせいでしょうか?

private void Form1_Load(object sender, EventArgs e)
{
cms_tasktry.Opening += new System.ComponentModel.CancelEventHandler(cms_Opening);
}
private void cms_Opening(object sender, EventArgs e)
{
cms_tasktry.Items.Add("Exit").Click += delegate(Object obj, EventArgs ea)
{
tasktry.Visible = false;
Close();
};
}

>>285
だめでした

>>286
XP Ver2010 SP3
VC2010
です。
288デフォルトの名無しさん:2009/11/09(月) 17:50:25
Openingでやってる理由は?
Load時に一緒にやればいいじゃない。
アイコン消えない理由はそれとは違うようだが。
289デフォルトの名無しさん:2009/11/09(月) 17:57:06
>>288
ログイン処理した時にメニューを書き換えているからですがnameでTextを
書き換えたり非表示にしたりする手もありますね。
290デフォルトの名無しさん:2009/11/09(月) 18:05:13
まあ何回かやってみたけど、Openingイベント時にメニューが1つもないと出ないね。
その時に追加しても遅いみたい。
291デフォルトの名無しさん:2009/11/09(月) 18:07:18
>>290
!するとLoad時にゴミを1つつけておけばいいのかな
試してきます
292デフォルトの名無しさん:2009/11/09(月) 18:07:30
de?
293デフォルトの名無しさん:2009/11/09(月) 19:50:07
System.Threading.Thread.Sleep(3000);
this.Storyboard1.Begin();

このコードは3秒待つまで2行目は実行されないですよね?
294デフォルトの名無しさん:2009/11/09(月) 19:56:29
試せば?
295デフォルトの名無しさん:2009/11/09(月) 20:09:24
普通、次の行の処理はしないと思うんですが、2行目の処理が3秒飛ぶんです。
あり得ますか?
296デフォルトの名無しさん:2009/11/09(月) 20:15:24
飛ぶなんて俺様用語で言われても
飛びます飛びますってかw
297デフォルトの名無しさん:2009/11/09(月) 20:26:18
GUIのスレッドでSleepしちゃダメだよ
Storyboard使ってるんだったら3秒後にアニメーションをスタートするアニメーションを作れるだろ
298デフォルトの名無しさん:2009/11/09(月) 20:30:18
記事クラスと、記事のコレクションである掲示板クラスがあるとして、
記事の削除メソッドを実装するとしたら記事クラスと掲示板クラスの何方が適当でしょうか?
299デフォルトの名無しさん:2009/11/09(月) 20:32:12
クラスってなんですか?
300デフォルトの名無しさん:2009/11/09(月) 20:36:00
掲示板クラスの方に実装するのが適当
301デフォルトの名無しさん:2009/11/09(月) 20:36:00
>>297
GUIのスレッドではSleepは機能しないと覚えておけばいいんですか?
この3秒にSleepではなく処理を入れたいんですが、
まさかGUIスレッドの中では同時に処理できる行はガンガン並行処理して次の行、次の行が実行されていくんでしょうか?
めちゃくちゃなんですけど
302デフォルトの名無しさん:2009/11/09(月) 20:41:43
GUIだとGUI自体の機能もSleepした後でその後の文が実行される
303デフォルトの名無しさん:2009/11/09(月) 20:42:09
>>301
お前の頭がむちゃくちゃだよ
304デフォルトの名無しさん:2009/11/09(月) 20:42:17
違う。スリープさせるとGUIがフリーズするからやってはいけない。
this.Storyboard1.Begin();は絶対に3秒経過するまで実行されない。その間GUIはフリーズする。
基本的にSilverlightは(Silverlightのスレに書き込んでるだろ)GUIスレッドでのSleep禁止ということになってるから
何が起こっても文句は言えない。WPFやSilverlightのアニメーションは時間に依存するからややこしい。
305デフォルトの名無しさん:2009/11/09(月) 20:47:00
WMPコンポーネントを使ってmp3プレイヤーを作っているのですが、
WMP9からWMP11にアップデートすると、
そのソフト自体の起動や処理が重くなったように感じます。
これは仕方無い事なんでしょうかね?
306デフォルトの名無しさん:2009/11/09(月) 20:58:28
自分でデコードしてDirectSoundで鳴らしたら
307デフォルトの名無しさん:2009/11/09(月) 21:10:12
お前のプログラムがめちゃくちゃなんだろうよ
308デフォルトの名無しさん:2009/11/09(月) 21:10:16
DirectSoundはプレイステータス変更時のようなイベントハンドラは提供されてますか?
それが無いと不便で不便で・・・
309デフォルトの名無しさん:2009/11/09(月) 21:16:33
>>304
silverlight限定の仕様だったんですね
FormGUIの基本なのかと思っちゃいました。
silverlightと書き込まなかったので一生解決できないところでした
ありがとうございます!
310デフォルトの名無しさん:2009/11/09(月) 21:19:55
>>308
いやDirectSoundって自分でバッファに波形データを直接書き込んでいくんだぞ
何でもできるが何もできない

>>309
Silverlightに限らずGUIで時間のかかる処理をしてはいけない。
一応WPFやWinFormsではそれによってGUIがフリーズするのを回避する方法が用意されてるけど
やらないに越したことはない。
Silverlightに限ってはそういう回避方法が無いので絶対ダメ。
311デフォルトの名無しさん:2009/11/09(月) 21:19:55
めちゃくちゃとむちゃくちゃってなにか違うの?
312デフォルトの名無しさん:2009/11/09(月) 21:27:16
>>310
ありがとうございます。
DirectSoundで調べてみたいと思いますが、なんだか難しそうですね。。
313デフォルトの名無しさん:2009/11/09(月) 21:43:18
滅茶苦茶
無茶苦茶
滅無
314デフォルトの名無しさん:2009/11/10(火) 00:09:25
C#でメッセンジャーみたいな物を制作しようと思い、
サーバーの部分だけ作ってみてビルドして、実行するとフリーズしてしまうんですが、
原因が分かりません。教えていただけないでしょうか?初心者ですいません。
  public void ServerStart()
  {
System.Text.Encoding enc = System.Text.Encoding.UTF8;
int port = 9991;
TcpListener listener =new TcpListener(IPAddress.Parse("127.0.01"), port);
listener.Start();
TcpClient tcp = listener.AcceptTcpClient();
NetworkStream nss = tcp.GetStream();
MemoryStream mss = new MemoryStream();
byte[] resBytes = new byte[256];
int resSize;
do
{
resSize = nss.Read(resBytes, 0, resBytes.Length);
if (resSize == 0)
{
textBox2.Text = ("クライアントが切断しました");
//Console.ReadLine();
return;
}
mss.Write(resBytes, 0, resSize);
} while (nss.DataAvailable);
string resMsg = enc.GetString(mss.ToArray());
textBox2.Text = resMsg;
      mss.Close();
   }
315デフォルトの名無しさん:2009/11/10(火) 00:27:45
TcpListener.AcceptTcpClientメソッド
AcceptTcpClient は、データの送受信に使用できる TcpClient を返すブロッキング メソッドです。ブロックしないようにする場合は、Pending メソッドを使用して、接続要求が受信接続キュー内で使用可能かどうかを確認します。
ではないのか?
316デフォルトの名無しさん:2009/11/10(火) 00:47:28
>>315
解決できるかどうか分かりませんが、Pending メソッドについて調べてきます。
317デフォルトの名無しさん:2009/11/10(火) 02:15:12
たとえPendingで確認しても、GUIスレッドで処理してたらクライアントが切断するまで止まるじゃん
318デフォルトの名無しさん:2009/11/10(火) 09:40:49
非同期処理にしろよ・・・・
319デフォルトの名無しさん:2009/11/10(火) 09:43:53
クライアントからの切断は取れたり取れなかったりするからね
320315:2009/11/10(火) 15:30:23
>>317
>>318
>>319
コメントありがとうございます。
非同期通信についても調べてみます
321314:2009/11/10(火) 15:31:37
↑314でした。すいません><
322デフォルトの名無しさん:2009/11/10(火) 15:48:23
非同期通信と通信での非同期処理は別の話だからなw
323デフォルトの名無しさん:2009/11/10(火) 18:05:30
流石に一緒にする奴はいないと思うぞwwww
324デフォルトの名無しさん:2009/11/10(火) 18:08:54
>>284 は kb135788 かな
325デフォルトの名無しさん:2009/11/10(火) 18:09:09
ここにいるぞ
326デフォルトの名無しさん:2009/11/10(火) 20:32:36
BackgroundWorker_DoWorkでList<>.Sortを実行中にキャンセルボタンをおされたらを処理を中止したいんですが
何かいい方法ないですか?
自分でループしてる処理ならBackgroundWorker.CancellationPendingをチェックして終了すれば
いいけど、List<>.Sort の実行中は何もできないんで。

次の様な処理書いてます。

private void backgroundWorker1_DoWork( object sender, DoWorkEventArgs e ) {
  BackgroundWorker worker = sender as BackgroundWorker;
  List<string> list = new List<string>();
  Random random = new Random();
  for( int i = 0; i < 1000000; i++ ) {
    if( worker.CancellationPending ) {
      e.Cancel = true;
      return;
    }
    list.Add( string.Format( "{0}";, random.Next( 1, 1000000 ) ) );
  }
  list.Sort( delegate( string s1, string s2 ) {
    return int.Parse( s1 ).CompareTo( int.Parse( s2 ) );
  } );
  e.Result = list;
}
327デフォルトの名無しさん:2009/11/10(火) 20:46:48
デリゲートとか何の役にたつんだよぽ
328デフォルトの名無しさん:2009/11/10(火) 20:57:43
なきゃないで問題ない
329デフォルトの名無しさん:2009/11/10(火) 21:21:54
デリゲートなかったらメソッド持ってるクラス渡すか継承して実装するかの二択になるからなぁ。
330デフォルトの名無しさん:2009/11/10(火) 21:35:48
>>346
yield
331デフォルトの名無しさん:2009/11/10(火) 21:38:01
おっ、書けた。
>>326
yield を使って止められるようにすればいい。
貼ったソースはWorker操作のためのサンプルだと理解しているが、
もし本気コードならいちいちintに変換しながら比較するなんて馬鹿なことはやめたほうがいいぞ。
一括でソート済みsetに放り込んで再び取り出したほうがよほど速い。
332デフォルトの名無しさん:2009/11/10(火) 21:42:18
yieldでどうやってlist.Sortを止めるんだよ
無理矢理止めるならlist.Sortに渡すコールバック内で例外投げるくらいしかないと思う
333デフォルトの名無しさん:2009/11/10(火) 21:54:47
現在アクティブなコントロールが、どの型か調べて
型に応じて動作を行うというものを作っております

たとえば、WebBrowserならMessageBox.Show("WebBrowser","種類");
みたいな感じで


アクティブなコントロールをthis.ActiveControlで取得まではできるのですが
その取得したコントロールの型同士を比較するにはどうすればいいでしょうか
334デフォルトの名無しさん:2009/11/10(火) 22:00:45
あるオブジェクトが特定の型かどうかを調べるにはisを使う
あるオブジェクトの型名などを取得するにはGetType
335デフォルトの名無しさん:2009/11/10(火) 22:03:50
>>334
if(this.ActiveControl is WebBrowser)
で比較できましたありがとうございました
336デフォルトの名無しさん:2009/11/10(火) 22:05:32
ボタンをショートカットに対応させたいんだけど
ボタンをクリックしたことにするにはどうすればいいでしょーか
337デフォルトの名無しさん:2009/11/10(火) 22:05:49
あらま
さげわすれごめんなさい
338デフォルトの名無しさん:2009/11/10(火) 22:18:56
そんなことしなくてもボタンのTextの最後に&Xを付けるだけ(Xは任意のショートカットキー)
339デフォルトの名無しさん:2009/11/10(火) 22:23:24
フォームかコントロールでキーイベント拾ったら?
340デフォルトの名無しさん:2009/11/10(火) 22:24:53
あーあー、あったな、そんな機能。
341デフォルトの名無しさん:2009/11/10(火) 23:45:23
WebBrowserで送信する内容を取得したりすることってできますか?
主にヘッダーのことですが
342デフォルトの名無しさん:2009/11/10(火) 23:53:45
WinPcap
343デフォルトの名無しさん:2009/11/11(水) 00:00:42
>>342
すいません、WebBrowserコントロールの話ですorz

マイクロソフトのWebBrowserは便利ではあるのですがなかなか使いづらい・・・
使用制限の無い便利なブラウザコントロールないかなあ・・・・
344デフォルトの名無しさん:2009/11/11(水) 01:17:34
関係ないが >>343 ってVIPのスレにも来てなかったか?
345デフォルトの名無しさん:2009/11/11(水) 01:19:43
IEだろうとWebBrowserだろうと普通にネットワーク経由するなら取得できるじゃん
346デフォルトの名無しさん:2009/11/11(水) 01:21:35
>>344
ここで答えもらえなかったから行ったんじゃないの?
ほんと関係ないな
347デフォルトの名無しさん:2009/11/11(水) 23:45:59
System.Xml.Linq.XElement.Load メソッドで発生する全例外について知る方法はありますか?
MSDNに例外情報は記載されていなかったのですが、System.IO.FileNotFoundExceptionが発生しました。
System.IO.IOExceptionを継承した例外やArgumentNullException等が起きると予想できますが、
他にも発生しますか?
348デフォルトの名無しさん:2009/11/11(水) 23:58:59
XLINQでは,読み込みは基本的にXmlReaderに準じる
ArgumentExceptionやInvalidOperationの派生型が発生する場合は
使い方に問題があるということだから原則キャッチ禁止
349デフォルトの名無しさん:2009/11/12(木) 00:05:31
>>347
目的でアドバイスが変わる
現段階のという条件をつければ解析して
可能かもしれないという話は別にして
350デフォルトの名無しさん:2009/11/12(木) 00:16:01
ドキュメントに書いてないということは仕様として決まってないということなので
解析してキャッチしたりするのはあんまり良くないな
XElement.Load(string)はファクトリーメソッドということになってるXmlReader.Createに依存してるので
実際何やるかわからないんだよね
不安なら他のオーバーロード使ったほうが確実
351デフォルトの名無しさん:2009/11/12(木) 00:52:22
>>348-350
ありがとうございます

例外のStackTraceを見ると、
場所 System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings)
場所 System.Xml.Linq.XElement.Load(String uri, LoadOptions options)
場所 System.Xml.Linq.XElement.Load(String uri)
となっていましたが、Createメソッドの説明に無い DirectoryNotFoundException が発生しました

XmlReader.Create を直接呼び出しても DirectoryNotFoundException が発生しました
説明にあるFileNotFoundException と DirectoryNotFoundException には直接の継承関係は無いはずなのに

該当箇所は、何らかのエラーが発生したら、メッセージボックスを表示して強制終了する積りです。
352デフォルトの名無しさん:2009/11/12(木) 01:19:56
Windowsのアプリケーションを作るのは
Windows APIと.NETの二種類があるの?
Windows APIって.NETより難しいんでしょ?
353デフォルトの名無しさん:2009/11/12(木) 01:28:43
やる気が無い奴は消えろ
354デフォルトの名無しさん:2009/11/12(木) 02:08:30
C#で設計を学びたいのですが、何から手を付けたらいいんでしょう?
自分で考えたモデリングが正しい(あるいは悪くない)ことを客観的に測る指標などは存在するのでしょうか?

クラスを書くたびに間違ったことしてるんじゃないかと不安になります。
355デフォルトの名無しさん:2009/11/12(木) 02:13:21
間違ってるということは間違ったときに気付けば良いじゃないか
356デフォルトの名無しさん:2009/11/12(木) 02:23:02
こればかりは経験も必要だしな
357デフォルトの名無しさん:2009/11/12(木) 02:24:09
>>355
それだと動けばいいじゃん、になっちゃいません?
動くけど設計上よろしくない(拡張性/保守性がないとか)ってのをどうやって自分で認識したらいいんでしょう?
358デフォルトの名無しさん:2009/11/12(木) 02:28:06
C#でコンデンサー作った。電気がたまります
359デフォルトの名無しさん:2009/11/12(木) 02:31:00
たしかに「もっと優れたやり方があるのでは」って不安はあるわな
360デフォルトの名無しさん:2009/11/12(木) 02:37:41
多少のプログラム経験年数はあるが、完璧に満足したソースは無い
それが成長というものじゃないのかね
361デフォルトの名無しさん:2009/11/12(木) 02:41:00
ここらへんなんか読んでみたら?
http://labo.mamezou.com/special/sp_008/sp_008_001.html
362デフォルトの名無しさん:2009/11/12(木) 02:42:22
ここでそういう高尚なこと聞くのが間違いだろJK
363デフォルトの名無しさん:2009/11/12(木) 02:44:30
>>360
その"満足出来なかった"っていうのは何をどう評価して満足出来なかったんでしょうか?
そこらへんが肝な気がする。

364デフォルトの名無しさん:2009/11/12(木) 02:45:40
>>357
>それだと動けばいいじゃん、になっちゃいません?

ならないよ

間違ってるのに間違ったことに気付いていない場合や
判ってて直そうとしない場合はその限りではないが
自分で問題意識を持ち続けて常に改良を続けるのが
本来のオブジェクト指向的リファクタリングの発想
365デフォルトの名無しさん:2009/11/12(木) 02:53:54
莫大な金と人と時間をかけたOSですら日々アップデートなどしてるのに
完璧なソースだと?
366デフォルトの名無しさん:2009/11/12(木) 03:08:51
    _ □□    _      ___、、、
  //_   [][]//   ,,-―''':::::::::::::::ヽヾヽ':::::/、  誰  作   こ
//  \\  //  /::::::::::::::::::::::::::::::i l | l i:::::::ミ  だ   っ   の
 ̄      ̄   ̄/ /:::::::::,,,-‐,/i/`''' ̄ ̄ ̄ `i::;|  あ  た   ソ
―`―--^--、__   /:::::::::=ソ   / ヽ、 /   ,,|/   っ  の   |
/f ),fヽ,-、     ノ  | 三 i <ニ`-, ノ /、-ニニ' 」') !! は   ス
  i'/ /^~i f-iノ   |三 彡 t ̄ 。` ソ ハ_゙'、 ̄。,フ | )         を
,,,     l'ノ j    ノ::i⌒ヽ;;|   ̄ ̄ / _ヽ、 ̄  ゙i )
  ` '' -  /    ノ::| ヽミ   `_,(_  i\_  `i ヽ、 ∧ ∧ ∧ ∧
     ///  |:::| ( ミ   / __ニ'__`i |  Y  Y Y Y Y
   ,-"        ,|:::ヽ  ミ   /-───―-`l  |  //     |
   |  //    l::::::::l\    ||||||||||||||||||||||/  |     // |
  /     ____.|:::::::|    、  `ー-―――┴ /    __,,..-'|
 /゙ー、,-―'''XXXX `''l::,/|    ー- 、__ ̄_,,-"、_,-''XXXXX |
/XX/ XXXXXXXXXX| |         _,  /ノXXXXXXXXXX|
367デフォルトの名無しさん:2009/11/12(木) 03:50:51
>>363 経験的な先読み予想があって、「嗚呼本当はこういう構成にしたいんだけど
後で使わないかもしれないからオーバースペックにする必要も無いか」だとか
「今の構成だとこうした方が早道だ」とか
「正規化よりもリアリティ」だとか
色々あって理想通りにはいかない事なんてあるある探検隊

学校のテスト勉強と違って正解なんて相対的なものだ

何かに気づいて知ることで考え方やアプローチが広がるから、
経験無い内に全てを網羅した答えなんて得られないと言わざるを得ない
‥って言ってもあきらめろって意味じゃないのはわかるよな
368デフォルトの名無しさん:2009/11/12(木) 04:49:40
10年くらいかかりますか?
369デフォルトの名無しさん:2009/11/12(木) 05:08:13
それを知っているのは自分だけ
370デフォルトの名無しさん:2009/11/12(木) 07:48:48
自作のコントロールをデザイナで表示できるようにするにはどうすればいいですか?
タブコントロールを継承した、TabDXを作ったのですが
デザイナから直接これを使うことはできますか?
現状方法が分からず、一度普通のTabを配置して、TabDXにすべて置換するという作業を行っていますが
なんかとても頭悪いことをしているような気がしまして
371デフォルトの名無しさん:2009/11/12(木) 07:53:07
DesignTimeVisible でぐぐれ
372デフォルトの名無しさん:2009/11/12(木) 08:01:17
>>371
うああああああああああああああああああああああああああああああああああああ
今までコツコツ作ってきた200個近くのコントロールが全て表示されました
これで置換作業とはおさらばです!ありがとうございました!
373デフォルトの名無しさん:2009/11/12(木) 08:03:03
あ、あまりにもうれしすぎて忘れてた
クラス内に
public abstract bool DesignTimeVisible()
{ return true; }
を追加
それだけでした
374デフォルトの名無しさん:2009/11/12(木) 08:15:59
なんか関係無い俺でもうれしくなっちゃったw
375デフォルトの名無しさん:2009/11/12(木) 08:18:44
ちゃんと設計の勉強したらC#で彼女が出来ました
376デフォルトの名無しさん:2009/11/12(木) 08:29:10
>間違ってるのに間違ったことに気付いていない場合
これどうやったら間違いに気付くんだ?

>自分で問題意識を持ち続けて常に改良を続ける
その問題意識ってのが間違ってたらどうするんだ?

例えばドメインモデル貧血症なんかはどう考える?
全然問題無いじゃん!って言ってる人もいるけどそういう人達は間違ってるの?
それともそんな単語作りだした側が間違ってる?
377デフォルトの名無しさん:2009/11/12(木) 08:34:46
デザパタの本でも読むのがいいんじゃないかなー
GoFのじゃなく設計のパターンの方
仕事で設計してるならいいけど個人で作ってる場合は
本だのネットだの勉強会だのに頼るしかないね

ダメ出ししてくれる場が無いからつらいのう
378デフォルトの名無しさん:2009/11/12(木) 08:54:04
オープンソースのプロジェクトでも参加すればー
379デフォルトの名無しさん:2009/11/12(木) 09:01:12
方法はどうあれ適当な単位での切りわけさえできてれば破綻しない
個々が少々ダメでも他に影響しない限り問題ない
380デフォルトの名無しさん:2009/11/12(木) 09:11:22
ぶっちゃけ仕事じゃなく個人でやってるなら正しい設計なんて出来なくても問題ない。
外から見て問題のある動作するとかならともかく。

そんなことより楽しくて役に立つプログラムを素早く作れた方が評価されるよ。
381デフォルトの名無しさん:2009/11/12(木) 09:24:21
あるクラスを継承してさらにインターフェイスを実装ってできるんだっけ?

public class AAA: System.Windows.Forms : IHogeHoge

みたく
382デフォルトの名無しさん:2009/11/12(木) 09:27:32
>>381
public class AAA : System.Windows.Forms, IHogeHoge

もちょっと勉強しろよと
383デフォルトの名無しさん:2009/11/12(木) 09:33:52
>>382
サンクス

そういう風に実装する記述見当たらなかったんでちょっと聞いてみようとorz
頑張って勉強するよ
384デフォルトの名無しさん:2009/11/12(木) 09:41:44
間違ってるかどうかは環境によって変わることもある
間違いに気付かない人はある意味閉じた環境にいるニートみたいなもんで幸せな人なんだろう
そんなのがプロジェクトに参加したらアホ呼ばわりされるんだろう
PHPとかRubyとかにいっぱいいそうだ
385デフォルトの名無しさん:2009/11/12(木) 09:51:59
>>384
>間違いに気付かない人はある意味閉じた環境にいるニートみたいなもんで幸せな人なんだろう
これ本当にそうだよなぁ。
良い意味でも悪い意味でも。
気付かなくても問題が無い=それで良いってこともあるしね。

ポトペタで作ったソフトのお陰でチーム全員が残業から開放された!なんて状況下で
こんなださい設計のソフト作るやつはクズだね、とか言ってもしかたないし。

あと他人と仕事するならどっかの時点でアホ呼ばわりされて間違いに気付かないとだな。
そういう意味じゃオープンソースのプロジェクトに混ざるってのは悪くないのかもしれん。
386デフォルトの名無しさん:2009/11/12(木) 10:06:42
別にプログラミング自体が目的じゃないからな
科学技術計算のプログラムなんか想像を絶する汚さ
387デフォルトの名無しさん:2009/11/12(木) 13:41:05
C# からEXCELにデータ突っ込んでグラフ作って印刷しようとすると結構めんどく背ぇ…
388デフォルトの名無しさん:2009/11/12(木) 13:55:16
CSVにでも出力しといてVBSに投げるのがお勧め
389デフォルトの名無しさん:2009/11/12(木) 14:01:13
餅は餅屋ってことですな
390デフォルトの名無しさん:2009/11/12(木) 14:23:09
>>388のが楽にできそうだ・・・・
COMは開放やら何やら考えてるとすげぇめんどくさいし色々怖い

データファイルに落として
C#→EXCEL起動→強制的に内部の関数呼ぶとか、ボタン押したことにしてVBA実行→(゚д゚)ウマー
とか出来るんだろうか?
391デフォルトの名無しさん:2009/11/12(木) 14:26:32
だからVBSならVBAと同じだしいちいちマクロ作らなくていいから綺麗じゃん
392デフォルトの名無しさん:2009/11/12(木) 14:39:06
>>391
そっか、作っておいたVBSキックすればいいだけか
それで検討してみよう
サンクス!!
393デフォルトの名無しさん:2009/11/12(木) 18:00:11
>>389
いいこと言うなあ。
csvで出力して、Process.StartでExcelを起動。これで十分だな。
394デフォルトの名無しさん:2009/11/12(木) 19:48:39
> C#→EXCEL起動→強制的に内部の関数呼ぶとか、ボタン押したことにしてVBA実行→(゚д゚)ウマー
出来る
395デフォルトの名無しさん:2009/11/12(木) 19:52:19
vstoでもよい
396デフォルトの名無しさん:2009/11/12(木) 20:01:16
VBSで書いた方がC#より簡単とかお手軽とか思ってるのならよくわからん発想だな。
どう考えてもC#の方が簡単だと思うんだが・・・

自動記録したマクロ(VBA)をアドインで保存しといて、それを使うってのなら
まだ話も分かるんだけど
397デフォルトの名無しさん:2009/11/12(木) 20:09:50
MakeTransparentでPictureboxの画像の背景を透明にすることはできたんだが
Clickイベントを画像の中だけで起こしたいんだけどどうやりゃいいの?
画像をクリックしたらなんか処理したいんだが
PictureBoxが四角形だから画像からちょっとはみでたところでもクリックイベントが発生しちゃってちょっと格好悪い。
398デフォルトの名無しさん:2009/11/12(木) 20:20:42
>>397
クリックされた位置が透過色だったらイベントを握りつぶすだけじゃないのか?
もしくは、最初に非透過部分のRegionを作っておくか。
人に聞かなきゃならん問題とも思えんが。
399デフォルトの名無しさん:2009/11/12(木) 20:33:14
kwsk
400デフォルトの名無しさん:2009/11/12(木) 20:41:57
印刷のロジックを組んでいます。
x、y座標を、紙の端から数えるようにしようとしたら、印刷可能範囲を(0,0)と捉えているみたいです。

紙の左上端を起点にするにはどうすればよいでしょうか?
または、印刷可能範囲の左上端が、用紙の左上端からみてどの座標にあるかを取得する方法は ありますでしょうか?

よろしくお願いいたします。
401デフォルトの名無しさん:2009/11/12(木) 20:55:51
HardMarginX,HardMarginYでいけたはず。
402デフォルトの名無しさん:2009/11/12(木) 20:56:02
それはプリンタドライバが知っている世界では
てか可能範囲の余白を知ってどうしたいんだ
セットされた紙次第なのに
403デフォルトの名無しさん:2009/11/12(木) 20:57:19
言語も不明なのによく答えたな
404デフォルトの名無しさん:2009/11/12(木) 20:58:13
>>403 は勘違い。別のスレと間違えてた‥ orz
405デフォルトの名無しさん:2009/11/12(木) 21:03:54
>>402
何いってんの。
例えば官製はがきの枠内に郵便番号が印刷できるのはどうしてだと思ってるんだよw
406デフォルトの名無しさん:2009/11/12(木) 22:08:26
pictureBoxを2個用意して
片方の画像から片方の画像へ移す処理をしたいのですが
上手くいきません。

AllowDropがpictureboxには用意されていないようでどうしたらいいのかも
わからず…
何か良い方法ありませんか?
407デフォルトの名無しさん:2009/11/12(木) 22:14:56
>>406
移すってどういう事をしたいのか正確に

ファイルの移動?ビットマップデータのコピー?
ドラッグドロップじゃないと出来ない処理?2つのコントロールは同じアプリケーションの同一フォーム?
408デフォルトの名無しさん:2009/11/12(木) 22:18:19
自分のアプリケーション内でのドラッグドロップは基本的に自由
自分でマウスイベント拾って好きなように実装するんだよ
409デフォルトの名無しさん:2009/11/12(木) 22:53:29
>>406
picturebox1.image=picturebox2.image
これでいけるよ
410デフォルトの名無しさん:2009/11/13(金) 01:26:20
>>405
それってプリンタ毎に変わるでしょ?
ハード的な要因でドライバが設定した原点(0,0)を
ソフト側で変更なんて出来るの?
411デフォルトの名無しさん:2009/11/13(金) 01:32:04
そういうのはドライバというソフトがやる
412デフォルトの名無しさん:2009/11/13(金) 01:56:12
c++ではクラスのメンバにアクセスするとき->なのにc#だと.なんだね。

フォーム1ロードイベントにLabel1.Text="Hello";
ってC#そのまま書いたらコンパイル無効
thisも必ずつけなきゃいけないっぽい

C++ this->Label1->Text="Hello";
C# Label1.Text="aaa";

これだけみてもC#とC++はCという名前が共通についてるだけで
中身はかなり別言語なんだなぁ。
413デフォルトの名無しさん:2009/11/13(金) 01:58:19
>>411
アプリって言い直したら気が済むのでしょうか
414デフォルトの名無しさん:2009/11/13(金) 02:55:21
>>412
言ってることめちゃくちゃだが
独り言ならチラシの裏にしてくれ
415デフォルトの名無しさん:2009/11/13(金) 03:02:03
ClickイベントとMouseClickイベントはどうちがうんだい
416デフォルトの名無しさん:2009/11/13(金) 03:24:22
フォーカス当ててEnterキー押した時なんかにはClickしか発生しない。
詳しくはMSDNのClickイベントとMouseClickイベントのとこに書いてある。
417デフォルトの名無しさん:2009/11/13(金) 03:29:03
コントロールによって違うから不用意に回答できないと思うが
418デフォルトの名無しさん:2009/11/13(金) 04:51:50
MSDN読めと書いてあるじゃないか
419デフォルトの名無しさん:2009/11/13(金) 06:38:47
>>412
死ね
420デフォルトの名無しさん:2009/11/13(金) 09:11:29
ラベルはハンドル型だから厳密にいうとC++(非CLI)の->とも意味が違うんだよそれ
C#にも一応->演算子はあるけどこちらはポインタにしか使えない(それが本来の使い方)
421デフォルトの名無しさん:2009/11/13(金) 11:56:33
プロパティで

private int age;

プロパティのset部分に
if(value>100)
age=100

ってやって、これ以外にageを設定するメソッドなどがなければ
みたいにやれば、外部クラスからは絶対にageを100より大きく設定できることはないよね?
それとも特殊な状況で変わったりしちゃう?
422デフォルトの名無しさん:2009/11/13(金) 12:04:02
大丈夫じゃねーかなーと思ったけど
BinaryFormatter使ったらprivateなフィールドもシリアライズできるから違う値も入れられるかも知んない

試してないから見当違いの可能性大
423デフォルトの名無しさん:2009/11/13(金) 13:04:12
List<T>で、必要上インデックス0が最後尾
つまりList<T>[0]がList<T>[List.Count-1]になるようなクラスを作りたいんですが

とりあえず内部にList<T>をもっといて読み出すときだけ逆になるようにして対処しようとしてるんですが、
<T>の部分の実装の仕方が見当が付きません。
なにかヒントもらえませんか?
424デフォルトの名無しさん:2009/11/13(金) 13:14:58
横着しないで地道にList.Count-index-1を入れればいいだろ
425デフォルトの名無しさん:2009/11/13(金) 13:15:54
C#の配列機能ってすごすぎるだろ
フィボナッチの数列の第一項から第100項まで1秒以内のあっというまに計算できるとか便利すぎるな。
マジC#最強だな
426デフォルトの名無しさん:2009/11/13(金) 13:34:50
public class MyClass<T>
{
public T Value;

public MyClass(T v)
{
Value = v;
}
}

がぐぐったら出てきました^^;
427デフォルトの名無しさん:2009/11/13(金) 15:57:06
C++のテンプレートってなんでC#だとジェネリックって名前変えてるんだ?
まったく同じに見えるんだが何か機能面で違うのか?
428デフォルトの名無しさん:2009/11/13(金) 16:03:49
ここに書いてある
http://msdn.microsoft.com/ja-jp/library/c6cyy67b%28VS.80%29.aspx

テンプレートは型パラメータの制約等をコンパイル時に解決するけど
ジェネリクスは実行時まで持ってる
429デフォルトの名無しさん:2009/11/13(金) 16:12:03
いや機能全然違うから。
っつかテンプレートじゃないから。
430デフォルトの名無しさん:2009/11/13(金) 16:44:02
まあjavaのジェネリックと比べたらかなりテンプレートに近いけどな
431デフォルトの名無しさん:2009/11/13(金) 18:37:57
なんでジェネリクスとテンプレートが同じに見える奴がいるのか
432デフォルトの名無しさん:2009/11/13(金) 19:35:11
HttpUtilityがusing System.Webに存在しないようなのですが
VS2010では他に移動しましたか?
433デフォルトの名無しさん:2009/11/13(金) 19:36:42
参照設定した?
434デフォルトの名無しさん:2009/11/13(金) 19:39:25
C#2008ExpressがインストールしてあるPCに
VS2005Stdを後からインストールしてもトラブル起きませんか?
435デフォルトの名無しさん:2009/11/13(金) 19:42:09
気になるならvirtualPCにでも入れろ
436デフォルトの名無しさん:2009/11/13(金) 19:42:44
不具合は起こらないと思うが、関連付けは上書きされるだろうな
437デフォルトの名無しさん:2009/11/13(金) 19:49:09
>>433
言われる通りでした。
usingをしたら参照もしてくれると思っていたのですがそういうわけではないのですね。
438デフォルトの名無しさん:2009/11/13(金) 19:55:50
ドラッグの件で質問した者ですがもう少し詳しく

動的にいくつか作成したpictureBoxをドラッグし、
元からあるpictureBoxに移動したいです。

この時、作成したpictureBoxの場所自体を移動させたいのですが
どこのpictureBoxからドラッグされてきたのかという情報の
取得方法がわかりません。

eでは、中のBitmapの情報のみを拾ってくるので…
439デフォルトの名無しさん:2009/11/13(金) 19:56:14
>>437
usingを理解してない予感

using はネームスペースを省略しますよーってこと

本来なら
System.Windows.Form.WebBrowser
とか書かなきゃいけないけど
いちいちかくのはめんどくさい

だから
using System.Windows.Form;
って宣言しとけば
勝手にそこ以前をつけてくれる
もし、同じ名前があると曖昧だからフルで指定しろって言われるよ
440デフォルトの名無しさん:2009/11/13(金) 20:14:59
using ってエイリアスぐらいの立ち位置だったんだなぁ。
たしかにusing だけじゃインテリセンスで補完もしてくれないか
441デフォルトの名無しさん:2009/11/13(金) 20:16:45
>>438 自分でドラッグドロップどうさを MouseDown MouseMove を使って実装するとか
MouseDown のタイミングでどれを押下したかわかるだろ
ちょっと考えれば簡単。既存のドラッグ動作を良く観察して
442デフォルトの名無しさん:2009/11/13(金) 21:06:50
DateTimePickerって1790年くらいが最小で1192年とか実装できない
なんで?せっかく1192年からの鎌倉時代を舞台とした物語を作ろうとおもったのにカレンダー表示機能ないからできないじゃないか
FuckYou!!!
443デフォルトの名無しさん:2009/11/13(金) 21:11:03
自分で計算すりゃいいじゃん
444デフォルトの名無しさん:2009/11/13(金) 21:35:05
そりゃ計算は出来るだろうけどコントロールが使えないのは悲しいよな。
テキストボックスで我慢するかカスタムコントロール作るかになっちゃう。
445デフォルトの名無しさん:2009/11/13(金) 21:42:36
仮に日付が設定できたとして
一ヶ月が28日だったり
一年が13ヶ月だったりするんだぜ?
446デフォルトの名無しさん:2009/11/13(金) 21:46:25
日めくりを想像しろ
月や年なんて日の属性だ
447デフォルトの名無しさん:2009/11/13(金) 22:46:54
448デフォルトの名無しさん:2009/11/13(金) 23:18:30
世界の中心は欧米じゃないのに何言ってんの
449デフォルトの名無しさん:2009/11/13(金) 23:20:39
>ユリウス暦の閏年のずれを戻すために1752/9/3 〜 1752/9/13 は無い。
げぇ…
450デフォルトの名無しさん:2009/11/13(金) 23:27:15
C#はVBとあまり変わらないよと言われたのですが
私にとっては別な言語に見えてしまいます。

たとえば、中国人や韓国人は同じアジアなので似てるといえば似てるのですが、
さすがに、東南アジアの人や、同じアジアと言われるオランダとかと比べると
まったく違うあろーって思います。ありがとうございました。
451デフォルトの名無しさん:2009/11/13(金) 23:29:22
欧米の話じゃないんだが
452デフォルトの名無しさん:2009/11/13(金) 23:36:11
そりゃVB関数使いまくってたらそうだろうな
先にC#やってたらVBは本当に全く同じなんだけどな
453デフォルトの名無しさん:2009/11/13(金) 23:41:00
構文が違うだけで他は同じと言っていいな。
454デフォルトの名無しさん:2009/11/13(金) 23:46:08
というか .NET がメインだからなあ
455デフォルトの名無しさん:2009/11/13(金) 23:48:19
.NET環境なら言語の違いは関係ないと言ってもよい
456デフォルトの名無しさん:2009/11/13(金) 23:49:50
B#で書いてC#に変換したら良いのでは?
457デフォルトの名無しさん:2009/11/13(金) 23:56:53
.NETはC#選んどけば間違いない
458デフォルトの名無しさん:2009/11/14(土) 00:01:03
未だにC#より使い易い言語に出会えない
459デフォルトの名無しさん:2009/11/14(土) 00:02:41
C#できるならVB.NETも余裕
460デフォルトの名無しさん:2009/11/14(土) 00:46:35
C#がというかVC#が快適すぎる
どうやったらここまでインテリセンス速くなるのか
461デフォルトの名無しさん:2009/11/14(土) 01:52:02
>>447-449
日本では、明治5年(1872年)に、従来の太陽太陰暦を廃して翌年から太陽暦を採用することが布告された。
この「太陰暦ヲ廃シ太陽暦ヲ頒行ス」(明治5年太政官布告第337号、改暦ノ布告)では、
「來ル十二月三日ヲ以テ明治六年一月一日ト被定候事」として、グレゴリオ暦1873年1月1日に当たる
明治5年12月3日を明治6年1月1日とすることなどを定めた。そのため明治5年12月2日まで使用されていた
天保暦は旧暦となった(明治改暦、明治の改暦)。
462デフォルトの名無しさん:2009/11/14(土) 01:59:37
それもきっちり施行されたわけではなく、和暦もあわせると専門家すらどっちでもいいじゃんと言い出すほど
463デフォルトの名無しさん:2009/11/14(土) 10:13:46
.net Framewark Compact のメニューが使いづらいのでピクチャーボックス上にアイコンを直接描画してプラグインの機能を呼び出したいのですが
そのためのクラス設計がいまいちよくわかりません
プラグインを読み込むときピクチャーボックスのどの位置にアイコンを表示するか計算してプロパティに持たせる
OnPringイベントハンドラでそれぞれのプラグインが自分の位置にアイコンを表示する
プラグインにピクチャーボックスのクリックイベントハンドラを持たせる
クリックされたイベントがすべてのプラグインで評価され
自分のアイコン領域だったら機能を起動
こんな流れを考えてましたが

プラグインのアイコンを押したとき、さらに選択肢アイコンを表示したくなったらどうするのか?
その場合アイコンを管理するコンテナクラスを作るべきなのか?

そんなことをうだうだ悩んでます
どうかアドバイスをお願いします
464デフォルトの名無しさん:2009/11/14(土) 10:26:49
プラグインって何だ?
普通にカスタムコントロールじゃね。

>選択肢
タップ&ホールドさせてメニュー出すのがWMの流儀。
465デフォルトの名無しさん:2009/11/14(土) 10:27:42
>>463
描画方法はカスタムドローのノリでいいんじゃね
アイコンの管理はContextMenuのように親子を階層管理して、
クリックイベントは親で評価して該当する子に伝えて
子は自分の管理する孫にヒットテストしていく感じで
466デフォルトの名無しさん:2009/11/14(土) 10:49:03
>>464
ありがとうございます
プラグインは普通にプラグインです
DLLであとから供給される機能なので後からメニューに割り込ませないといけないです
タップ&ホールドさせてメニュー出す→一つ選ぶ→そこから更に選ぶ 例えば描画なら エフェクト→モザイク→小・中・大
みたいにモザイクプラグインが自分で持ってる選択肢がどのように展開するかを先に決めることができないので・・・

>>465
ありがとうございます
ノリ的にはカスタムドローなんですよね
管理のイメージもContextMenuのListを持たせる方式がなんとなくイメージしやすいです
イベントの処理をどうしようか悩んでたら
>クリックイベントは親で評価して該当する子に伝えて
>子は自分の管理する孫にヒットテストしていく感じで
あーなんか光明が見えてきた感じです
仮想関数のデリゲートのインスタンスで解決するですかね?
スマートな方法というか、常道ではどうするのでしょうか?
467デフォルトの名無しさん:2009/11/14(土) 10:49:14
C#でゲーム作りたいけどC#でゲーム作るサイトがあまりない・・・
C言語とかC++で作るページならいくらでもみつかるのに。

使いやすさ、簡単さはC#のほうがいいけど
やっぱサンプルコードが充実してるっていう点ではC++とかのがいいなぁ
468デフォルトの名無しさん:2009/11/14(土) 11:02:41
アプリケーションの設定で、独自の型を設定するにはどうしたら良いのでしょうか?
「参照」ボタンを教えても、自分の作ったネームスペースは出てこないんです。

469465:2009/11/14(土) 11:07:33
>>466
メニューが整列したデスクトップアイコンみたいなの想像してるんで
Zオーダーは考慮してないから注意してね
子から親ならデリゲート(イベント)かなと思ったけど
親から子ならインターフェース使うかなぁ
すべてのメニューに共通のインターフェース持たせとけば楽かと
void NotifyMouseClick(〜Args e) みたいな感じにするかな
継承まで考えるならこのメソッドの実装で virtual void OnMouseClick(〜) を呼ぶ
470デフォルトの名無しさん:2009/11/14(土) 11:15:19
>>469
>メニューが整列したデスクトップアイコンみたいなの想像してるんで
>Zオーダーは考慮してないから注意してね

OKですWMでアイコン並べるって話ですからiPhoneのアイコンと同じイメージです

>親から子ならインターフェース使うかなぁ
>すべてのメニューに共通のインターフェース持たせとけば楽かと
>void NotifyMouseClick(〜Args e) みたいな感じにするかな
>継承まで考えるならこのメソッドの実装で virtual void OnMouseClick(〜) を呼ぶ

なるほどなるほど
メッセージの流れを先に決めてしまえばイメージしやすいですね
親から子 子から親 要素からコンテナ みたいにいろんな方法がとめどなくあるので
身動き取れませんでした

なるべくいろいろなプラグインに対応できるようにここは慎重に考慮すべきですね
でも、頭の中がだいぶすっきりしてきました
ありがとうございます
471デフォルトの名無しさん:2009/11/14(土) 11:50:06
MyClass<T>というのがあり、

Dictionary<string,MyClass<T>>のようなことをしたいのですが、
ここでDictonaryが保持するMyClassはMyClass<int>やMyClass<string>
のように複数の場合、どうしたらいいですか?

最悪Refrection使っても問題ないので、よろしくお願いします。
472デフォルトの名無しさん:2009/11/14(土) 11:58:25
デバッグした時にエラーがあると、前回成功した結果で勝手に実行されるのをやめさせるには
どの設定を変えれば良いですか?

例えば、

private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "こんにちは";
}

で実行したあとに

private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "こんばんわ" エラー;
}

を実行すると、エラー一覧画面で怒られているのに
最初に実行した"こんにちは" が表示されるという具合です。


C# 2008のお試し版を使っています。
473デフォルトの名無しさん:2009/11/14(土) 12:10:08
>>471
Dictionary<string, object> かねえ・・・
せめてMyClassに共通の具体的な継承元があればそれにしておくくらいか

>>472
そんな現象は起こらないので、何か勘違いしてる
474471:2009/11/14(土) 12:17:56
>>473
レスありがとうございます・。

objectにしちゃうと、受け側で int hoge = (int)myDictionary[keyString].GetValue()
みたく、キャストしないと受けれないですよね? それを避けたいというのが動機です。

継承元を作るもやってみたのですが、
外部からmyDictionary[keyString].GetValue()のような形で呼ぶためには、
共通の基底クラスにも
MyBaseClass
{
public abstract "Type" getValue();
}
が必要になり、何一つ解決しませんでした。


475デフォルトの名無しさん:2009/11/14(土) 12:29:02
>>474
そもそも、異なる型を一つのコレクションに突っ込もうとしてる時点でキャスト避けるのは無理に近い
他のデメリットをすべてかなぐり捨ててキャストだけ排除したいなら、
想定する全部の型をメンバーに持ったクラスにするしかない
バリアント型みたいに型を表すenumでも持っておいて、それを見て取り出すべきフィールドを決める
まあ、やんない方が良いね。そもそも設計の方に問題があると思うから
あと気になったんだが、GetValue()の結果をキャストするのっておかしくないか?
object item = myDictionary[keyString] as MyClass<int>;
int hoge = item.getValue();
こうあるべきだと思うけどね。
476デフォルトの名無しさん:2009/11/14(土) 12:30:20
書き損じた
objectで受けるんじゃなくて MyClass<int> だね
477471:2009/11/14(土) 12:32:21
訂正
objectにすると、
(MyClass<int>)myDictionary[keyString].GetValue()
とするのにキャストが必要。
objectのままだと当然GetValue()にはアクセスできない。
の間違いでした。
478471:2009/11/14(土) 12:39:26
連続で失礼。
>>475さん
やっぱりある種、動的型付け的なことなので無理なんですかね。

typeof(int) "12" や、 typeof(String) "もじ”
などの型情報とそこで指定された方にParse可能な文字列を保持しているペアがあって
その型情報をもとにParseして指定された型で返すというものを作りたかったので
扱いたい型の数だけフィールドorメソッドを用意する or objectで受けてキャストするのが解っぽいですね。

getIntValue() { return (int)value;} みたいなのを色々用意するくらいなら
受け側でキャストした方が楽か…

ありがとうございました。
479デフォルトの名無しさん:2009/11/14(土) 12:51:53
>>478
そういうことならMyClass内ではstringのまま持って以下のような方法も・・・
enum ElementType { None, Number, Text ..}
class MyClass
{
 ElementType ElementType { get; }
 T getValue<T>() { ... }
}
MyClass item = myDictionary[keyString];
switch (item.ElementType)
{
case ElementType.Number:
 int hoge = item.getValue<int>();
 break;
...
enumじゃなくてTypeを公開してもいいかもだけど
480デフォルトの名無しさん:2009/11/14(土) 13:11:53
これじゃだめ?
public class MyClassDictionary<T>
{
  public Dictionary<string,MyClass<T>> dic { get; private set; }

  public MyClassDictionary()
  {
    this.dic = new Dictionary<string,MyClass<T>>();
  }
}
481デフォルトの名無しさん:2009/11/14(土) 13:27:34
>>467
XNAを使うんだ!
482デフォルトの名無しさん:2009/11/14(土) 14:06:54
オブジェクト指向ってすごいな。
オブジェクト指向がない言語ってどうやってプログラム組んでるんだろうな。
if文とかすごく多くなって見づらそうだね。
483480:2009/11/14(土) 14:10:38
って、ちゃんと読んでなかったスマソ。
484デフォルトの名無しさん:2009/11/14(土) 14:17:53
>>467 作りたいけどサイトが無いって
ずいぶん妙な事言ってるな
作るのは自分じゃないのか。他人ありきなのか

自分でアルゴリズムやロジック考える事こそがプログラミングだぜ
485デフォルトの名無しさん:2009/11/14(土) 14:18:57
>>482
どんな言語でもオブジェクト指向プログラミングは出来る
しやすいかどうか(文法としてサポートしてるかどうか)の違い
486デフォルトの名無しさん:2009/11/14(土) 14:23:27
>>485 同意
そういや「オブジェクト指向」ていつのまにかただの単語になっちまってるな
オブジェクトとして捉え観察してコーディングする指向の呼称だったはずなのにな
487デフォルトの名無しさん:2009/11/14(土) 14:31:20
オブジェクト指向言語使ってるのに
switchでの処理分けばっかりしてるようなやつもまだ沢山いるけどね。
488デフォルトの名無しさん:2009/11/14(土) 14:32:14
プログラミング関連に限らずこの世に「ただの単語」じゃない単語があるならkwsk
どんな複雑で難解な数学用語だろうが「ただの単語」だろ?理解できる人が多いか少ないかの違いがあるだけで。
489デフォルトの名無しさん:2009/11/14(土) 14:32:24
>>484
んなこたない
できるだけ横着するために苦労するのがプログラミングだと思うぞ
車輪の再発明して威張っていいのは学生まで
490デフォルトの名無しさん:2009/11/14(土) 14:35:00
>>488
バズワードになったっていいたいんじゃね?
http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%BA%E3%83%AF%E3%83%BC%E3%83%89
491デフォルトの名無しさん:2009/11/14(土) 14:36:20
>>487
俺のことか・・・
492デフォルトの名無しさん:2009/11/14(土) 14:37:25
真面目な話、他人の作ったライブラリやコード片やサービスとか上手に組み合わせて
面白い何かをいかに素早く作れるかが重要だよな。ここ最近は。

なに、レビューワーがしっかりしてりゃいいんですよ。
493デフォルトの名無しさん:2009/11/14(土) 14:38:54
>>488 いや言いたいのははそういう事じゃない

元の意味を忘れてしまってるって話だ。前レスからの文脈を理解してくれ
494デフォルトの名無しさん:2009/11/14(土) 14:39:25
>>491
switch とオブジェクト志向、全然関係ないから気にするな
495デフォルトの名無しさん:2009/11/14(土) 14:41:59
switch使うならStateパターン使えよターコ
ボケ
カス
496デフォルトの名無しさん:2009/11/14(土) 14:45:27
>>492 >>489
ここが「初心者向け」と看板がついたスレなのを忘れたか

いくつの車輪を再発明できるかがその人の理解の幅や知識、地力を上げると気付けよ
効率の話はまたその先の話だ

基礎的な発想や当たり前レベルだと、慣れた人がパッと見てわかるような事さえ初学では判断もできない訳だから
なんでもショートカットしてコピペで済ませてはいけない

お前さんも経験あるなら理解してもらえると期待する
497デフォルトの名無しさん:2009/11/14(土) 14:46:04
パソコンが普及した

マイクロソフトがVSをただで配ったりBorlandがDelphiをただで配ったりした

一般大衆も高性能なプログラミング言語を手に入れられるようになった

いままで一部の専門家しかプログラムなんてやらなかったのが普通の小中学生でも手を出すようになった

オブジェクト指向などの概念などをわかりやすく解説するサイトが増えた

浅い知識だけのオブジェクト指向が広まった

こういうことか
498デフォルトの名無しさん:2009/11/14(土) 14:49:40
>>496
だから「"学生"まで」なんじゃね?

>>484>>489>>492>>496
つか不毛な精神論語って悦に入ってるぐらいならさっさと参考になるサイトでも教えてやれよって思うんだがな。
499デフォルトの名無しさん:2009/11/14(土) 14:50:59
switch(currentState)みたいなのは多態使うべきだけど
メソッドの引数なんかはよっぽどのことがないかぎり
普通にswitch使った方が適切
500デフォルトの名無しさん:2009/11/14(土) 14:51:03
>>495
コードの見通しが悪くなる弊害を無視して
常にそれなら、それはそれでアホだな
501デフォルトの名無しさん:2009/11/14(土) 14:52:56
>>499
パターン覚え立てだと凝ったことやりたがるのはよくあること
シングルトンの乱用なんかが典型的だな
502デフォルトの名無しさん:2009/11/14(土) 14:55:58
>>498 不毛な精神論なんてどこを読んだらそうなるんだよww
考え方やスタンスが無くてどんなコードが書けるんだ
攻略サイトが無いとパズルゲー解けないみたいな主張はゆとりと言うより、ちょっとひどい勘違い
503デフォルトの名無しさん:2009/11/14(土) 14:58:24
>>502
自分で考えろだの拾ってくるのが正しいだの、こんなの何の役に立つアドバイスなの?
発言してて気持ちいいだけっしょ?
504デフォルトの名無しさん:2009/11/14(土) 14:59:22
>>501
逆に初学の間は(どんなにコーディングに慣れた人でも新しい何かを始めた時も含めて、初学の間は)
色々無茶するのはむしろアリだよな

仕事に適用しなきゃならん場合は確実に除いて
505デフォルトの名無しさん:2009/11/14(土) 15:01:00
デザパタはあくまでよくあるパターンでしかないからな。
それにGoFで挙がってるのが唯一無二ってわけでもないし。
何でもかんでもアレに当てはめようっての自体がアンチパターン。
506デフォルトの名無しさん:2009/11/14(土) 15:03:13
>>503 どうしてそんなスタンスで話を見てるのか、俺にはそれこそお前の気持ちがわからない
俺はどんな話でもそこにヒントを探す。何故ならその方が自分の時間に無駄が無いから

てか、気持ちいいだけでしょ?とか、その発想の方が不毛で無駄
コーディングの役にあんまり立たない
507新人:2009/11/14(土) 15:03:41
クイックソート実装しました!
エラー処理とかきっちりやったんで100行ぐらいになりましたよー!いやー苦労しました!
標準ライブラリのとかってなんか遅そうじゃないですか?
508デフォルトの名無しさん:2009/11/14(土) 15:05:05
IPアドレスにマッチする正規表現ってこれでいいですか?
private static Regex regexIP = new Regex(@"(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])");
509デフォルトの名無しさん:2009/11/14(土) 15:06:07
>>506
そりゃお前の話だろ
何故ならその方が自分の時間に無駄が無いから(キリッ
気持ちいいですか?
510471:2009/11/14(土) 15:08:01
なんかすごい勢いで流れてますが、
>>479さん、追加例ありがとうございます。
MyClass自体は非ジェネリッククラスにして、
objectに外部で指定された型にParseしたvalueを入れておき、
myclass.getValue<int>();
みたいにとるのも可能性としてはありますね。
結局、
(int)myclass.getValue() と myclass.getValue<int>();
なら前者がシンプルでわかりやすいかなという気がします。
長々とお付き合いいただきありがとうございました。
511デフォルトの名無しさん:2009/11/14(土) 15:08:27
>>508
IPアドレス 正規表現でググってでてくるのが軒並それと一緒だから多分大丈夫じゃね?
512デフォルトの名無しさん:2009/11/14(土) 15:09:08
>>505 同意。その良くあるパターンを良くある理由も含めて追いかけると、先に進むにつれて楽になる
自分の技や発想のバリエーションがマジで広がる
何がアンチパターンなのかもきっとわかるよな
513デフォルトの名無しさん:2009/11/14(土) 15:10:31
>>509 お前多分向いてないよ。もう消えとけ
514デフォルトの名無しさん:2009/11/14(土) 15:10:48
>>510
どういたしまして。

つーか、おまえらこんなにいるくせに
黙ってスレ眺めてたのかよ、きめえww
515デフォルトの名無しさん:2009/11/14(土) 15:13:18
ある引数の値の範囲を実行時じゃなくコンパイル時に制限することって出来ますでしょうか
値の範囲自体は1-9とかの狭い範囲です。(マージャンゲームの実装をしています)

enumを使ったり値自体をクラスにすれば出来そうな気もしますが、そういうやり方が正しいのかどうか
よくわかりません。
516デフォルトの名無しさん:2009/11/14(土) 15:13:22
>>508
(25[0-5]|2[0-4]\d|[01]?\d\d|\d)
こうしないと数字の途中で切れるんじゃ
517デフォルトの名無しさん:2009/11/14(土) 15:14:22
多分3人ぐらいで回してると見たね。
518デフォルトの名無しさん:2009/11/14(土) 15:16:27
俺もそう思う
519デフォルトの名無しさん:2009/11/14(土) 15:17:07
そんな感じ
520デフォルトの名無しさん:2009/11/14(土) 15:17:56
>>512
ただ、それはアンチパターンだよ、ってのを教えてもらわないと
一生パラダイムシフトしないまま終る人も居る気がするよ。

仕事でやってりゃ怒られたりほされたりして気付くだろうけど
シコシコフリーソフトをソース公開しないで発表してたりする場合は
誰にも何にも言われんからなぁ。
521デフォルトの名無しさん:2009/11/14(土) 15:18:43
>>517-519
お前らかww
522デフォルトの名無しさん:2009/11/14(土) 15:22:34
>>520 あぁ確かに。
指摘してもらえるのって大事だもんな
誰も一人では成長できないって奴だ

自分で広げるスタンスをデフォにした上で、他の人の意見を理解する、みたいな
やはり同意
523デフォルトの名無しさん:2009/11/14(土) 15:25:28
ボタンを押した瞬間にコンテキストメニューを表示する動作を実装してるんですけど
ContextMenuStripを使うとメッセージをブロックしてくれないから?ポップアップすると
ボタンがアップしてしまいます
これをContextMenuで実装するとボタンが凹んだ状態を維持出来るんですけど
機能がContextMenuStripに比べて少ないのでそれはそれで困ります
そこで、ContextMenuStripでShowしたときにメッセージをブロックする良い方法があれば教えてください
APIのTrackPopupMenuを試してみましたが表示されませんでした
なおボタンをトグル式にしたりして見た目上回避する方法はとれません
524デフォルトの名無しさん:2009/11/14(土) 15:30:31
>ボタンをトグル式にしたりして見た目上回避する方法はとれません
なぜ?
単にそれだけで解決する「問題」に思えるんだけど。
ちなみに、個人的にはそんなメニューが表示されている間だけ「ボタンがフリーズする」
UIは生理的に気持ちが悪い気がする。
525デフォルトの名無しさん:2009/11/14(土) 15:31:42
>>523>>463を頑張ってるんじゃないんだろか
526デフォルトの名無しさん:2009/11/14(土) 15:37:24
>>524
エクスプローラの「アイコン/一覧/詳細」の切り替えボタンの動作といったら分かりますかね
凹んだ状態でもう一度押したらポップアップが解除されるだけですけど
メッセージがブロックされてないと、一瞬閉じてまた開きます
これ以外にも細々とした挙動で多くの不都合がありますので採用できません

>>525
別人です
527デフォルトの名無しさん:2009/11/14(土) 15:41:20
「秀丸エディタ」でC#用のソースを生成しようとしたのですが、
「秀丸エディタ」の正規表現の置換がうまくいきません。

作業内容は、
(1)Excelで作成した表を、タブ区切りのテキストデータとして保存し、
(2)「秀丸エディタ」でそのテキストデータを開き、
^(先頭文字)⇒¥t¥t¥t
に全置換しようとしました。

もともとテキストデータであったファイルを置換するときはうまくいきますが、
Excelからエクスポートしたテキストデータは、先頭行を認識してくれないのでしょうか。
どうすれば、先頭行を置換できるでしょうか。

スレちがいかもしれませんが…よろしくお願いします。
528デフォルトの名無しさん:2009/11/14(土) 15:48:12
趣味でプログラミングやってる人に仕事でやってるようなノウハウを押し付ける人たちってきめぇわ
死ねよ
529デフォルトの名無しさん:2009/11/14(土) 15:48:19
>>527
マルチポストです
530デフォルトの名無しさん:2009/11/14(土) 15:50:11
>>527
スレ違い帰れ
531デフォルトの名無しさん:2009/11/14(土) 15:50:48
class このスレ{
public int バカ;
public string アホ;
public static void 無駄レス();
}
532デフォルトの名無しさん:2009/11/14(土) 15:53:08
>>528
な。連中がしてることってオナニーだよな。
533デフォルトの名無しさん:2009/11/14(土) 15:53:37
>>526
なるほどお節介をいって申し訳ない。

ちなみに、今ちょっと実験してみたらButtonのOnMouseUpをオーバライドして
ベースクラスのOnMouseUpを呼ばないようにすると「押されたまま」の状態になるようだ。

ボタンを通常の状態に戻したいときには、OnMouseUpが呼ばれた時のMouseEventArgsを
保存しておいてベースクラスのOnMouseUpを呼べばいいみたい。

これがWindowsプログラミング的に正しいかどうかは分からないけど。
534デフォルトの名無しさん:2009/11/14(土) 16:03:22
>>533
ありがとうございます
確かにその方法でボタンの押しっぱなしには対応できますね
ただボタンを左クリックして解除された時の動作や、
ポップアップしているメニューと関係のないコントロールの
キーボードショートカットなどが効いてしまいます
これらの多くの問題に対処するには、どうしても
ContextMenuのようなメッセージをブロックする形で
ポップアップしないとキリがない感じです・・・
なので、なんとか辻褄を合わせるような対処法は避けたいのです
535デフォルトの名無しさん:2009/11/14(土) 16:04:44
麻雀牌のクラスを作る場合、
abstract class 牌 {}
abstract class 数牌 : 牌 {}
abstract class 萬子牌 : 数牌 {}
class 一萬 : 萬子牌 {}
...
abstract class 字牌 : 牌 {}
abstract class 三元牌 : 字牌 {}
class 中 : 三元牌 {}
...
ってやって全部クラスにしちゃうのと

abstract class 牌 {}
enum 数牌タイプ { 萬子,. 筒子,... };
class 数牌 { 数牌タイプ Type, int Number}
enum 字牌タイプ { 東, 南,.... };
class 字牌 { 字牌タイプ Type, }

みたいに途中でenumで振り分けちゃうのはどっちが実装として正しいんでしょうか?
536デフォルトの名無しさん:2009/11/14(土) 16:24:12
いろんな言語を勉強すると
今まで使ってた言語の良い部分と悪い部分が浮き出てきて良いなぁ
537デフォルトの名無しさん:2009/11/14(土) 16:32:50
>>536
スレ違い
538デフォルトの名無しさん:2009/11/14(土) 16:34:38
decimalってなんで最後にmつけるの?
decimalなんだからdでいいだろ!doubleと間違うならdeでいいだろ!
なんだよmって!
539デフォルトの名無しさん:2009/11/14(土) 16:38:33
プロが作ってるソフトつっても公開してるフリーソフトみてもらえればわかるけどレベル低いよ
プロのうんちくは読んだ本の受け流し
趣味グラマでも萎縮する必要はないよ
540デフォルトの名無しさん:2009/11/14(土) 16:39:48
>>538
moneyのmだろksg
541デフォルトの名無しさん:2009/11/14(土) 16:40:26
>>535
まず、牌の種類ごとにクラス分けする必要があるかどうか疑問だなぁ。
牌を使って何をするかにもよるが。
542デフォルトの名無しさん:2009/11/14(土) 16:40:26
>>539
具体例プリーズ
543デフォルトの名無しさん:2009/11/14(土) 16:48:05
>>541
回答が貰えた!ありがとうございます。

最初は牌クラス一つにしようと思ったんですが、
数牌は種類と数字が必要なのに字牌は種類だけ必要 => 字牌の場合数字が死にプロパティになる?ってのと、
ドラの牌を調べるのにこの牌の次の牌(九萬の次は一萬、南の次は西とか)はそれぞれの種類毎に
あったほうがいいかなぁと思って、それならどんどん派生させた方がいいのかなぁって思えてきまして・・・

実際に処理する場合は
牌インスタンス is 萬子 で判定するか、
牌インスタンス.Type == 数牌タイプ.萬子 で判定するかの違いぐらいかなぁって漠然と考えています。
544デフォルトの名無しさん:2009/11/14(土) 16:58:30
二次元配列で
0-1 東 0-2 南 0-3 西 0-4 北
1-1 白 1-2 葵 1-3 中
2-1 2-2 ... 2-9 萬
3-1 3-2 ... 3-9 筒
4-1 4-2 ... 4-3 索
545デフォルトの名無しさん:2009/11/14(土) 17:07:41
>>544
??インデックスを牌クラスに持たせるということでしょうか??
546デフォルトの名無しさん:2009/11/14(土) 17:42:41
条件分岐は逐次処理になってしまうんでしょうか?
全スレッドに対して一様に条件分岐を行うと処理が遅くなったので…
547デフォルトの名無しさん:2009/11/14(土) 17:51:26
条件判断に使ってるインスタンスがロックされてて
逐次処理になってるんじゃね?
548デフォルトの名無しさん:2009/11/14(土) 18:12:15
ふふふ・・・面白い漫才スレw。

はじめから完璧なものを作れた人なんていないしプロは過去の遺産を使いまわしているから
穴が少ない傾向にあるだけでしょ。どんな使われ方をしても大丈夫なプログラムなんて
そうそう作れるものではない。それは色々なOSが証明している。

と、初心者なおらは思う。
549デフォルトの名無しさん:2009/11/14(土) 18:13:42
>>548
ん?何に対する話だ?完璧なプログラムの話なんか誰かしてたっけ?
550デフォルトの名無しさん:2009/11/14(土) 18:25:59
完璧なものを作る・・・?どんな使われ方をしても大丈夫なプログラム・・・?
printf("Hello World!!\n");
残りmain部分だけしか書いてないならどんな使い方をしてもバグは起こらないだろうな
551デフォルトの名無しさん:2009/11/14(土) 18:41:02
しかし、ランタイムが入っていなかった!
552デフォルトの名無しさん:2009/11/14(土) 18:49:50
>>551
どこまでをプログラムとするかでそこらへん変るから。
553デフォルトの名無しさん:2009/11/14(土) 19:11:47
ランタイムがバグっていた!
554デフォルトの名無しさん:2009/11/14(土) 19:44:58
>>543
>>541 の言う通りなにをするかによるんだけど。

自分だったら牌クラスをひとつ用意した上で、enum で牌の種類を全部定義して、それをプロパティで
設定/参照できるように作る。テキストベースなプログラムを作るなら、牌をユーザに示すための文字を
設定/参照するプロパティを、GUI? なプログラムなら、牌のイメージを格納したビットマップかなにかの以下略。

‥‥と脱線気味な雰囲気に抵抗してみた。w
555デフォルトの名無しさん:2009/11/14(土) 20:00:26
>>554
役を判定するときにクラスに別れてたほうが判定しやすいかなーと思ったけど
よく考えてみると緑一色判定とかしたくなったら牌を特定するしかないわけだから
渡された牌があるグループに属してるか判定する静的メソッドでも作った方が
シンプルになりそうですね。

牌はenumで全定義、グループ判定は静的メソッドの方向でがんばってみようと思います。ありがとうございました。
556デフォルトの名無しさん:2009/11/14(土) 20:09:05
>>555
静的メソッドより、Is萬プロパティとかの方がC#っぽい
ような気がする。
557デフォルトの名無しさん:2009/11/14(土) 20:48:39
>>556
牌のインスタンスにIs萬とかIs数牌とか付けるってことですよね。
そこらへんどう解決するのがスマートなのかなんですよね、結局。

Is萬とかにする場合・・・
◯{get; private set;} なプロパティにしてコンストラクタ内で設定
--> コンストラクタでenum牌タイプを見てswitchして判断する? → コンストラクタがごつくなる・・・
◯コンストラクタに引数で渡す
--> Is萬がtrue, Is字牌がtrue、typeが一索なんてのをはじけない

って書いてて思ったけど、HashSet<牌タイプ> 萬子Set, 索子Set..... とか作って
それで判断すればそんなにごつくならないかな・・・
558デフォルトの名無しさん:2009/11/14(土) 21:02:27
VBとVC#ならどちらがプログラム初心者にとっては組みやすいですか?
559デフォルトの名無しさん:2009/11/14(土) 21:03:58
試しに書いてみれば?
書くと何がスマートじゃないか何となくわかるからそれで書き直せばOK
560デフォルトの名無しさん:2009/11/14(土) 21:05:30
>>558
c#
561デフォルトの名無しさん:2009/11/14(土) 21:12:23
>>560
どうしてでしょう?
VBは入門言語だと聞きますが、VC#も似たようなものでしょうか?
また、趣味で本格的なプログラムをするとなればどちらが有利ですか?
562デフォルトの名無しさん:2009/11/14(土) 21:14:42
どちらも難易度は変わらない
趣味なら断然C#。VBを選ぶ積極的な理由はない。使ってる人はみんな仕方なく使ってるだけ。
563デフォルトの名無しさん:2009/11/14(土) 21:18:44
昔はVBとVC++が比較されてて、
VC++はポトペタ(フォームに貼り付けてイベント直接書いて終わりの書き方)が今一な上、
C++の概念もMFCも難しかった。よってVBの方が楽っていわれてた。

その流れでVBの方が楽っていまだに言う人がいるんじゃないのかなぁ。

VBもVC#も.NETを使いこなすのが一番のポイントになってるから
文法が違うぐらいでやるこた一緒だよ。

んで文法の自由度はC#の方が強力。
564デフォルトの名無しさん:2009/11/14(土) 21:25:40
趣味なら情報は主にwebに頼ることになるだろうけど,それについてはC#の方がずっと充実してるんだよね
オープンソースプロジェクトもほとんどC#
C系言語に慣れてればjavaやC++の情報も理解しやすい
565デフォルトの名無しさん:2009/11/14(土) 21:31:25
C#のdoubleって計算の途中でどうみても誤差が発生してる場合微妙に調整されてるの?

math.PIとかmath.Eとかつかった計算をdoubleでやってみてToStringすると条件によってきっちりした整数が表示されることがあるんだが・・・
こっちとしては10.000000000001とか表示されるより10と表示されるほうが楽でいいんだけどさ。
566デフォルトの名無しさん:2009/11/14(土) 21:31:41
C#は.NET用に一から設計されているから、負の遺産が無いのもメリット
567デフォルトの名無しさん:2009/11/14(土) 21:38:39
超初心者はMainをmainって書いちゃったりusingをUsingって書いちゃったり;がありませんとか
double型とint型は互換性がありませんとかコンパイラにおこられまくるからいやになるかもねw
568デフォルトの名無しさん:2009/11/14(土) 21:40:11
>>565
ToStringの段階で下の方切り捨ててるだけ
実際の演算とは無関係
569デフォルトの名無しさん:2009/11/14(土) 21:52:22
>>565
double x = 10, y = 10.0000000000001, z = 10.00000000000001;
Console.WriteLine("{0}, {1}, {2}", x.ToString(), y.ToString(), z.ToString());
Console.WriteLine(x == y);
Console.WriteLine(y == z);
570デフォルトの名無しさん:2009/11/14(土) 22:03:54
キーボードショートカットの実装で、どういうキーが押されたかの判定は
どういうふうにやるのが一般的なんでしょうか。
ぐぐるとifやswitchをつかった例がいくつか見つかりますが、数が多くなったり、
Shiftなどの装飾キーの有無も含めた判定をするとかなりごちゃごちゃしそうなのですが・・・
571デフォルトの名無しさん:2009/11/14(土) 22:05:57
メニューやコントロール自身に関連づけるのが一般的じゃない?
572デフォルトの名無しさん:2009/11/14(土) 22:18:47
string word が日本語かどうか判別できる関数または方法はありますか?
573デフォルトの名無しさん:2009/11/14(土) 22:23:39
>>570
ちょっとかいた、多分動く

protected override bool ProcessCmdKey(ref Message msg, System.Windows.Forms.Keys keyData)
{
//Debug.WriteLine("ProcessCmdKey Start:");

const int WM_KEYDOWN = 0x100;
const int WM_SYSKEYDOWN = 0x104;

if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
{
switch (keyData)
{
case Keys.F1:
return true;
case Keys.F2:
return true;
case Keys.F3:
return true;
case Keys.F4:
return true;
case Keys.F5:
return true;
case Keys.F6:
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}

各キーとリターンの間に実行したい処理をいれればいい。他のキーの組み合わせはぐぐれ
574デフォルトの名無しさん:2009/11/14(土) 22:42:14
アセンブリのことがよくわからないのですが、
VC#の場合1プロジェクト1アセンブリという認識でだいたい合っていますでしょうか?
575デフォルトの名無しさん:2009/11/14(土) 22:45:45
VC#の場合1プロジェクト1モジュール1アセンブリ
576デフォルトの名無しさん:2009/11/14(土) 22:46:35
うん。
577デフォルトの名無しさん:2009/11/14(土) 23:00:10
マルチモジュールアセンブリってどういうときに使うの
578デフォルトの名無しさん:2009/11/14(土) 23:06:00
579デフォルトの名無しさん:2009/11/14(土) 23:08:42
>>557
自分なら、そう言う判定は牌クラスにはやらさない。
麻雀はやらないから良くはわからないけど、手牌を管理するクラスの基底クラスか、
役を判定するクラスを作って、そこで判定させる。

麻雀を知らないから良くわかんないんだけど、牌のグループを判定する目的ってなに?
そんなのなくても判定できそうに思うんだけど。。。
580デフォルトの名無しさん:2009/11/14(土) 23:11:23
どうせアルゴリズム主体だからどうでもいい
581デフォルトの名無しさん:2009/11/14(土) 23:20:02
>>579
牌の情報は牌が知ってる方が妥当な設計かなーと思ってそういう設計にしてました。
実際そういった情報を使うのは役判定クラスだけになりそうなんですよね。

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

582デフォルトの名無しさん:2009/11/14(土) 23:28:25
Win32APIのCreateProcessを使っているのですが
C++だと終了前にCloseHandleをするように決められています
これはリソースの解放をいうことだと思うのですが
ガベッジコレクション?があるからC#では特に解放したりする必要はないのでしょうか?
583デフォルトの名無しさん:2009/11/14(土) 23:32:34
>>582
自分で解放しなきゃダメ。
GCに回収/開放されるのはC#の管轄内で生成されたオブジェクトだけ
具体的にはそのインスタンスの為に処理系が用意したメモリ領域だけ
584デフォルトの名無しさん:2009/11/14(土) 23:33:18
当たり前に必要。というかなんで Process クラスを使わん
.NET でまじめに Handle を使うのなら SafeHandle を使う
必要もあるし、P/Invoke は素人にお勧めできない。
585デフォルトの名無しさん:2009/11/14(土) 23:41:38
>>581
なるほど。知識不足、すまん。

それなら、牌種類 enum の他にグループ enum を牌クラスのプロパティに持たせるかな。
やっぱり牌クラスにはその手の判定メソッドは持たせない。自分なら。
586デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/14(土) 23:51:05
>>585
なるほど、属するグループもenumにしちゃうってのは盲点でした。
[Flag]属性付けとけば数牌かつ萬子とか風牌かつ字牌なんてのも容易に表現出来そうですね!
588デフォルトの名無しさん:2009/11/14(土) 23:55:27
>>583
やっぱそうなんですか
うーん管理が必要だな

>>584
そっちは
作成時にウインドウスタイルをいじれなくて困ってます
作成、MoveWindow(Win32API)でサイズ変更
とやると管理は必要ないですが
プロセスが立ち上がるまでサイズがデォルトなので支障がありまして・・・
せめて、非表示でプロセスを立ち上げる方法があれば・・・・と思ったのですが検索しても見つからず
CreateProcessを使用するしかないかという結論に至りました
589デフォルトの名無しさん:2009/11/14(土) 23:59:03
ダメだこりゃ。
590デフォルトの名無しさん:2009/11/15(日) 00:01:28
C#のみでの解決法も提示できないくせに口だけは御達者のようで^^
591デフォルトの名無しさん:2009/11/15(日) 00:03:36
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.processstartinfo_members(VS.80).aspx
>>598 じゃないというか >>584 だけど少しはまともに調べたら?
592デフォルトの名無しさん:2009/11/15(日) 00:04:23
>>587
なんでもかんでも[Flag]使って一つのプロパティに収めるのは如何なものか?
でもenumが継承出来ない以上無理ないのか。
593588:2009/11/15(日) 00:07:03
ちなみに現在の状況としてはプロセスを起動
WaitForInputIdle()でIdleを待ち
MoveWindowでサイズを変更すると言った感じのことをしています
Idleをまつのだから、プロセスがデフォルトの設定で開かれるのはしかたないことではあるのですが
ちょっとそれだと支障がありまして
594588:2009/11/15(日) 00:11:10
>>591
みなさんからすれば調べ方が悪いのでしょうが自分でも半日以上調べてたのですが
どうしようもなくこういう結論に至ってました
そんなものがあったのですね
ありがとうございました

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

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

自分で必死に考えてだした結論をそうやってバカにされるのは正直不快ですね
595デフォルトの名無しさん:2009/11/15(日) 00:14:00
バカなんだからしょうがない。
596588:2009/11/15(日) 00:15:41
>>595
ここは初心者スレじゃなくて
分からない人をバカよばわりして上級者が偉ぶるスレですか?
597588:2009/11/15(日) 00:16:22
うそですdb
598デフォルトの名無しさん:2009/11/15(日) 00:16:30
煽られるのがいやなら、2ch なんて来るなよ。
599デフォルトの名無しさん:2009/11/15(日) 00:17:54
>>598
お前の2ch論を勝手に初心者におしつけんなよwwwwwwwwwwww
2ch利用すると煽られなきゃいけないとかお前の世界はどんだけゆがんでるんだよwwwwwwwwwwwww
600デフォルトの名無しさん:2009/11/15(日) 00:18:59
少なくとも煽り耐性くらい付けろよ…
2ch初心者までは歓迎してなんだが。
601588:2009/11/15(日) 00:19:30
>>598
>>597
さんはどなたでしょうか

不快なのは確かですが
自分がバカなのも確かですので仕方ないです
他の方が教えていただけたので自分は満足です
ありがとうございました。喧嘩はしないでください
602588:2009/11/15(日) 00:20:40
>>600
2ch初心者wwwwwwwwwwwwwwwwwww
ぼくは2chのプロですwwwwwwwwwww
あおっちゃうし偉そうに初心者を見下すけど解決法も提示しませーんwwwwwwwwwwwww
ってかwwwwwwwwwwwwwwwww
どんだけゆがんでんだよwwwwwwwwwwwwwww
603デフォルトの名無しさん:2009/11/15(日) 00:20:42
気にせずに、また来いよ。バカ
604588:2009/11/15(日) 00:21:26
うそですdb
605588:2009/11/15(日) 00:21:31
うそですdb
606デフォルトの名無しさん:2009/11/15(日) 00:22:11
>>604
わろたwwwwwwwwwwww
607デフォルトの名無しさん:2009/11/15(日) 00:22:49
>>594
煽るやつにしか煽り返さんよ。自覚ないのかよ?不快いう
お前が不快だ。

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

で、まじめに使う場合の話したが、具体的にはハンドル型を
SafeHandle から継承して作成してうんぬんってややこしいことを
しないといけないので大変って話だ。やりたいんなら説明は長く
なるから SafeHandle でぐぐってその辺の知識を入れてからやれ。
608デフォルトの名無しさん:2009/11/15(日) 00:27:22
香ばしいスッドレですね
609デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/15(日) 00:31:38
はい次の方どうぞ
611デフォルトの名無しさん:2009/11/15(日) 00:33:59
なんか根本的なところが間違ってる、とまではいわないまでも、考え違いをしているような気がする。
もういちどスタートラインに戻って考え直してみてはいかが?
612デフォルトの名無しさん:2009/11/15(日) 00:49:16
WebBrowserのこんとろーる?
を使ってるんだけど
IEデフォルトのショートカットを無効にして自分で設定したショートカットを使うにはどうすればいいの?
613デフォルトの名無しさん:2009/11/15(日) 01:18:17
>>573
ありがとう。研究してみる
614デフォルトの名無しさん:2009/11/15(日) 01:52:12
神回答者の俺がいなくなるとすぐに荒れるな
まったくおまえらの役立たずぶりには困ったもんだ
615デフォルトの名無しさん:2009/11/15(日) 02:17:39
さっきのものですが非表示起動はできたのですが
その後、非表示から表示にきり変える方法が分かりません
http://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デフォルトの名無しさん:2009/11/15(日) 02:25:23
>>615 すまん、Win32系のスレで聞いた方が早いかも
対象言語はC/C++になるとは思うが
617デフォルトの名無しさん:2009/11/15(日) 02:29:22
どう考えてもC#の領域だろうが
618デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/15(日) 09:11:00
ばかばっか
620デフォルトの名無しさん:2009/11/15(日) 09:14:55
>>619
自覚しているんだねw
621デフォルトの名無しさん:2009/11/15(日) 09:39:25
>>620
自覚しているんだねw
622デフォルトの名無しさん:2009/11/15(日) 10:05:50
>>619-622
自覚してるんだぜ
623デフォルトの名無しさん:2009/11/15(日) 10:33:39
ねぇ、オウムって賢いと思う?w
624デフォルトの名無しさん:2009/11/15(日) 11:02:33
コンニチハ!オハヨウ!ボクピーチャン!ヨロシク!
625デフォルトの名無しさん:2009/11/15(日) 11:04:39
>>586
やっぱContentControl渡すとスタックオーバーフローするな、これ。
何か窺い知れないオーバーロードあるかと試してみたんだが。
例示としては不適切だし、実コードなら見直しを薦める。
626デフォルトの名無しさん:2009/11/15(日) 11:23:05
try catchってなるべくつかわないほうがいいの?
627デフォルトの名無しさん:2009/11/15(日) 11:25:41
なんでそう思い至ったのか言ってみ
628デフォルトの名無しさん:2009/11/15(日) 11:49:52
ム板の感じの悪さは異常。
無駄にプライドばっかり高くてスルー能力も足りず、話を脱線してでも一言いわずにはいられない。

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

‥あ、このレスはスレチで、かつ釣りなので絶対にスルーして下さいね。
言わば例外ですが、これは仕様想定外の例外なので catch はしないで下さい。
こんなレスがある事自体が誤りなのです。その他はスルーしないで下さいね。
629デフォルトの名無しさん:2009/11/15(日) 11:54:55
簡単に画像を表示したり
graphics gとか使ったりするのはフォームでもできるけど
やっぱり画像処理はPictureBoxつかってやったほうがいいですか?
630デフォルトの名無しさん:2009/11/15(日) 11:55:46
>ム板の感じの悪さは異常。

結構学歴あって立場のある人間でも変態がいるからなぁw
631デフォルトの名無しさん:2009/11/15(日) 12:28:29
>>615
なんでだろうな? CreateProcess() して、ShowWindow() なら表示されるんだよね?
表示・非表示以外はできる、ってことだから、ウィンドウハンドルはちゃんと取れてるんだろうし。
632デフォルトの名無しさん:2009/11/15(日) 12:29:06
煽り煽られはマの基本的な習性です。言語論争など尽きる
ことがありません。そうやって知識とか整理されたり解決策を
導く兵達の世界なのです。でもこれを忘れて暗黒面に落ちる
のは自重しようね!

>>629
「画像処理」をもうちょっと詳しく。拡大縮小とかそんなの?
633デフォルトの名無しさん:2009/11/15(日) 13:12:37
楽しいからいいよ
634デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/15(日) 13:36:13
>>634
なんか最後の1行でフイタ

そのライブラリって有名なのか?
リファレンスにはその状況下でそれでハンドル出来ると書いてあるの?
最早知らないとわからない話の類だと思う
636デフォルトの名無しさん:2009/11/15(日) 14:21:56
>>635
新規プロジェクトで、>>634だけ張るとちゃんと機能してくれるんですが・・
637デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/15(日) 16:29:55
>>626
try に入る部分で負荷がかかるから
try のネストはするなってのをむかーし Java か C++でのなんかで読んだ気がする。
C#はどうなのかはあんまり気にしたことなかったなぁ。

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

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

これって、いろいろやるを行っている間は"abcd"はガベジコレクタンの対象にならずに
s="efgh"が実行された瞬間"abcd"がガベジコレクタンにぶっこわされるの?
640デフォルトの名無しさん:2009/11/15(日) 17:23:56
例外が投げられない時のtry catchのコストは無視していい。
まぁ例外のパフォーマンスを気にしないといけないほど、大量の例外を投げる作り方ってどうなのさ?
641デフォルトの名無しさん:2009/11/15(日) 18:03:29
>>640
あるとしたらフロー制御に例外を使うとかじゃない?
それが推奨されないやり方だからMSも注意を促してるってことかと。

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


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

>>640
正常系で例外を利用するようなとんでもない実装も、
異常系が頻発するような滅茶苦茶な設計も普通に駄目だろ
643デフォルトの名無しさん:2009/11/15(日) 18:07:03
>>640
ループの中でcatchしまくり&別にそれでループ脱出はしない、とか。
直接そういう書き方しなかったとしても、ループ内で呼び出してるメソッドの中の方でcatchしてたりすると
なかなか見つけづらいんじゃないかな。
644デフォルトの名無しさん:2009/11/15(日) 18:42:50
部分的に文字列の色やフォントサイズが変更されている1つのリッチテキストボックスの書式の内容を、1つのRectangle構造体の中に同じ書式で印刷することは可能ですか?

645デフォルトの名無しさん:2009/11/15(日) 18:45:43
テキストボックスの文字列を数字のみか確かめるときに
Parse使うのは駄目なの?
646デフォルトの名無しさん:2009/11/15(日) 18:52:51
>>645
try catch の流れで聞いてる?
なら TryParse を使いましょう。
647デフォルトの名無しさん:2009/11/15(日) 19:10:06
>>637
どういうことですか?
648デフォルトの名無しさん:2009/11/15(日) 19:16:37
>>642
リテラルかどうかなんて一切関係のない話だと思うけど。
649デフォルトの名無しさん:2009/11/15(日) 19:18:44
>>647
宣言が違うってことじゃね?
650デフォルトの名無しさん:2009/11/15(日) 19:19:55
>>645
正規表現使うのがオーソドックスなんじゃないの?
まあ扱う数字が非整数かつ国際化対応を考えるとちょっと面倒だったりするんだけど。
651デフォルトの名無しさん:2009/11/15(日) 19:21:14
Parse でいいだろ。指数表現とかをどうするか? とかって問題はあるけど。
652634:2009/11/15(日) 19:30:38
>>647は私では無いです
>>637
wmpはprivate AxWMPLib.AxWindowsMediaPlayer wmp;
こう宣言していました。
AxWMPを使って同じ事出来ませんか?
653デフォルトの名無しさん:2009/11/15(日) 19:32:01
そういうのはParseとかTryParseで充分じゃね?
正規表現使う程のもんじゃないと思うが。

IsDigitでシコシコチェックするメソッド作るのも別にありだと思う。
654デフォルトの名無しさん:2009/11/15(日) 19:52:04
>>648
リテラル文字列の参照はなくならないから、ガベコレの対象にはなり得ない
655デフォルトの名無しさん:2009/11/15(日) 19:55:18
>>652
何をやって何がどうできないのか、全然わからんよ。
環境やら手順やら、落ち着いて書いてみ。
656デフォルトの名無しさん: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);
}
657634:2009/11/15(日) 20:07:58
>>655
AxWMPコンポーネントをデザイナで配置し、
AxWMPLibのPlayStateChangeEventHandlerを使い、曲が終了すれば、
次の配列にある曲を再生、というプログラムを作ってました。
先日、機能拡張を図ろうと、幾つかの機能(次曲移動等の簡単なもの)を制作した後、
プログラムを起動してみると、曲の終了が検知できていなく、これに気がつきました。
それまではちゃんとイベントも捉えられていたのですが、どこを編集したのかも分からなってしまい・・・
658デフォルトの名無しさん:2009/11/15(日) 20:09:49
もう一度最初っから作り直せよ。
659634: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デフォルトの名無しさん:2009/11/15(日) 20:19:36
なんか参照とかその辺がおかしくなっちゃってるんかな。
ソース管理を使ってれば、機能拡張以前にロールバックするところだけど・・・。

変に直すより、最初っから作り直した方が早いかもよ。
661デフォルトの名無しさん:2009/11/15(日) 20:28:38
>>660
ですか。。
取りあえず参照周り弄ってみて、
駄目そうなら書き直すことにします。。

ソース管理?なるものがあるんですね。調べてみます。
662デフォルトの名無しさん:2009/11/15(日) 20:36:02
つーか、デザイナから配置したなら、わざわざコードでイベント書かなくても、プロパティウィンドウから
追加できるだろ?

実際に配置したコントロールと別のものを使っちゃってるんじゃないの?
663デフォルトの名無しさん:2009/11/15(日) 20:37:48
初めてなら TortoiseSVN あたりが無難かと>ソース管理
664デフォルトの名無しさん:2009/11/15(日) 20:42:02
>>662
それも考えましたが、そこから書いても同じでした。
現時点でwmpコンポーネントは1つしか使ってないので、
間違うというのも無いはずなので・・・
665デフォルトの名無しさん:2009/11/15(日) 20:51:41
廃棄周りの処理の流れを追うと何かヒントがあるかもしれなかったり

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

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

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

これでも数日間ソースとにらめっこしてたので、
もう新しくソース書くことにしました。。
668デフォルトの名無しさん:2009/11/15(日) 21:09:08
QuartzTypeLibを使用して動画再生をさせているのですが、動画表示部(Panel)のクリックを拾ってくれません
クリックイベントを拾う方法を教えてください
669デフォルトの名無しさん:2009/11/15(日) 21:09:51
>>668
できますん
670デフォルトの名無しさん:2009/11/15(日) 21:32:07
>>644
日本語になってねぇぇぇ。
リッチテキストボックスの内容を書式込みで印刷するのは出来る。
http://support.microsoft.com/kb/812425/ja

「1つのRectangle構造体の中に」がイミフ。
671デフォルトの名無しさん:2009/11/15(日) 22:53:02
>>669
ど、どっちなんでしょうか?
可能であれば方法を教えていただけないでしょうか?
672デフォルトの名無しさん:2009/11/15(日) 22:57:33
try{
>> 1-671
} catch {
//確かに重い
}
673デフォルトの名無しさん:2009/11/15(日) 23:15:08
>> 1-671
何でスペース入れてんの?w
674デフォルトの名無しさん:2009/11/15(日) 23:17:41
>>670
ありがとうございます!

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

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

PrintDocumentコントロールなどの中で、
そのようなことを実現するにはどうすればよいでしょうか。
675デフォルトの名無しさん:2009/11/15(日) 23:58:02
>>674
printメソッド見ると分かるけど、GraphicsのHDCの中に印刷領域決めてその中に
リッチテキストをEM_FORMATRANGE送ってレンダリングしている。
そこいら辺をゴチャゴチャと直して使えばなんとかなると思われる。
また印刷領域がGraphicsで来ることから分かるけど、普通にg.DrawXXXXとかで
他の部分も描ける。ヘッダとかフッタとか。
676デフォルトの名無しさん:2009/11/16(月) 00:00:45
その辺のメソッド流用すれば印刷プレビューが作れることも確実。俺やったもの。
677デフォルトの名無しさん:2009/11/16(月) 00:42:08
>>675
ヘッダとかフッタ…
印刷可能領域外に描けるということ?
ちなみに、印刷可能領域が用紙の端から何インチか知りたいのだけど、方法が分からない
(>_<)。
678デフォルトの名無しさん:2009/11/16(月) 03:58:09
ReleaseモードのときとDebugモードのときで
出力する実行ファイルの名前を変えるにはどうすればいいですか?
679デフォルトの名無しさん:2009/11/16(月) 04:05:47
プロジェクトでReleaseモードのときとDebugモードのときで
出力する実行ファイルの名前を変えておけばいいよ
680デフォルトの名無しさん:2009/11/16(月) 04:27:55
馬鹿はレスしなくていいよ
681デフォルトの名無しさん:2009/11/16(月) 04:52:27
バカはレスしなくていいけど
初心者相手に意味不明な専門用語をならべるベテランもレスしなくていいよ
682デフォルトの名無しさん:2009/11/16(月) 04:54:41
馬鹿は質問しなくていいよ
683デフォルトの名無しさん:2009/11/16(月) 05:06:44
なんだよジェネリックって!中で足し算できないのかよ!ファック!

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

intでもdoubleでも使える関数作るとおもったらできねー!ゴミ!考えたやつ死ね!
684デフォルトの名無しさん:2009/11/16(月) 05:11:12
つ dynamic
.NET 4.0からだけどね。
685デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/16(月) 06:40:39
T Func<T>を.net2.0でも使えるようにしたいんだけど何か方法無い?
687デフォルトの名無しさん:2009/11/16(月) 07:27:23
Generic自体は2.0からサポートされてるんだから
自分で定義したらいい。
688デフォルトの名無しさん:2009/11/16(月) 07:53:04
>>678
つ [ビルド後のイベント コマンド ライン]
689デフォルトの名無しさん:2009/11/16(月) 10:26:58
完成したアプリを大幅に変更したいのですが、
現時点でバックアップを取りたいです。

出来れば毎日バックアップが残ればいいのですが、
プロジェクトのフォルダごとコピーしておく以外に良い方法はありますか。
690デフォルトの名無しさん:2009/11/16(月) 10:53:23
>>689
バージョン管理ツールを使う
VisualStudioがStd以上ならフリーのアドインが使えるsvnがいいかも。
まあEEでもツールや文献の多いSubversion(svn)から使い始めるのがいいかな。
691デフォルトの名無しさん:2009/11/16(月) 10:58:59
git が流行ってる?
692デフォルトの名無しさん:2009/11/16(月) 11:01:13
>>689
VisualSVN+AnkhSVNオヌヌメ
693デフォルトの名無しさん:2009/11/16(月) 11:22:44
>>688
ありがとうございます
解決しました
694デフォルトの名無しさん:2009/11/16(月) 11:29:00
>>683 定義の段階ではTが何の型かわからない訳だから
たとえ中で足し算が出来ない仕様だとしても仕方無いような

渡される型にオペレータオーバライドでもできて「自型+自型と書かれた場合はどうする」が
定義出来るならテンプレ中で + が使えないとおかしいとは思う
695デフォルトの名無しさん:2009/11/16(月) 12:34:56
>>691
git流行ってるけどあれは個人で使ってもあんまり旨みがなさそうな気が・・・
696デフォルトの名無しさん:2009/11/16(月) 12:38:58
IComparable みたいに加減乗除もインターフェースあったらよかったのにねえ。
697デフォルトの名無しさん:2009/11/16(月) 12:44:36
>>696
それって演算子のオーバーロードじゃ
698デフォルトの名無しさん:2009/11/16(月) 12:58:12
ドングルみたいなUSBメモリを自分で作りたいけどハード的な知識がやっぱ必要だろしC#なんかでは作れないよね?
699デフォルトの名無しさん:2009/11/16(月) 12:59:57
プロテクトするんだったら
通常アクセスしない特定のセクタに特定のデータ書き込んでおく
700デフォルトの名無しさん:2009/11/16(月) 13:04:06
>>698 ハードのドライバは難しいかもしれない。
結局C/C++などでI/O処理書いてDLLにする形になると思う。
701デフォルトの名無しさん:2009/11/16(月) 13:19:07
>>697
いや、インターフェースがあったら
T max<T>(T a, T b) where T : IAddable, ISubable, .....
みたいなことできるよねーみたいな。
もちろん IComparable と同様に Int32 とか Double が実装してること前提だろうけど。
702デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/16(月) 13:28:24
>>699-700
ナイスな情報サンクス!

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

なんとなく方向性はつかめた気がする!
やれるだけやってみよう!!
704デフォルトの名無しさん:2009/11/16(月) 13:37:08
>>703
汎用IOドライバ使えば読み書きできるとおもわれ。
ただし、バルク転送に限られるけど(確か)
705デフォルトの名無しさん:2009/11/16(月) 14:32:59
C/C++やってました。
VS2008買ってC#を勉強しようとしていますが、
エディタの設定がデフォルトでタブが空白になるような設定になっています。
タブを空白にするメリットって自分には思いつかないのですが、どうなんでしょうか。

タブをスペースにするメリットってなんですか?
またそういう人は結構多いんでしょうか?
706デフォルトの名無しさん:2009/11/16(月) 14:38:29
ハードタブは環境によって見かけの桁数変わるから嫌う人もいる
コマンドラインでダンプする時も調整利かないから見づらい
半角空白はUnix系の人に多い気がする
707デフォルトの名無しさん:2009/11/16(月) 14:44:44
あとタブ文字は元々見たままの空白文字では無いから(機能文字/プリンタの制御コードだから)、
単にソースの見栄え整えるのに処理系で変わる機能文字使いたくない/使わない
って言う文化もある。

タブ文字に別の意味割り当ててる処理系もあったはず
708デフォルトの名無しさん:2009/11/16(月) 14:46:42
>>706
なるほど、納得です。ありがとうございます。
709デフォルトの名無しさん:2009/11/16(月) 14:52:45
VisualStudio2010ただでロードしたwww
なにこれwwwインテリセンスの強さとかマジヤバくてVC#2008Expとかウンコに見えるんですがwww

機能制限とか使用期限とかあんの?
710デフォルトの名無しさん:2009/11/16(月) 14:57:02
VisualStudioのスレなら誰か答えてくれるんじゃね
711デフォルトの名無しさん:2009/11/16(月) 15:28:19
ttp://www.dotup.org/uploda/www.dotup.org363416.jpg

これを広告したかっただけでしょう
712デフォルトの名無しさん:2009/11/16(月) 15:43:08
ちょっと和んだ
713デフォルトの名無しさん:2009/11/16(月) 16:39:58
2つのListboxにContextMenuStripを関連付けた場合。ContextMenuStripのメニューがクリック
された時にどちらのListboxから呼び出されたのか調べる方法はありますか?。
714713:2009/11/16(月) 16:44:07
SourceControlで取れるのかな
ちょっと行ってきます
715デフォルトの名無しさん:2009/11/16(月) 18:35:17
>>709
バージョン情報の右上に残り日数が出てるだろう。
716デフォルトの名無しさん:2009/11/16(月) 18:44:22
>>711
厨房仕様だな・・・・・
717デフォルトの名無しさん:2009/11/16(月) 20:06:26
>>711
おー、いいねえ
コードに詰まった時の気分転換になるな
718デフォルトの名無しさん:2009/11/16(月) 20:13:13
>>698
USBデバイスはVendor ID(メーカー固有)、Produce ID(製品種固有)、
シリアルナンバー(個体固有)の3つの識別子を持っているから、
これらを使えばどんなUSBデバイスでもドングルとして使えそう。
(正確には、シリアルナンバーを持ってないUSBデバイスもあるんだけど、
USBメモリのように一人のユーザーが複数個使用する可能性があるデバイスでは
まず間違いなくシリアルナンバーを持っているはず。)

これらのIDの取得方法は、ここが参考になりそう。
ぱっと見た感じマネージドコードだけで意外と簡単に出来そう。
http://supermab.com/mikan.html
719デフォルトの名無しさん:2009/11/16(月) 20:14:10
ソースに目がいかない
720デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/16(月) 20:33:49
>>721
Color 構造体を引数に取るメソッドに文字列を直接与える事はできないので、
なんとかしてその文字列を基に Color 構造体の値を得る必要がある。

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

でも、KnownColor 列挙体に無い色名も使うのなら、
Color.FromName メソッドは諦めて
独自の色名から rgb 値を得る Dictionary を作っておくといい。
723デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/16(月) 21:30:33
>>702
意図的に判断文に入れていないのかどうかはコンパイラには判断できないからねー
725デフォルトの名無しさん:2009/11/16(月) 21:39:06
条件分岐だから忘れるんだろう。ということで、ClassFactory みたいな形の
メソッド呼び出しにするとかどうかな?

Enum じゃなくなっちゃうけど。
726デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/16(月) 22:37:40
DateTime.Parse(lvis.Text);

これが
原因のような
気がする
728デフォルトの名無しさん:2009/11/16(月) 22:38:36
普通にList<DateTime>かIEnumerable<DateTime>.OrderByかなんかでソートしてから
突っ込めばいいじゃん
729デフォルトの名無しさん:2009/11/16(月) 22:43:26
一番単純には
×insert_point = lvis.Index;
○insert_point = lvis.Index+1;
じゃないかな?
例えば一個しかない場合にDateTime.Parse(lvis.Text) < InsterDateTimeだった
としてlvis.Index==0だから先頭に突っ込んじゃう。
730デフォルトの名無しさん:2009/11/16(月) 22:46:58
>>727-729
複数のRSSを時間をずらしながら習得しているのでその度に全部List等に入れてソートするのは
どうなのだろうと思うのです。それから日付が新しい(現在時刻に近い)ものほど上に持って来たい
ので+1だと下に来ちゃいますよね。
731デフォルトの名無しさん:2009/11/16(月) 22:47:14
ダメな人って問題の切り分けが出来ないんだな本当。
ソートはソートであって、ListViewなんか一切関係ないと思うんだが。
732デフォルトの名無しさん:2009/11/16(月) 22:47:25
他の手段は、listView1.ListViewItemSorter に IComparer 実装した無名クラス
ぶちこんどけ。
733デフォルトの名無しさん:2009/11/16(月) 22:49:39
ちょっと気になっているのですがDateTimeの比較は秒?に変換されてから行われているのですか?
734デフォルトの名無しさん:2009/11/16(月) 22:50:37
秒ではないな。Tick だろ。
735デフォルトの名無しさん:2009/11/16(月) 22:51:08
>>702
列挙型の値が追加されるだけならswitch構文が適切じゃないかな。
defaultでNotImplementedExceptionを返してあげればいい。
736デフォルトの名無しさん:2009/11/16(月) 22:52:25
>>733
なんでMSDNで調べてからものを考えないの?
737デフォルトの名無しさん:2009/11/16(月) 22:53:10
738デフォルトの名無しさん:2009/11/16(月) 22:53:23
>>733
100ns刻みの内部表現で比較される
739デフォルトの名無しさん:2009/11/16(月) 23:07:29
みなさん、ありがと。break;を追加したらちゃんと動きました、が何故・・・あぁ・・下に行くほど
小さくなるから当たり前ですね;。

insert_point = lvis.Index;
break;
740デフォルトの名無しさん:2009/11/17(火) 01:22:22
Form1.csをデザイナで開こうとすると、何故か変な文字列(XML?)が表示されるようになってしまいました。
元のようにフォームデザイナで表示するにはどのようにすれば良いでしょうか?
741デフォルトの名無しさん:2009/11/17(火) 01:26:21
手動で何かのコード追加した?
742デフォルトの名無しさん:2009/11/17(火) 01:33:25
>>722
ありがとうございます。
感謝感謝感謝です。
743デフォルトの名無しさん:2009/11/17(火) 01:34:27
どんな文字列? 頭の2行ぐらい <?xml ...?>はいらんけど
744デフォルトの名無しさん:2009/11/17(火) 01:36:11
>741
はい。ただ、何が原因なのかは分かりません。
追加部分を削除しても戻りませんので…。
ちなみに実行後は通常通りフォームが表示されます。
745デフォルトの名無しさん:2009/11/17(火) 01:40:36
コンストラクタに引数増やしちゃったとか
746デフォルトの名無しさん:2009/11/17(火) 01:41:01
>743

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

クラス Form1 はチE��インできますが、ファイルの最初��Eクラスではありません。
Visual Studio では、デザイナ��Eファイルの最初��Eクラスを使用する忁E��があります。
クラスがファイルの最初��EクラスになるよぁE��クラス コードを移動して、デザイナを再度読み込んでください、E
747デフォルトの名無しさん:2009/11/17(火) 02:00:23
ああそれなったことある
フォームより前の部分に自分でクラスのコードを追加したでしょ
追加したクラスを別ファイルに移せば直ると思うよ
748デフォルトの名無しさん:2009/11/17(火) 02:30:38
>747
解決しました!
ありがとうございます。
749デフォルトの名無しさん:2009/11/17(火) 03:36:16
DirectXの音楽再生機能(using Microsoft.DirectX.AudioVideoPlayback)を使って
Form上のボタンを押したときにmp3を再生する、
という動作を実現したいのですが下記のようにエラーが出て完全に詰まっています。
「FileLoadExceptionはハンドルされませんでした。
混合モード アセンブリはバージョン 'v1.1.4322' のランタイムに対して作成されており、追加の構成情報がないと 4.0 ランタイムでは読み込めません。」
(※こんな感じです→http://gyazo.com/4b23a2794878de446303f7841d75d8d4.png)

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

SoundPlayer等は使わずにDirectXのこの方法で再生したいのですが、助言をいただけないでしょうか?
750デフォルトの名無しさん:2009/11/17(火) 03:41:35
それ自分のソースの書き方云々じゃなくてエラーメッセージにある通りなのでは
dxdiagでバージョン見てみた?
751デフォルトの名無しさん:2009/11/17(火) 08:35:25
Buttonコントロールってフォーカス設定されてるときに
矢印キーを押したら勝手にフォーカスうつってウザイんだけど
あの設定無効化する方法ない?
752デフォルトの名無しさん:2009/11/17(火) 08:37:04
>>751
親フォームになげるようにして
そっちで潰せばいい
コントロールへの入力を親フォームが奪う方法はぐぐれ
753デフォルトの名無しさん:2009/11/17(火) 08:39:56
もしくはボタン全部に、キープレスイベントで矢印おされたらキャンセル
754デフォルトの名無しさん:2009/11/17(火) 09:10:48
>>753
無能は黙ってろよ
755デフォルトの名無しさん:2009/11/17(火) 09:36:59
>>754
初心者スレで何ふぁびょってんだおまえ?
756698:2009/11/17(火) 09:41:49
>>718
遅レスですが 情報サンクスです!
確かにUSBのシリアルとかあると・・色々応用の幅が広がりそうです。
757デフォルトの名無しさん:2009/11/17(火) 09:54:19
>>755
実際にどうなるか試してみりゃ意味わかるんじゃね?
758デフォルトの名無しさん:2009/11/17(火) 10:07:58
>>754じゃないが>>753じゃできないよ
759デフォルトの名無しさん:2009/11/17(火) 10:21:46
>>758
追試してみた。確かにカーソルキーもタブキーも>>753では検出できんな。
760デフォルトの名無しさん:2009/11/17(火) 10:27:36
キーボードプレスイベント設定するだけで簡単にできたら質問しねーよ
できねーから質問してるんだろうがボケが
バカは回答するな
761デフォルトの名無しさん:2009/11/17(火) 10:31:14
質問者が偉そうにする理由もないけどなw
762デフォルトの名無しさん:2009/11/17(火) 10:34:13
>>753では無理

でも、>>760見て教えるのやめたわ
初心者は嘘でもいいからへこへこしてろ
俺らが何年もかけて培ってきた知識、技術の一端をただで提供してやるって言ってるのに
そんな態度で教えてやるわけ無いだろボケ
763デフォルトの名無しさん:2009/11/17(火) 10:39:52
>>749
ttp://hightechrider.blogspot.com/2009/10/mixed-mode-assembly-errors-after.html
app.configにこれでどうか
// Managed DirectXは今更感漂うが
764デフォルトの名無しさん:2009/11/17(火) 10:59:37
そんなちょっと捻ればわかるようなことも
自分でできない>>760みたいなやつは正直PGやってほしくねぇな
765デフォルトの名無しさん:2009/11/17(火) 11:01:30
次は>>760は偽物ですと言い訳のレスが
766デフォルトの名無しさん:2009/11/17(火) 11:04:26
>>762
もともと答える気無いくせに偉そうなこと言うな
回答する気のあるやつなら、こういうシンプルな質問なら即レスしてるわ
おまえみたいに答えるスキルもないくせに、スレに常駐して
だらだらとケチ付ける奴はウザイから消えてくれマジで
767デフォルトの名無しさん:2009/11/17(火) 11:05:29
Windows7を含めてC#でDirectXやる場合、
今ならどういうアプローチをすればいいの?
Managed DirectXは古いの?
768デフォルトの名無しさん:2009/11/17(火) 11:06:05
>>764
何が「やってほしくない」だよ
選ばれたもののつもりか?だいたい趣味か遊びでプログラム組んでるやつはPGじゃねーし。
市ねよアホンダラ
769デフォルトの名無しさん:2009/11/17(火) 11:06:32
お前の都合で消えるわけねーだろw
770デフォルトの名無しさん:2009/11/17(火) 11:07:05
>>767
XNA使うんだ
771デフォルトの名無しさん:2009/11/17(火) 11:07:58
>>767
slimdx
772デフォルトの名無しさん:2009/11/17(火) 11:09:40
つぎのC#5はメタプログラム的なことになるらしい。
メタメタメタ!
773デフォルトの名無しさん:2009/11/17(火) 11:09:52
>>767
APICodePack
774デフォルトの名無しさん:2009/11/17(火) 11:10:33
メメタァ
775デフォルトの名無しさん:2009/11/17(火) 11:15:56
コンストラクタ1() : Base()
コンストラクタ2(int x) : this()

これでコンストラクタ2実行したらコンストラクタ1が呼ばれるけど
Baseもよばれるのか?実行すりゃすぐわかるけどめんどくせーから誰か答えろ
776デフォルトの名無しさん:2009/11/17(火) 11:17:50
ウンコして死ねボケ
777デフォルトの名無しさん:2009/11/17(火) 11:18:15
>コンストラクタ1() : Base()

これ意味なくない
778デフォルトの名無しさん:2009/11/17(火) 11:22:06
>>772
よくわからんからkwsk どうなるんだ?
779デフォルトの名無しさん:2009/11/17(火) 11:24:17
ああ、意味ないな。
質問にすら値しないレベルだ。
780デフォルトの名無しさん:2009/11/17(火) 11:25:47
コンストラクタ1() : Base()
コンストラクタ2(int x) : this()

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


まず、コンストラクタ2実行してコンストラクタ1がよばれるわけないよね
781デフォルトの名無しさん:2009/11/17(火) 11:28:07
じゃあそのまま死ねよ^^
782デフォルトの名無しさん:2009/11/17(火) 11:28:41
答えるのもめんどくせーわ
783デフォルトの名無しさん:2009/11/17(火) 11:30:32
継承時のコンストラクタの呼ばれ方すら知らないとか低脳極まりない
784デフォルトの名無しさん:2009/11/17(火) 11:31:50
もう こう言ってる間に実行が終わっている件について
785デフォルトの名無しさん:2009/11/17(火) 12:06:06
C#は良い言語なのになんで使ってる人少ないんだろうな
786デフォルトの名無しさん:2009/11/17(火) 12:10:06
このスレを見れば分かるとおり
使ってる人のレベルが低いからだよ^^
787デフォルトの名無しさん:2009/11/17(火) 12:14:59
y=sin(ωt+θ)の波形を描くプログラム
ωとθは各フォームによって指定できるようにするって問題なんですが、、、
すいません、さっぱりです。
助けてください。
788デフォルトの名無しさん:2009/11/17(火) 12:15:35
中途半端な実力でわざわざ難解な言語を使ってきたというプライドがある

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

プロだったら最新言語の情報収集も欠かすなよと言いたいが
789デフォルトの名無しさん:2009/11/17(火) 12:16:05
>>787
宿題スレにお行き
790デフォルトの名無しさん:2009/11/17(火) 12:18:11
>>789
スレ違いでサーセン
791デフォルトの名無しさん:2009/11/17(火) 12:18:12
>>787
C#,C#の宿題片付けます。
http://pc12.2ch.net/test/read.cgi/tech/1197620454/
792デフォルトの名無しさん:2009/11/17(火) 12:20:24
>>785
えっ、少ないって一昔前だろ
793デフォルトの名無しさん:2009/11/17(火) 12:23:27
むしろJavaとC#しかない
794デフォルトの名無しさん:2009/11/17(火) 12:46:23
JavaとC#とPHPとRubyかね
PerlとPythonは減ってきたイメージが。

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

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


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

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

あと重要なのは「自分にとっての新しい知識」である為、例えどれだけ道具が最新だとしても、
自分が不勉強であれば何の役に立たない。
796デフォルトの名無しさん:2009/11/17(火) 12:57:25
ツボ抑えればどの言語でもビジネスレベルのアプリなんて簡単に組めるだろ
しょせん目的を達成する手段

でもWinアプリならC#の使い勝手の良さは抜群だと思う
797デフォルトの名無しさん:2009/11/17(火) 12:59:30
人力車と自動車の利便性は同率じゃない
798デフォルトの名無しさん:2009/11/17(火) 13:42:23
test
799デフォルトの名無しさん:2009/11/17(火) 13:44:21
苦労すりゃするほどいいものが出来るなんてのは幻想だよな
800デフォルトの名無しさん:2009/11/17(火) 13:45:15
自己満足は得られますよ
801デフォルトの名無しさん:2009/11/17(火) 13:49:43
そもそもどの言語が優れているとか考えずに
とにかく多数派の言語を使う奴が大半で
C#のよさが分かる奴なんかほとんどいないんだお
笑うお
802デフォルトの名無しさん:2009/11/17(火) 13:51:50
苦労すりゃ良い物が出来るのは幻想で間違いない

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

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

804デフォルトの名無しさん:2009/11/17(火) 14:02:13
徐々に市民権は得てるんだからどうでもいいと思うけど
805デフォルトの名無しさん:2009/11/17(火) 14:02:31
dynamic便利すぎwwwwwなにこれwwwwwww
806デフォルトの名無しさん:2009/11/17(火) 16:35:53
プログラミング全くの初心者なのですが、どうか教えてください。
ある文字を入力した時にその文字にあらかじめ設定しておいた別の文字を出力するにはどうすればいいのでしょうか?
例えば1と入力した場合には50、5と入力した場合には7Aと出力し1 5と入力した場合に50 7Aと出力させる感じです。
面倒かと思いますがご教授お願いいたします。
807デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/17(火) 16:58:16
switch(nyuuryoku){
case "1":
syuturyoku="50";
break;
case "5":
syuturyoku="7A";
break;

いこうがんばって書く
809デフォルトの名無しさん:2009/11/17(火) 17:29:52
>>802
枚挙に暇が無いっていいうなら
幾つか実例挙げてくれよ
810デフォルトの名無しさん:2009/11/17(火) 18:18:25
dynamic使えば見た目は普通のオブジェクト正体はディクショナリとか
変態的なことヤリ放題だな
811デフォルトの名無しさん:2009/11/17(火) 18:21:44
使いすぎるとわけわからなくなるだろ・・・
812デフォルトの名無しさん:2009/11/17(火) 18:26:59
実際、演算やメンバ選択などオブジェクトに対するほとんどの操作を
自由に定義できるんだぞw
813デフォルトの名無しさん:2009/11/17(火) 18:29:25
>>812
その代わりに.NET CLRのもっとも強力な点である静的型付けの最適化が無効になるから程々にな。
814デフォルトの名無しさん:2009/11/17(火) 18:33:38
dynamicはDLRのキャッシュ使うから意外に遅くないよ
せいぜいボックス化+デリゲート呼び出しのコストが入るだけ
815デフォルトの名無しさん:2009/11/17(火) 18:47:51
>>809 そのくらい想像してくれよ。簡単な誰でも知ってる経験してる話だよ

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

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

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

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

人はそれを努力と見るかもしれないが、そんな事はどうでもよくて
816デフォルトの名無しさん:2009/11/17(火) 19:00:02
ぜんぜん具体的じゃねー
817デフォルトの名無しさん:2009/11/17(火) 19:02:35
>>810
だんだん言語仕様が太ってきた気がする
818デフォルトの名無しさん:2009/11/17(火) 19:02:51
関数とメソッドってどう違うんですか
819デフォルトの名無しさん:2009/11/17(火) 19:06:35
オブジェクトに紐付いてるかどうかぐらいの違いじゃないの?
820デフォルトの名無しさん:2009/11/17(火) 19:22:56
>>818
OSで言えばディレクトリとフォルダの違いのようなもの。さほど気にすることはない。

ただ、はっきり言ってしまえばC#に関数はない。
あるのはdelegateと通常のメソッドと静的メソッドだけだ。
他にイベントハンドラやらラムダやらもあるが、その辺は自分で勉強してくれ。
821デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/17(火) 19:58:13
>>815
まあ技術の変わり目にはどんな分野でもこういうアナクロ指向な人っているんだよ。
もちろん、アナクロな彼の言うことにも一理はあるけどね。
そりゃ、洗濯機があるのにあえてたらいで洗濯することで身につく技能だってあるよw

こういう人の欠陥は、視野が狭いから引いた視点から全体を俯瞰して
物事のプライオティを考えることが出来ない点だな。
825デフォルトの名無しさん:2009/11/17(火) 20:04:42
>>824 ??誰に向けて言ってんだ?

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

なんでアナクロ扱いなんだよ。思考停止はよくないぞ
826デフォルトの名無しさん:2009/11/17(火) 20:05:12
なんだ、しったかかよ
827デフォルトの名無しさん:2009/11/17(火) 20:06:50
>>821
数学でいう関数だとそうだよな。
828デフォルトの名無しさん:2009/11/17(火) 20:11:38
釣ったほうも釣られたほうもスレ違いだ
829デフォルトの名無しさん: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デフォルトの名無しさん:2009/11/17(火) 20:22:22
イベントのやり方わからん。
.netに最初からついてるフォームとかボタンとかのイベントはわかるんだが・・・

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

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

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

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

ちなみに大抵は初期化時に静的なイベントパイプラインを構築するだけだと思うが、
これを実行中に動的に切り替えるようにすればさらに強力。Stateパターンなんていらねー。
833デフォルトの名無しさん:2009/11/17(火) 20:43:47
デリゲートって何ですか?
834デフォルトの名無しさん:2009/11/17(火) 20:45:36
イベントは一応
他クラスから実行出来無いって保証が付くんだよな

835デフォルトの名無しさん:2009/11/17(火) 20:52:59
>>833
WikipediaやMSDNくらいは読んでから質問してるんだよな?
836デフォルトの名無しさん:2009/11/17(火) 20:58:31
サーバへFTP接続する実行ファイルを不特定多数へ公開した場合
ID,パスの流出可能性を出来るだけ抑えるにはどうすればいいと思いますか?
837デフォルトの名無しさん:2009/11/17(火) 21:03:08
>>834
リフレクションの前には儚い保証ではあるけどな
838デフォルトの名無しさん:2009/11/17(火) 21:32:17
>>836 それはまさかIDパスワードを埋め込むつもりって話か
なにをやりたいのか知らないが、俺なら間にCGIでも挟む
直でFTPでなくて80番経由
839デフォルトの名無しさん:2009/11/17(火) 22:02:02
CGI、PHP挟められるならそうするんですが
鯖に環境が入っていないのでそうすることも出来ないです

やっぱり、どう暗号化してもパス埋め込むのは駄目ですかねぇ。。
840デフォルトの名無しさん:2009/11/17(火) 22:16:39
あきらめろよ。
841デフォルトの名無しさん:2009/11/17(火) 22:18:33
大丈夫って保証は取れないねえ。
それに暗号化してもパケット見たらばれるし。
自PCにならパケットスニファなんて好きなだけ入れられるもんな。
842デフォルトの名無しさん: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にできない。

矩形画像を正しく切り取り、保存する方法を教えてください。
844843: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デフォルトの名無しさん:2009/11/17(火) 22:26:55
抑えるのではなく、逆にIDとパスワードは流出してもOKにすれば問題ない。
846デフォルトの名無しさん:2009/11/17(火) 22:30:52
LockBitsで直接コピーするのが確実じゃね
847デフォルトの名無しさん:2009/11/17(火) 22:38:57
>>845
繋ぐ先のFTPサーバのアカウント操作権があるならそれもありだよね。
ダウンロードのみならanonymous FTPにしちゃうってのもありだ。
848デフォルトの名無しさん:2009/11/17(火) 22:43:11
ユーザーID を本名にして、パスワードをクレジットカード番号とかにしておけばいいな。
849デフォルトの名無しさん:2009/11/17(火) 22:45:27
>>845,847
あー、なるほど。
でもアップロードも必要なので、anonymousは出来ないですね
サーバ側のFTP制御設定弄ってみます。
850デフォルトの名無しさん:2009/11/17(火) 22:45:55
>>844
どうやったかなぁ。とりあえず座標系とかオフセットモードが
関係してた希ガス。PixelOffsetMode.None してみると駄目?
補間モードとかもいじらなあかんかもしれん。
851デフォルトの名無しさん:2009/11/17(火) 22:45:55
そもそも自分でFTPアカウントを発行できない環境でそんな利用の仕方が許されるとは思えない
852デフォルトの名無しさん:2009/11/17(火) 22:46:59
>>843
Fireworks以外のドローソフトだとどうなるの?
853デフォルトの名無しさん:2009/11/17(火) 22:56:04
>>844
ツッコミどころは色々あるが、さしあたりはバグというほどのものはなさそうだな。
FireworksがDPIを真正直に解釈して誤動作起こしてるのかもしれんね。
まずはbmp形式で保存して、バイナリエディタで眺めてみたら?
854デフォルトの名無しさん:2009/11/17(火) 22:56:54
暗号化ってさ、
そんなに効果あるものなの?
実際使うのなら、起動時に複合化して、
ずっと変数に持たしておいてもいいの?
855デフォルトの名無しさん:2009/11/17(火) 22:58:36
>>854
何を? パスワードとか大事なモノを扱うときは、SecureString とか使う方がいいね。
856デフォルトの名無しさん:2009/11/17(火) 22:59:10
FTPの話は前のスレでも出たな
プロトコルの用途がちげぇって結論になった気がする
857デフォルトの名無しさん:2009/11/17(火) 23:06:23
DrawImageの描画先をint,intじゃなくてRectangleで指定する
858デフォルトの名無しさん:2009/11/17(火) 23:07:55
>>856
だな。まずはその腐った要求仕様を窓から投げ捨てろといいたい。
で、代わりのプロトコルを考えるとするならどうするか、なんだが。

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

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

企業アプリみたいにこちらで動作環境を自由に決められるなら何とでもなるんだけどね。
859デフォルトの名無しさん:2009/11/17(火) 23:09:24
>>854
パスワードを暗号化して埋めこんだんだとしても
IL解読して複合化の手順読みとられたらそれで終りだし
メモリに持ったり通信したりするときに取られちゃ意味ないし
860デフォルトの名無しさん:2009/11/17(火) 23:10:09
>>856
それは、プログラムからFTPは利用しないほうがいいってことですよね?
といっても、CGIやPHPが使えればそちらを使うのですが、
使えないので、ファイルの書き換えを行うには直接FTPするしか無いと思いまして・・・
取りあえずアカウント制御で、ディレクトリ制限を掛けてみました。
これでしばらく挙動見たいと思います
861デフォルトの名無しさん:2009/11/17(火) 23:11:50
どっかのCGI設置可能なレンタルサーバでも借りてゲートウェイでもするしかないな
862デフォルトの名無しさん:2009/11/17(火) 23:13:12
プログラムっていうかクライアントから直には止めた方いいかもね
863デフォルトの名無しさん:2009/11/17(火) 23:13:37
>>860
そのユーザIDとパスワードはFTPアカウント専用なん?
そこが分離されててchrootとかされてるならまだなんぼかマシなんだろうけど。
864デフォルトの名無しさん:2009/11/17(火) 23:16:30
telnetで接続可能なパスワードとかだったら笑えるな
865デフォルトの名無しさん:2009/11/17(火) 23:21:01
>>858
IISも無理です、基本サーバ動作のモノは全てアウトでして。
RDBは思いつきませんでした、が・・・見た感じ無理そうです・・・
>>861 レンタルサーバはちょっと厳しいです
>>863 chrootされてますです
866デフォルトの名無しさん:2009/11/17(火) 23:24:51
ftp内でのコマンドの制限とかquotaとか適切に設定されてるなら
とりあえず大丈夫なのかもしれないね
867デフォルトの名無しさん:2009/11/17(火) 23:26:06
そもそもなんでこんな危なっかしい事しなきゃいかんのだ?
868デフォルトの名無しさん:2009/11/17(火) 23:31:02
自分で試してみましたが、取りあえずchroot周りはうまく制御されてるみたいです
もっと良い方法があれば教えてください。
これでしばらく試してみます。ありがとうございました。
869749:2009/11/18(水) 00:44:38
>>750 >>763
遅くなりましたが、ありがとうございます!
こちらにある通りApp.configを修正して実行してみましたが、やはり上手くいきませんでした(固まっちゃって再起動)
ttp://hightechrider.blogspot.com/2009/10/mixed-mode-assembly-errors-after.html

あまり理解できていませんが、最近のランタイムでは使えなくなった可能性が高いということでしょうか。
とりあえず今回は他の方法で実現するという方向性に逃げました。
870デフォルトの名無しさん:2009/11/18(水) 00:56:52
つーか、環境ぐらい書けば? .NET Framework 4.0 なんて入れてんの?
871デフォルトの名無しさん:2009/11/18(水) 01:01:42
そりゃ入れてるから「4.0 ランタイムでは読み込めません」なんてメッセージが出るんだろう
872デフォルトの名無しさん:2009/11/18(水) 01:02:13
Windows SDKってどこからダウンロードできますか?
ググって飛んだら

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

といわれました
873デフォルトの名無しさん:2009/11/18(水) 01:04:26
ベータのランタイムなんて入れてんのが悪いんだろ?
874デフォルトの名無しさん:2009/11/18(水) 01:32:13
875デフォルトの名無しさん:2009/11/18(水) 01:34:42
C#では、C,C++における『CLOCKS_PER_SEC』のようなものってありませんか?
876デフォルトの名無しさん:2009/11/18(水) 02:03:51
switch(foo){
 case BAR: /*....*/ break;
 case BAZ: /*....*/ break;
default:
// バグってなければ絶対こないところ
}

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


 
877デフォルトの名無しさん:2009/11/18(水) 02:07:55
ArgumentExceptionとか
878デフォルトの名無しさん:2009/11/18(水) 02:10:44
>>875
のようなものっていわれても
それでなにしたいのさ
879843: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デフォルトの名無しさん:2009/11/18(水) 02:29:46
>>876
InvalidFooException
881デフォルトの名無しさん:2009/11/18(水) 02:35:28
>878
すみません。定数が用意されているならそれを使おうかと思いまして
882デフォルトの名無しさん:2009/11/18(水) 02:51:33
>>876
メソッド利用者にパラメータが間違っていることを通知したい場合
 → InvalidEnumArgumentException

コーディングミスによってありえないフローになっているのを検出したい場合
 → Debug.Fail(), Trace.Fail()
883デフォルトの名無しさん:2009/11/18(水) 03:31:43
>>879
>857の言うように、GraphicsUnit指定による呼び出し方によって発生する内部の変換処理を避けるわけか。
まあそりゃあそうだわな。そこが今回の不具合の直接の原因なわけだし。

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

こんなとこかな。
884デフォルトの名無しさん:2009/11/18(水) 04:07:59
大規模なプログラムになるとプロパティ使うんだろうけども
個人で使う小規模なプログラムってメンバ変数をpublicにしおいても問題ないよね?
885デフォルトの名無しさん:2009/11/18(水) 04:12:18
自動実装プロパティにしとけば?
886843: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デフォルトの名無しさん:2009/11/18(水) 05:25:45
C#ってマイクロソフトが作ったの?
888デフォルトの名無しさん:2009/11/18(水) 05:37:22
>>886
俺はおまえさんの主張に大体同意だな
そもそも宗教的なことまで突っ込みを入れるのは回答者の分を超えてると思うよ
889デフォルトの名無しさん:2009/11/18(水) 06:11:25
>>886
俺もおまえさん寄りの意見だが、
突っ込んでくださいと言っておきながら、
それは違う、あれは違うと条件を付けて反論するのはどうかと思う。

自信があるなら最初から聞くな。
聞いた以上は真摯に受け止めるか、
変なやつに聞いちゃったとスルーなさい。
890デフォルトの名無しさん:2009/11/18(水) 07:30:40
プライドだけは一丁前
891デフォルトの名無しさん:2009/11/18(水) 07:39:05
>>889
それはおかしい
教えを請うたからといって間違った回答や、
自分の方針と反する内容を無条件で聞く必要はない
かといってスルーするのは礼を失している
886の対応は真摯な態度だと思うぞ
892デフォルトの名無しさん:2009/11/18(水) 07:40:20
>>886
>2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは?
>ループ内部で使いまわせる変数は外出しすべきだと僕は思います。

少なくとも今回のケースでは、変数宣言を外に書いても速度的にメリット無いよ。
変数宣言を一回通るたびに実行コストがかかるとか杓子定規に考えてない?
893デフォルトの名無しさん:2009/11/18(水) 07:44:00
なんでC#はmain()じゃなくてMain()
なんだろうな。
cもc++もjavaもmainで始まったのに、なぜC#はMainなの?それだけ気になる。
894デフォルトの名無しさん:2009/11/18(水) 07:45:57
横だけど・・・
え、そうなの?
スコープ入ったときにスタックに確保、
スコープ出るときにスタックから解放って処理普通にやってんのかと思ってた。
895デフォルトの名無しさん:2009/11/18(水) 07:47:47
>>893
命名規約の問題でしょ。
メソッド名はUpperCamelCaseで表すってルールにしてるから"M"ainになってるだけ。
なんでUpperCamelCaseを採用したのかは言語設計者のポリシーなんだろね。
896デフォルトの名無しさん:2009/11/18(水) 07:56:40
黎明期の言語じゃあるまいし
897デフォルトの名無しさん:2009/11/18(水) 07:57:42
>>891
無条件で聞けなんてどこにかいてあんの?

ま、どっちもどっちだ
898デフォルトの名無しさん:2009/11/18(水) 08:01:58
>>897
>聞いた以上は真摯に受け止め
899デフォルトの名無しさん:2009/11/18(水) 08:09:20
>>894
C#で書いたコードをReflectorで逆コンパイルしたときに現れるgotoだらけのコード見たことない?
見てみれば分かるけど、結構オブジェクトの寿命が変わるような書き換えがされている。
変数スコープが終わる前にGCされてファイナライザが呼ばれることがあるのはこのため。
900デフォルトの名無しさん:2009/11/18(水) 08:12:42
>>899
なるほど
ちまちましたコードレベルの最適化はほんとに意味なくなってきてるんだなぁ
勉強になった
901デフォルトの名無しさん:2009/11/18(水) 08:41:55
>>898
日本語が理解できない人だったんですね。
これは失礼しました。
902デフォルトの名無しさん:2009/11/18(水) 08:48:42
>>886
>StringFormatもargs指定ミスはコンパイル時に発見されないので +でつないでます。
なんでやねん。テストコード書けばテストできる範囲でしょ。
>2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは?
実行時最適化が行われる.NET Frameworkの世界でそんな議論しても無意味だよ。
そして、むしろvar構文自体より(便利なものは積極的に使うべきだと思うが)ローカルインスタンスの明示的な初期化(=null;)のほうが問題。
C#ではすべての変数はデフォルト値で初期化されることが保証されているので
object obj=null;
などという初期化は無意味。それどころか変数が使われなくなると初期化なしだとワーニング出してくれるけど
初期化してると出してくれなくなったりするので余計に悪化している。
903デフォルトの名無しさん:2009/11/18(水) 09:14:39
>>893
Javaの皮を被ったDelphiだから
904デフォルトの名無しさん:2009/11/18(水) 09:18:19
varはなんか、なんかちょっと多様したら不味いことがおきるんじゃないかって気がしてならない
具体的に何が起きるのかはわからんけど

dynamicもしかり・・・
905デフォルトの名無しさん:2009/11/18(水) 09:19:59
メソッド名がCamelCaseなのはMSの旧来の伝統
>>904
むしろvar使ったら読みづらくなるようなスコープの長い変数を作るのが悪い
906デフォルトの名無しさん:2009/11/18(水) 09:21:56
>>902
> object obj=null;
> などという初期化は無意味。
可読性的には意味がある

>それどころか変数が使われなくなると初期化なしだとワーニング出してくれるけど
> 初期化してると出してくれなくなったりするので余計に悪化している。
ダウト
907デフォルトの名無しさん:2009/11/18(水) 09:23:41
object obj;
object obj = null;

どう可読性に違いが
908905:2009/11/18(水) 09:25:02
すまんPascalCaseだった
フィールドを既定値(default(type)の値)で初期化するとFxCopで警告出るよ
909デフォルトの名無しさん:2009/11/18(水) 09:29:30
FxCop日本語版は有料なのか・・・
910デフォルトの名無しさん:2009/11/18(水) 09:33:25
ttp://msdn.microsoft.com/ja-jp/library/ms182274.aspx
これだな
パフォーマンスは今のコンパイラでは関係ないが冗長だからやめろということらしい
FxCopはコメントのルールだけ外しとけば日本語ソースでも普通に使える
911デフォルトの名無しさん:2009/11/18(水) 09:35:13
ローカル変数の確保は内部的にはメソッドスコープだよ。
そんなのを気にしながらBitmapをループ内で作るって…
912デフォルトの名無しさん:2009/11/18(水) 09:39:02
世の中富豪的っていうかこまけえ最適化はコンパイラがやってやんぜ!!な方向に
確実に進化してるんだなぁ
913デフォルトの名無しさん:2009/11/18(水) 09:39:09
>>907
皆が皆C#だけやってると思うなよ?
914デフォルトの名無しさん:2009/11/18(水) 09:39:59
nullの方がヌルヌルして入りやすい
915デフォルトの名無しさん:2009/11/18(水) 09:42:13
ローカル変数はデフォルト値で初期化されるって、されないよ。
だから必ずどこかで代入してから参照する必要があり、でないとエラーになる。
もちろん宣言と同時に代入するのでなくとも、どこかで入れればいいが、
宣言で代入するのが普通は分かりやすいけどな(というかできるだけ最初に代入する必要がある場所で宣言する)。

初期化が保証されてるのはフィールドだ。
916デフォルトの名無しさん:2009/11/18(水) 09:45:37
>> 2重forで300回近くループするのでfor内部で変数宣言は好ましくないのでは?
>実行時最適化が行われる.NET Frameworkの世界でそんな議論しても無意味だよ。
実行時最適化関係ないよ。
ILの時点でローカル変数はメソッドスコープで確保される。
917デフォルトの名無しさん:2009/11/18(水) 09:51:52
実際ループ内でしか使わない変数ならループ内で宣言してくれた方が
コード読む時も余計なこと考えなくてすむしメソッド化する時とかも便利だしなぁ。
#メソッド化すると呼び出しコスト↑と結局毎回確保になっちゃうけど
918デフォルトの名無しさん:2009/11/18(水) 10:00:03
まあちっちゃなメソッドならインライン展開されるけどな。
とはいってもかなり小さい場合だけだったとは思うけど。
919デフォルトの名無しさん:2009/11/18(水) 10:11:41
>>915
ttp://msdn.microsoft.com/ja-jp/library/aa691170(VS.71).aspx
これか、なるほど
俺ずっと勘違いしてたわ。
920デフォルトの名無しさん:2009/11/18(水) 10:16:40
最終的にILになれば同じつうならあとは好みの問題だろう・・・

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

というのが俺の持論
もちろん事務系とかの話でFA系の処理とかになれば必要なところは可読性捨ててでも速度UPとるけど
921デフォルトの名無しさん:2009/11/18(水) 10:18:50
みんながどのコードを前提に話してるのか見えないんだが・・・
ループ内で宣言したくないのって言うと、
よっぽどでかいインスタンスを毎回newして捨てるとか
そいういう場合?
922デフォルトの名無しさん:2009/11/18(水) 10:49:08
変数のスコープを最小限にするのは宗教でもなんでもなく常識だろ
宣言だけループ外に置いて、わざわざミスが起こる確率を増加させる必要はない

あと、理由もなくローカル変数を規定値などに初期化するのも良くない
たとえば、未初期化の変数を参照するとコンパイルエラーになるので即座に分かるが、
無駄に初期化していると問題の発覚が遅れ、デバッグに要する時間も増える
923デフォルトの名無しさん:2009/11/18(水) 12:28:52
>>922
処理上で意味のある値で初期化するんであって
常に null で初期化すると勘違いしてるから
そういう的外れな反論が飛び出すんだろう
924デフォルトの名無しさん:2009/11/18(水) 12:45:14
インスタンス化の削減も微妙だけどな。
もちろんサイズがでかかったりインスタンス化が重いもので
かつ再利用できるものならループ内でのインスタンス化を削減するのもいいが、
何でもかんでも削減すりゃいいってもんじゃない。
よっぽどタイトなループなら別だが。

個人的には、よく言われるStringBuilderの再利用なんかも微妙だと思ってる。
平均的にはある程度効果はあるが、常識のようにやるべきこととは思えない。
925デフォルトの名無しさん:2009/11/18(水) 12:46:59
「理由もなく」初期化すんなよってことであって
意味あって null で初期化すんのはべつにかまわんと思うけどな。

926デフォルトの名無しさん:2009/11/18(水) 12:48:26
>>924
そういうのは最適化部分を狭いメソッド内に押し込めればOKってルールでやってるなあ。
927デフォルトの名無しさん:2009/11/18(水) 12:50:40
なぜなら、StringBuilderのToStringは内部バッファをそのまま流用してString化するから。
その後StringBuilderに変更を加えた時点でバッファは複製される。
当たり前だけど結局メモリの再確保は起こるわけで、
StringBuilderを新たにインスタンス化するのと大差があるわけではない。
928デフォルトの名無しさん:2009/11/18(水) 12:56:54
そんな細かいこと考えるよりもっとロジック工夫して高速化しろよ
929デフォルトの名無しさん:2009/11/18(水) 12:57:56
だれに言ってんだよ
930デフォルトの名無しさん:2009/11/18(水) 13:00:19
今日もお前ら絶好調だな
931デフォルトの名無しさん:2009/11/18(水) 13:04:50
もっと褒めて
932デフォルトの名無しさん:2009/11/18(水) 13:22:08
結局そういうのもバッドノウハウになってくんだろな
933デフォルトの名無しさん:2009/11/18(水) 13:27:34
>>906
スマンカッタ。確かにフィールド、ローカル変数共に初期化してても他で使ってなかったらワーニング出るな。
初期化してないときとワーニングの内容は変わるけど。

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

>>923,925
844のBitmap、Graphicsインスタンスのnull初期化は不要だよな?
934デフォルトの名無しさん:2009/11/18(水) 13:32:32
まあ初期化なくす前に明らかに宣言位置を変える方向だが。
宣言位置が適切なら、多くの場合その場で初期化が自然になるからね。
もちろん意味のない初期化はするべきではないけど、
上記を守れば基本的にそういうのはなくなるはず。
935デフォルトの名無しさん:2009/11/18(水) 13:54:00
>>933
>844のBitmap、Graphicsインスタンスのnull初期化は不要だよな?
不要だがあったからといって悪い訳じゃない
936デフォルトの名無しさん:2009/11/18(水) 14:05:32
チームの規約にしたがうレベル
戦ってまで守らなきゃいけない一線ではないわな
どっちにしても
937デフォルトの名無しさん:2009/11/18(水) 14:14:32
>>935
>Bitmap、Graphicsインスタンスのnull初期化は不要だよな?
インスタンスのnull初期化じゃなくて変数(ry
938デフォルトの名無しさん:2009/11/18(水) 15:48:55
formAからform.showでformBを開いた後、不要になったformBを×ボタンで閉じます。
この時、formBのリソースは全て開放されますよね?。
939デフォルトの名無しさん:2009/11/18(水) 15:52:19
ガベージコレクションの対象にならないと開放されないよ。
940デフォルトの名無しさん:2009/11/18(水) 15:57:44
そのformという変数を保持している間は解放されないかな
941デフォルトの名無しさん:2009/11/18(水) 16:17:16
規定のインスタンスを使用している場合はアプリ終了まで保持されるというような話を聞いた。
(でもこれってたしかVB.NETの話だったような。C#では規定のインスタンスってあるんかな?)
942938:2009/11/18(水) 16:27:33
そうなるとFormClosingでちゃんと処理してから終了させた方が良さそうですね
ありがとうございます
943デフォルトの名無しさん:2009/11/18(水) 16:32:41
>>942
いあ、そういふ意味ではないんだが。
Form_Closingイベントとメモリ開放は別話。
944デフォルトの名無しさん:2009/11/18(水) 16:43:17
>>942
モーダルダイアログならFormAで次のようにFormBを表示し
using(Form formB = new FormB())
{
 formB.ShowDialog(this);
}
formBフォームの中で使ってるリソースはFormBのDisposeをオーバーライドして行う
945デフォルトの名無しさん:2009/11/18(水) 18:36:44
Form2のClosingでForm2自体をDisposeしちゃ駄目ですか
946デフォルトの名無しさん:2009/11/18(水) 18:53:18
>>944
学生さんだね。
社会に出ればわかるけど冤罪も罪のうち、疑わしきは罰するってのは法治国家の不文律だよ。
947デフォルトの名無しさん:2009/11/18(水) 18:57:32
>>946 逝ってよし
948デフォルトの名無しさん:2009/11/18(水) 19:17:47
>>945
なんでそんな無茶しようとするんだよっ
949デフォルトの名無しさん:2009/11/18(水) 19:28:05
推定無罪
950デフォルトの名無しさん:2009/11/18(水) 19:33:39
最低値、最大値、除外値を引数とする関数を用意し、
最低値から最大値までの間で、除外値以外がランダム算出されるまで繰り返し、
それを返すためにはどうすればいいですか?
951デフォルトの名無しさん:2009/11/18(水) 19:41:46
>>950
そのまんま言ったとおりに書けるような・・・
なにがわからない?
乱数?

Random rand = new Random();
int value = rand.Next(min, max);
952デフォルトの名無しさん:2009/11/18(水) 19:42:55
>>951
それじゃ max が含まれないから max + 1 な
953デフォルトの名無しさん:2009/11/18(水) 19:49:53
>>951
除外値を考慮していないぞ
954デフォルトの名無しさん:2009/11/18(水) 19:56:30
>>953
いや、だからあとは除外値以外でるまでループすりゃいいだけでしょうが・・・
こんなのの何がわからないのかがわからんわ
955デフォルトの名無しさん:2009/11/18(水) 20:10:29
除外値を除くような処理が無いかなと思ったのですが、
やっぱりループさせないと駄目ですかね
956デフォルトの名無しさん:2009/11/18(水) 20:13:14
あるわけないじゃん
仮に除外値を指定できたとしても内部で除外値以外が出るまでループする以外に実装する方法がない
957デフォルトの名無しさん:2009/11/18(水) 20:13:54
うん。randomクラスは単純処理しかできない
958デフォルトの名無しさん:2009/11/18(水) 20:28:21
除外値が必要なんていう固有の都合は自分で実装するの
959デフォルトの名無しさん:2009/11/18(水) 20:28:56
>>951の方法って本当にランダムなんですか?
960デフォルトの名無しさん:2009/11/18(水) 20:34:20
「本当にランダム」って何よw
961デフォルトの名無しさん:2009/11/18(水) 20:37:44
>>951のコードだけをそのまま動かしたら
前の呼び出しから1ms以上経ってないと同じ値が出るけど
962デフォルトの名無しさん:2009/11/18(水) 20:46:07
963デフォルトの名無しさん:2009/11/18(水) 20:48:49
起動せんし。ランダム。
964デフォルトの名無しさん:2009/11/18(水) 20:51:33
>>961
あたりまえじゃん・・・
ドキュメント読めよ・・・
965デフォルトの名無しさん:2009/11/18(水) 20:59:53
WindowsXPでVistaのガジェットみたいにデスクトップにアプリを表示するにはどのようにすればいいのでしょうか?
966デフォルトの名無しさん:2009/11/18(水) 21:37:00
フォームのLoadイベントあたりで
this.FormBorderStyle = FormBorderStyle.None;で枠を消す
this.Regionプロパティを弄って好きな形に設定する
967デフォルトの名無しさん:2009/11/18(水) 21:40:38
むしろ都合や目的をどうやって実現するか考えて頭ひねって形にしていく事こそがプログラミング
であるまげどん

エンダアアアァァァァ〜イヤアアア〜〜
968デフォルトの名無しさん:2009/11/18(水) 21:42:09
プログラミング初めてで数週間やってきたのですが、
クラスの概念がよく分かりません。
Form1で始めに作られたクラスにメソッドとイベントハンドラ組み合わせるだけで、
大抵のプログラムは作れると思うのですが、本来の使い方と間違ってたりしますか?
969デフォルトの名無しさん:2009/11/18(水) 21:48:38
そもそもクラスとかが分かってないと話が通じないんだよ。まずは余計なこと考えずに勉強しろ。
970デフォルトの名無しさん:2009/11/18(水) 21:50:48
>>965
MakeTransparencyだかthis.BackColor=Color.Transparensy
だかなんだかでできた。

>>968
それでもたいていのプログラムは作れるが
他人が作ったコードやサンプルを読むことができない
それでもいいならそれでいいんじゃね
971デフォルトの名無しさん:2009/11/18(水) 21:51:59
いえ、クラスの使い方とかは分かってるんです。
インスタンスだとか、継承だとかも分かってるんですが、
実際に使う機会有りますか?
クラスも1つのフォームに1つあれば難無さそうなんですが・・・
972デフォルトの名無しさん:2009/11/18(水) 21:52:10
>>968
クラスの概念て話ならオブジェクト指向、あたりでググれば解説が山盛り出てくるぞ
あと Form1 云々の話は Windows の Visual Studio C# 等の固有の話で、
それで色々出来るからってそれが間違いとか正しいとかってもんじゃない
てか、それとクラスの概念の話はあんまり関係ない
973デフォルトの名無しさん:2009/11/18(水) 21:54:45
>>971
え?おまえフォームのインスタンス生成しないでフォームつかってんの?
二つのフォームつくるときとかどうしてんの?ありえねぇよ
974デフォルトの名無しさん:2009/11/18(水) 21:58:11
>>973
あ、一気にもやもやしてたこと理解しました
Form生成するときにインスタンス使いますね。あー。あー。
俺何言ってるんだろう。お恥ずかしい。
975デフォルトの名無しさん:2009/11/18(水) 21:58:39
>>971 処理の単位化、分離分業の意味が多分わかってないか、
まだ必要と思える経験に出くわしてないんだと思う。

実際に使う機会どころか、むしろ必須と言うか‥
てか想像してみ。ライブラリにあるクラスが山盛り1個のソースに突っ込まれてる状態を
クラス単位での分離分業が不要だとすると、極端な話そうなってしまう
976デフォルトの名無しさん:2009/11/18(水) 22:02:01
.net2.0系でFunc<int,int>とかを使いたいけど何か方法無い?
977デフォルトの名無しさん:2009/11/18(水) 22:19:34
自力で定義したらいいんじゃない?
978デフォルトの名無しさん:2009/11/18(水) 22:20:47
C++の
int x;
int& y = x;

みたいなことって出来ないですか?
refって引数にしか使えないですよね?
ポインタを使うと、時間が経つとガベージコレクションでxのアドレスが変わるのか、
yが指す値が変わってしまうのでダメっぽいのですが・・・
979デフォルトの名無しさん:2009/11/18(水) 22:21:18
ない。
自分で定義するしか。
980965:2009/11/18(水) 22:24:55
>>970
それってWin+Dでデスクトップを表示したときには消えるんじゃない?
981デフォルトの名無しさん:2009/11/18(水) 22:29:38
>>978
通常の変数で参照型を使いたいならクラスにするしかないね・・・
982デフォルトの名無しさん:2009/11/18(水) 22:30:48
>>978
unsafe キーワード
983デフォルトの名無しさん:2009/11/18(水) 22:44:04
>>978
一応隠しキーワードでこういうことができる
int x = 0;
TypedReference y = __makeref(x);
x = 100;
Console.WriteLine(__refvalue(y, int));
実際のコードで使ったら死刑ね
984デフォルトの名無しさん:2009/11/18(水) 22:59:08
>>983
何で使うと駄目なんですか?
985デフォルトの名無しさん:2009/11/18(水) 23:02:49
常識的に考えて__で始まるキーワードは使いたくないだろうw
__系はP/Invokeで可変長引数を扱うためだけに用意されてる
ドキュメント化されてないってことはいつ消えても文句言えないってことだぞ
986デフォルトの名無しさん:2009/11/18(水) 23:06:27
そもそもC#の言語仕様の範囲外だから使ったらC#のコードじゃなくなるな
987978:2009/11/18(水) 23:21:43
みなさんありがとうございます。
難しそうなので、とりあえず諦めて別の方法探すことにします。
988デフォルトの名無しさん:2009/11/18(水) 23:22:05
>>985
でも、なかなか消えないんでしょう?
989デフォルトの名無しさん:2009/11/18(水) 23:32:08
>>988
消えないかもしれないし消えるかもしれない

あるときフレームワークをバージョンアップしたらソフトが動かなくなりました
とか5年後に言われてその時に簡単にソフトを治せるならどうぞ

なぜほかのみんなが推奨していないかの可能性を考えてみればどう?
その程度の動作の為だけにリスクがでかすぎる
職業でソフト組めばわかるよ
990デフォルトの名無しさん:2009/11/18(水) 23:40:39
質問を勝手に自分の理解できる範囲の問題に解釈し直すのはいくない
991デフォルトの名無しさん:2009/11/18(水) 23:42:09
>>950
亀レスで申し訳ないが、それだと
例えば最低値=5で最大値=7で除外値=6の場合、1/3の確率でrand.Nextを再度呼び出すことになるわけだが、
本当にそれでいいのか?
除外値が1つだけだったらそんなに問題にはならないと思うけど……
992デフォルトの名無しさん:2009/11/18(水) 23:53:19
質問を勝手に自分の理解できる範囲の問題に解釈し直すのはいくない
993デフォルトの名無しさん:2009/11/18(水) 23:56:58
ふらっとC#,C♯,C#(初心者用) Part48
http://pc12.2ch.net/test/read.cgi/tech/1258556187/
994デフォルトの名無しさん:2009/11/19(木) 00:01:11
スレ立て乙
995デフォルトの名無しさん:2009/11/19(木) 00:06:47
乙乙
996デフォルトの名無しさん:2009/11/19(木) 06:46:41
>>991
それでいいんだよ
997デフォルトの名無しさん:2009/11/19(木) 18:26:28
うめ
998デフォルトの名無しさん:2009/11/19(木) 20:29:31
WindowsMobile用のアプリってC#で作れるの?
999デフォルトの名無しさん:2009/11/19(木) 20:45:33
うめ
1000デフォルトの名無しさん:2009/11/19(木) 20:46:26
げと
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。