在c#中播放swf文件后如何显示另一个表单

Posted

技术标签:

【中文标题】在c#中播放swf文件后如何显示另一个表单【英文标题】:how to show another form after playing swf file in c# 【发布时间】:2011-10-17 17:48:36 【问题描述】:

我有一个包含冲击波 Flash 对象的表单。我希望在播放文件后或在文件中间通过按键显示另一个表单。我应该怎么做?我应该使用事件吗? 我真的很感谢回答它的人。 这里是代码:

private void Form1_Load(object sender, EventArgs e)

        axShockwaveFlash1.Movie = "c:/intro.swf";
        axShockwaveFlash1.Forward();
        axShockwaveFlash1.Play();
        Form2 form2 = new Form2();
        form2.Show();
    

在form2中:

private void Form2_Load(object sender, EventArgs e)

        Form1 form1 = new Form1();
        form1.Close();
     

当我调试它时,它们都会显示,但我只想要 form2

【问题讨论】:

你玩的 SWF 怎么样? (您使用的是什么对象/控件?) 如果axShowckwaveFlash1CompletedFinsihed 的事件,订阅它并在完成后显示新表单。 我不认为它有这样的事件! 【参考方案1】:

您可以将Form1 实例传递给Form2 构造函数,然后将其关闭,例如:

public Form2(Form1 form1)

    InitializeComponents();

    form1.Hide();//hide the control from the user, or close it if it not the main form..

或者,如果您希望它在单击按钮时关闭 form1 实例:

private Form1 _form1 = null;
public Form2(Form1 form1)

    InitializeComponents();

    _form1 = form1;


private void button1_Click(object sender, EventArgs e)

    if (_form1 != null)
    
        _form1.Hide();
    

在form1中初始化form2:

axShockwaveFlash1.Movie = "c:/intro.swf";
axShockwaveFlash1.Forward();
axShockwaveFlash1.Play();
Form2 form2 = new Form2(this);//"this here is the form1 instance itself"
form2.Show();

【讨论】:

感谢 Jalal。我使用这种方法,但是为什么即使我关闭 form2 程序仍在进行中?并且调试永远不会停止? 因为您没有关闭 form1,请记住我们隐藏了它。所以处理 form2 Closing 事件并关闭 form1 实例。 private void Form2_FormClosing(object sender, FormClosingEventArgs e) Form1 form1 = new Form1(); form1.Close(); 不,你在这里创建一个新的Form1 并关闭它。您应该使用其他解决方案: private Form1 _form1 = null;公共 Form2(Form1 form1) InitializeComponents(); _form1 = form1; Form2_FormClosing(对象发送者,FormClosingEventArgs e) _form1.Close(); 【参考方案2】:

你也可以使用计时器来检查电影是否正在播放,如果没有,则打开新表单,即 form2

 private void flash_Load(object sender, EventArgs e)
    
        axShockwaveFlash1.Movie = @"C:\Users\Adil M\Documents\Visual Studio 2012\Projects\TProject\a.swf";
        int a = axShockwaveFlash1.MovieData.Length;
        timer1.Start();
    

现在在计时器事件上编写代码

 private void timer1_Tick(object sender, EventArgs e)
    
        if (!axShockwaveFlash1.IsPlaying())
        
            Fome2 fobj = new Form2();
            this.Hide();
            timer1.stop();

            fobj.show();

        
        else if(axShockwaveFlash1.IsPlaying())
        
        
    

此代码仅在您的电影完成或您也可以在计时器中执行的任何键时为您工作 谢谢

【讨论】:

以上是关于在c#中播放swf文件后如何显示另一个表单的主要内容,如果未能解决你的问题,请参考以下文章

VideoView-播放 swf 文件

如何创建一个 html/javascript 文件来播放我选择的 swf 文件?

如何在网页中插入swf?

嵌入式 SWF 文件 - 如何隐藏播放栏

从具有不同于默认值的另一个 swf 中打开一个 swf 文件

linux下如何看swf文件