2016-10-13 3 views
0

В C# .NET я пытаюсь добавить элементы управления из статического класса в нестатический класс.C# Добавление элементов управления к нестатической форме из статического класса

Это мой код:

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 должен быть статическим, из-за этого класса:

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.

+0

И ваша проблема? – PaulF

+0

Ну, вторая часть вашего кода не является классом, как указано, это метод. Теперь почему этот метод статичен? Мы не знаем. И это, вероятно, то, что вы можете сделать по-другому. И вы, вероятно, должны начать здесь. –

+0

Спасибо за ваш ответ, я удалил статическую часть, и теперь я могу, наконец, добавить элементы управления в свой графический интерфейс. –

ответ

0

Это не может работать так. В вашем цикле вы вызываете статический метод:

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

В текущем коде вы просто создать и выбросить 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); 
    } 
+0

Действительно? Раньше я никогда не использовал этот метод, но, возможно, это намного лучше, чем создание простой переменной. –

+0

@ Kees van V. Когда у вас есть переменная, вы должны синхронизировать ее значение с формой (что, если форма была закрыта? Снова создать снова? Просто скрыта?). Поиск проще (дайте мне последнюю открытую форму типа «GUI») –

Смежные вопросы