2013-09-30 4 views
0

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

Я разрешаю пользователю добавлять элементы управления, такие как изображения и метки (во время выполнения). Я хочу, чтобы в какой-то момент вернемся ко всем этим элементам управления, как PowerPoint. Они могут добавлять элементы управления только к определенной панели.

Сначала я подумал о сохранении свойств для каждого элемента управления в текстовом документе, пройдя через свойства каждого элемента управления и записав их в одну строку, разделив их на «¬», чтобы их можно было разделить, но я очень запутался и прочитал и писать на конкретные строки немного сложнее, чем я себе представлял, хотя я и сделал это в конце.

Мое настоящее решение состоит в том, чтобы просто «снимок» панели и сохранить изображение, но быстро понял, что это, вероятно, не самый эффективный способ хранения.

Код для «сфотографировать панели» ...

Using bmp As New Bitmap(QuizDesignPanel.Width, QuizDesignPanel.Height) 
      bmp.SetResolution(My.Computer.Screen.BitsPerPixel, My.Computer.Screen.BitsPerPixel) 
      QuizDesignPanel.DrawToBitmap(bmp, New Rectangle(0, 0, QuizDesignPanel.Width, QuizDesignPanel.Height)) 
      bmp.Save(QuizPath & "\" & FileName & Number & ".png", Imaging.ImageFormat.Png) 

     End Using 

... Очевидно, есть несколько переменных в там, которые объявлены в другом месте.

Мне просто интересно было ли я возглавить в неправильном направлении и есть ли лучший способ сохранить свойства.

Возможно, я не очень хорошо объяснил, но я уверен, что вы получите то, что я говорю. Спасибо за вашу помощь заранее.

Кроме того, есть ли простой способ скопировать и вставить элемент управления во время выполнения? Поскольку в настоящее время я просто сохраняю свойства в буфер обмена как текст, а затем ссылаюсь на них при вставке элемента управления.

EDIT

Friend Class SavedControl 
    Friend theName As String 
    Friend theSize As Size 
    Friend theLocation As Point 
    Friend imgFile As String 
End Class 

Private Sub TopPanel_Paint(sender As Object, e As PaintEventArgs) Handles TopPanel.Paint 
    Dim SaveCtl As New SavedControl 
    Dim myList As Collection 
    For Each n As Control In QuizDesignForm.QuizDesignPanel.Controls 
     SaveCtl.theSize = n.Size 
     SaveCtl.theName = n.Name 
     SaveCtl.theLocation = n.Location 
     myList.Add(SaveCtl) 
    Next 


    Try 
     Dim fs As New FileStream(My.Computer.FileSystem.SpecialDirectories.Desktop, FileMode.Create, FileAccess.Write) 

     Serializer.Serialize(fs, myList) 

     fs.Close() 
     fs.Dispose() 
    Catch ex As Exception 
     MessageBox.Show("Oops!", "Title", MessageBoxButtons.OK, _ 
       MessageBoxIcon.Exclamation) 
    End Try 

End Sub 

Serializer подчеркнут, и я не уверен, что я объявил MyList правильно (я импортировал System.IO & System.Xml.Serialization, если это имеет значение)

ответ

0

Пройдите через массив элементов управления Panel, соберите соответствующие данные (размер? ИМЯ файла изображения и т. Д.) В коллекцию или список. В идеале, статистика для каждого элемента управления будет храниться в классе, а их количество - в список (SavedControl). Затем выполните сериализацию списка.

Friend Class SavedControl 
    friend theName as String 
    friend theSize as Size 
    friend theLocation as Point 

    friend imgFile as String 
End Class 

хранилище данных каждого элемента управления

SaveCtl as New SavedControl 
SaveCtl.theSize = pnl.Controls(n).Size 
... etc 

myList.Add(SaveCtl) 

Затем с помощью двоичного или XML сериалайзер, чтобы сохранить список в файл. Я обычно использую различные сериалайзер, но это все, что есть к нему:

Try 
    Dim fs As New FileStream(SavedInfoFile, FileMode.Create, FileAccess.Write) 

    Serializer.Serialize(fs, myList) 

    fs.Close() 
    fs.Dispose() 
Catch ex As Exception 
    MessageBox.Show("Oops!", MsgTitle, MessageBoxButtons.OK, _ 
      MessageBoxIcon.Exclamation) 
End Try 

Edit (ответы)

  1. Как это сохранение контроля. Он сохраняет соответствующую информацию, чтобы они могли быть перестроены из собранных и сохраненных данных, таких как их размер, местоположение, имя и используемое изображение. Имейте в виду, я понятия не имею, что это такое или делает или выглядит или действует, или какие элементы управления!

  2. Откуда: Какому бы имя вы его ни дали. Это SavedInfoFile в примере

  3. какой тип файла ... это имеет значение? Это будут двоичные данные, если вы используете двоичный сериализатор, XML для XML и двоичный код для ProtoBuff-NET.

  4. как я прочитаю данные ... просто делайте все там, в обратном порядке. Уничтожьте, сверните через список и создайте элементы управления из собранных вами данных.

+0

Не могли бы вы объяснить, что у непрофессионала, что здесь происходит, пожалуйста. Большинство из них имеет смысл, но как это сохранить элементы управления, где, какой тип файла, как я читаю данные, чтобы поместить их обратно в свою панель ... и т. Д. Спасибо за быстрый ответ кстати :) –

+0

ответил на изменение – Plutonix

+0

Я еще не добрался до этого бита, так как не ожидал ответа так быстро. Я буду держать вас в курсе, если что-то пойдет не так, или правильно, если на то пошло. Между тем, я отвечу как ответ. Спасибо Плутоникс! –

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