[英]C# WinForms Passing Dictionary from Static Class To Non-Static Form Class
[英]C# Adding controls to a non-static form from a static class
在C#.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
方法代表Windows窗体,称为“ GUI”。 我正在尝试制作一个开放源媒体中心,该中心允许您将电影添加到存储库中。
由于AddMediaToPanel
,静态的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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.