ふらっとC#,C♯,C#(初心者用) Part56at TECH
ふらっとC#,C♯,C#(初心者用) Part56 - 暇つぶし2ch356:デフォルトの名無しさん
10/03/09 15:15:28
配列に入っている値の符合をプラスから全部マイナスにしたいんだけど、簡単に出来る方法はないですか?
もちろんループをつかって全部-1を掛け算すればいいんだけど、ビット演算とかで簡単にできないかなーと思って

357:デフォルトの名無しさん
10/03/09 15:17:21
ループが一番簡単だろ

358:デフォルトの名無しさん
10/03/09 15:27:46
最近は2の補数とかやらないのか・・・

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

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

参考までに

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

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

361:デフォルトの名無しさん
10/03/09 15:30:56
意地でもループを使わずなんとかするって方向ですか?

362:デフォルトの名無しさん
10/03/09 15:46:54
うん、ループ怖いし

363:デフォルトの名無しさん
10/03/09 15:51:38
>>362
じゃあ、再帰使え

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

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

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

367:デフォルトの名無しさん
10/03/09 16:16:50
どうしてもループしたくないならこういう感じで行けるんじゃないかな

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

var minus = tmp.ToArray();

368:デフォルトの名無しさん
10/03/09 16:18:30
それ結局ループしてね?

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

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

さあ全部書くんだ

371:デフォルトの名無しさん
10/03/09 16:24:50
手段のためなら目的は選ばない

372:デフォルトの名無しさん
10/03/09 16:25:00
完全にネタ化してきたな

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

374:デフォルトの名無しさん
10/03/09 16:36:21
SSEとかそういうの使えばループ無しで出来るんじゃね?

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

375:デフォルトの名無しさん
10/03/09 16:40:37
無限ループって怖くね?

376:デフォルトの名無しさん
10/03/09 16:54:25
えッ!?

377:デフォルトの名無しさん
10/03/09 16:59:23
メッセージループは無限ループだから怖い

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

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

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

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

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

383:デフォルトの名無しさん
10/03/09 21:11:15
解放漏れよりも更新されなくて嵌まることがある

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

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

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

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

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

388:387
10/03/09 23:47:58
自己解決しました・・・

389:デフォルトの名無しさん
10/03/10 00:07:21
死ね

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

391:デフォルトの名無しさん
10/03/10 00:18:27
>>390
いやです

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

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

393:デフォルトの名無しさん
10/03/10 00:28:53
>>392
いやです

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

395:デフォルトの名無しさん
10/03/10 01:52:31
日本語

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

397:デフォルトの名無しさん
10/03/10 02:07:27
>>396
っ 拡張メソッド

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

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

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


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

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

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

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

よろしくお願いします

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

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

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

404:デフォルトの名無しさん
10/03/10 15:58:59
途中ってなんだよw

405:400
10/03/10 16:05:14
>>402
ありがとうございます。
③の場合もInterlockedしておいた方がいいという事ですね。。。

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

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

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

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



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

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

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

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

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

410:デフォルトの名無しさん
10/03/10 19:39:31
>>409
クリップボードを中継する

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

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

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

Form2.cs
URLリンク(codepad.org)

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

415:デフォルトの名無しさん
10/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
10/03/10 22:23:46
Form同士で受け渡しがしたかった理由は
Form1からForm1所有でForm2とForm3を出した際に

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

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

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

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

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

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

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

422:デフォルトの名無しさん
10/03/10 23:12:54
MVCしろよ

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

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

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

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

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

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

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

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

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

425:409
10/03/11 00:01:00
>>424
なるほど。
もう一度入門書などをちゃんと読みなおしてみます^^;

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

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

428:デフォルトの名無しさん
10/03/11 01:11:10
>>400
③でInterlockedをどう使うわけ?
せいぜいvolatileじゃないか?



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

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


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

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

432:デフォルトの名無しさん
10/03/11 13:22:50
WPFのバインドのようにできれば分けやすいんだけどな
あれできないと小規模な開発ならMVCの境目を考えるのあほらしくなるもん

大きくなればMVCしようかとも思えるけど

433:デフォルトの名無しさん
10/03/11 18:20:00
リストボックスを表示中に上下キーを押すと選択中の項目が変わるが、文字を入力するとテキストボックスに文字が入力されるようにしたいんだが、その方法がわからない。
実現する方法があったら教えてほしい。

434:デフォルトの名無しさん
10/03/11 18:47:57
>>433
つ[ComboBox]

435:デフォルトの名無しさん
10/03/11 19:08:57
>>434
IDEでよくある入力補完を実装したいので、それはNG。

436:デフォルトの名無しさん
10/03/11 19:11:30
入力アクションが何かしらんけど入力アクションを検知したらリストボックスの
一つの項目と同じサイズのテキストボックスを表示して制御をそこへ移して
そこから制御が離れたらテキストボックスの中の文字をリストボックスへ反映すればいいんじゃないの?

437:デフォルトの名無しさん
10/03/11 19:35:38
>>436
つ URLリンク(netbeans.org)
こういう風にしたいので、その方法だとダメ。

438:デフォルトの名無しさん
10/03/11 19:38:11
ああいいたいことわかったわ
リストボックスはあくまで候補の表示だけな

サジェストの候補表示とかをやりたいのか

アクティブにならないForm作ってそこへリストボックス張って候補だしゃいいだろう
半透明表示もできるぞ

439:デフォルトの名無しさん
10/03/11 20:32:55
>>438
ためしにやってみたが、リストボックスにフォーカスを合わすと、インクリメンタルサーチができなくなって…エディットぼっくにフォーカスを合わせたままだと、リストボックスの選択項目をキーボードで操作できなくなって…となった。

フォームの初期化時
this.autocomplete_box.Visible = false;
this.Controls.Add(this.autocomplete_box);
文字を入力した
this.input_word += e.KeyChar;
int index = this.autocomplete_box.FindString(this.input_word.ToString());
if (index != ListBox.NoMatches)
{
Point current = this.GetPositionFromCharIndex(this.SelectionStart);
this.autocomplete_box.SelectedIndex = index;
this.autocomplete_box.Location = new Point(current.X, current.Y + this.Font.Height);
this.autocomplete_box.Visible = true;
}


440:デフォルトの名無しさん
10/03/11 22:07:45
普通にテキストボックスをオートコンプリートにしたいわけではないんだよな?

Googleサジェストのような挙動ではなく、インテリセンスのような挙動にしたい
つまり、

・補完するのはテキスト全体ではなく、その一部(単語など)
・テキスト入力時には候補の絞込みは行わないで、選択項目のみを変更

ということに相違ないか?

441:デフォルトの名無しさん
10/03/11 22:08:45
>>440
それで間違いない。

442:デフォルトの名無しさん
10/03/11 22:33:59
それでは回答どうぞ

443:デフォルトの名無しさん
10/03/11 22:52:42
なら、438で問題ないな

> リストボックスにフォーカスを合わすと、インクリメンタルサーチができなくなって…
リストボックスに、必要な全てのイベントハンドラを設定すればいい

例えば、

文字はそのままテキストボックスにスルー
上下は選択変更
左右はテキストボックスの方のカレット移動
Enterは確定(Tabも?)

とか自分で決めて適当に処理すればいい

444:デフォルトの名無しさん
10/03/11 22:58:30
えらそうな質問者に対して、ちゃんと答えるなんてえらいやつだな。

445:デフォルトの名無しさん
10/03/11 23:01:18
>>444
オレも思ったw

446:デフォルトの名無しさん
10/03/11 23:44:43
>>443
なるほど。
そうすればいいのか。
答えてくれてありがとう。

447:デフォルトの名無しさん
10/03/12 03:59:56
ComboBoxのテキスト部分をユーザーからの書き込みをできないようにするには
DropDownStyleプロパティをDropDownListにするといいというのでやってみたところ
たしかにユーザーからの書き込みはできなくなりましたがComboBoxの見た目がTextBox調からButton調になり
Textプロパティをプログラム内部でも書き換えられなくなりました
しかし「DropDownListにするといい」と見つけたいくつかのサイトではそのようになってる様子は見られません
これはVisual C# 2008の仕様か何かなのでしょうか?

448:デフォルトの名無しさん
10/03/12 05:05:54
何も言えなくて・・・夏

449:デフォルトの名無しさん
10/03/12 05:09:03
そういうやり方じゃなくてユーザーからのテキスト入力イベントが
発生したときに、入力を受付なくさせるメソッドか何かがあったはず
忘れた

450:デフォルトの名無しさん
10/03/12 11:03:32
C++と比べるとC#は何がダメなんでしょうか?
GCがあったり色々便利な機能が付いてると思うのですが、ずいぶん叩かれてる印象を受けます
TRUEが1じゃなかったりするのが、あまり好かれないとかそんな感じでしょうか?

451:デフォルトの名無しさん
10/03/12 11:07:26
>>450
アンチが多いのは人気の裏返しだよ。
ほんとに悲惨なのはユーザーからの無反応。

TRUE が 1 じゃないとか、たたくポイントじゃないというか、
むしろ TRUE が 1 な方がたたくポイントだろ。

452:デフォルトの名無しさん
10/03/12 11:10:06
>>451
ありがとうございます。C#使いたくなってきました
TRUE=1等の暗黙の型変換は悪い意味での慣れでしょうか、
個人的にはちょっと残念なのです

453:デフォルトの名無しさん
10/03/12 11:13:22
別に言語ごとのプログラミングパラダイムに従うことは悪いことじゃないよ
C#に使うならC#の作法に従うべきではあるが
これは逆も然り

454:デフォルトの名無しさん
10/03/12 11:16:29
1番はC#がC++のスーパーセットだと思って使い始めて落胆するパターンな。
さすがに最近は減ったけど。

455:デフォルトの名無しさん
10/03/12 11:29:47
C#実際そんなに叩かれてない
見向きもされてない所がある
あまりに注目されてない不運な言語だ

456:デフォルトの名無しさん
10/03/12 11:32:37
ネイティブコンパイルされないのが唯一の欠点だろう。
あとは完璧

457:デフォルトの名無しさん
10/03/12 11:33:56
C#はいいとこ取りっていうか中途半端な感じだな
でもC#覚えれば、他の言語にも馴染みやすいと思うし
初心者向きな言語だと思う
すくなくともVB覚えるよりはいい

458:デフォルトの名無しさん
10/03/12 11:42:06
そこそこのことするならそこそこのことが出来るC#が「完璧」だろうが、
難しいことするなら難しいことができないC#が「中途半端」になる
見方次第だな

459:デフォルトの名無しさん
10/03/12 11:52:08
.net対応のマイコンも出たしもう完璧だろう

460:デフォルトの名無しさん
10/03/12 11:56:59
>>459
なんか興味ある 詳しく

461:デフォルトの名無しさん
10/03/12 12:04:26
C# 5.0でコンパイラ、メタプログラミング関係整備されて完璧。

462:デフォルトの名無しさん
10/03/12 12:24:30
もう一度言うが、完璧。

463:デフォルトの名無しさん
10/03/12 12:26:02
しつこいようだけど後もう一回だけ・・・完璧。

464:デフォルトの名無しさん
10/03/12 12:29:46
完璧さが周知されてない所がたまに暇。

465:デフォルトの名無しさん
10/03/12 12:36:04
>>460
.NETベースのマイクロコントローラー、FEZ Mini
URLリンク(jp.makezine.com)



466:デフォルトの名無しさん
10/03/12 13:05:45
FALSEが0以外なら全力で叩くがTRUEが1以外って処理系によっては昔から普通にあるし
その程度で動かなくなるようなコードを書く方が悪い

467:デフォルトの名無しさん
10/03/12 13:08:14
しかし最近はPythonに人気を取られがちのようだが
どうせ最速の言語じゃないんなら
コード記述が短くて、動的なほうが手軽というイメージ
smallbasic、Ironpythonでますます中途半端な存在になったな

468:デフォルトの名無しさん
10/03/12 13:17:56
>>465
サンクス
おもしろそうだ!!!
おれもやってみてぇ

469:デフォルトの名無しさん
10/03/12 13:42:31
人気ねぇw

470:デフォルトの名無しさん
10/03/12 13:48:45
プログラム板の勢いみると
言語ではC#が一番あるけどな

471:デフォルトの名無しさん
10/03/12 14:31:19
裾野だけは広いからな


472:デフォルトの名無しさん
10/03/12 15:53:07
敷居は低いが仕事は少ない

473:デフォルトの名無しさん
10/03/12 15:55:50
まだjavaなのか

474:デフォルトの名無しさん
10/03/12 15:59:14
そろそろマ板でやれ

475:デフォルトの名無しさん
10/03/12 17:34:50
using(StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.GetEncoding("Shift-Jis"))) {
boardListHtml = sr.ReadToEnd();
sr.Close(); ←これいらないですよね?
}

476:デフォルトの名無しさん
10/03/12 17:39:58
うん

477:デフォルトの名無しさん
10/03/12 17:48:33
>>472
君は・・・世界が狭いようだな

478:デフォルトの名無しさん
10/03/12 17:54:40
>>477
一般庶民の話をしてるんだよ

479:デフォルトの名無しさん
10/03/12 20:28:17
C#はヴィジュアルスタジオ使うと
WindowsFormアプリケーションってやると
とっぱじめ最初にFormを継承したForm1が出てきて
それにボタンを貼り付けて、「はじめてのC#」とかいうメッセージボックスを出す

これだけのプログラムでも継承、カプセル、ポリモーフといったオブジェクト指向を使ってるな
初心が意識せずにオブジェクト指向できるようになってる言語?

480:デフォルトの名無しさん
10/03/12 20:31:33
日本語でOK

481:デフォルトの名無しさん
10/03/12 20:32:05
デザイナが勝手にやってるだけで全く使ってないだろ

482:デフォルトの名無しさん
10/03/12 20:32:30
むしろ日本語がNGの人

483:デフォルトの名無しさん
10/03/12 20:36:51
Visibleのtruefalseかちかちやるだけでメモリ食うのはなんで?

484:デフォルトの名無しさん
10/03/12 20:39:35
どうして「メモリ食う」と分かる?
その観測方法がオカシイ可能性は疑ってみた?

485:デフォルトの名無しさん
10/03/12 20:49:48
visual studioでbutton1とlabel1と↓作って
private void button1_Click(object sender, EventArgs e)
{
if (label1.Visible == true)
{
label1.Visible = false;
}
else
{
label1.Visible = true;
}
}
Windowsタスクマネージャ開きながらbutton1かちかち押すとメモリ使用量が増えるんだが

486:デフォルトの名無しさん
10/03/12 21:04:03
再現できなかった。

487:デフォルトの名無しさん
10/03/12 21:04:35
製作中のアプリの一部をクラスライブラリで分離する場合
完全に別プロジェクトでアプリプロジェクト->ライブラリプロジェクト(デバック)
の参照をつけてやったりするのかな?

488:デフォルトの名無しさん
10/03/12 21:26:21
>>472
ばかだなぁ。なければ作ればいいじゃないか。
無知なお客さんを言いくるめるくらいワケないだろ。

‥‥ほんとうに生産効率はいいんだから。

489:デフォルトの名無しさん
10/03/12 21:37:42
>>487
別プロジェクト以外ってことは、1つのプロジェクトでexeとdllの両方を出力とか?
普通の方法ではそんなことできないと思うけど

490:デフォルトの名無しさん
10/03/12 21:54:08
普通はひとつのソリューションでやるわな。

491:デフォルトの名無しさん
10/03/12 22:02:36
>>487
普通そうでしょ。
でもプロジェクト参照は循環参照不可だから、、
複雑なプログラムになってくると案外プロジェクトの切り分けが難しかったりする。

>>489
アセンブリが別とは言ってないんじゃない?

492:487
10/03/12 22:26:45
>>491
最終的にアセンブリを一つにするかexeとdllに分けるかで
変わってくる感じですかね

493:デフォルトの名無しさん
10/03/12 22:37:35
>>492
internalアクセス修飾を有効活用したいから、という、
人によってはちょっと不純に見えるかもしれない動機の場合もあったりする

494:デフォルトの名無しさん
10/03/13 02:28:12
今独習C#を一通り読み終わって
C#でWEBアプリケーション作りたいのですがお勧めの本があれば教えてください
URLリンク(ascii.asciimw.jp)
上記URLのようなものはあるのですがどうも評判が悪いので・・・

また関連書籍にASP.NETが多いですが、ASP.NETの本≒WEBアプリケーションの本という認識であってますか?

495:デフォルトの名無しさん
10/03/13 02:33:26
WEBアプリケーションって自分ブラウザとかじゃなくブラウザ上で動くプログラムということでOK?

496:デフォルトの名無しさん
10/03/13 02:39:23
>>495
自分ブラウザです
IEやfirefoxの簡易版を作りたいです。

497:デフォルトの名無しさん
10/03/13 02:42:44
それだったらc# WebBrowserでぐぐれば基本的なことは本買わなくてもできるよ

498:デフォルトの名無しさん
10/03/13 03:25:09
>>496
それってデスクトップアプリというんだよ
WEBアプリはブラウザをクライアントとするものだから
まったく別物

499:デフォルトの名無しさん
10/03/13 04:07:21
たとえば、何の前置きもなしに「WEB開発」って言われたら、
WEBアプリを作るって解釈しておk?
面接でそういう質問があったんだけど。

500:デフォルトの名無しさん
10/03/13 04:23:41
>>499
そうだね
JAVA,javascrpt,HTTP,Perl,RCFの知識があるのかってことになる

501:デフォルトの名無しさん
10/03/13 05:35:47
どこから突っ込めば

502:デフォルトの名無しさん
10/03/13 05:52:56
WEB開発って面接官もへぼいな
WEBに関係することって
・クライアント(webブラウザー)そのもの
・クライアント上で動くスクリプトなど
・サーバー側
大きく分けてもこんな感じだしなあ
ものすごく範囲は広いよ
さすがに最近はhttpのプロトコル処理関連まで作るなんてのはないだろうけど

503:デフォルトの名無しさん
10/03/13 06:13:25
その面接官は多分ホームページ作ったことあるか聞いてたんじゃないかな

504:デフォルトの名無しさん
10/03/13 09:27:23
いいかげんスレチだけどwebってwwwの略なんだから
全てクライアント上で動作する物はwebアプリとは言わないだろ基本的に
その面接官もwebを理解してるのかあやしいがweb開発なんて言ったら
重箱の隅から隅まで含まれるぞ

505:デフォルトの名無しさん
10/03/13 09:30:09
phpくらいしかできないよ

506:デフォルトの名無しさん
10/03/13 09:57:46
十分だよ

507:デフォルトの名無しさん
10/03/13 10:00:49
つまりズブの素人ってことだよ
言わせんな恥ずかしい(AA略

508:デフォルトの名無しさん
10/03/13 11:18:40
こんなスレみるんじゃなかった・・・
ヤホーの知恵袋にでもいってくりゃよかった

なんかゴメン

509:デフォルトの名無しさん
10/03/13 11:27:00
つうか、たまたまだろ
平日に仕事しながら見てるやつて結構とレベル高いと思うけど?

510:デフォルトの名無しさん
10/03/13 11:34:33
日本語のレベルが低いですね

511:デフォルトの名無しさん
10/03/13 11:37:26
ちっ、うっせーな

512:デフォルトの名無しさん
10/03/13 11:38:33
うっ、ちっせーな

513:デフォルトの名無しさん
10/03/13 11:43:30
ちっ、ちっせーな

514:デフォルトの名無しさん
10/03/13 12:37:35
C#だとCの供用体みたいなのをつくるときって
unsafeつかわないと無理?

515:デフォルトの名無しさん
10/03/13 12:40:49
StructLayoutとFieldOffsetだけで一応作れるけど
今時共用体とかないわー

516:デフォルトの名無しさん
10/03/13 13:57:01
日本語のレベルが低いって、ふだんはC#で他人と会話しているのか?

517:デフォルトの名無しさん
10/03/13 14:03:51
は?

518:デフォルトの名無しさん
10/03/13 14:25:17
ここは普段他人とはなさずに一日中PCの前でプログラム組んでるオタが来る場所だから
日本語をまともに話せない人がいても仕方ない

519:デフォルトの名無しさん
10/03/13 14:37:35
>>516
if (This.Seiyoku >= 95) {
 This.Hand.GetTimpo();
 for (int i = 0;i < 2000;i++) {
  This.Hand.Up();
  This.Hand.Down();
 }
 this.Say("あああああ────");
}

520:デフォルトの名無しさん
10/03/13 14:49:42
MessageBox.Show("ふぅ・・・");

521:デフォルトの名無しさん
10/03/13 15:38:49
2000も要らんだろ。


522:デフォルトの名無しさん
10/03/13 15:50:02
細胞が壊死するぞ。

523:デフォルトの名無しさん
10/03/13 15:50:47
C#を猛プッシュしてるキチガイうぜー

524:デフォルトの名無しさん
10/03/13 15:51:42
おまえらは4でじゅうぶん

525:デフォルトの名無しさん
10/03/13 16:15:33
C#はWindowsのGUIアプリを作るっていう非常に限定された状況でのみ
CやC++より優秀

526:デフォルトの名無しさん
10/03/13 16:18:48
あと初心者にはかなり使いやすい

527:デフォルトの名無しさん
10/03/13 16:49:14
>>519
ウィルスコード確認しました

528:デフォルトの名無しさん
10/03/13 17:07:20
>>526
それはC#のメリットというよりVC#環境限定の話だろ
最初にインテリセンス体験したとき開発者マジキチって思った

529:デフォルトの名無しさん
10/03/13 17:14:36
スニペットのせいで構文覚えられない初心者が多発、という弊害がもれなく付いてくるけどなw

530:デフォルトの名無しさん
10/03/13 17:15:01
ただの補完なら大概の言語で使えるけどね

531:デフォルトの名無しさん
10/03/13 17:16:54
構文を覚える必要はない

532:デフォルトの名無しさん
10/03/13 17:24:03
構文は自然と覚えるものだと思うが

533:デフォルトの名無しさん
10/03/13 17:36:34
構文と言うよりも単語が覚えれないかな

534:デフォルトの名無しさん
10/03/13 17:36:59
スニペットなんてただの初心者騙しの鬱陶しい機能にしか思えないけど、
あんなの活用してる人いるのか

っていうかPEZみたいな名前が気に入らん。
ラムネ菓子かっ

535:デフォルトの名無しさん
10/03/13 17:44:48
>>534
PEZさんディスってんじゃねー

536:デフォルトの名無しさん
10/03/13 17:46:51
楽できるなら楽したらいいと思う
いまさら a += 3 を a = a + 3 って書きたいひとはおらんじゃろ

537:デフォルトの名無しさん
10/03/13 17:46:58
プロジェクト内だけのスニペットは便利だったりする

538:デフォルトの名無しさん
10/03/13 17:53:09
>>536
おまえはおれを怒らせた

539:デフォルトの名無しさん
10/03/13 18:19:07
昔はprop->のproperty作成とかやってたな。
private変数作ってから、crtl+r, ctrl+eのリファクタの方が便利だと知ってからは使わなくなった。

540:デフォルトの名無しさん
10/03/13 20:33:49
よく入力するパターンは自分で定義して使ってるな

dw: Debug.WriteLine( );
eh: (_sender, _e) => { };

とか

541:デフォルトの名無しさん
10/03/13 20:53:42
>>475
なにこのコード
なんでusing使ってるの?
俺がC#触ってない間になんかあったのか

542:デフォルトの名無しさん
10/03/13 20:55:57
どれぐらい使ってなかったんだ

543:デフォルトの名無しさん
10/03/13 20:59:54
IDisposable

544:デフォルトの名無しさん
10/03/13 21:00:20
>>541
button1.Click += (sender, e) => MessageBox.Show("こんなのもできるよ");

545:デフォルトの名無しさん
10/03/13 21:01:47
using構文はC#1.0当初からある構文だが
強いて言うなら>>541が触ってない間に>>541からC#の記憶が飛んだんじゃないか

546:デフォルトの名無しさん
10/03/13 21:50:11
最初から知らなかっただけだろう


547:デフォルトの名無しさん
10/03/13 22:00:41
2.0からだと思ってた俺

548:デフォルトの名無しさん
10/03/13 22:03:58
>>512
(´;ω;`)

549:デフォルトの名無しさん
10/03/13 22:10:03
2.0からだろ

550:デフォルトの名無しさん
10/03/13 22:12:35
>>544
ラムダ士気って便利だよね。

551:デフォルトの名無しさん
10/03/13 23:14:10
ちょっと教えてください
文字列が入ったリストデータをTreeViewに表示する場合

TreeViewを継承した自作クラスにリストデータを直接読み込んで表示するようなメソッドを作るべきか
TreeViewのNodesに追加する処理をForm1でするべきか

どちらがいいのでしょうか?

552:デフォルトの名無しさん
10/03/13 23:17:31
その程度なら後者

553:デフォルトの名無しさん
10/03/13 23:23:28
>>551
どっちでもいいんじゃね?
なんでもかんでもFormに書くのもあれだし継承してあれこれ作れるならそういう練習を兼ねて別途設計してもいいだろうし

554:デフォルトの名無しさん
10/03/13 23:28:22
練習も兼ねて自作クラス作ってみようと思います
ありがとう

555:デフォルトの名無しさん
10/03/14 01:10:52
うむ

556:デフォルトの名無しさん
10/03/14 03:31:22
フォームアプリで処理内容を表示したいのですが
Form1の処理内容ならtextboxなどに表示すればいいですが
form1でインスタンス化したオブジェクト内部の処理内容を表示したい場合
どうすればいいでしょうか?

557:デフォルトの名無しさん
10/03/14 03:54:06
オブジェクトに処理状況を返すメソッドを作って
Form1から非同期で動かして定期的に処理状況を調べる

558:デフォルトの名無しさん
10/03/14 07:39:47
非同期・・・ちょっと難しそうですね・・・
諦めます

559:デフォルトの名無しさん
10/03/14 09:42:11
なんでも試してみるもんさ

と、偉大なゲイは言いました

560:デフォルトの名無しさん
10/03/14 11:00:47
もしくはそのオブジェクトに textbox なりを教えてあげて、
オブジェクト内部の処理が終わったら textbox に直に書き換えてさせてしまうとか。

他との兼ね合いがないなら、自分はそうする。

561:デフォルトの名無しさん
10/03/14 11:01:51
BackgroungWorker使えばそこまでめんどくもないと思うんよ

562:デフォルトの名無しさん
10/03/14 11:43:11
スレッドの扱いやすさ考えるとBW使うのめんどくさくてね・・・

563:デフォルトの名無しさん
10/03/14 11:43:44
>>556
>>558のように言ってるって事は、恐らくその「オブジェクト」の処理は
UIと同じスレッドで動くってことなんだろうから、
それなら単純にその「オブジェクト」のクラスに~Changed系のイベントを実装して、
Formの方はその~Changedイベントで表示内容を更新すればいいんだよ。

それが面倒で、かつ更新するコントロールの数が少ないなら、
Formにタイマくっつけてタイマのイベントで表示内容を更新してもいい。

何か難しく考えすぎてないか?

564:デフォルトの名無しさん
10/03/14 12:09:23
ですね

565:デフォルトの名無しさん
10/03/14 12:45:49
>>563
>>560
なるほど、イベントは自前で作った事ないからやってみてもいいかも
簡単なのはtextboxの参照渡すのがいいですね

検討してみます
ありがとうございました

566:デフォルトの名無しさん
10/03/14 12:59:28
なんか初心者が間違った知識を覚えるのをほっとくのも気が引けるんで一応突っ込むけど、

>簡単なのはtextboxの参照渡すのがいいですね
こういうやり方は普通は邪道とされている。
馬鹿だと思われたくなければやっちゃダメ。

これがダメな一番の理由はそんなことをしちゃうとそれぞれのクラスの
役割分担が明確じゃなくなるから。

TextBoxの更新を担当するのは、その持ち主であるFormであるべきだとは思わない?
他のオブジェクトがTextBox更新しちゃうのなら、Formの役割って一体何よ。

567:デフォルトの名無しさん
10/03/14 14:08:52
それは設計によるとしか言いようがない。

568:デフォルトの名無しさん
10/03/14 14:21:32
ただ機能的要件が果たせさえずればOK、と思いつくままにTextBoxの参照を
渡すような馬鹿で間抜けな行為を「設計」とは言わない。

569:デフォルトの名無しさん
10/03/14 14:22:43
まぁそれをいっちゃうとMVCとかObserverとか面倒なので

570:デフォルトの名無しさん
10/03/14 14:29:27
まあtextboxもクラスだからついついやりがちだけど所詮はGUI部品だからなあ
一番いいのはデリゲートだっけ?

571:デフォルトの名無しさん
10/03/14 14:34:01
563の言うようにするかなあ
その処理オブジェクトは、進捗を公開するかしないかを決め、
GUIオブジェクトは、それを見るか見ないか自由にする

572:デフォルトの名無しさん
10/03/14 14:50:30
前に別スレッドからメインのFormに貼ってあるtextboxにログを吐く方法を聞いたときに
作ったのならあるわ

Form1.cs
URLリンク(codepad.org)

hoge.cs
URLリンク(codepad.org)

hoge.csは自分でクラスを作ってコード張ってくれ
Form1.csの方はtextboxをDock=Fillで張ってスクロールバーを表示しておけばいいか
あとshownで表示させてるのでイベントハンドラ追加してからコード貼ってくれ

573:デフォルトの名無しさん
10/03/14 14:51:23
hogeクラスはスレッド起動部分を書いてないけど移植前の方では動いてるので問題ないと思う。

574:デフォルトの名無しさん
10/03/14 15:06:30
PInvokeでもつかえば

575:デフォルトの名無しさん
10/03/14 15:08:59
P無しで

576:デフォルトの名無しさん
10/03/14 15:10:45
ほうピンボケを

577:デフォルトの名無しさん
10/03/14 15:13:03
関数名をhogehogeにするつもりがhogehoeになってたw

hogehoeは本当はスレッド起動をさせる関数なんだけどその辺は端折ったw

578:デフォルトの名無しさん
10/03/14 15:23:18
訂正版
URLリンク(codepad.org)

579:デフォルトの名無しさん
10/03/14 15:56:25
URLリンク(codepad.org)
こんな感じで遊んでたんだがApplication.DoEvents入れて経過を分かるようにすると
スレッドの動作が変わった感じなんだが何が変わったんだろう。

Application.DoEvents無し->適度に3スレッドの出力が混じる

Application.DoEvents有り->最初の一回だけ起動した順に結果がでるけど2回目以降は後で起動したスレッドだけ?やってる感じ

580:デフォルトの名無しさん
10/03/14 15:58:05
100x3は多いので10x3に絞ってみた
Application.DoEvents有り
[ 0000 ] 0
[ 0001 ] 0
[ 0002 ] 0
[ 0002 ] 1
[ 0002 ] 2
[ 0002 ] 3
[ 0002 ] 4
[ 0002 ] 5
[ 0002 ] 6
[ 0002 ] 7
[ 0002 ] 8
[ 0002 ] 9
[ 0001 ] 1
[ 0001 ] 2
[ 0001 ] 3
[ 0001 ] 4
[ 0001 ] 5
[ 0001 ] 6
[ 0001 ] 7
[ 0001 ] 8
[ 0001 ] 9
[ 0000 ] 1
[ 0000 ] 2
[ 0000 ] 3
[ 0000 ] 4
[ 0000 ] 5
[ 0000 ] 6
[ 0000 ] 7
[ 0000 ] 8
[ 0000 ] 9

581:デフォルトの名無しさん
10/03/14 17:43:05
あるインスタンスが同じクラスの別のインスタンスに影響を与えるのは悪いことですか?

582:デフォルトの名無しさん
10/03/14 17:45:05
たとえば、Form1の中にButton1とButton2があったとして
Button1.Clickを、Button2のサイズとか名前とかを変える
みたいなイベントにしたら、Button1はButton2に影響を与えてるけど
これっていけないことなの?

インスタンスはすべて独立させたほうがいい
みたいなこと書いてたんだけど

583:デフォルトの名無しさん
10/03/14 17:47:20
>>582
ケースによるんじゃない?

584:デフォルトの名無しさん
10/03/14 17:57:33
そんなこと真面目に聞いてたら無効にしたボタンは二度と有効にできないな
どこでそんなこと言ってたのか興味あるから教えて欲しい

585:デフォルトの名無しさん
10/03/14 18:05:47
Button を継承した Button1 のメソッドで Button2 をいじったらだめだろうけど
実際いじってるのは親の Form なんだから、 Button1 が Button2 に影響を
与えてるわけではない

586:デフォルトの名無しさん
10/03/14 18:10:43
>>556の話はインスタンス化したオブジェクト内部なんで
関係としては>>572>>578>>579あたりのコードのような状態だからなあ

buttonが直接外の何かに影響するってことは標準ではなくて
イベントハンドラを登録して処理は別途書くよね

587:デフォルトの名無しさん
10/03/14 18:12:54
「影響」というのがメソッド呼び出しの事をさしているのであれば、(それ以外にありえないと思うけど)
影響を与えるなというのはメソッド呼び出しするな、と同義になるわけで、
じゃあprivateなメソッドだけを持つ自律的なクラスだけでコードが書けるのかと。

まあ、要するに愚問過ぎるw

>>585
いや意味わからないしw

588:デフォルトの名無しさん
10/03/14 18:48:37
はぁ~い
ちゃぁ~ん

589:デフォルトの名無しさん
10/03/14 18:48:40
アプリ起動時にフォームとフォーム内のコントロールが
ちゃんと表示されてからプログラムが実行されるようにしたい
shownでもフォームが表示されただけでコントロールが
ちゃんと表示されない状態で実行されるのですが
なにか良い方法はないでしょうか?

590:デフォルトの名無しさん
10/03/14 18:52:11
ない。

591:デフォルトの名無しさん
10/03/14 18:54:39
Application.Idleが近いかねぇ

592:デフォルトの名無しさん
10/03/14 18:54:51
ままっままま、まじっすか

593:デフォルトの名無しさん
10/03/14 18:58:10
あるあるよ

594:デフォルトの名無しさん
10/03/14 19:00:40
WebBrowserだとnavigatedイベントなんてあるけどそれと似たようなのって聞いたこと無いな

595:デフォルトの名無しさん
10/03/14 19:03:10
普通はフォームが表示される前に
事前処理を終了させるのかな
他の言語でもこんな感じ?

596:デフォルトの名無しさん
10/03/14 19:04:28
言語の問題じゃなくてWindowsの問題だと思うけどなw

597:デフォルトの名無しさん
10/03/14 19:07:45
Formが表示されてからしばらく何か動くのであればshownのタイミングで
Form全体のコントロールを触れないようにして処理した後ユーザーが触れるようにするとか

ちなみにやり方に普通はないよ

ユーザーがフリーズしたんじゃないの?とか
表示されたので触っていいと思ったけどなんか触ったらおかしくなった・・・とか
そういうのを回避できてればいいと思うよ

598:デフォルトの名無しさん
10/03/14 19:13:58
activateかなんかなかった

599:デフォルトの名無しさん
10/03/14 19:20:26
shownだとユーザーがフリーズしたと思われそうだなー
loadイベントで処理する方がマシか

600:デフォルトの名無しさん
10/03/14 19:23:43
うん

601:デフォルトの名無しさん
10/03/14 19:28:16
>>599
Loadでやるにしてもスプラッシュウインドウでも出しておかないといらちにはあれだぜ

いらちをだますには適度なタイミングでちびちび変化を見せてあげるほうがいい

602:デフォルトの名無しさん
10/03/14 19:29:39
ほとんどビョーキ

603:デフォルトの名無しさん
10/03/14 19:31:25
>>602
病気だけどそんなのはいえないしねえw

604:デフォルトの名無しさん
10/03/14 19:31:47
いやShownでちゃんと表示されてるはずだし。
でなきゃ"Shown"って名前が嘘になっちゃうし。
何がしたくて何を言ってるのかサッパリ意味がわからんな。

605:デフォルトの名無しさん
10/03/14 19:34:57
>>604
FormのShownでしょ
確かに上に乗ってるコントロールはFormのコンストラクタでできてるので
問題はないけどshownの段階ではForm上にのってるコントロールのどれかが
何かしら動いてる?から今回の質問なわけでしょ・・

まあ自分のアプリの処理のタイミング調整でなんとかなりそうだけど

606:デフォルトの名無しさん
10/03/14 19:38:41
>>605
ごめん真面目に何言ってるのか理解できん。
っていうか、それ>>589が言ってることと明らかに違わないか?w


607:デフォルトの名無しさん
10/03/14 19:51:19
>>601
イラチのおれはスプラッシュウィンドウなんて表示しなければ
もっと起動早いだろって思う

608:デフォルトの名無しさん
10/03/14 19:52:05
URLリンク(d.hatena.ne.jp)
これじゃね

609:589
10/03/14 20:00:28
>>608
おお、まさしくこれだ
ありがとう

610:デフォルトの名無しさん
10/03/14 20:01:35
え・・・そんな基本的な話だったの?

611:デフォルトの名無しさん
10/03/14 20:08:12
>>608
ブログ主はなんか勘違いしてるな
Appliation.DoEvents()って、そんなもので自分のいってる問題が
本当に解決してると思ってるのかw

悪いけどおめでたすぎるわ。

612:デフォルトの名無しさん
10/03/14 20:09:57
>>611
ではズバリ教えて

613:589
10/03/14 20:13:33
Application.DoEvents()すげーー

ループ処理の中に記述しただけで
今までListViewが随時更新されずに、処理後結果が一気に表示されてたのに
リアルタイムで再描画してるーーー

これをあっちこっちに入れるとしあわせだな

614:デフォルトの名無しさん
10/03/14 20:14:31
でもそれやると処理が遅くなるけどね

615:デフォルトの名無しさん
10/03/14 20:18:38
>>612
OnShown()なりOnLoad()なりでApplication.Idleとかに紐付けするのが
正攻法だとは思う。

内緒だが、同じことを簡単にやる方法としてはthis.BeginInvoke()を使う、
なんて手もあったりする。

まあ、これってそもそも下らない問題意識だと個人的には思うけどね。

>>589
Application.DoEvents()なんか必要もないのに(必要な場面がそうあるとも思えんけど)
VB厨って言われるよ。

それはともかく、明らかに悪い作法だ。

616:デフォルトの名無しさん
10/03/14 20:22:16
DoEventsはおかしな動作する元だからな

617:デフォルトの名無しさん
10/03/14 20:22:44
DoEventsやるとメッセージ処理されるから順番が逆になったり弊害が出る

618:589
10/03/14 20:24:43
え・・・

WEBからファイル落とすときにフリーズ状態になるので
Application.DoEvents()で描画更新されるようになったんだけど

本当は非同期でやるべきなんだおろうけど

619:デフォルトの名無しさん
10/03/14 20:28:15
>>618
そう端的に言って努力の方向が間違ってるよ。

620:デフォルトの名無しさん
10/03/14 20:31:19
WebからファイルってAsyncあるだろーが

621:デフォルトの名無しさん
10/03/14 20:46:33
>SystemException は、ユーザープログラムで回復できる致命的ではないエラーが発生した場合に、共通言語ランタイムによってスローされます。

とのことだが、キャッチして回復しようとすると「CA1031汎用的な例外をキャッチすんな」って怒られるんですけどどうしろと
HAL9000もバグっちゃうよ

622:デフォルトの名無しさん
10/03/14 21:01:25
ああ、もうSystemExcpetionとかApplicationExceptionとか過去の話だから

623:デフォルトの名無しさん
10/03/14 21:05:39
俺の問題解決にはすべて非同期プログラミングの習得するか否かにかかってるとみた
私はあえてこの高度なアルゴリズムに挑むことにする
すべてはより高度なアプリを開発するために

624:デフォルトの名無しさん
10/03/14 23:08:51
Console.WriteLine("{0}",intA)
この書式をtextBoxに表示するのに利用するにはどうすればいいですか?

625:デフォルトの名無しさん
10/03/14 23:10:38
String.Formatとかどう?

626:デフォルトの名無しさん
10/03/14 23:13:41
intA
これって文字通りintの変数?

だったら
textBox1.Text += intA.ToString();

とか

textBox1.AppendText(intA.ToString());

とか

数字の出力パターンを変えたい場合はintA.ToString("0000")
とかすればいいよ

この辺は調べて

627:デフォルトの名無しさん
10/03/14 23:47:39
>>625
これこれ、こういうのがほしかった
ありがとう

628:デフォルトの名無しさん
10/03/15 00:30:11
クラスが10個ぐらいになるともうわけわかめ
UML導入するか

629:デフォルトの名無しさん
10/03/15 00:33:13
UMLでどうにかなる問題じゃないだろ
10個程度のクラスの相関を把握できないでどうするよ

630:デフォルトの名無しさん
10/03/15 02:22:09
わけ分からない→じゃあUMLだ、という発想がイミフ。
これまでドキュメントとか無かった現場なんだろか。

631:デフォルトの名無しさん
10/03/15 03:25:13
そうだよ

632:デフォルトの名無しさん
10/03/15 03:27:51
ユーザーが数字ではなく文字を入力した場合のエラーの取得はこういう感じでいいのでしょうか?
それともUserInputクラス内ではtry文を使わないでProgramクラスだけでやったほうがいいんでしょうか?
 public class UserInput
 {
  public int Input()
  {
   int a = 0;

   try
   {
    a = Int32.Parse(Console.ReadLine());
   }
   catch (Exception e)
   {
    throw e;
   }

   return a;
  }
 }

633:デフォルトの名無しさん
10/03/15 03:28:32
>>632の続き
 class Program
 {
  static void Main(string[] args)
  {
   UserInput ui = new UserInput();
   try
   {
    int b = 0;
    b = ui.Input();
   }
   catch (Exception e)
   {
    Console.WriteLine(e);
   }
  }
 }

634:デフォルトの名無しさん
10/03/15 04:54:15
>>632
catch { throw; }

とか何がしたいんだか分からんw

635:デフォルトの名無しさん
10/03/15 05:52:59
(゚∀゚)

636:デフォルトの名無しさん
10/03/15 05:53:23
右から左に受け流したいんだろう

637:デフォルトの名無しさん
10/03/15 06:49:17
左から右へ受け流すのはゆるさないからなw

638:デフォルトの名無しさん
10/03/15 11:59:14
わざわざコケさせなくてもTryParseとかあるし

639:デフォルトの名無しさん
10/03/15 12:10:41
例外ロンダリングだよ。

640:デフォルトの名無しさん
10/03/15 13:41:01
入力された文字が数字だけかどうかって面倒なら
Convert.ToInt32(textBox1.Text)
とかやってtry catchで判断すればOKだよ

641:デフォルトの名無しさん
10/03/15 13:58:55
try catchなんてするくらいならTryParseでいいだろ
って話だ

642:デフォルトの名無しさん
10/03/15 14:14:23
TryCatchなんかでやってたらエラー時のスタック解析の時間とか入れたら劇遅になるじゃねぇか



643:632
10/03/15 14:23:37
すいません、これは単純なモデルで表現したくてやったので
この場合だとTryParseを使ったりすればいいですが

本当に聞きたかったのは
ファイル入出力時のエラーや、WEB操作時のエラーや
オブジェクトがnullだったりなど、Formとは別のクラス内部のエラーが
あった場合に別クラスの内部で例外処理をするのか
Form上で例外処理をするのかがよくわからないんです
一般的にどういうやり方をするのか聞きたかったのですが
うまく説明できなくてすいません

644:デフォルトの名無しさん
10/03/15 14:26:32
.net時代のエラー処理ってやつですかね?

C/C++時代だと暴走の元なのでポインターがnullかどうかチェックしたりとかやってたようなのをどうしてるのか?
ってところ?

645:デフォルトの名無しさん
10/03/15 14:29:44
例外もみ潰しても続行できるなら内部で処理
できないなら外に投げる

646:デフォルトの名無しさん
10/03/15 14:38:08
お前らって例に噛み付くよね。
例えばの話に本気になってどうするの。

647:デフォルトの名無しさん
10/03/15 14:44:48
一事が万事という
小事に本気になれない奴がどうして大事に本気になれようか

648:デフォルトの名無しさん
10/03/15 14:50:34
(^ω^;)

649:632
10/03/15 15:05:46
>>644
多分そういう感じです

例えばフォーム上であるクラスのメソッドを呼び出して
nullが返ってくる場合もあるし、例外で投げられる可能性もあります

ResCollection thread_Honbun=bbs.ReadRes(url); ←例外がでる可能性

thread_honbunを利用 //←nullで例外がでる

なぜこういう質問するかというと
別クラス内部でいくら例外処理をしたところで
結局利用する側のformでやはり同じような例外処理を
しなければならないのでみなさんはどうしているのかと思いまして

650:デフォルトの名無しさん
10/03/15 15:14:43
まずnullをなるべく返さない所から始めたらいいと思うよ。

651:デフォルトの名無しさん
10/03/15 15:32:36
>>649
CodePlexで他人の書いたコード(なるべくメンバーの多い奴がいい)でも読んでみるといいよ
うんこ漏れそうなくらいtrycatch使いまくりだから

例外は昔の言語のnullチェックとエラー値チェックの代替機能なんだから
エラーチェックそのものをを省くための手段じゃないのよ
目的にしているのはエラーに対して画一的に対処できることね

例えばWin32APIにはnullを返すものもあれば、INVALID_HANDLE_VALUEを返すものもあるし
E_OK、E_SUCCESSなんてのを返すのもある
これら全部例外として括ってしまおうって趣旨だから

652:デフォルトの名無しさん
10/03/15 15:37:53
うんこは漏れない。

653:632
10/03/15 15:42:58
つまりちゃんとデータを返すかもしくはエラーを返すかの
2通りにするほうがいいということかな

確かに今のソースはnullかどうかをform側でも別クラスでも
条件分岐で何重にもやっている状態でしかもやってない場合もあったりと
かなりごちゃごちゃしてます
C#しかやったことないけど、自分は古いやり方をしていたということなのかな

他人のコード見て勉強してみます
どうもありがとう

654:デフォルトの名無しさん
10/03/15 15:56:14
エラーコードを例外に置き換えるリファクタリングを思い出した

655:デフォルトの名無しさん
10/03/15 16:02:52
この辺か

Replace Error Code with Exception
URLリンク(www.refactoring.com)

Replace Exception with Test
URLリンク(www.refactoring.com)

656:デフォルトの名無しさん
10/03/15 16:06:21
これはうんこ漏れるわ

657:デフォルトの名無しさん
10/03/15 16:06:58
まあ続行しても意味がないようなところで出るエラーはtryで拾ってもいいんじゃねーの?とか思うけどな
コストがかかるとか言っても継続できねーんだからいいだろうと・・・

658:デフォルトの名無しさん
10/03/15 16:30:09
テーブル 部
コード 名前
01   営業部
02   開発部

テーブル課
部コード 課コード 名前
01    01    第一営業
02    01    第一開発

テーブル社員
部 課  名前
01 01  山田太郎

といった データ構造で
社員をDataGridViewにデータバインドで表示する場合、
DataGridViewComboBoxColumを用いて課を表示することはできるでしょうか?
部テーブルは一意キーなので表示できますが
課テーブルは複数キーですので無理ですか?
型付データセットを使っているので、手動で余計なカラムを増やしたくなく、
リレーションをComboBox側のデータバインドでやってしまいたいっていう考えです。
どなたか回答お願いします。

659:デフォルトの名無しさん
10/03/15 17:03:22
DBで取ってきてるなら
部と課をくっつけた一意な文字列のカラムも加工して取ってくるようにして、
課のキーではなくそれにバインドさせたら駄目だっけ?

660:デフォルトの名無しさん
10/03/15 18:41:16
>>572
>>578
>>579
デリゲート使うと非常に便利ですね
参考にさせていただきます
ありがとうございました

661:デフォルトの名無しさん
10/03/15 19:59:42
C#はプロパティがめっちゃ便利だな

変数に代入するのと同時に処理ができるってのはすばらしい
C言語だと同じようなことをどうやってたんだろうな。
Privateとかないからポインタを引数にとって参照私とかやってたんだろうか。

662:デフォルトの名無しさん
10/03/15 20:04:52
C#を作った人物って
Delphiを作った人と同一人物なの?

663:デフォルトの名無しさん
10/03/15 20:07:13
普通にgetter/setterじゃないのか
JavaやC++は今でもそうやってるだろ

664:デフォルトの名無しさん
10/03/15 20:16:09
プロパティなんて無い言語のほうがおかしくて、
無いJava, C++, Perl, Rubyが同化してるとだけ言っておこう

C#との類似性がよく指摘されるVisual Basic, JavaScriptにはプロパティが存在する
あとPHPにもプロパティがある

665:デフォルトの名無しさん
10/03/15 20:19:45
>>664
古い言語にそんなこといっても仕方ないと思うけどw

666:デフォルトの名無しさん
10/03/15 20:43:28
>>662
たしかそう

667:デフォルトの名無しさん
10/03/15 20:44:48
>>666
Rubyは新しいぞぞ

668:デフォルトの名無しさん
10/03/15 20:50:30
Jeffrey Richterだったと思うけど、プロパティなんてイラネって意見の人もいるんだよね。
俺は同意できんけど

669:デフォルトの名無しさん
10/03/15 20:54:02
リッチャーの本大量に持ってるのに・・・
捨てっかな

670:デフォルトの名無しさん
10/03/15 20:56:23
でも結局は言語作ったおっさんの思想<多く使われる言語ってことなんだよな
>>664がプロパティ無いって言語は設計も古いし今となってはそれほど拡張もされてないような物だし

C#もそこそこ年数たったけどVBのよい部分は引き継いでるので似てても不思議ではないし

671:デフォルトの名無しさん
10/03/15 21:00:10
>>662
アンダース・ヘルスバーグのことか?

672:デフォルトの名無しさん
10/03/15 21:18:13
>>664
そういう歴史を無視した発言はゆとりだから?


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch