Передача объекта в разные формы окон - PullRequest
6 голосов
/ 02 июня 2010

Я хочу передать объект C # между формами win. На данный момент я настроил базовый проект, чтобы узнать, как это сделать, и который состоит из двух форм - form1 и form2 и класса class1.cs, который содержит методы get и set для установки строковой переменной со значением, введенным в form1. (Форма 2 должна получить значение, хранящееся в объекте class1)

Как я могу получить строковое значение из объекта, который был установлен в form1? Нужно ли передавать его в качестве параметра в form2?

Будут указаны любые комментарии / помощь!

Спасибо

РЕДАКТИРОВАТЬ: Вот код, который у меня есть на данный момент: (form1.cs)

    private void button1_Click(object sender, EventArgs e)
    {
        this.Hide();

        Form2 form2 = new Form2();

        form2.Show();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        if (textBox1.Text != "")
        {
            Class1 class1 = new Class1();

            class1.setStringValue(textBox1.Text);
        }
    }
}

}

Ответы [ 3 ]

9 голосов
/ 02 июня 2010

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

public static class MyStaticClass
{
  public static string MyStringMessage {get;set;}
}

Вам не нужно создавать экземпляр класса, просто назовите его

MyStaticClass.MyStringMessage = "Hello World";
Console.WriteLine (MyStaticClass.MyStringMessage);

Если вам нужен экземпляр объекта, вы можете передать объект класса, созданный вами в Form1, в Form2 следующим образом.

private void button1_Click(object sender, EventArgs e)
    {
        this.Hide();
        Form2 form2 = new Form2();
        form2.MyClass = class1;
        form2.Show();
    }

Затем создайте свойство в Form2 для приема объекта класса.

public Class1 MyClass {get;set;}

не забудьте сделать объект Class1 глобальной переменной, а не создавать его внутри самой кнопки 2.

4 голосов
/ 02 июня 2010

Да, в Form1 вы объявляете экземпляр Class1 и затем устанавливаете параметры по мере необходимости, а затем передаете его в Form2. Например, вы можете иметь конструктор в Form2 и иметь параметр Class1 в нем. Предполагая, что Form1 создает Form2, в противном случае у Form1 должен быть какой-то способ найти Form2 для передачи экземпляра.

0 голосов
/ 26 января 2019

С тех пор как я работал в ASP.Net последние пару лет, я много работал с Newtonsoft.Json. Оказалось, что это замечательно и в WinForms, и в этом случае казалось, что это упрощает передачу объектов между формами ... даже сложные объекты очень просты!

Реализация такая:

// Set Object Property within Form
 public partial class FlashNotify : Form
 {
     public string Json { get; set; }
 }

В событии загрузки формы вы можете получить свой объект:

 private void FlashNotify_Load(object sender, EventArgs e)
 { 
    // Deserialize from string back to object
    CommUserGroupMessage msg = new CommUserGroupMessage();
    msg = Newtonsoft.Json.JsonConvert.DeserializeObject<CommUserGroupMessage>(Json);
 }

Наконец, передает объект в форму:

// Serialize the Object into a string to pass
 string json = Newtonsoft.Json.JsonConvert.SerializeObject(msg);
 FlashNotify fn = new FlashNotify();
 fn.Json = json;
 fn.Show();

Да, исходный выбранный ответ, вероятно, проще, однако мне нравится этот подход , так как он устраняет необходимость повторять класс в вашей форме, что, я думаю, облегчает поддержание ( Исправление: Мисс правильно прочитал статический класс в примере, я сначала подумал, что он был воспроизведен в форме).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...