2013-04-02 2 views
0

У меня есть 2 формы, имя HomeForm и второе имя cfgFormпеременного Обновление в Form1 от значения в Form2

У меня есть переменные, имя strCNF в HomeForm, значение переменной strCNF из КНФА в cfgForm.

Вот код из HomeForm:

private void cnfRulesMenu_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     cfgForm cfgForm = new cfgForm(this); 
     cfgForm.Show(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message.ToString(), "Error"); 
    } 
} 

// other parts.... 
public cfgForm cfg; 
string strCNF = ""; 
strCNF = ((cfgForm)this.cfg).CNF; 

Затем, в другой форме, cfgForm, вот код:

public string CNF = "S -> NP VP" + System.Environment.NewLine + 
         "NP -> DT NN | QT NN | NP PP | NP RC | n | p" + System.Environment.NewLine + 
         "DT -> d" + System.Environment.NewLine + 
         "NN -> JJ NN | n" + System.Environment.NewLine + 
         "JJ -> JJ JJ | j" + System.Environment.NewLine + 
         "QT -> q" + System.Environment.NewLine + 
         "PP -> PT NP | GG PP" + System.Environment.NewLine + 
         "PT -> i" + System.Environment.NewLine + 
         "GG -> g" + System.Environment.NewLine + 
         "RC -> WH NP | WH VP" + System.Environment.NewLine + 
         "WH -> w" + System.Environment.NewLine; 

    public cfgForm(HomeForm homeForm) 
    { 
     // TODO: Complete member initialization 
     InitializeComponent(); 
     this.homeForm = homeForm; 
    } 

    private void btnDefaultCFG_Click(object sender, EventArgs e) 
    { 
     tbCNF.Text = CNF; 
    } 

    private void cfgForm_Load(object sender, EventArgs e) 
    { 
     tbCNF.Text = CNF; 
     btnApplyCNF.Enabled = false; 
    } 

    private void btnApplyCNF_Click(object sender, EventArgs e) 
    { 
     //CNF = ""; 
     CNF = tbCNF.Text; 
     HomeForm homeForm = new HomeForm(); 
     homeForm.cfg = this; 
     //homeForm.ShowDialog(); 
     this.Hide();// doesn't work 
    } 

До сих пор те, код работает хорошо, если я использую homeForm. ShowDialog(). Я имею в виду, что после того, как cnfRulesMenu_Click активен и показывается cfgForm, стоящий на HomeForm, я обновляю переменную CNF в cfgForm, затем возвращаюсь к HomeForm и cfgForm.Hide. Но он дает нулевое значение.

Любое предложение сэр ..

+0

Используйте событие в своей cfgForm, а затем подпишитесь на него в своем домашнем формате. –

+1

http://www.codeproject.com/Tips/55555/Pass-value-between-forms-using-events – Damith

ответ

1

Потому что вы еще новых HomeForm в этих коде.

private void btnApplyCNF_Click(object sender, EventArgs e) 
{ 
    //CNF = ""; 
    CNF = tbCNF.Text; 
    HomeForm homeForm = new HomeForm(); 
    homeForm.cfg = this; 
    //homeForm.ShowDialog(); 
    this.Hide();// doesn't work 
} 

Таким образом, этот код не работал как ваше желание.

public cfgForm cfg; 
string strCNF = ""; 
strCNF = ((cfgForm)this.cfg).CNF; 

Редактирование кода может решить вашу проблему, но я должен сказать, что эта архитектура не имеет смысла.

private void btnApplyCNF_Click(object sender, EventArgs e) 
{ 
    //CNF = ""; 
    CNF = tbCNF.Text; 
    this.homeForm.cfg = this; 
    //homeForm.ShowDialog(); 
    this.Hide();// doesn't work 
} 
+0

Это работает сэр @ J.C. Но только если btnApplyCNF_Click активен. Затем, как я получаю значение от cfgForm, который является строкой CNF без открытия cfgForm. Sir ... :) –

+0

@BerryHarahap: Если вы хотите получить доступ к 'CNF' после новой' 'cfgForm', попробуйте написать' this.homeForm.cfg = this' в конструкторе. Тем не менее, я предлагаю вам найти лучший способ переноса данных между двумя формами. [Эта статья] (http://stackoverflow.com/questions/10722461/how-to-pass-textbox-data-between-two-forms) может дать вам несколько советов. –

+0

Хорошо, SIr @ J.C ... Я хочу попробовать. –

Смежные вопросы