2017-12-30 66 views
0

まず、フォームクラスはなぜですか?別のモジュールのフォームオブジェクトを使用して、どのようにしたらいいですか?

しかし今、主な質問に。

私が持っている:フォームで

Form1.vb

Module1.vb

テキストボックスがあり、プログレスバー、ラベルなど

私はこれらのプロパティを変更できるようにしたいです私のフォーム上のオブジェクトはmodule1からですが、私はそれらにアクセスすることはできません。

フォーム上のこれらのものはオブジェクトです。彼らは特定の範囲を持っていますか?どのように変更できますか?

私のソリューションエクスプローラによれば、これらのことはクラスのプロパティですか?

enter image description here

しかし、私はプログラムを実行すると、フォームが現れ?? form1オブジェクトが作成されるように、フォームクラスをインスタンス化する必要はありませんか?

ないことが重要ということが、ここではModule1の

Sub WriteObjectsToCSV() 
    Dim props As PropertyInfo() = MyCompanies(1).GetType().GetProperties() 
    Dim sw As StreamWriter = 
    My.Computer.FileSystem.OpenTextFileWriter(SaveAs, False) 
    Dim csv As New CsvHelper.CsvWriter(sw) 

    csv.WriteHeader(Of Company)() 
    csv.NextRecord() 

    For Each company In MyCompanies 

     '>>> want to write to my text box and change my progress bar here <<< 

     For Each prop In props 
      csv.WriteField(prop.GetValue(company)) 
     Next 
     csv.NextRecord() 
    Next 
End Sub 
+1

フォームはクラスであるモジュールでこれを書くことができ

Public Property OutputText() As String Get Return txtOutput.Text End Get Set(ByVal value As String) txtOutput.Text = value End Set End Property 

外のテキストにアクセスできるようにフォームでプロパティを宣言することができます世紀とは、オブジェクト指向の世界です。画像内のすべてがオブジェクトではありません - いくつかはメソッドです。 'MyCompanies(1)'が何であるかは分かりませんが、モジュールメソッドに渡すことができます。 'MyCompanies(1)'が何であるかによって、そのコードは自家製シリアライザに見えます。利用可能な多くのシリアライズ方法を調べることができます。 – Plutonix

+3

フォーム*は*インスタンス化されています - VB Appフレームワークがそれを行います。どのフォームがプロジェクトプロパティの 'Startup Object'として設定されているかによって異なります。 'Sub Main'のコードから' Application.Run(New Form1) 'として実行することもできます。 'MyCompanies'がデータである場合、そのメソッドに渡すのではなく、メソッドをデータのある場所(フォーム)に移動することもできます。既存のシリアライザは、調査する価値があると掘り下げます。将来、1つの質問につき1つの質問をしようとする - これはチュートリアルを求める境界線です – Plutonix

答えて

2

それらが動的に作成されるため、フォームがクラスであるからの抜粋です。同じフォームクラスのサーバ時間をインスタンス化して開くことができ、インスタンスを同時に開くことができます。

VBは自動的にメインフォームをインスタンス化します。

My.Application.OpenFormsで公開フォームにアクセスできます。メインフォームは、外部からのフォームのコントロールにアクセスできるようにするには、常に最初の

Dim mainForm As Form1 

mainForm = DirectCast(My.Application.OpenForms(0), Form1) 
mainForm.txtOutput.Text = "hello" 

して、彼らはPublicまたはInternal宣言する必要があります。プロパティ修飾子は、プロパティウィンドウ(Modifiersプロパティ)から変更できます。

代わりに、あなたも今ではそれが21であるため、

mainForm.OutputText = "hello" 
関連する問題