VB.NET質問スレ (Part12 ..
[2ch|▼Menu]
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

4703日前に更新/282 KB
担当:undef