从静态类向非静态表单添加控件
本文关键字:表单 添加 控件 静态 静态类 | 更新日期: 2023-09-27 18:13:06
. NET,我正试图将控件从静态类添加到非静态类。
这是我的代码:
public static void AddMediaToPanel(string Title, string Description, string Source, string Cover, string Genre, int Rating)
{
PictureBox MediaCanvas = new PictureBox();
MediaCanvas.BackColor = Color.LightGray;
MediaCanvas.BorderStyle = BorderStyle.FixedSingle;
MediaCanvas.Size = new Size(150, 235);
MediaCanvas.Padding = new Padding(10);
try
{
MediaCanvas.ImageLocation = Source;
}
catch { }
var gui = new GUI();
gui.Controls.Add(MediaCanvas);
}
GUI
方法代表一个称为"GUI"的Windows窗体。我想做一个开源媒体中心,让你可以添加电影到存储库。
静态void AddMediaToPanel
必须是静态的,因为这个类:
public static void RetrieveMedia(string XMLFile)
{
// Declare the Media Collections
MediaCollection media = null;
// Declare the XML-readers
XmlSerializer serializer = new XmlSerializer(typeof(MediaCollection));
StreamReader sr = new StreamReader(XMLFile);
try
{
media = (MediaCollection)serializer.Deserialize(sr);
}
catch(Exception ex)
{
MessageBox.Show("The following media repository could not be loaded:'n" +
XMLFile + "'n" +
"Please check your code and try again later.'n'n" +
"Error Information: " + ex.Message, "Repository error",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
// Create new instance of the media class
sr.Close();
// Return properties
try
{
foreach (Video video in media.Video)
{
GUI.AddMediaToPanel(video.Title, video.Description, video.Source, video.Cover, video.Genre, video.Rating);
}
}
catch { }
}
我正在使用。net Framework 4.5.2。提前感谢!
~ Kees van V.
不能这样工作。在循环中调用静态方法:
foreach (Video video in media.Video)
{
GUI.AddMediaToPanel(video.Title, video.Description, video.Source, video.Cover, video.Genre, video.Rating);
}
但是你的静态方法每次都创建一个新的Form
,给它添加一个控件,然后把它扔掉:
var gui = new GUI();
gui.Controls.Add(MediaCanvas);
你需要创建你的表单一次(在你的静态方法之外),然后有你的静态方法返回一个控件,你可以添加到你的单个Form
实例。
带有循环的实例方法如下:
var gui = new GUI();
foreach (Video video in media.Video)
{
var control = GUI.AddMediaToPanel(video.Title, video.Description, video.Source, video.Cover, video.Genre, video.Rating);
gui.Controls.Add(control);
}
在您当前的代码中,您只是创建并丢弃gui
表单:
var gui = new GUI();
gui.Controls.Add(MediaCanvas);
你必须找到你想要添加控件的表单实例:
public static GUI CurrentGui {
get {
GUI gui = Application
.OpenForms
.OfType<GUI>()
.LastOrDefault();
// no such form found, you may want to create the form
if (null == gui) {
gui = new GUI();
gui.Show(); // <- let's show it up
}
return gui;
}
}
...
public static void AddMediaToPanel(...) {
...
CurrentGui.Add(MediaCanvas);
}