首页 > 解决方案 > 将整数从一种形式传递到另一种形式来做一些工作

问题描述

我的问题是关于在 C# Windows 表单应用程序中处理多个表单。我正在开发一个用于播放电影并使用按钮逐帧移动它的代码。我已经有了在 Windows Media Player 中使用 ctlcontrols 逐帧移动电影的代码。

我遇到的问题是我想要一个主窗体和一个电影窗体,当我单击主窗体中的按钮时,我想向另一个窗体发送一个数字,如果该数字是2,我希望电影以电影形式逐帧播放。而且我想在每次单击按钮时都不要打开新表单。我在第二个表单中创建了一个函数,并在主表单的按钮中调用了它。预计它会起作用,但事实并非如此。

主窗体中按钮的代码是:

private void button1_Click(object sender, EventArgs e)
{
        value = txtSendNum.Text; // get the value from the textox and
                                 // assign it to string variable
        MovieForm movieform = new MovieForm(); //create an object for MovieForm
        movieform.ConnectForms(value);            
}

第二种形式的函数(ConnectForms函数)的代码是:

public void ConnectForms(string value)
{
    val = Convert.ToInt32(value);
    if (val == 2)
    {
        axWindowsMediaPlayer1.Ctlcontrols.play();
        axWindowsMediaPlayer1.Ctlcontrols.currentPosition += 0.5;
        axWindowsMediaPlayer1.Ctlcontrols.stop();
    }
}

标签: c#visual-studio

解决方案


每次用户单击按钮时,您都在创建一个新的 MovieForm,这是错误的。您需要对之前打开的 MovieForm 的引用。这就是对象和类的含义之间的区别。您需要对该对象的引用,而不是来自同一类的新对象。使其工作的一种简单方法类似于以下代码:

    MovieForm movieform = null; 
    private void button1_Click(object sender, EventArgs e)
    {
            value = txtSendNum.Text; 
            if(movieform == null || movieform.IsDisposed)
            {
                   movieform = new MovieForm(); //create an object for MovieForm
                   movieform.Show(); 
                   movieform.ConnectForms(value);            
            }
            else 
            {
                   movieform.ConnectForms(value); 
                   movieform.Focus();  
             }
    }

推荐阅读