2016-01-19 1 views
1

Я пытаюсь сохранить местоположение моей формы, чтобы, когда пользователь вернется, его местоположение будет в том же месте.My.Settings.Save(), похоже, не сохраняет местоположение моей формы

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

Я попытался сохранения настроек первой с этим:

Private Sub MenuForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing 
    My.Settings.MenuPosition = Me.Location 
    My.Settings.Save() 
End Sub 

А потому, что не работает, я попытался это:

Private Sub MenuForm_LocationChanged(sender As Object, e As EventArgs) Handles MyBase.LocationChanged 
    My.Settings.MenuPosition = Me.Location 
    My.Settings.Save() 
End Sub 

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

Вот мой код для загрузки формы:

Private Sub Menu_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Me.Location = New Point(My.Settings.MenuPosition) 
    Me.BackColor = My.Settings.MenuColor 
    Me.Label1.ForeColor = My.Settings.MenuTextColor 
    If My.Settings.FirstOpen = True Then 
     MessageBox.Show("Hello! Please drag your menu into its desired position.", "WikiFinder") 
     My.Settings.FirstOpen = False 
     'Remember to set to false when done... 
    ElseIf My.Settings.MusicMenu = True Then 
     MusicMenu.Show() 
    End If 
End Sub 

Кроме того, для подтверждения настройки не сохраняется, и простите меня, если это плохая практика для отладки, у меня был окно сообщения отображающего когда я его сохранил, а другой - при загрузке настройки. У обоих были разные тексты.

Также я должен добавить, что все области моих настроек установлены на User.

Может кто-нибудь объяснить, что здесь происходит и как это исправить?

+1

Вы установили область действия в 'User'? Свойства области применения «Приложение» не могут быть сохранены во время выполнения – DanielS

+0

Да, я видел материал об этом в Интернете, исследуя это. Я дважды проверял, и все области моих настроек - это Пользователь. Я включу это в вопрос. – Klink45

+0

По умолчанию параметры привязаны к объекту «Пользователь», а также по умолчанию в закладке «Свойства проекта» «Сохранить My.Settings» в «ShutDown» установлено значение «true», что означает, что для My.Settings.Save не требуется. Вы установили форму Form.Location в Manual и попытались? –

ответ

1

Если вопрос еще не завершен, вот что-то вроде обходного пути. Я не уверен, что это возможно для вас.

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

My.Computer.FileSystem.WriteAllText(Path, Text, Append [as Boolean]) 

Таким образом, в вашем случае, вы можете сделать это:

Private Sub SaveLocation() Handles Me.LocationChanged 
    My.Computer.FileSystem.WriteAllText(Path, Me.Location.X & ";" & Me.Location.Y, False) 
End Sub 

Это будет писать расположение окна в указанном файле, разделенным на ;. Теперь вы должны прочитать этот файл при запуске программы:

Dim LastX As Integer 
Dim LastY As Integer 

Private Startup() Handles Me.Load 
    Try 
     Dim Data As String = My.Computer.FileSystem.ReadAllText(Path) 'Read Data from File 
     LastX = Data.Split(";")(0) 'Set LastX Variable by splitting the Data-String 
     LastY = Data.Split(";")(1) 'Set LastY Variable by splitting the Data-String 

     Me.Location = New Point(LastX, LastY) 'Set the location of the window 
    Catch NoAccess As UnauthorizedAccessException 
     'Executed when the user has no access to the Settings File 
    Catch Ex As Exception 
     'First Open Procedure 
    End Try 
End Sub 

Теперь, позвольте мне немного пояснить. My.Computer.FileSystem.ReadAllText() считывает весь текст из указанного файла. В нашем случае - файл настроек. Таким образом, мы сохраняем текст из файла в переменной с именем Data. Теперь, поскольку мы разделили координаты на ;, мы можем прочитать значение файла по значению. .Split() фактически возвращает массив строк, например: Наша строка - 10;20;30. Если мы используем .Split(";"), наша строка делится на каждые ;. В результате мы получаем массив со следующими значениями: (10, 20, 30). Теперь мы можем прочитать разные значения, указав индекс, который мы хотим прочитать. В нашем примере строка, значение 0 будет равно 10, значение 1 будет равно 20, а значение 2 будет равно 30.

Надеюсь, я не смутил вас, это был мой первый ответ здесь, на StackOverflow.

Happy Coding, Mika