如何在btnPrint点击事件中用单个MessageBox显示SortedList键值对
嘿,我懂你要的效果啦!就是把SortedList里的所有日期和任务内容一次性塞进一个MessageBox里,不用弹一堆窗口对吧?我给你整一个简单靠谱的方案~
首先,先确认下你的SortedList声明应该是类似这样的(我补全了你没写完的部分):
SortedList<DateTime, string> task = new SortedList<DateTime, string>(); // 假设你已经添加了任务项,比如: task.Add(new DateTime(2018, 4, 28, 11, 37, 0), "Making a question on stackoverflow"); task.Add(new DateTime(2018, 4, 28, 15, 0, 0), "Pulling my hair out");
然后在你的btnPrint_Click事件里,咱们用StringBuilder来高效拼接所有内容,最后一次性显示:
private void btnPrint_Click(object sender, EventArgs e) { // 初始化字符串构建器,用来攒所有内容 StringBuilder fullMessage = new StringBuilder(); // 遍历SortedList里的每一项 foreach (var taskItem in task) { // 按你要的格式拼接日期和任务文本,这里用空格分隔,要是想换行就换成Environment.NewLine fullMessage.Append($"{taskItem.Key.ToString("M/d/yyyy h:mm tt")} {taskItem.Value} "); } // 把攒好的内容丢进MessageBox,Trim()去掉最后多余的空格 MessageBox.Show(fullMessage.ToString().Trim()); }
为啥用StringBuilder而不是直接拼字符串?因为如果任务多的话,直接用+=拼字符串会反复创建新对象,效率很低,StringBuilder就没这问题,专门干拼接的活儿~
要是你觉得每个任务换行更清晰,把Append里的空格换成Environment.NewLine就行,显示出来就是每个任务单独占一行,也很方便。
内容的提问来源于stack exchange,提问作者Ricky
相关产品推荐
相关产品推荐

