2017-03-03 7 views
1

私は購入ボタンが付いた複数のフォームを持っています。私が持っているフォームはLawnA.csとLawnb.csです。これらのフォームの両方に単一のBuy.csフォームを使用したいと思います。つまり、どのようなフォームがBuy.cと呼ばれているかを知りたいのです。クラスBuy.csでC#で別のフォームと呼ばれるフォームを知る方法

フォームLawnA.csで

buy.lotAtobuy = this; 
    buy.ShowDialog(); 
フォームLawnB.csで

buy.lotBtobuy = this; 
    buy.ShowDialog(); 
フォームBuy.csで

public LawnA lotAtobuy; 
    public LawnB lotBtobuy; 
    ((LawnA)lotAtobuy).textBox1.Text; 
    ((LawnB)lotBtobuy).textBox1.Text; 

、私が実行したいです:

((LawnA)lotAtobuy).textBox1.Text; 

私はこのコードを実行するLawnB.csが呼び出された場合Buy.csながらBuy.cs呼ばLawnA.csがあれば:

((LawnB)lotBtobuy).textBox1.Text; 
+0

私はtextBox1の値を取得していました。その値はBuy.cs.xのすべてのクエリで使用したものです。と私はエラーオブジェクトの参照が送信されていない得る –

答えて

1

あなたが代わりにその変数を定義するために、クラスごとに別々のオブジェクトを定義する必要がありますテキストを割り当てる前にオブジェクトのタイプをチェックしてください。 Buy.csでその変数の宣言がされる意味:あなたは、オブジェクトの型を取得し、使用前に比較できるように

public object lotToBuyInstance; 

、それは、THIのようになる:

if (lotToBuyInstance.GetType() == typeof(LawnA)) 
{ 
    ((LawnA)lotAtobuy).textBox1.Text;  
} 
else if (lotToBuyInstance.GetType() == typeof(LawnB)) 
{ 
    ((LawnB)lotAtobuy).textBox1.Text;  
} 
// and so on 

はあなたが望んでいたことを考えてみましょう別のクラスを作成するには(LawnCとする)、そのタイプのオブジェクトを作成してそれを変更する必要はありません。if else ifラダーに別の条件を追加して動作させるだけです。

+0

ありがとう。それは働いている –

+0

それを聞いてうれしい、あなたを助けるために幸せ。 –

0

n受信フォームのコンストラクタ:

using System.Diagnostics;  

public FormThatWasCalled 
{ 
    string caller = new StackTrace().GetFrame(1).GetMethod().DeclaringType.Name; 
    InitializeComponent(); 
} 
関連する問題