2013-10-10 3 views
0

У меня есть 2 winforms в моем проекте. Когда я нажал кнопку «Настройки» в Form1, он отобразил форму «Настройки», я вношу некоторые изменения в текстовые поля и когда я нажимаю кнопку «Сохранить» во второй форме, она сохраняет эти значения в текстовом файле, и я хочу передать эти значения для первой формы, но я не мог их пропустить.Передача значения из формы2 в форму1 в C#

Вот несколько частей моих кодов;

Этот код Настройки кнопки мыши (на Form1)

private void button3_Click(object sender, EventArgs e) 
{ 
    Settings frm = new Settings(); 
    frm.Show(); 
} 

public void funData(TextBox txtForm1) 
{ 
    label3.Text = txtForm1.Text; 
} 

и этот код Сохранить кнопку мыши (Вторая форма)

private void button5_Click(object sender, EventArgs e) 
{ 
    if (File.Exists(ConfigFile)) 
    { 
     File.Delete(ConfigFile); 
     using (StreamWriter writer = new StreamWriter(ConfigFile)) 
     { 
      writer.WriteLine(txtTemsPath.Text); 
      writer.WriteLine(txtVodafonePath.Text); 
      writer.WriteLine(txtTurkcellPath.Text); 
      writer.WriteLine(txtAveaPath.Text); 
      writer.Close(); 
     } 
    } 
    else 
    { 
     using (StreamWriter writer = new StreamWriter(ConfigFile)) 
     { 
      writer.WriteLine(txtTemsPath.Text); 
      writer.WriteLine(txtVodafonePath.Text); 
      writer.WriteLine(txtTurkcellPath.Text); 
      writer.WriteLine(txtAveaPath.Text); 
      writer.Close(); 
     } 
    } 
    Form1 frm = new Form1(); 
    delPassData del = new delPassData(frm.funData); 
    del(this.txtTemsPath); 
    frm.getSettings(); 
    frm.TemsPath = TemsPath; 
    frm.Activate(); 
    frm.Refresh(); 
    this.Close(); 
} 

Не могли бы вы мне помочь в этом вопросе?

Благодаря

+0

Что вы имеете в виду, что «не смогли пройти»? Вы получаете сообщение об ошибке? –

+0

Немного вещей: 1) Кажется, вы просто хотите перезаписать файл конфигурации. Вам не нужно проверять его существование, удалять его, а затем переписывать, по умолчанию «StreamWriter» перезапишет его, если вы явно не указали это не так. 2) Кажется, что два записывающих блока делают то же самое, независимо от того, 3) Не вызывайте '.Close()', имея его в блоке 'using', делает это для вас и, наконец, 4). Как это не работает далеко? Какие ошибки вы получаете? – Arran

ответ

0

определить на первый Форме:

Settings obj = (Settings)Application.OpenForms["Settings"]; 

private void button3_Click(object sender, EventArgs e) 
    { 
     Settings obj = new Settings(); 
     obj.Show(); 
    } 

И заменить в коде где-нибудь еще frm с obj

Дело в том, что вы должны относиться каждый раз к текущему экземпляру другая форма, а не открытая новая

0

Вам необходимо создать общедоступный аксессуар собственности по форме 2 с данными, которые вы хотели бы сохранить. После закрытия формы 2 вы все равно сможете получить доступ к этим данным, используя form2.MySpecialData, если вы его не аннулировали. этот вопрос был задан много раз в stackoverflow, и есть много хороших примеров.

Communicate between two windows forms in C#

public Form2() 
    { 
     InitializeComponent(); 
    } 

    private string mySpecialData; 

    public string MySpecialData 
    { 
     get { return mySpecialData; } 
     set { mySpecialData = value; } 
    } 
0

Добавить свойство настройки, чтобы вернуть значение "TemsPath". Затем, вместо Close(), установите DialogResult на OK:

public partial class Settings : Form 
{ 

    public string TemsPath 
    { 
     get { return txtTemsPath.Text; } 
    } 

    private void button5_Click(object sender, EventArgs e) 
    { 

     // ... your save code ... 

     this.DialogResult = System.Windows.Forms.DialogResult.OK; 
    } 

} 

Теперь вернемся в Form1, используйте ShowDialog() вместо Show() и получить доступ к свойству, когда он возвращается:

public partial class Form1 : Form 
{ 

    private void button3_Click(object sender, EventArgs e) 
    { 
     Settings frm = new Settings(); 
     if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      label3.Text = frm.TemsPath; 
     } 
    } 

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