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


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

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



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

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

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

ふらっとC#,C♯,C#(初心者用) Part55
pc12.2ch.net/test/read.cgi/tech/1265288563/1

関連スレ
C#, C♯, C#相談室 Part55(実質56)
pc12.2ch.net/test/read.cgi/tech/1260111240/1

VB.NET質問スレ(Part33)
pc12.2ch.net/test/read.cgi/tech/1263738929/1

C++/CLI part3
pc12.2ch.net/test/read.cgi/tech/1206447234/1

331 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 17:49:54 ]
HashSet<T>がそれですか。
ありがとう。

332 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 17:50:34 ]
というか、集合(set)を実現したいというならちゃんとそう説明しないと、

Dictionary<TKey, TValue>.KeyCollection

とか答えちゃうぞ

333 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 17:58:00 ]
>>332
一般的な呼び方がわからなかったので329のように書きましたが
以降はそうさせてもらいます。

334 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 20:11:54 ]
ロギングについて質問です。
例外発生時にエラーログを出力したいのですが、
後で統計などを取るためにプログラムから読みやすい形を考えています。
ただし、バイナリはNGにしたいと思います。

独自のErrorクラスを作って、その配列をXmlSerializerや
SoapFormatterでSerializeというのを考えたのですが、
こういう手法というのは一般的に見てどうでしょうか。

書き込むのにDeserialize→配列に追加→Serializeという手順になるので、
パフォーマンス上は不利だとは思いますが、
試しに3MB位までログ容量を増やしても体感上は遅延は感じませんでした。
本番運用では100KB以内で収まる程度だとは思います。

335 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 20:13:02 ]
専用のTraceSourceというクラスを使う
XMLにも出力できる

336 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 20:15:52 ]
>>327
ないね
かなり小さいコードでもインテリセンスに頼った方が早かったりする
スクリプト言語はコンパイルが不要なことに意義がある

337 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 20:17:05 ]
log4netとか使っちゃうな。

338 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 20:37:42 ]
sage

339 名前:334 mailto:sage [2010/03/08(月) 20:39:59 ]
>>335,337
ありがとうございます。調べてみます。



340 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 10:10:21 ]
>>337
あれ結構便利だとは思うけど
やれる事が多いだけに設定がめんどくせぇ・・・
俺の中では設定ファイルの中身グチャグチャにされるイメージがでかいかな・・
今は必要な機能だけ持った独自のログ機能自作して使ってるわ

341 名前:デフォルトの名無しさん [2010/03/09(火) 12:45:06 ]
bmpのファイルのロックを解除する方法を教えてください。
WPFでjpg画像を読み込んでいます。
BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.UriSource = new Uri(fileName);
bmp.CacheOption = BitmapCacheOption.OnLoad;
bmp.EndInit();

これで、jpgが壊れているときに、
bmp.EndInit();
でエラーになります。
そこで、これ全体をtry-catchして、エラーが出たらDisposeしようと考えました。
catch{
bmp.Dispose();
Close();
}
としたのですが、bmpにはDispose()が見当たりません。
どうやってDisposeして終了したらよいでしょう?
WPF掲示板は初心者の質問には答えていただけないようなので、
こちらに来ました。
よろしくお願いします。


342 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:46:49 ]
最近この板でキモいC#信者が暴走してるから自重するように

343 名前:デフォルトの名無しさん [2010/03/09(火) 12:59:43 ]
>>341
以前とあるソフト書いたときはこんな感じにしたな
FileStream fs = new FileStream(save,FileMode.Open);
b = new Bitmap(fs);
fs.Close();
fs.Dispose();

これだと自分でdiposeできるのでロックがかかったままにならない
どこかにこれはあったはず(@ITあたりにサンプルコードあったはず)

344 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 13:03:42 ]
>>343
それSystem.Drawingや、と
まあWPFでも同じ回避方法になるね
UriSourceじゃなくてStreamSourceを使う
ていうかこれはバグだなー

345 名前:デフォルトの名無しさん [2010/03/09(火) 13:04:37 ]
>>341
StreamSource
考え方は>>343

346 名前:デフォルトの名無しさん [2010/03/09(火) 13:06:27 ]
>>344
バグというか仕様というか仕様考慮漏れというか
GCをあてにする言語なんでこういう仕様も許容範囲かと
コード書く側でまったく対処できないなら問題だけどね

347 名前:デフォルトの名無しさん [2010/03/09(火) 13:10:12 ]
>>343の補足
saveってのはこの前のロジックの都合でそうなってるだけで
fileNameとか自分の環境にあったのに書き換えてね

348 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 13:13:34 ]
>>346
いや、内部でStream作ってるんだからそれを例外時にCloseしないのは問題でしょ
「using使えよ」的な話
ストリームをCloseしたときに例外が出たって状況ではないんだから

349 名前:デフォルトの名無しさん [2010/03/09(火) 14:03:42 ]
>みなさんありがとうございます。
が、下記のコードで、画像が表示されなくなりました。
読み込めていないようです。
どこがまずいでしょう?

BitmapImage bmp = new BitmapImage();
try{
//FileStream fs = new FileStream(fileName, FileMode.Open);
//bmp = new BitmapImage();
//fs.Close();
//fs.Dispose();
bmp.BeginInit();
//bmp.UriSource = new Uri(fileName);
bmp.StreamSource = new FileStream(fileName, FileMode.Open);
bmp.CacheOption = BitmapCacheOption.OnLoad;
bmp.StreamSource.Close();
bmp.StreamSource.Dispose();
bmp.EndInit();
}catch{
Close();
}




350 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 14:07:09 ]
EndInitする前にCloseしたらそりゃダメだろ…
あとCloseとかDisposeとかは明示的に呼ぶんじゃなくてusing構文で

351 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 14:15:21 ]
なんでusingという名前にしたんだろうな?まぎらわしい( ・ω・)y─┛〜〜

352 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 14:20:25 ]
正常な場合はCloseしちゃだめ。
基本的にオープンの状態を維持して読み直せるようにしないといけない。

353 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 14:23:59 ]
>>352
BitmapCacheOption.OnLoadの場合ロード時=EndInit時にデータを全部メモリにコピーしちゃうから
元Streamがどうなろうがしったこっちゃないよ

354 名前:デフォルトの名無しさん [2010/03/09(火) 14:25:28 ]
その辺うまく使いこなせないならMemoryStreamで読み込みできるように
自分でメモリに上げちゃえばいいんじゃないの?

355 名前:デフォルトの名無しさん [2010/03/09(火) 14:54:55 ]
>みなさんありがとうございます。
bmp.EndInit();
bmp.StreamSource.Close();
bmp.StreamSource.Dispose();
と順番を変更してうまくいきました。
ありがとうございました。


356 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:15:28 ]
配列に入っている値の符合をプラスから全部マイナスにしたいんだけど、簡単に出来る方法はないですか?
もちろんループをつかって全部−1を掛け算すればいいんだけど、ビット演算とかで簡単にできないかなーと思って

357 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:17:21 ]
ループが一番簡単だろ

358 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:27:46 ]
最近は2の補数とかやらないのか・・・

359 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:29:03 ]
それ以前に配列なんだからループ以外にどうしろと



360 名前:デフォルトの名無しさん [2010/03/09(火) 15:30:25 ]
>>356
int32の場合だと-1かけるっていうのは0xFFFFFFFFをかけるってことだけど
素直に計算したほうがいいんじゃないの?

参考までに

1*-1は0x00000001*0xFFFFFFFF=0xFFFFFFFF
2*-1は0x00000002*0xFFFFFFFF=0xFFFFFFFE
以下略

余計なシフト演算するくらいなら掛け算したほうがいい気がする

361 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:30:56 ]
意地でもループを使わずなんとかするって方向ですか?

362 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:46:54 ]
うん、ループ怖いし

363 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:51:38 ]
>>362
じゃあ、再帰使え

364 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:51:42 ]
-1 をかけるって、実際にはループの中で a[i] = -a[i]; だろ。
これより高速な方法なんてある?

365 名前:デフォルトの名無しさん [2010/03/09(火) 15:54:32 ]
x86だと命令を繰り返すための命令もあったけど
そういうのを除けばすでに言語はあまり関係ないよな・・・

366 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:01:42 ]
そんなもん数万回やってやっとms単位の差が分かる程度だろ。意味ない。

367 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:16:50 ]
どうしてもループしたくないならこういう感じで行けるんじゃないかな

int[] val = new int[10];
var tmp =
from n in val
select n * -1;

var minus = tmp.ToArray();

368 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:18:30 ]
それ結局ループしてね?

369 名前:デフォルトの名無しさん [2010/03/09(火) 16:19:48 ]
だから言語は関係なくてループを書かないってのはできないんじゃね?といってる
再帰でやるほどでもないだろうし



370 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:22:48 ]
できんこたないだろ
a[0] = -a[0];
a[1] = -a[1];
・・・

さあ全部書くんだ

371 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:24:50 ]
手段のためなら目的は選ばない

372 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:25:00 ]
完全にネタ化してきたな

373 名前:デフォルトの名無しさん [2010/03/09(火) 16:29:22 ]
>>372
まあネタだよね
釣りともいうかも

374 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:36:21 ]
SSEとかそういうの使えばループ無しで出来るんじゃね?

Cとかアセンブラの域になるが。

375 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:40:37 ]
無限ループって怖くね?

376 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:54:25 ]
えッ!?

377 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:59:23 ]
メッセージループは無限ループだから怖い

378 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 17:18:06 ]
まぁその程度の事で難しく考えるより
単純でミスがないような後々わかりやすいコードのが大事だろ

379 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 18:05:45 ]
>>349
今更だけど、FileStream.Close()ってDispose呼ぶだけだから、
CloseとDisposeの両方を呼ぶ必要はなく、片方1つで十分のはず。



380 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 18:16:11 ]
>>379
MSDNには「Disposeのtrueと同じ」って書いてあったから
ちょっと違うのかもと思ってた

381 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 18:25:00 ]
>>380
Dispose()はDispose(true)をよんでいる。

382 名前:デフォルトの名無しさん [2010/03/09(火) 18:59:18 ]
Stream系は全部using使わないと開放漏れが気になっちゃう

383 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 21:11:15 ]
解放漏れよりも更新されなくて嵌まることがある

384 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 21:49:10 ]
そーいえば、SmtpClient と MailMessage で添付ファイル付きのメールを送ったときに、
添付ファイルとしていたローカルファイルを削除できなくて悩んだことがあったな。w

この時初めて Dispose の重要性を実感した。

385 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:21:55 ]
マネージDllに記述したメソッドの説明などに使う///コメントが、Dllを使うプロジェクトで参照できません。
どうやったら参照できるようになりますか。

386 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 22:25:03 ]
プロジェクトのプロパティ→ビルド→XMLドキュメントファイル
プロジェクト参照じゃなくてdllをそのまま配布する場合は必ず生成されたxmlファイルも一緒に

387 名前:デフォルトの名無しさん [2010/03/09(火) 23:32:07 ]
XmlSerializerを使ってDeserializeするクラスの中に配列があった場合はうまくいかないのかな?

388 名前:387 [2010/03/09(火) 23:47:58 ]
自己解決しました・・・

389 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 00:07:21 ]
死ね



390 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 00:15:45 ]
どうやって解決したか書かない子はほんと自決して欲しい

391 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 00:18:27 ]
>>390
いやです

392 名前:デフォルトの名無しさん [2010/03/10(水) 00:27:11 ]
>>391
勝手に応えるなw

>>390
ケアレスミスでしたw

393 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 00:28:53 ]
>>392
いやです

394 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 01:51:09 ]
一度覚えたら忘れにくい言語ないですか?

395 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 01:52:31 ]
日本語

396 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 02:05:49 ]
listview.items[].subitems[].text
↑長い
↓こんな感じにできたらいいのに
listview.items[](str,str,str,str)

397 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 02:07:27 ]
>>396
っ 拡張メソッド

398 名前:デフォルトの名無しさん [2010/03/10(水) 13:43:09 ]
IDisposableの正しい実装方法おしえてちょ

399 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 15:02:56 ]
string型をKeys列挙型に変換する書き方がわかりません。
下のような変換をするにはどのように書けばいいですか?

string "J" → Keys.J
string "Divide" → Keys.Divide
string "NumPad2" → Keys.NumPad2




400 名前:デフォルトの名無しさん [2010/03/10(水) 15:34:09 ]
スレッドセーフについて教えてください

@private static List<string> sampleList = new List<string>();として
同じクラス内の以下のスレッドを同時に実行します
スレッド1はsampleListに要素を一つずつaddして追加
スレッド2もsampleListに要素を一つずつaddして追加
スレッド3はsampleListの先頭の要素を取得後、RemoveAt(0)で削除
この場合はSynchronizedは必要ですか?

Aprivate static int n1;として
2つの同時進行のスレッドからn1の値を変えたりする場合は
Interlockedが必要ですか?

Bprivate static int n1;として
スレッド1からはn1の値を変更するが、スレッド2からは参照するだけ
ならばInterlockedは必要ないですか?

よろしくお願いします

401 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 15:35:43 ]
>>399
(Keys)Enum.Parse(typeof(Keys), "NumPad2", false);

402 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 15:46:53 ]
書き換えてる途中に参照しようとしたらどうする?

403 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 15:47:21 ]
>>401
できました。ありがとうございます!
他にも色々使えそうなので更に勉強してきます。

404 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 15:58:59 ]
途中ってなんだよw

405 名前:400 mailto:sage [2010/03/10(水) 16:05:14 ]
>>402
ありがとうございます。
Bの場合もInterlockedしておいた方がいいという事ですね。。。

もう一つだけ教えてください。
msdn.microsoft.com/ja-jp/library/6sh2ey19(VS.80).aspxに
スレッド セーフ
この型の public static (Visual Basic では Shared) メンバは、スレッド セーフです。
と記載せれているのですが、これはSynchronizedが必要ないという意味ですか?

406 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 16:37:15 ]
>>405
>この型の public static (Visual Basic では Shared) メンバは、スレッド セーフです。
>すべてのインスタンス メンバがスレッド セーフになるかどうかは保証されていません。
いらないよ
逆にCountプロパティとかその辺はセーフかどうかなんて保証されてないってこった

>コレクションが変更されない限り、List では、複数の読み込み操作が同時に発生しても問題ありません。
コレクションの列挙処理は、本質的にはスレッド セーフな処理ではありません。
まれに 1 つ以上の書き込みアクセスによって列挙処理で競合が発生する場合、確実にスレッド セーフにするには、列挙処理が完了するまでコレクションをロックします。
コレクションに対し複数のスレッドがアクセスして読み取りや書き込みを行うことができるようにするには、独自に同期化を実装する必要があります。

と書いてあるがこれ読めば参照時にもロックかけるべきかどうかは判断つくと思うんだけど



407 名前:400 mailto:sage [2010/03/10(水) 17:01:26 ]
>>406
ありがとうございます
まとめると、Listをスレッドセーフで使うには
・public static以外はSynchronizedが必要
・For EachやCountプロパティ等を使用する時はロックが必要
ということでいいのかな。
助かりました、サンクス。

408 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 18:46:47 ]
List<T>などのジェネリックコレクションにSynchronizedはない
常にロックが必要

409 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 19:32:29 ]
Form1のボタンを押すと、Form2のテキストボックスにテキストを移すのってどうすればいいですかね?
DOBONさんのTipsを見て

Form2 f = new Form2();
f.ShowDialog(this);
f.Dispose();

な感じでForm2をForm1に所有させてやってるんですが
他にやり方とかないでしょうか?



410 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 19:39:31 ]
>>409
クリップボードを中継する

411 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 19:42:07 ]
>>409
それでできるのに何が問題なのかが
重要なんだと思うが・・・・

412 名前:デフォルトの名無しさん [2010/03/10(水) 19:42:12 ]
同じ説明をしたなあ
Form2にアクセス用の関数を作って公開する

413 名前:デフォルトの名無しさん [2010/03/10(水) 20:09:20 ]
ボタンとテキストボックスは自分で配置してくれ
Form1.cs
codepad.org/8UBu8se8

Form2.cs
codepad.org/ErnDt7Yc

414 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 20:39:55 ]
>>409
テキストボックスのModifiersプロパティをPublicにする

415 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:13:29 ]
>>409
状況が分からないのでどういう方法が適切か何ともいえないけど、
Form1とForm2の間に相互に依存関係を持たせたくないのなら、
第三の仲介者役のオブジェクトを間に入れる。

単に依存関係を逆転させたい(Form1はForm2を知るべきでないが、Form2はForm1を知っててもいい)
だけなら、イベントを使ってもいい。

(1) Form1はボタンがクリックされたらテキスト伝達のためのイベント(仮にTransmitTextイベントとする)を発生させるようにする

(2) Form2がForm1の参照を持つ

(3) Form2にForm1のTransmitTextイベントのイベントハンドラを書いて、その中でTextBoxを更新する。

こんな感じ。

416 名前:409 mailto:sage [2010/03/10(水) 22:23:46 ]
Form同士で受け渡しがしたかった理由は
Form1からForm1所有でForm2とForm3を出した際に

Form2の情報をForm3で取得したいときに所有しているのはForm1なので
受け渡しが出来ないのでどうすればいいのか?と考えていました。

417 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:39:53 ]
>>416
それは設計がおかしい
と普通の人は考える

418 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:43:56 ]
オブジェクト指向の世界は縦割りなんだよ
横の繋がりは必要としない
絶対的な権力を持つボスがすべてを操る

419 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 22:48:05 ]
もう全部static変数にすればいいよ
そんなレベルで頭捻ったって結果は同じだからとりあえず動けばいい
どこが悪いかはそのうちわかってくる



420 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 23:02:07 ]
最初はform2で処理したデータをform1で一旦取得してから
form3に渡すのは不自然だったり、非効率的に思えるかもしれないが
両方のformで利用するデータはform1で管理したほうが
実は安全で効率的なのだ

もしform3がform2とのやり取りだけしかしないなら
form2の子としてform3を宣言すべき

421 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 23:10:58 ]
それならForm1にも直接データは持たせないべきだろ
データを保持するクラスを別に作って持ちまわる形にする

422 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 23:12:54 ]
MVCしろよ

423 名前:409 mailto:sage [2010/03/10(水) 23:24:17 ]
みなさんありがとうございます。
参考にしてC#をちょっとずつやろうと思います。

424 名前:デフォルトの名無しさん mailto:sage [2010/03/10(水) 23:57:04 ]
>>423
まあ、Formの本来の役割は入力と表示だってことは理解した方がいいよ。

つまりFormの仕事は、ユーザーからの入力を何か別のオブジェクトに伝達したり、
別のオブジェクトからのデータを表示するのが仕事。

PCでいったらモニタやキーボードに相当する部分。
だからそんな部分同士がデータを直接やりとりするのは本来おかしい。

キーボードとモニタの間が配線でつながっててデータやりとりしたらおかしいでしょ?w

キーボードはPCに対して入力データを送るだけ。
モニタはPCからの信号を表示するだけ。

GUIのプログラムも基本同じような考え方で作るべきだ。
Form1はオブジェクトhogeにユーザから入力があったことを伝達するだけ。(ボタンClickイベントハンドラで
hogeの何かのメソッドを呼び出す)

Form2はhogeからの情報を表示するだけ。(hogeからのイベントでTextBoxを更新する)

一見面倒だけどこれが結局シンプルで標準的なやり方。

425 名前:409 mailto:sage [2010/03/11(木) 00:01:00 ]
>>424
なるほど。
もう一度入門書などをちゃんと読みなおしてみます^^;

426 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 00:01:53 ]
複数のFormから一つのオブジェクトにアクセスする方法がわからない

427 名前:デフォルトの名無しさん [2010/03/11(木) 00:03:26 ]
>>426
アクセス用のクラスでも作ってそのインスタンスを教えておけばいいんじゃないの?
参照型の強みだよ

428 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 01:11:10 ]
>>400
BでInterlockedをどう使うわけ?
せいぜいvolatileじゃないか?



429 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 01:15:08 ]
>>400
Aだって値の更新をどういう風にやるかによる。
読み取りと書き込みを合わせてtアトミックにやりたいならInterlockedとかがいるが、
条件によってはただ書き込むだけでいいかもしれない。
もしくはvolatileにするくらいでいいかもしれない。

@は普通ロックが要るが、それはそれとしてListよりQueueの方が向いてないか?




430 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 13:19:37 ]
>>422
最近多い、GUIでプログラム作らせる初心者用入門書の弊害だと思う

431 名前:デフォルトの名無しさん mailto:sage [2010/03/11(木) 13:21:01 ]
だってMSの旧来のコントロールだとコントロール自体がデータ持ってる場合が多いんだもんよォォォォォ






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

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

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