2016-06-28 2 views
0

ラベルとラジオボタンがそれぞれ90以上のVFPフォームクラスを生成するプログラムを作成しています。それは簡単な部分です。 (そしてはい、私はそれがラジオボタンがたくさんあることを知っていますが、それはユーザーが望むものです)。定義されているオブジェクトのサブコンテナへのオブジェクトの追加

我々のアプリケーションには、いくつかの類似したVCXがありますが、多くの個別コントロールの近くにはありません。だから、私の人生の大部分をフィールドをドラッグ・アンド・ドロップするのではなく、すべてのフィールド、オプション、デフォルト値の便利なリストがあることに気づかずに、クラスの「View Class Code」オプションを使用しましたブラウザを使用して、コードがベースと見えるもののサンプルを取得します。それから、私は必要なすべての部分でPRGを生成するコードを書いた。

私の実際の問題は、「表示クラスコード」によってコード出力が無効な構文が含まれているようだということです。

DEFINE CLASS form40 AS frmae 
    Height = 427 
    Width = 710 
    ScrollBars = 2 
    DoCreate = .T. 
    Visible = .T. 
    Name = "form40" 

    ADD OBJECT form40.cntouter.cntform40 AS cntctrls WITH ; 
    Top = 175, ; 
    Left = 2, ; 
    Visible = .T., ; 
    Name = "Cntform40" 

ENDDEFINE 

クラスfrmaeは「cntouter」と呼ばれる容器を含む(VCXから)クラスであります。クラスcntctrlsは、すべてのラベル/ラジオボタンを含むコンテナです。

問題は明らかに、DEFINE CLASSコマンドでメンバーにADD OBJECTを追加できないことです。ドット付き構文は構文エラーを引き起こします。それでも、この手法は「クラスコードの表示」出力で使用されます。

私は、コントロールコンテナをcntouterに追加するためにADDOBJECT()を呼び出すInitメソッドを生成することでこの問題を回避できると思っていますが、私はむしろクラス定義で使用したいと思います。

答えて

2

"クラスコードの表示"オプションで実行可能なコードが生成されません。それは決してありません。

あなたが必要とすることを行うための私の提案は、あなたが望む外観でオプションボタンクラスを作成することです。次に、既存のリストを使用してカーソルを作成し、それを回転させるコードを記述し、オプションボタンをコンテナクラスに追加します。

ここで知っておくべき重要なことは、フォームデザイナまたはクラスデザイナで開いているフォームまたはクラスに影響するIDEでコードを実行できることです。ビルダーズがそうしているのです。したがって、コードベースのクラスを生成するのではなく、コードを使用してビジュアルクラスを作成します。

+0

「クラスコードの表示」が使用できないことはわかりませんでした。 Grr。 – LAK

+0

ありがとうございます。生成されたコードが悪いことを知ることが鍵です。私は既存のコードを再利用することなく、クラスを構築します。 – LAK

1

これをコードで実行したい場合は、Tamarがすでに指摘しているように、まずビューコードに依存しないでください。任意のフォームとそのコントロールをコードで行うことができます(1つまたは2つのActiveXコントロールを除いて)が、コンテナのタイプコントロールのコード方法を理解する必要があります。まず、クラスライブラリからクラスを追加するには、そのソースをsepcifyする必要があります。すなわち:

add object myContainer as MyBeautifulContainer from myClasslib.vcx 

は動作しません。代わりに、あなたはこのようなあなたのコードでクラスを定義する必要があります:

define class form40 as form 
* ... 
    add object myContainer as MyContainer with ... 
* ... 
enddefine 


define class myContainer as MyBeautifulContainer from myClasslib.vcx 
* additiobnal code if any 
enddefine 

第二に、あなたは最初にあなたの内のコントロールを作成し、最も外側のオブジェクトを作成するために、必要に応じて追加する必要があります。あなたが設計しているフォーム上の任意のオブジェクトへの参照を取得することができますASELOBJ()関数を使用して、その後

modify command [enter] 

と:

設計時に、あなたは、ウィンドウをコマンドコードウィンドウをポップアップ表示する行くことができます。コードウィンドウを選択してコードを選択して実行します(コントロールを消去してコードを修正し、最初に正しく実行できない場合は再試行してください)。 )。それは一時的な "do and throw away"スタイルビルダーです。

+0

ありがとうございます。私は確かに私がやろうとしていることを達成することができますが、私の問題は、私は 'クラスコードの表示'から技術を信頼していたということでした。これが無効であることが分かったので、私は、このフォームのクラスをビルドするために、その悪いコードを再利用しようとするよりも、より根本的なアプローチをとるでしょう。 – LAK

関連する問題