2

VB6でウィザードタイプのコントロールを作成しようとしていますが、障害が発生しました。

コントロールのユーザーが、プロパティページを使用してCWizardPageをデザインタイムコントロールに追加および管理できるようにしたいと思います。

私が使用した最初のアプローチは、コレクションを使用してウィザードページをOCXに直接追加することでしたが、コレクションクラスが永続化できない(そしてそれを実現する簡単な方法が見つからなかった)という2つの問題が発生しました。 VB6は、実行時にコントロールをインスタンス化する機能が非常に制限されているようです。そのため、実際にコントロールを再インスタンス化するのは難しいようです。

私の次の考えは、ユーザーがデザイン時にウィザードページを描画できるようにすることでした。この種の作業は機能しますが、CWizardContainer内ではなく、別のウィザードページ内にウィザードページの1つを描画するのは非常に簡単です。

では、ドラッグ'n'ドロップを使用せずに、デザイン時にフォームにコントロールを追加する方法を教えてもらえますか?

4

3 に答える 3

1

AddコンテナーのControlsコレクションのメソッドを使用して、コントロールをフォームまたは他のコンテナー (UserControl など) に動的に追加できます。たとえば、という名前の TextBoxmyTextBoxを frmMyForm というフォームに追加するには、次のようにします。

frmMyForm.Controls.Add "VB.TextBox", "myTextBox"

以下は、VB6 ヘルプ ファイルの抜粋です。

Add メソッド (Controls コレクション)


Controls コレクションにコントロール を追加し、コントロールへの参照を返します。

構文

オブジェクト追加 (***ProgID、名前、コンテナー* )**

Addメソッドの構文には、次の部分があります。

オブジェクト(必須)

適用先リスト内のオブジェクトに評価されるオブジェクト式。

プログラム ID (必須)

コントロールを識別する文字列。ほとんどのコントロールの ProgID は、オブジェクト ブラウザを表示することで確認できます。ProgID は、コントロールのライブラリとクラスで構成されます。たとえば、CommandButton コントロールの ProgID は VB.CommandButton です。ProgID がオブジェクト ブラウザーに表示されるものと異なる場合、Visual Basic は正しい ProgId を含むエラー メッセージを表示します。

お名前(必須)

コレクションのメンバーを識別する文字列。

コンテナー(オプション)

コントロールのコンテナーを指定するオブジェクト参照。指定されていない場合、または NULL の場合は、既定で Controls コレクションが属するコンテナーになります。この引数を指定すると、既存のコンテナー コントロール (Frame コントロールなど) にコントロールを配置できます。ユーザー コントロールまたは ActiveX ドキュメントもコンテナーにすることができます。

于 2008-11-17T01:05:34.790 に答える
0

...VB6 seems very limited in it's ability to instantiate controls at run time...

Nothing could be further from the truth. Instantiating controls at run time in VB6 is trivial.

  1. At design time, set the Index property of the control to 0. This turns the control into a control array.
  2. At runtime, load new instances of the control as needed.

As an example, create new Standard EXE project drop a TextBox onto the form, set its Index to 0 and put the following in the Form_Load event:

Private Sub Form_Load()

    Dim newIndex As Integer

    newIndex = Text1.UBound + 1
    Load Text1(newIndex)
    Text1(newIndex).Top = Text1(newIndex - 1).Top + Text1(newIndex - 1).Height
    Text1(newIndex).Visible = True

End Sub
于 2008-11-17T02:51:51.473 に答える
0

私は、必要なフィールドに基づいて多くのデータ入力画面全体を動的に定期的に作成するアプリケーションに取り組んできました。上、左、幅、高さを常に指定するのは冗長です。そのため、通常はコントロールの「テンプレート」があり、それらの設定を追加のテンプレートにコピーします。

于 2009-02-24T20:32:34.773 に答える