我正在使用Visual Studio的“设置”功能,其中包含字符串类型和用户范围。
我尝试在我的菜单项上列出最近使用过的最近文件,但我认为如果使用其他语句,我的方法对编码方法似乎不太好。
有没有办法以更好的方法获得它?
Public Sub addRecentUsedFiles(recentFile As String)
If recentFile <> My.Settings.recent1 Then
If recentFile <> My.Settings.recent2 Then
If recentFile <> My.Settings.recent3 Then
If recentFile <> My.Settings.recent4 Then
My.Settings.recent5 = My.Settings.recent4
My.Settings.recent4 = My.Settings.recent3
My.Settings.recent3 = My.Settings.recent2
My.Settings.recent2 = My.Settings.recent1
My.Settings.recent1 = recentFile
Else
My.Settings.recent4 = My.Settings.recent3
My.Settings.recent3 = My.Settings.recent2
My.Settings.recent2 = My.Settings.recent1
My.Settings.recent1 = recentFile
End If
Else
My.Settings.recent3 = My.Settings.recent2
My.Settings.recent2 = My.Settings.recent1
My.Settings.recent1 = recentFile
End If
Else
My.Settings.recent2 = My.Settings.recent1
My.Settings.recent1 = recentFile
End If
End If
答案 0 :(得分:1)
我推荐这种方法的固定大小的队列。请参阅此处定义的数据结构。我在下面有它,但做了很多改动。 Fixed size queue which automatically dequeues old values upon new enques
在您的情况下,您将使用String的数据类型并将限制设置为5.
我已经包含了基本代码,删除了并发性,并添加了一个Contains方法。还添加了一个枚举器,以便您可以访问数据。
[Serializable()]
public class FixedSizedQueue<T>
{
System.Collections.Generic.Queue<T> q = new System.Collections.Generic.Queue<T>();
public int Limit { get; set; }
public void Enqueue(T obj)
{
q.Enqueue(obj);
while (q.Count > Limit) q.Dequeue() ;
}
public bool Contains(T obj)
{
return q.Contains(obj);
}
public Queue<T>.Enumerator GetEnumerator()
{
return q.GetEnumerator();
}
}
然后你将如何使用它,假设My.Settings.Recent是这种类型的String,你指定了5的限制,而My.Settings.Recent不是null。
if ( ! My.Settings.Recent.Contains(recentFile) )
My.Settings.Recent.Enqueue(recentFile);
这是另一个向对象写入数据的例子,只有在代码为“6”到“10”之后才会出现。
FixedSizedQueue<string> t = new FixedSizedQueue<string>();
t.Limit = 5;
for (int i = 0; i <= 10; i++)
if (! t.Contains(i.ToString()))
t.Enqueue(i.ToString());
答案 1 :(得分:0)
最简单的方法是将最近使用的文件(文件名)写入文本文件。示例代码:
File.WriteAllText("C:\test.txt","last file name")
现在,如果你使用WriteAllText
方法,它将重写(或创建)文本文件。如果你想从不同的地方写入文本文件,你可以简单地使用File.AppendText
方法:
File.AppendText("C:\test.txt","last file name" + Environment.NewLine)
然后,如果要从文本文件中检索文件名,只需创建一个List(of String)
来读取(并存储数据)文本文件:
Dim readFile As New List(Of String)(File.ReadAllLines("C:\test.txt")
现在你有一个列表,它已经成功地将文本文件中的每一行存储为一个单独的项目。你可以轻松遍历列表并随意执行任何操作,例如:
For Each Item In readFile
ComboBox1.Items.Add(Item)
Next
希望这有助于丰富您的知识:)