2013-10-22 43 views
-1

如何在許多其他窗體上擁有窗體控件的屬性和功能。對於一個形式,我不喜歡這樣的:有許多其他形式的控件的功能和屬性

flashForm flashForm = new flashForm(); 

和形式加載這樣的:

 flashForm.SHOW(); 

和按鈕如此點擊:

flashForm.MOVIE = @"D:\football scoreboard project\football scoreboard\footballscoreb \quran.swf"; 
    flashForm.Controls["axShockwaveFlash1"].Show(); 

但對於其他形式的我不能使用第一行代碼,因爲它使得這種形式的新對象不是我想要的形式

+0

你想的一樣'axShockwaveFlash1'以其他形式顯示或*新的實例*類似於目前其他形式的「axShockwaveFlash1」? – nawfal

+0

我想擁有之前打開的窗體的屬性。 – virtouso

+0

看起來您需要創建用戶控件,您可以在許多表單上重複使用該控件。這是你想要的嗎? –

回答

1

還有tons的方式可以在之間溝通表單。我想你的情況是你有一些控制來加載和播放某種形式的電影。我想介紹一下這個控制器不需要知道顯示的機制,它只是觸發一些事件來通知I want to display this movie,顯示形式也不需要在任何類中被保持/引用,它只是需要訂閱事件並在事件觸發時顯示/更改電影。看起來我們在這裏需要一些靜態事件。您可以定義在主UI類此靜態事件,像這樣:

public partial class MainUI : Form { 
    //... 
    public class RequireShowMovieEventArgs : EventArgs { 
    public string MoviePath {get; private set;} 
    public RequireShowMovieEventArgs(string moviePath){ 
     MoviePath = moviePath; 
    } 
    } 
    public delegate void RequireShowMovieEventHandler(object sender, RequireShowMovieEventArgs e); 
    public static event RequireShowMovieEventHandler RequireShowMovie; 
    //... 
} 
//just fire the event when you want to show/change the movie 
RequireShowMovieEventHandler handler = MainUI.RequireShowMovie; 
if(handler != null) handler(yourObject, new MainUI.RequireShowMovieEventArgs(@"D:\football scoreboard project\football scoreboard\footballscoreb \quran.swf")); 
//Your display form (which you call flashForm) 
public class FlashForm : Form { 
public FlashForm(){ 
    MainUI.RequireShowMovie += RequiresShowMovieHandler; 
    Disposed += (s,e) => { 
     MainUI.RequireShowMovie -= RequiresShowMovieHandler; 
    }; 
} 
private void RequireShowMovieHandler(object sender, MainUI.RequireShowMovieEventArgs e){ 
    MOVIE = e.MoviePath; 
    axShockwaveFlash1.Show();  
} 
//.... 
} 

注意:在我的代碼yourObject上面是你想要的,甚至null。但是,您應該考慮傳遞觸發事件的實際控件(例如Button)。

0

,也許可以與singleton逃脫:

public class MovieForm : Form 
{ 

    private MovieForm _instance; 

    private MovieForm()... 

    public static MovieForm Instance 
    { 
     get 
     { 
      if (_instance == null) _instance = new MovieForm(); 
      return _instance; 
     } 
    } 

    public void Play()... 
    public void Play(Url movieUrl)... 
    public void Pause()... 
    public void Stop()... 
} 

用法:

Movieform.Instance.Show(); 
Movieform.Instance.Play(); 
+0

謝謝。我在做這個工作。它看起來很容易工作 – virtouso