我目前正在开发一个聊天程序,其目的是让它成为一个秘密程序(有点像Facebook有秘密聊天功能)。
我的消息被发送到listBox
组件,我希望每隔10或者n秒,最旧的消息将被删除。一世
我试图用索引标记每条消息,但不太明白它是如何工作的。
我问的是,如果你们知道一个功能,或者可以帮我写一个能做到这一点的功能。我正在使用Visual Studio 2015 Windows Forms,C#。
答案 0 :(得分:1)
好吧,当你有一个ListBox
时,这些项都被编入索引,因为它是一个对象集合(一个对象数组)。从0开始,向上移动以获得更新的条目。
因此,我们假设我们在ListBox
listBox1.Items.Add("Item 1"); //Index 0
listBox1.Items.Add("Item 2"); //Index 1
listBox1.Items.Add("Item 3"); //Index 2
您需要做的就是创建一个在后台运行的线程,每次删除索引0(最旧的条目)的项目。
new Thread(() =>
{
while(true)
{
if(listBox1.Items.Count > 0) //Can't remove any items if we don't have any.
{
Invoke(new MethodInvoker(() => listBox1.Items.RemoveAt(0))); //Remove item at index 0.
//Needs invoking since we're accessing 'listBox1' from a separate thread.
}
Thread.Sleep(10000); //Wait 10 seconds.
}
}).Start(); //Spawn our thread that runs in the background.
答案 1 :(得分:1)
在C#WinForms中,ListBox包含ListBoxItems,它是一个ObjectCollection(msdn-link)
因此,您可以添加任何您喜欢的对象,将显示的消息来自DisplayMember
所以例如
public class MyMessage {
public DateTime Received { get; set; }
public string Message { get; set; }
public string DisplayString
{
get { return this.ToString(); }
}
public string ToString() {
return "[" + Received.ToShortTimeString() + "] " + Message;
}
}
可以添加为ListBoxItem。
将DisplayMember设置为"DisplayString"
(more here)将为您提供正确的输出。
现在您可以遍历ListBoxItems,将它们转换为MyMessage
并检查它们的接收时间。
答案 2 :(得分:0)
我不知道你是否想过这个,但这是你可以实现这个任务的方法。
首先创建List
strings
List<string> list1 = new List<string>();
要使用列表功能,您必须在表单
中包含集合using System.Collections;
现在是棘手的部分。
首先在全局声明一个静态整数变量,即在所有类之外。
static int a;
每当您收到消息时(考虑到您的消息将采用字符串格式),您必须将该字符串添加到您创建的list1
。
list1.Add("the received message");
现在你要申报一个计时器(如果你是新手,请查看计时器是如何工作的)。 Windows窗体已经有定时器,使用它会更好。 计时器在所需时间后发送Tick事件。
private void timer1_Tick(object sender, EventArgs e)
{
a = list1.Count() - 1; //Count will return the number of items in the list, you subtract 1 because the indexes start from 0
list1.RemoveAt(a);
listBox.Items.Clear();
foreach(string x in list1)
{
listBox.Items.Add(x);
}
}
此代码将执行的操作是,Tick event
timer
将刷新列表框,从数组中删除最后一个元素,然后用其余元素重新填充列表框。
要使用计时器,只需将其拖放到表单上即可。它基于GUI,易于弄清楚。
如果您有疑问,请告诉我。
提示:最大限度地利用try{}
&amp; catch{}
阻止应用程序崩溃。