例えばフォーカスがあたった場合に、テキストを全選択状態にする、というよくある動作をさせたかったとする。 お前はどう実装するんだ? Formに直接そういうコードを書くのか? 継承してカスタムコントロールにするのか? 俺はそんなことはしない。
ユーティリティ的な機能を、それ用のクラスを作るか、元のクラスを拡張するかなんて 設計の方針の問題で、やりたいように実装すればいいだけの話 システム規模とか全体の設計とか作成する技術者のスキルとか考慮しないでどっちがいいとか そんな話はただの宗教論だ まあ、とかく他人のやり方が自分と違うと許せない人が多いんだな これ以上は別にスレ立てるかなんかしてやってくれ
956 :
924 :2010/04/11(日) 06:31:56
>>941 ありがとうございます。
実はそれも試したのですが、必要の無いListViewをVisible=Falseに
設定してもその場所に空間ができて画面が不恰好になってしまうのです。
>>956 今試せないが、それはhtmlのスタイルの問題だと思うが
少なくとも今までのコントロールはVisble=Falseだとそこには何もレンダリングしない
だからその後ろの要素をちゃんと詰めるように指定しておけば空間が開いたりしないはず
>>948 えーっと、まず前提として変なアプリを作るがそこは否定するなよ。あくまで一例だからな(俺が昔気が触れて作ったものだ)
operaのようなMDIのブラウザを作るときに、どうしてもあれをtextboxで実現したい!
という時に、ユーティリティー的な操作+継承をすれば解決。
継承はtextboxクラスにURL(string)や前回更新時間(date)などを登録してた気がする。
ユーティリティー的な操作を具体的に言うと、まずArrayListにtextboxをaddする。Dim vu As New ArrayListとする。
そして必要に応じて For Each xxxxx In vuのようにし、ブラウザ替わりのtextboxだけに処理させるというもの
場合によっては必要な人もいるんじゃないか
なんだよアレって。
それはユーティリティとは言わん アプリケーションの本質的な動作じゃないか
>>958 継承使う必要ない
TextBoxやURLや前回更新時間を保持するクラスを作るほうが素直
>>952 そんなのはカスタムコントロールにするのが第一選択で、次がFormにベタに書く方法。
そんなものを実現するために別のクラスにTextBoxの参照を渡す、などは愚の骨頂だと思う。
一体どこに自分も自分の所有者でもない第三者を登場させて話を複雑にさせる合理性があるのかさっぱりわからない。
君は根本的にOOP的な思考ができないんじゃないの?
>>958 言ってる意味がわからない。
どうしてTextBoxの所有者であるMDI子ウィンドウではなく、それとは別にTextBoxだけを
集約したオブジェクトを用意する必要があるのか。
>>953 そういう考え方してるといつまでたっても大きなプログラムが書けるようにならないよ。
コントロールにちょっとした付加機能を付け加えるだけの訳のわからんクラスが
登場するようなアホなコードなんか、規模が大きくなると書いてる本人だって
訳がわからなくなる。
「えーとこのTextBoxは一体全体どうしてこんな振る舞いをするんだ?」と
思っても、TextBoxはカスタムコントロールでもなければ、所有者(Form)がイベントを
捕捉して制御してるわけでもないんだから。
その振る舞いを解明するには、そのTextBoxの参照を握ってる別のオブジェクトによって実現されているんだ、
ということを発見する必要がある。
そんなパズルみたいなコード読んでられっかよここのお馬鹿さんどもは。
はいはい。お前さんの言うとおりですよ。 すごいですね。
>>964 昨日から見てるけどさ
いい加減鬱陶しい
そろそろ、よそでやれ
ここはVBスレで皆まったりやって来てんだよ
上から目線で俺スゲーしたいならC#スレでも行って思う存分暴れてこい
>>966 なんで「論争」の片方の当事者だけにそういうこと言うわけ?
まあ、騙るに落ちてるなw
>>967 >> 910くらいから読み直して来い
どいつが原因なのか良く分かるから
じゃ、どっちもいい加減にしろ。 これでいいな。
何かアホが勘違いしてるみたいなので白状しておくけど
>>919 ,926,966,968 が俺
昨日パチンコ行く前にくだらねぇレス付け合ってる奴らがいるなぁと思って
それで、負けて帰って来たら、まだやってんのかよ
で、今日になってもまだやってるしよ
いいかVBスレはな
> クラスってなんですか〜?
> インスタンスってどうやって使うの?
こうゆうまったりした流れなんだよ
これからまたパチンコだ
帰って来るまでには、いつもの流れになってる事を期待する!
971 :
953 :2010/04/11(日) 14:19:48
俺が大きなプログラム書けるかどうかは大きなお世話です これ以上やりたいならよそでやってください OOPの設計に関して議論するスレでも立てたら? そこでならある程度お前の意見に同意してやるが 多人数のプログラマでシステム作成してるときに交じってほしくないタイプだな
パチするよりコーディングしてろよw せっかくの休みなのに朝鮮ゲームとかw
キムチくさ・・
>>970 あなたは配列やカプセル化などちゃんと使ってますか?
配列とカプセル化ってまた微妙な取り合わせだな…
俺が読んだ入門書にはセットで教えられたわけだが
クラス内部の配列をプロパティで直接公開するとカプセル化崩壊だよ
978 :
デフォルトの名無しさん :2010/04/11(日) 19:41:42
質問です。 オブジェクトの開放にはNothingを代入するって聞いたのてすが、 明示的にNothingを入れなくても、参照している変数がなければ、 ガベージコレクタが、適当なタイミングで開放してくれますか? ' あまり良い例ではありませんが Dim A As Object = New myClass1 … ' 何らかの操作 A = Nothing ' ← 必要ですか? A = New myClass2 … ' 何らかの操作 A = Nothing
>>978 >オブジェクトの開放にはNothingを代入する
そもそもこれが間違ってます
.NETではNothingを代入するのはほとんどの場合意味がありません
使わなくなったらほっとけばGCに回収されます
> .NETではNothingを代入するのはほとんどの場合意味がありません どういう場合で意味があるんですか?
981 :
978 :2010/04/11(日) 19:52:57
>>979 ありがとうございます。
つまり、参照元がなくなったオブジェクトは、
適当なタイミングでGCに回収されるから、
参照が終わったらNothingを代入するとかは必要ないんですね。
>>980 インスタンスAがフィールドとしてインスタンスBへの参照を持ってて
Aはまだ使うけどBはもういらない場合、Nothingを代入すればBをGC対象にできる
忘れちゃうから、常にNothingするようにしとこーっと。
それがいらないのがVBのいいとこなのに・・
>>980 VB的には、WithEvents付きの変数の場合は特に意味があるね。
というか、FormのフィールドをWithEvents付きにした場合でかつ
イベントハンドラでForm上のコントロールを弄ってる場合は(ほとんどの場合そうだと思うけど)
FormClosedとかでNothing入れておかないとまずいケースもある。
どうまずいの? ほとんどの場合、イベントハンドラはフォームのメソッドだろうし。 どっちかっていうとほとんどの場合はまずくないと思うが…
まあ、イベントハンドラの登録が盲点になりやすいのは同意するけどね。 現実にはそれで引っかかることって、普通に作ってればあまりないような気もするのよね。
>>985 普通はフォームとコントロールの寿命は一致するから問題ない
>>988 それは.NETの世界ではその通りなんだが、
コントロールみたいにWin32の世界ではそうじゃない。
現実問題、ハンドルが破棄されたコントロールを操作することになって例外が発生する場合がある。
イベントハンドラとGCの関係で一番注意が必要なのは Sharedイベントに登録したイベントハンドラの外し忘れ 参照を掴みっぱなしになるからNothingを代入しようが関係なく確実にメモリリークする
>>989 でもさ、フォームを閉じた後に、ハンドルが必要になるような操作を行うようなイベントが発行されるような操作を、
コントロールに対して行うことって普通あるかな?
そして、あったとして、それはコントロールにNothngを代入することでかいけつするような問題かな?
ってとこなんだよね。
むしろ問題があるなら、ハンドラ側で調整すべきな気もする。
>>990 それさ、確かに盲点的で気づきにくいのは確かなんだけどさ、
そこで問題になるほどリークが発生するような状態になることって
少ないと思うんだよね。
まず、静的イベントに大量に登録するのは、普通に組んでてやることって少ないと思うんだよね。
んで、イベントに登録するのは多くないけど、その登録される一個のオブジェクトが巨大だとか、
そういうことはあり得るけども、大量データを持ちつつ静的イベントに登録するなんてのは、
元々寿命が長いオブジェクトな事が多い気がするんだよね。
となると、後は大量データとかをメンバに保持しながら、静的イベントに登録して、
すぐに不要になるオブジェクトとかなんだけど、そういうのって普通に作ってるとあまりない気がする。
>>964 拡張プロバイダとかならそんなことにはならないよってかならないように作るわな、当たり前。
ToolTipが表示されたとき、このテキストボックスはなんでこんな動作をするんだ、
カスタムコントロールでもないのに、どこで制御してるんだ、発見できない、なんてことにはならないだろ?
まあ全選択状態にするとかはテキストボックス系のコントロールに限った話になるが、
要はいろんなコントロールに対して横断的な処理を行いたいとき、コントロールを拡張するって方法だと、
使うコントロールをみんな拡張する必要がある、そんなのはあまり好ましくないってこともある。
拡張した各コントロールでそれぞれそういう処理を書くことになるんだぜ?
だってまとめてどっかに書いたら、それはつまりユーティリティ的な機能を作るってことだからな、それはだめなんだろ?
ともかく、横断的な観点で何らかの処理を行いたいとき、 クラスを拡張して各クラスに書くってのは、もはや一般的にもあまり推奨されないやり方になってる。
>>992 静的イベントに限らないよ
メインフォームにサブフォームのイベントハンドラを登録したりすれば同じ
まあ静的イベントの話で書いたんで。 >メインフォームにサブフォームのイベントハンドラを登録したりすれば同じ これも確かにそうなんだけど、普通気づくんじゃないかなって気がする。 いや、気づかんかなー
WPFだとWeakEventパターンの登場だな。
.NETリリースする最初に気づいてればよかったのにな、WeakEventの必要性。
ちゃんとGCとイベントの仕組みを理解してないとわからないだろうな わかってなくても一つ覚えでこうすれば問題無いというような話じゃないんで
要するにデータベースの操作でOpenしたものを必ずCloseしろってのと同じで、 イベントハンドラも追加したら必ず削除しろってことでOK?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。