Как передать данные между 2 формами? - PullRequest
1 голос
/ 24 апреля 2011

Я использовал делегат для передачи данных между 2 формами MainForm;

public delegate void PassData(ListViewItem itemss);
public PassData passdata; 
private void ViewList_SelectedIndexChanged(object sender, EventArgs e)
{
        passdata(ViewList.FocusedItem);
}
call PropertiesForm
Properties1 pro = new Properties1();            
        pro.Show();

В форме2

public void f_pass(ListViewItem item)
    {
        this.item = item;
    }
    private void Properties1_Load(object sender, EventArgs e)
    {
        Main main = new Main();
        main.passdata += new Main.PassData(f_pass);
    }

Когда я запускаю его, в passdata появляется нулевой объект (ViewList.FocusedItem);

Ответы [ 4 ]

1 голос
/ 24 апреля 2011

Кажется, вы вызываете делегата, потому что он был создан.Как я понимаю, правильно, вы намереваетесь передать данные от MainForm до PropertiesForm, но инициализация происходит только во время загрузки PropertiesForm.Весьма вероятно, что у вас есть архитектурная проблема, но сейчас просто попробуйте изменить ваш ViewList_SelectedIndexChanged метод, как показано ниже:

public PassData passdata = null;
private void ViewList_SelectedIndexChanged(object sender, EventArgs e)
{
    if(passdata != null)
    {
      passdata(ViewList.FocusedItem);
    }
}
1 голос
/ 24 апреля 2011

Вы можете создать другой конструктор для формы, в которую хотите передать данные.Конструктор будет принимать аргументы того типа данных, который вам нужен, но убедитесь, что вы вызываете конструктор по умолчанию, используя

: base()
0 голосов
/ 27 апреля 2011

Сделай так,

public partial class Main : Form
{
    public delegate void PassData(ListViewItem itemss);
    public static event PassData PassDataEvent;

    private void ViewList_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (PassDataEvent != null)
        {
            PassDataEvent(ViewList.FocusedItem);
        }
    }
}

public partial class Properties1 : Form
{
    public Properties1()
    {
        InitializeComponent();
        this.Load += new EventHandler(Main_Load);
    }

    void Properties1_Load(object sender, EventArgs e)
    {
        Main.PassDataEvent += new Main.PassData(Main_PassDataEvent);
    }

    void Main_PassDataEvent(ListViewItem itemss)
    {
        //do your logic.
    }
}
0 голосов
/ 25 апреля 2011

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

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