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;}