Получить значение от дочернего элемента до родительской формы
У меня есть 2 формы в моем проекте медиаплеера, у меня есть объект make из from1 (родительская форма) и тем самым получить значение из form1 в form3. но мне также нужно получить значение переменной из form3 в form1. но проблема в том, что когда я делаю объект form3 в form1, как это
Form3 m_child;
public Form1(Form3 frm3)
{
InitializeComponent();
m_child = frm3;
}
он показывает ошибку в program.cs, что from1 не содержит конструктор, который содержит 0 аргументов. я знаю, что должен передать туда параметр в Application.Run(new Form1());
но что я должен пройти, я понятия не имею. Пожалуйста, помогите, если есть какое-либо решение или любой другой способ получить значение от дочерней до родительской формы.
это мой код для form3, теперь я хочу использовать значение smileplay, surpriseplay, sadplay, normalplay, ambiguousplay в form1
Form1 m_parent;
public Form3(Form1 frm1)
{
InitializeComponent();
m_parent = frm1;
}
private void Form3_Load(object sender, EventArgs e)
{
WMPLib.IWMPPlaylistArray allplaylist= m_parent.axWindowsMediaPlayer1.playlistCollection.getAll();
for (int litem = 0; litem < allplaylist.count; litem++)
{
smilecombo.Items.Add( allplaylist.Item(litem).name);
surprisecombo.Items.Add(allplaylist.Item(litem).name);
sadcombo.Items.Add(allplaylist.Item(litem).name);
normalcombo.Items.Add(allplaylist.Item(litem).name);
ambiguouscombo.Items.Add(allplaylist.Item(litem).name);
}
}
private void savebtn_Click(object sender, EventArgs e)
{
WMPLib.IWMPPlaylist smileplay= m_parent.axWindowsMediaPlayer1.playlistCollection.getByName(smilecombo.SelectedItem.ToString()).Item(0);
WMPLib.IWMPPlaylist surpriseplay = m_parent.axWindowsMediaPlayer1.playlistCollection.getByName(surprisecombo.SelectedItem.ToString()).Item(0);
WMPLib.IWMPPlaylist sadplay = m_parent.axWindowsMediaPlayer1.playlistCollection.getByName(sadcombo.SelectedItem.ToString()).Item(0);
WMPLib.IWMPPlaylist normalplay = m_parent.axWindowsMediaPlayer1.playlistCollection.getByName(normalcombo.SelectedItem.ToString()).Item(0);
WMPLib.IWMPPlaylist ambiguousplay = m_parent.axWindowsMediaPlayer1.playlistCollection.getByName(ambiguouscombo.SelectedItem.ToString()).Item(0);
}
2 ответа
Я бы добавил новый конструктор.
public Form3 : Form
{
public Form1 Parent { get; set; }
// TODO: Replace object with the proper type.
public object SomeComboboxValue
{
// TODO: Replace with the value you want to access.
get { return SomeComboBox.PropertyYouWantToAccess; }
}
public Form3()
{
InitializeComponent();
}
public Form3(Form1 form1)
{
InitializeComponent();
Parent = form1;
}
}
public Form1 : Form
{
private Form3 _form3;
public Form1()
:this(new Form3())
{
}
public Form1(Form3 form3)
{
_form3 = form3;
_form3.Parent = this;
}
}
затем Application.Run(new Form1());
будет работать просто отлично.
public Form1(Form3 frm3)
{
InitializeComponent();
m_child = frm3;
}
Вы должны предоставить объект Form3 при инициализации form1
Что-то вроде:
Application.Run(new Form1(new Form3()));
Или простым способом будет создать два новых пустых конструктора. В C# при создании конструктора вы теряете конструктор по умолчанию.
Добавьте эти два конструктора:
public Form1()
{
InitializeComponent();
}
public Form3()
{
InitializeComponent();
}