
(注意,這里不要選擇添加Macromedia Flash Factory Object控件,雖然它們的DLL文件都是指向同一文件),

加載Shockwave Flash Object控件到FLASH工具箱。
點擊“Shockwave Flash Object”控件,在Form1窗體拉出一個FLASH容器,并調(diào)整好大小,默認拉出來的FLASH容器名字叫“axShockwaveFlash1”,這時它只是一個容器,顯示出一片空白,我們可以設(shè)置它的SWF文件路徑,使用Movie屬性,假如你的D盤有個叫HS.swf的FLASH文件,你可以在Movie屬性填寫“D:\HS.swf”,這時,窗口應(yīng)該馬上顯示HS.swf的預(yù)覽,按下F5就可以正常加載此文件了。
如果你希望以編程方式動態(tài)加載SWF文件,請參考以下代碼:
在Form_Load()中加入如下代碼
axShockwaveFlash1.Movie =@"D:\Sex.swf"; //請?zhí)顚懡^對地址
axShockwaveFlash1.Menu = false; //關(guān)閉Flash動畫右鍵菜單(還是會有“關(guān)于”選項)
axShockwaveFlash1.Playing = true; //是否讓動畫播放
如果希望讓SWF文件與C#進行互動,請參考以下代碼:
------------------------AS2.0代碼-----------------------
在FLASH CS 新建一FLA8文件,拖一個按鈕進來,并設(shè)置其按鈕的AS代碼
on (release) {
fscommand ("Hello,World!!");
}
然后,再拖一個"文本框"控件進來,重命名為“txt_Mess”,最后設(shè)置該幀的幀AS代碼:
import flash.external.*;//向C#發(fā)送數(shù)據(jù)
ExternalInterface.call ("test", "str", Math.random ());//接受C#發(fā)來的數(shù)據(jù)
ExternalInterface.addCallback ("c2flash", null, c2flash);
function c2flash (Ms:String)
{
txt_Mess.text = Ms;
}
好了,生成SWF文件,文件名:HS.swf 記得生成到D:\根目錄下
-------------------------AS2.0代碼結(jié)束-------------------
------------------------C#3.5代碼-----------------------
在Visual Studio的Form1窗體,由于剛才已拉出一個FLASH控件axShockwaveFlash1,其Movie屬性已填寫為“D:\HS.swf”,現(xiàn)在只要切換到該控件的“事件”屬性,在其的FSCommand事件雙擊,并添加如下代碼
if(e.command == "Hello,World!!")
{
MessageBox.Show("SWF說:"+e.command.ToString()) ;
}
返回Form1窗體,拖一個按鈕進來,雙擊它添加單擊事件,代碼如下:
private void button1_Click(object sender, EventArgs e)
{
callFunction("c2flash",this.textBox1.Text);//向Flash發(fā)送數(shù)據(jù)
}
然后再添加以下C#3.5代碼:
void flash_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent e)
{
string s = nodeXml(e.request.ToString())[0].ChildNodes[0].InnerText.ToString();
//接受Flash傳來的值
this.textBox1.Text = s;
throw new Exception("The method or operation is not implemented.");
}
private void callFunction(string funName,string arg)
{
//C#傳給Flash的值
flash.CallFunction("<invoke name=\"" + funName + "\" returntype=\"xml\"><arguments><string>"+arg+"</string></arguments></invoke>");
}
private XmlNodeList nodeXml(string s)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(s);
XmlNodeList list = doc.GetElementsByTagName("arguments");
return list;
}
然后再修改一下Load代碼:
private void Form1_Load(object sender, EventArgs e)
{
flash.FlashCall += new AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEventHandler(flash_FlashCall);
}
------------------------C#3.5代碼結(jié)束-----------------------
按下F5測試!
花生注:如果使用Shockwave Flash Object控件的時候提示:未能導(dǎo)入 Activex控件,請確保它已正確注冊!
解決方法:
開始--運行--regsvr32 c:\windows\system32\macromed\flash\flash10b.ocx
(flash10b.ocx是在你機器的FLASH版本,根據(jù)你的版本不同而不同,可能會是flash9f.ocx或flash11c.ocx)




