Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从子窗体到父窗体获取值_C#_Axwindowsmediaplayer - Fatal编程技术网

C# 从子窗体到父窗体获取值

C# 从子窗体到父窗体获取值,c#,axwindowsmediaplayer,C#,Axwindowsmediaplayer,在我的媒体播放器项目中,我有两个表单,一个是from1(父表单)的对象,另一个是form3中form1的值。但我还需要从form3到form1得到一个变量的值。但问题是,当我在form1中创建form3的对象时 Form3 m_child; public Form1(Form3 frm3) { InitializeComponent(); m_child = frm3; } 它显示程序.cs中的错误,即from1不包含包含0参数的构

在我的媒体播放器项目中,我有两个表单,一个是from1(父表单)的对象,另一个是form3中form1的值。但我还需要从form3到form1得到一个变量的值。但问题是,当我在form1中创建form3的对象时

 Form3 m_child;

    public Form1(Form3 frm3)
    {
        InitializeComponent();
        m_child = frm3; 
    }
它显示程序.cs中的错误,即from1不包含包含0参数的构造函数。我知道我必须在
Application.Run(newform1())中向那里传递一个参数

但是我不知道我应该通过什么考试。plz帮助,如果有任何解决方案或任何其他方法来获取从子窗体到父窗体的值

这是我的form3代码,现在我想在form1中使用smileplay、惊奇play、sadplay、normalplay、含糊play的值

 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);
    }
Form1 m_母公司;
公开表格3(表格1 frm1)
{
初始化组件();
m_父代=frm1;
}
私有void Form3_加载(对象发送方、事件参数e)
{
WMPLib.iwmplaylarray allplaylist=m_parent.axWindowsMediaPlayer1.playlicollection.getAll();
对于(int-litem=0;litem
初始化form1时需要提供Form3对象

比如:

Application.Run(new Form1(new Form3()));
或者简单的方法是创建两个新的空构造函数。在C#中,当您创建构造函数时,会丢失默认构造函数

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;
    }
}
添加这两个构造函数:

 public Form1()
 {
    InitializeComponent();
 }

 public Form3()
 {
    InitializeComponent();
 }

我会添加一个新的构造函数

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(newform1())可以正常工作。

请参阅前面的问题。它将允许您无需父/子必要性即可访问表单。这个具体的例子只是为了可见性,你可以简单地返回
TForm表单
,或者仅仅使用这个概念。这是行不通的,因为Form3也没有0参数构造函数。最简单的方法-为Form1创建一个没有Form3参数的构造函数。您需要创建两个默认/空构造函数。在C#中,当您创建一个额外的构造函数时,您松开了默认构造函数然后它显示错误,form3不包含反向接受0参数bcos的构造函数。我也在form3中创建了form1的对象。但是如果我将2作为空构造函数,我如何才能使from3的对象以及如何访问。我不知道form1对象是否正常工作,但当我想从form1中的Form3访问组合框时,我无法使用_Form3是否将组合框作为字段?您需要将希望其他对象访问的任何内容公开为公共属性,或使用
\u form3.Controls
。我将在一个示例中进行编辑。但是我应该在哪个构造函数中初始化组件?若在这两种情况下,它都显示错误,因为我使用了一个计时器进行面部检测,所以它显示试图读取或写入受保护内存的错误。这通常表示其他内存已损坏。在我使用组合框后,如axWindowsMediaPlayer1.currentPlaylist=axWindowsMediaPlayer1.PlayCollection.getByName(_form3.smilecombo.SelectedItem.ToString())。项(0);它不起作用。你应该以拥有控件的任何形式初始化控件。您可以在Form1上公开属性,以获取初始化控件所需的数据。