Barlet
Barlet

Reputation: 545

Pass parameter in an already opened form in C#

I want to pass a parameter to the textbox. I have the following code and it is passing the parameter but not the way I want. My main form in already open and I want to pass the parameter from my search form. when I do with the code below it opens mt 1 more main form and the parameter is shown in there. I want to by able to show in the opened main form.

When I erase frmMain.Show(); nothing happens.

Main frmMain = new Main();
artikal = "TEST TEST";

frmMain.ed_artiakal.Text = artikal;
frmMain.Show();

any suggestions?

Upvotes: 0

Views: 1690

Answers (2)

Barlet
Barlet

Reputation: 545

I have solved my problem in the following way.

On my Search Form I created a public string and when I showed the form I referenced to that string in my case GetItemCode.

The key here was to use ShowDialog() and not to use Show().

SEARCH FORM

Search frmSearch = new Search();
frmSearch.ShowDialog();

ed_artiakal.Text = frmSearch.GetItemCode;

MAIN FORM

public string GetItemCode
        {
            get { return Artikal; }
        }

Now when I close the search form the value is shown in the TextBox on my main form.

Thanks for your answers and comments!

Upvotes: 0

al_amanat
al_amanat

Reputation: 615

You have many variants to solve your problem.

Option 1 Define and use custom event.

Search form code:

public event EventHandler ArtikalTextChanged;

private void textBox1_TextChanged(object sender, EventArgs e)
{
     if (ArtikalTextChanged != null)
         ArtikalTextChanged(this, EventArgs.Empty);
}

Main form code:

private void button1_Click(object sender, EventArgs e)
{
    Search search = new Search();
    search.ArtikalTextChanged += OnArtikalTextChanged;
    search.Show();
}

private void OnArtikalTextChanged(object sender, EventArgs e)
{         
    this.ed_artiakal.Text = (sender as Search).textBox1.Text;
}

Don't forget to make textBox1 of Search form public.

Option 2 Get instance of your main form in search form:

Search form code:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    var mainForm = Application.OpenForms.OfType<Main>().FirstOrDefault();
    mainForm.ed_artiakal.Text = textBox1.Text;
}

Main form code:

private void button1_Click(object sender, EventArgs e)
{
    Search search = new Search();
    search.Show();
}

Don't forget to make ed_artiakal control public in your Main form.

Option 3 Share data between forms (recommend) But if you application is large and you want to make it scaleable and flexible I recommend you to use data-binding technique to share data between forms without coupling them. You can read more at articles: http://msdn.microsoft.com/en-us/library/h974h4y2(v=vs.90).aspx

Upvotes: 2

Related Questions