VB.NET質問スレ (Part12)at TECH
VB.NET質問スレ (Part12) - 暇つぶし2ch961:デフォルトの名無しさん
05/11/10 09:45:39
一般的にはその上司の言が正しい。
特に処理が重くなる場合はコンストラクタに実装するのは避けるべき。

962:デフォルトの名無しさん
05/11/10 12:27:53
ケースバイケースだろうけど俺は>>960の設計の方をむしろ推すね。
要するに読み込みを非同期にすりゃいいだけでしょ?
客から注文もらってから問屋に注文だすような店なら最初からイラネ。

963:デフォルトの名無しさん
05/11/10 12:58:49
コンストラクタではまず重い処理はやるべきではない。
次に、どっちにも対応すればいいんだから・・・。

上司コンストラクタ - インスタンス生成だけ
>>960コンストラクタ - 生成して検索関数呼ぶ
検索ぱぶりっく関数 - 検索実行

面子潰さず、自分の意見通しつつ。

964:デフォルトの名無しさん
05/11/10 16:32:06
textboxコントロールがフォーカスを受け取った時にコントロールの
背景色を変えようと思っているのですが、
フォーカスを受け取ったイベントとして、
Enter を使うべきか、GotFocus を使うべきか、どちらを
使うべきでしょうか?


965:デフォルトの名無しさん
05/11/10 16:39:18
Enterを使うべきだとあちこちに書かれてると思うんだが。
GotFocus使ったらフォームをアクティブにしたときも発生したりするぞ。

966:デフォルトの名無しさん
05/11/10 17:09:41
VB.NETのIF文で最初の条件がFALSEの場合2番目以降の比較は行なわないように
記述する方法はありますか?
dim x as boolean = false
dim y as boolean = true
if(x and y = nothing) then
の場合、xがFALSEなのでyの値が何であっても条件に該当しないので
このように最初の条件がFALSEになった場合、それ以降の条件判断を
して欲しくないのですが。IF文を2つにわけるしかないでしょうか?
よろしくお願いします。

967:デフォルトの名無しさん
05/11/10 17:15:09
AndAlso
ちょっとはリファレンス見ようぜ

968:960
05/11/10 17:48:52
>>961
>>962
>>963
レス感謝です。

「コンストラクタには重い処理を書くべきではない」ってのを今日まで知りませんでした。
1万件のレコードを、960に書いた2通りの方法でそれぞれ試してみましたが時間的な差は無かったです。
なにか実感できるようなサンプルってありますか?

969:デフォルトの名無しさん
05/11/10 18:02:03
厳密にはデバッグできなくなるって理由でないの?>コンストラクタに書かない

970:デフォルトの名無しさん
05/11/10 18:29:26
>>968
>「コンストラクタには重い処理を書くべきではない」ってのを今日まで知りませんでした
単に961の俺様ルールだと思うよそれ。
だってそんなルールに何の合理性のないじゃん。
すくなくとも無条件にいつでも合理的とはいえないよ。

というか、重いなら単に非同期で処理すればいいだけの話で
どうせ必須の引数なら最初から受け取っておく、必須の処理なら最初からやっておく
これが普通の考え方でしょう。
もちろん「特に理由がない限りにおいては」ね。

971:デフォルトの名無しさん
05/11/10 18:35:08
つ コンストラクタの使用方法のガイドライン

972:デフォルトの名無しさん
05/11/11 01:03:50
Cで作った xxx.dll 中の

typedef struct {
  int a;
  int b[50];
} X;
int test(X *z) {}

な関数を、VBで、

Structure X
  Dim a As Integer
  Dim b(50) As Integer
End Structure
Declare Function test Lib "xxx.dll" (ByRef z As X) As Integer

として使おうとしたのですが、VBでは構造体に固定長配列が使えないらしく、
エラーが出てしまいます。
構造体の中では b() だけ宣言して後でReDim b(50) しても、
アドレス的に a に連続しないのか、test を呼び出したときに落ちます。
どうしたらいいでしょうか。

973:デフォルトの名無しさん
05/11/11 03:50:01
C#.NETでは書けて、VB.NETで書けないものってありますか?

974:デフォルトの名無しさん
05/11/11 04:40:09
>>972
Imports System.Runtime.InteropServices 'コードの先頭で宣言

<MarshalAs(UnmanagedType.ByValArray, SizeConst:=50)> _
Dim b() As Integer

>>973
VB2005で可能になるけど、カスタムイベント、演算子のオーバーロード、XMLドキュメントあたり。

975:デフォルトの名無しさん
05/11/11 09:27:36
つうか、コンストラクタで非同期処理なんてしてほしくないよな。


976:デフォルトの名無しさん
05/11/11 12:58:19
>>973
unsafe コード

977:デフォルトの名無しさん
05/11/11 15:05:20
質問です。

データグリッドで、1つのセルに文字を打ったとき、
打たれた文字を判別することはできますか?

データベースと連携させていて、aと打たれたらaから始まるコード(商品コードなど)を
そのセルの部分でコンボボックスで表示させたいのですが。

978:デフォルトの名無しさん
05/11/11 22:33:10
>>973
using

979:デフォルトの名無しさん
05/11/11 22:54:59
>>977
データグリッドの編集中のセルの正体はTextBoxだから
そのTextBoxへの参照を取得すればなんでもできるんじゃない?

TextBoxへの参照を取得する方法は・・・忘れたけど別に難しくないというか
裏技的なものは何もなく、なにかのオブジェクトのプロパティで明示的だったと思う。

ていうかデータグリッドの使い方紹介してるサイトなんていっぱいあるでしょ。
こんなところで質問しなくても。

980:デフォルトの名無しさん
05/11/11 23:19:59
>>968
常に全件を抱え込むオブジェクトならどっちで実装しても差は無いと思う。
けれど、Formで使用するマスタデータを管理するクラスなんかだと常に全件が必要なわけ
でもないからメソッドやプロパティが呼び出された時に初めて実際にDBへアクセスするとい
うProxyパターンを適用するのも一つのやり方。
Formを開くたびにマスタ読み込みで数秒待たされるというのはUIの設計としてもマズイ。


981:最凶VB厨房
05/11/12 09:38:46
次のスレッドはこちら

VB.NET質問スレ (Part13)
スレリンク(tech板)


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