Frank gagui
Frank gagui

Reputation: 73

how to know which form called another form in C#

I am having multiple forms with Buy button provided. The forms i am having are LawnA.cs and Lawnb.cs, i want to use single Buy.cs form for both of these forms. I mean I want to know what form called the Buy.cs.

In Form LawnA.cs

    buy.lotAtobuy = this;
    buy.ShowDialog();

In Form LawnB.cs

    buy.lotBtobuy = this;
    buy.ShowDialog();

In Form Buy.cs

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

In class Buy.cs, I want to execute:

    ((LawnA)lotAtobuy).textBox1.Text;

if LawnA.cs called Buy.cs while if LawnB.cs called Buy.cs I want to execute this code:

    ((LawnB)lotBtobuy).textBox1.Text;

Upvotes: 1

Views: 138

Answers (2)

beeker
beeker

Reputation: 810

Try this in the constructor for the receiving form:

using System.Diagnostics;    

public FormThatWasCalled
{
    string caller = new StackTrace().GetFrame(1).GetMethod().DeclaringType.Name;
    InitializeComponent();
}

Upvotes: 0

sujith karivelil
sujith karivelil

Reputation: 29036

You need to to define separate object for each class instead for that define the variable as object, and check the type of object before assigning the text. Which means the declaration of that variable in Buy.cs will be:

public object lotToBuyInstance;

So that you can get the type of object and compare before use, that would be like thi:

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

Consider that you wanted to create another class(let it be some LawnC) then you need not to create an object of that type and make changes as per that, Just add another condition in your if else if ladder to make them work

Upvotes: 1

Related Questions