Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在许多其他形式中具有一个控件的功能和属性_C#_Winforms - Fatal编程技术网

C# 在许多其他形式中具有一个控件的功能和属性

C# 在许多其他形式中具有一个控件的功能和属性,c#,winforms,C#,Winforms,如何在许多其他窗体上具有窗体控件的属性和功能。对于一种形式,我喜欢这样: flashForm flashForm = new flashForm(); public partial class MainUI : Form { //... public class RequireShowMovieEventArgs : EventArgs { public string MoviePath {get; private set;} public RequireSho

如何在许多其他窗体上具有窗体控件的属性和功能。对于一种形式,我喜欢这样:

flashForm flashForm = new flashForm();
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();      
 }
 //....
}
对于加载的表单:

        flashForm.SHOW();
点击以下按钮:

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

但对于其他形式,我不能使用第一行代码,因为它使该形式的新对象不是我想要的形式

形式之间有大量的通信方式。我猜你的情况是你有一些控制权来加载和播放某种形式的电影。我想介绍这样一种机制,在这种机制中,控件不需要知道显示内容,它只需触发一些事件来通知
我想显示这部电影
,显示表单也不需要在任何类中保持/引用,它只需订阅事件并在触发事件时显示/更改电影。看起来我们需要一些静态事件。您可以在主UI类中定义此静态事件,如下所示:

flashForm flashForm = new flashForm();
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
。但是,您应该考虑传递触发事件的实际控件(例如按钮)。

您可能会逃脱<代码> SuntLon < /C> >:

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();

您想在其他窗体中显示相同的
axshockwavelash1
,还是想在其他窗体中显示与当前的
axshockwavelash1
类似的新实例?我想拥有以前打开的窗体的属性。看起来您需要创建用户控件,可以在许多窗体上重复使用。这就是你想要的吗?只是属性
电影
?甚至方法
flashForm.Controls[“axshockwavelash1”].Show()
?MOVIE是一个变量,我这样定义它来设置axShocwavflash1:public string MOVIE的值{get{return this.axshockwavelash1.MOVIE;}set{this.axshockwavelash1.MOVIE=value;}