1

メディアプレーヤープロジェクトに2つのフォームがあり、from1(親フォーム)のオブジェクトを作成し、それによってform3のform1から値を取得します。しかし、form3からform1への変数の値も取得する必要があります。しかし、問題は、form3のオブジェクトをform1でこのように作成すると

 Form3 m_child;

    public Form1(Form3 frm3)
    {
        InitializeComponent();
        m_child = frm3; 
    }

これは、 from1に0引数を含むコンストラクターが含まれていないというprogram.csのエラーを示しています。私はそこにパラメータを渡さなければならないことを知っていますApplication.Run(new Form1());

しかし、私が何を渡すべきか私にはわかりません。plzは、子から親のフォームに値を取得するための解決策やその他の方法がある場合に役立ちます。

これはform3の私のコードです。form1でsmileplay、surpriseplay、sadplay、normalplay、ambiguousplayの値を使用したいと思います。

 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);
    }
4

2 に答える 2

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());問題なく動作します。

于 2013-03-15T16:18:51.603 に答える
1
 public Form1(Form3 frm3)
 {
    InitializeComponent();
    m_child = frm3; 
 }

form1 の初期化時に Form3 オブジェクトを指定する必要があります

何かのようなもの:

Application.Run(new Form1(new Form3()));

または、2 つの新しい空のコンストラクターを作成するのが簡単な方法です。C# では、コンストラクターを作成すると、デフォルトのコンストラクターが失われます。

次の 2 つのコンストラクターを追加します。

 public Form1()
 {
    InitializeComponent();
 }

 public Form3()
 {
    InitializeComponent();
 }
于 2013-03-15T16:07:23.570 に答える