Сохранение позиции перемещаемых объектов на форме!

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Rayrat7
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 13.07.2012 (Пт) 10:43

Сохранение позиции перемещаемых объектов на форме!

Сообщение Rayrat7 » 16.07.2012 (Пн) 6:46

Здравствуйте! Имеется несколько PictureBox'ов которые перетаскиваются мышью, как можно сохранить их новые местоположения при перезапуске программки?
Код: Выделить всё
'Перетаскивание
  Private Sub PictureBox_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If Control.MouseButtons = Windows.Forms.MouseButtons.Left Then
            CType(sender, PictureBox).Left = Control.MousePosition.X - Me.Left - CType(sender, PictureBox).Width
            CType(sender, PictureBox).Top = Control.MousePosition.Y - Me.Top - CType(sender, PictureBox).Height
        End If
    End Sub
'Объекты
    Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        AddHandler (PictureBox1.MouseMove), AddressOf PictureBox_MouseMove
        Me.Controls.Add(PictureBox1)
    End Sub

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Сохранение позиции перемещаемых объектов на форме!

Сообщение Viper » 16.07.2012 (Пн) 10:57

Перед выходом из программы записать координаты, например, в реестр. После запуска считать координаты и задать их соответствующим объектам.
Весь мир матрица, а мы в нем потоки байтов!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 16.07.2012 (Пн) 12:07

Rayrat7 писал(а):как можно сохранить их новые местоположения при перезапуске программки?

Записать в файл при закрытии, а при открытии - прочитать. По простоте работы: txt, xml, bin, ini.
Ну или в реестр, если уж особо хочется.

PS: Весь код тут - какая-то очень хитрая магия... Или просто хорошо запутанная каша... Он хотя бы работает?

Rayrat7
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 13.07.2012 (Пт) 10:43

Re: Сохранение позиции перемещаемых объектов на форме!

Сообщение Rayrat7 » 16.07.2012 (Пн) 12:46

Ясно)
Не сочтите за наглость) но можно каконйбудь простенький примерчик или ссылку на таковой, чтобы я с него плясать начал?) ато я совсем недавно в BV, и все у меня пока методом тыка и т.п.)
PS: Qwertiy да все работает вернее таскается)
Последний раз редактировалось Rayrat7 16.07.2012 (Пн) 13:04, всего редактировалось 1 раз.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Сохранение позиции перемещаемых объектов на форме!

Сообщение Nord777 » 16.07.2012 (Пн) 13:02

Rayrat7, ты только перенеси этот код:
Код: Выделить всё
Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
     AddHandler (PictureBox1.MouseMove), AddressOf PictureBox_MouseMove
     Me.Controls.Add(PictureBox1)
End Sub
В событие Form_Load
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Rayrat7
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 13.07.2012 (Пт) 10:43

Re: Сохранение позиции перемещаемых объектов на форме!

Сообщение Rayrat7 » 16.07.2012 (Пн) 13:04

и все сохранится?) щас попробую)

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Сохранение позиции перемещаемых объектов на форме!

Сообщение Nord777 » 16.07.2012 (Пн) 13:14

Rayrat7 писал(а):и все сохранится?) щас попробую)
Нет, не сохранится. просто то, что ты делаешь, в этом обработчике делать неправильно.
Число PictureBox'ов заранее известно?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Rayrat7
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 13.07.2012 (Пт) 10:43

Re: Сохранение позиции перемещаемых объектов на форме!

Сообщение Rayrat7 » 16.07.2012 (Пн) 13:18

Код: Выделить всё
  Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        AddHandler (PictureBox1.MouseMove), AddressOf PictureBox_MouseMove
        Me.Controls.Add(PictureBox1)
    End Sub
Последний раз редактировалось Rayrat7 16.07.2012 (Пн) 13:19, всего редактировалось 1 раз.

Rayrat7
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 13.07.2012 (Пт) 10:43

Re: Сохранение позиции перемещаемых объектов на форме!

Сообщение Rayrat7 » 16.07.2012 (Пн) 13:18

да их 10шт

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 16.07.2012 (Пн) 14:16

Код: Выделить всё
Imports System.Xml.Serialization

<XmlType()>
Public Class LocationInfo

<XmlAttribute()>
Public Property Name As String

<XmlAttribute()>
Public Property X As Integer

<XmlAttribute()>
Public Property Y As Integer

End Class

<XmlRoot()>
Public Class Settings

<XmlArray()>
Public Property Locations As New List(Of LocationInfo)

End Class
Код: Выделить всё
Imports System.IO
Imports System.Xml.Serialization

Public Class Form1

Private ReadOnly SettingsFileName As String = Path.Combine(My.Application.Info.DirectoryPath, "settings.xml")
Private BasePoint As Point

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  Dim Options As Settings = Nothing

  If File.Exists(SettingsFileName) Then
    Using Stream As New StreamReader(SettingsFileName)
      Options = (New XmlSerializer(GetType(Settings))).Deserialize(Stream)
    End Using
  End If

  For Each Pct As PictureBox In Me.Controls.OfType(Of PictureBox)()
    AddHandler Pct.MouseDown, AddressOf Pct_MouseDown
    AddHandler Pct.MouseMove, AddressOf Pct_MouseMove
  Next Pct

  If Options IsNot Nothing Then
    For Each Item As LocationInfo In Options.Locations
      Me.Controls(Item.Name).Location = New Point(Item.X, Item.Y)
    Next Item
  End If
End Sub

Private Sub Form1_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
  Dim Options As New Settings

  For Each Ctrl As Control In Me.Controls
    Options.Locations.Add(New LocationInfo() With {.Name = Ctrl.Name, .X = Ctrl.Left, .Y = Ctrl.Top})
  Next Ctrl

  Using Stream As New StreamWriter(SettingsFileName)
    Call (New XmlSerializer(GetType(Settings))).Serialize(Stream, Options)
  End Using
End Sub

Private Sub Pct_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs)
  BasePoint = e.Location
End Sub

Private Sub Pct_MouseMove(sender As System.Object, e As System.Windows.Forms.MouseEventArgs)
  Dim Ctrl As Control = TryCast(sender, Control)
  If Ctrl IsNot Nothing AndAlso (e.Button And Windows.Forms.MouseButtons.Left) Then Ctrl.Location = New Point(Ctrl.Location.X + e.Location.X - BasePoint.X, Ctrl.Location.Y + e.Location.Y - BasePoint.Y)
End Sub

End Class

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Сохранение позиции перемещаемых объектов на форме!

Сообщение Nord777 » 16.07.2012 (Пн) 15:54

Rayrat7, Если число PictureBox'ов известно, зачем ты их создаешь динамически?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 16.07.2012 (Пн) 16:02

Nord777 писал(а):Rayrat7, Если число PictureBox'ов известно, зачем ты их создаешь динамически?

Он их не создаёт. Просто добавляет в контролы. И наличие обработчика Paint в таком виде подтверждает, что это не требуется.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Сохранение позиции перемещаемых объектов на форме!

Сообщение Nord777 » 16.07.2012 (Пн) 16:05

Ну тогда проще воспользоваться My.Settings...
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Rayrat7
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 13.07.2012 (Пт) 10:43

Re: Сохранение позиции перемещаемых объектов на форме!

Сообщение Rayrat7 » 17.07.2012 (Вт) 8:56

Qwertiy
Не могу разобраться с этой частью кода, с чем и где это есть?) в паре слов хотябы) подопните в нужном направлении) пожалуйста)
Код: Выделить всё
Imports System.Xml.Serialization

    <XmlType()>
    Public Class LocationInfo

    <XmlAttribute()>
    Public Property Name As String

    <XmlAttribute()>
    Public Property X As Integer

    <XmlAttribute()>
    Public Property Y As Integer

    End Class

    <XmlRoot()>
    Public Class Settings

    <XmlArray()>
    Public Property Locations As New List(Of LocationInfo)

    End Class

Счеми

edyapd
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 03.10.2011 (Пн) 19:54

Re: Сохранение позиции перемещаемых объектов на форме!

Сообщение edyapd » 17.07.2012 (Вт) 15:32

Набери
Код: Выделить всё
My.Settings
потом встань на Settings и жми F1. Там всё толково рассказано.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 17.07.2012 (Вт) 20:48

Rayrat7 писал(а):Не могу разобраться с этой частью кода, с чем и где это есть?)

Положить в *.vb файл в проекте и всё :evil:


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

    TopList