c# - 将整数从一种形式传递到另一种形式来做一些工作
问题描述
我的问题是关于在 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();
}
}
解决方案
每次用户单击按钮时,您都在创建一个新的 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();
}
}
推荐阅读
- sql - 按日期和状态 SQL 分配金额
- javascript - 我正在尝试使用Vue制作扩展卡,问题是扩展卡时,右侧的卡会创建一个空白空间
- r - 如何计算曲线中山谷的面积?
- excel - 单击 Internet Explorer 中的按钮
- javascript - jQuery在循环中使用keyup函数
- c# - 使用 Directory.GetDirectories(Path) 在 WPF C# 中填充 DataGrid
- javascript - 以编程方式创建 Vue 3 组件实例
- javascript - 如何在不出现 401 错误的情况下访问 msal graph api
- javascript - 将数组数组转换为对象
- mysql - 直接在mysql中插入后计算值