1

はるかに、この古い vb6 アプリは私を殺しています。.NET の前に、どのようにしてこのような開発を行ったのでしょうか。

プロパティ メンバーが UDT または別のクラスの配列である vb6 クラスを作成しようとしています。

例えば

いくつかのプロパティを公開するMonitorというクラスがあります。

  • 解像度
  • 回転
  • 名前
  • 身長

私のメイン プログラム モジュールには、MonitorConfig というプロパティを持つ SystemConfig というクラスがありますが、以前は 1 つの項目しかサポートしていませんでした。現在、複数のモニターの世界で運用しているため、複数のアイテムをサポートするにはこのプロパティが必要です。

残念ながら、vb6 は List(Of T) を提供しないので、次善の策が必要です。私の最初の考えは、配列を使用することです。

これが私の試みです:

Private m_MonitorConfig() As Monitor

Public Property Get MonitorConfig() As Monitor()
    MonitorConfig = m_MonitorConfig
End Property
Public Property Let MonitorConfig(val() As Monitor)
    m_MonitorConfig = val
End Property

MonitorConfig プロパティの内外で配列値を認識するプロパティを取得するにはどうすればよいですか?

ありがとう

4

2 に答える 2

3

「インデックス」引数を受け入れるようにプロパティを変更して、構文的に「配列のように」扱うことができるようにするか、配列の代わりにコレクションを使用することを検討してください。

于 2012-04-15T09:08:50.100 に答える
3

あなたのコードは大丈夫ですが、あまりパフォーマンスが良くありません。モニターへの読み取り専用アクセスが必要であるが、本格的なコレクションを実装したくない場合は、単純なアクセサー プロパティとカウント プロパティで十分です。

このようなもの:

Option Explicit

Private Declare Function EmptyMonitorsArray Lib "oleaut32" Alias "SafeArrayCreateVector" (Optional ByVal vt As VbVarType = vbObject, Optional ByVal lLow As Long = 0, Optional ByVal lCount As Long = 0) As Monitor()

Private m_MonitorConfig() As Monitor

Property Get MonitorConfig(ByVal Index As Long) As Monitor
    Set MonitorConfig = m_MonitorConfig(Index)
End Property

Property Get MonitorConfigs() As Long
    MonitorConfigs = UBound(m_MonitorConfig) + 1
End Property

Private Sub Class_Initialize()
    m_MonitorConfig = EmptyMonitorsArray
End Sub
于 2012-04-15T16:11:06.343 に答える