Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net My.Settings.Save()不';我似乎没有保存我的表格';s位置_Vb.net_Save - Fatal编程技术网

Vb.net My.Settings.Save()不';我似乎没有保存我的表格';s位置

Vb.net My.Settings.Save()不';我似乎没有保存我的表格';s位置,vb.net,save,Vb.net,Save,我正在尝试保存表单的位置,以便当用户返回时,其位置将位于同一位置 然而,不管怎样,我的设置似乎没有保存,我也不知道为什么。我在设置设置后立即使用My.Settings.Save()方法,然后关闭表单,重新打开它,并看到它显示在与我选择的位置不同的位置 我尝试先用以下方法保存设置: Private Sub MenuForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing

我正在尝试保存表单的位置,以便当用户返回时,其位置将位于同一位置

然而,不管怎样,我的设置似乎没有保存,我也不知道为什么。我在设置设置后立即使用
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


有人能解释一下这里发生了什么以及如何解决吗?

如果问题仍然存在,这里有一种解决方法。我不确定这对你来说是否有可能

一种解决方案是将值写入一个文件中,然后在程序重新启动时读取该文件。以下是如何做到这一点:

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上的第一个答案


快乐编码,Mika

您是否将属性范围设置为
用户
<代码>应用程序
作用域属性无法在运行时保存是的,我在研究这个问题时在互联网上看到了相关内容。我仔细检查,所有设置的作用域都是用户。我将在问题中包括这一点。默认情况下,设置的作用域为用户,并且默认情况下在“项目属性”应用程序选项卡“保存我的”下。关闭时的设置设置为true,这意味着不需要使用My.settings.Save。您是否已将Form.Location设置为手动并尝试此操作?我还尝试在关机时关闭保存设置,但没有帮助。不过我会尝试将Form.Location设置为manual。@KarenPayne,需要将窗体的
StartPosition
属性设置为
manual
,以便在显示前设置
位置