2016-08-28 3 views
0

Я пытаюсь передать данные между двумя формами (все, что я хочу сделать, это иметь текстовое поле в Form1 и показать это значение текстового поля в текстовом поле 1, которое находится в Form2). Как я могу это сделать, используя WPF? Посмотрите на довольно много решений, но, похоже, они не могут заставить их работать.Передача данных между формами C#

Для той форме, в которой я желающей для отображения значений (в tbd.Text), вот код:

namespace test 
{ 
    /// <summary> 
    /// Interaction logic for OptionDisplayWindow.xaml 
    /// </summary> 
    public partial class OptionDisplayWindow : Window 
    { 
     public OptionDisplayWindow() 
     { 

      InitializeComponent(); 
      tbd.Text = "k"; //want to change this value based on "s" in the other form 

     } 

Форма, в которой текст передается из (хочу, чтобы отобразить строка):

public void Button1_Click(object sender, RoutedEventArgs e) 
     { 
      string s = "testText" 


     } 

Я пробовал каждый другой ответ на SO (провел последние 6 часов) и не имел абсолютно никакой удачи.

EDIT 2: Используя метод, указанный как лучший ответ здесь Send values from one form to another form я пришел с этим кодом для Form1:

private void ttbtn_Click(object sender, RoutedEventArgs e) 
     { 
      using (Form2 form2 = new Form2()) 
      { 
       tbd.Text = form2.TheValue; 
       } 
      } 

И код Form2:

 public string TheValue 
     { 
      get { return arrayTest.Text; } 
     } 

Однако, Я получаю ошибку «Форма 2»: тип, используемый в операторе using, должен быть неявно конвертируемым в «System.IDisposable».

+0

Это будет закрыто, если вы не разместите какой-либо код. –

+0

Извините, новичок в этом, дайте мне минуту! – user3879060

+1

@ user3879060 На самом деле уже есть много учебников по этому вопросу: http://stackoverflow.com/questions/1559770/send-values-from-one-form-to-another-form первый результат из google – User2012384

ответ

2

Код, который вы помещаете в примерный проект (который вы указали как ссылку в комментариях), должен быть в вашем вопросе. Учитывая, что становится намного легче понять, что вы пытаетесь сделать, и дать вам работоспособное решение.

Я бы предложил создать «DataTransferObject» и передать это между каждой формой.

public class Dto 
{ 
    public string Text; 
} 

Код в MainWindow будет выглядеть следующим образом:

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     var dto = new Dto(); 
     window2 win2 = new window2(); 
     win2.Dto = dto; 
     win2.ShowDialog(); 
     textBox1.Text = dto.Text; 
    } 

И код в window2 будет выглядеть следующим образом:

public Dto Dto; 

    private void textBox2_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     if (this.Dto != null) 
     { 
      this.Dto.Text = textBox2.Text; 
     } 
    } 

Это один путь - из примерно миллион - передачи данных между формами. Преимущество использования объекта передачи данных заключается в том, что он начинает вас на пути разделения ваших данных от вашего пользовательского интерфейса, и это, как правило, очень хорошо.

+0

Спасибо. Я на самом деле пытался передать данные другим способом (не делал это ясно, извините), и попытался сделать это, но я получаю только пустое поле во втором окне (я подозреваю, что Dto всегда имеет значение null, а я похоже, не изменит этого). Вот обновленный код в моей ужасной попытке попробовать его изменить: /. http://s000.tinyupload.com/index.php?file_id=45688752685779824697 – user3879060

+0

@ user3879060 - При загрузке файла появляется «Этот файл содержит вирус или вредоносное ПО» при загрузке. В любом случае, 'Dto' может работать в обоих направлениях без проблем. – Enigmativity

+0

Простите, вот скриншот того, что я сделал http://imgur.com/a/qAmJL dto заканчивает тем, что остается нулевым, и поэтому не переходит в текстовое поле window2. – user3879060

1

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

Шаг 1: Создание настройки, откройте меню «Project» и выберите «Свойства тест ...»

это приведет вас на страницу настроек, создать имя настройки его же вы хотите, я назвал my "PassString" и убедитесь, что это строковый тип, а Scope - для пользователя.

Шаг 2. Позволяет установить настройки вашей собственности TextBox.Text строку, добавьте эти изменения в код:

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    Properties.Settings.Default.PassString = textBox1.Text; 
    window2 win2 = new window2(); 
    win2.ShowDialog(); 
} 

Шаг 3. Обновить текст на втором окне инициализации процесса.

public OptionDisplayWindow() 
    { 
     InitializeComponent(); 
     tbd.Text = Properties.Settings.Default.PassString; 
    } 

P.S. вам может потребоваться добавить ссылку для получения настроек приложения.

using test.Properties;     
+0

Сказал (а) спасибо: D. Есть ли способ использовать этот метод с несколькими переменными или мне нужно создать разные настройки для каждого? Например. если у формы были textBox1 и textBox2, и я хотел передать их каждой переменной во втором окне. – user3879060

+0

существует множество типов настроек, этот пример просто передает строку, которую вы устанавливаете или получаете, когда захотите, что именно вы имеете в виду? –

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