我正在开发这个项目,当我将某些内容保存到剪贴板时,它将其存储在文本框中,然后等待我保存其他内容然后将该值存储在文本框中以及...
它工作得很好但我想让它变得更好,因为我目前有一个定时器作为循环来检查当前值是否已被使用(参见下面的代码)
我想将其更改为我可以将变量与字符串进行比较的地方,但我真的不知道该怎么做。
我试过了..但我也不知道该怎么比较它所以我无法继续前进。 var containsData = Clipboard.GetText();
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CBR
{
public partial class mainFrm : Form
{
public mainFrm()
{
InitializeComponent();
}
private void mainFrm_Load(object sender, EventArgs e)
{
}
#region ButtonsAndTimer
private void clipboardUpdater_Tick(object sender, EventArgs e)
{
if (!clipboardSaveTextBox.Text.Contains(Clipboard.GetText()))
{
clipboardSaveTextBox.Text += "\n" + Clipboard.GetText();
}
}
private void monitorButton_Click(object sender, EventArgs e)
{
clipboardUpdater.Enabled = true;
}
private void stopMonitorButton_Click(object sender, EventArgs e)
{
clipboardUpdater.Enabled = false;
}
#endregion
}
}
答案 0 :(得分:0)
鉴于您的实际代码,我认为您不希望通过字符串比较进行字符串,但您希望在文本框中包含唯一的字符串。如果是这种情况,那么您可以考虑另一种方式来存储字符串而不仅仅是TextBox,并且每次验证TextBox是否包含已添加到控件文本的字符串。
根据MSDN的提供,有一个名为HashSet<T>
的类
HashSet类提供高性能的集合操作。一套 是一个不包含重复元素的集合,其中包含 元素没有特别的顺序。
因此,您可以检查文本框中是否存在通过剪贴板传递的字符串,而不是检查它是否存在于HashSet<string>
实例中
public partial class mainFrm : Form
{
private HashSet<string> uniqueTexts = new HashSet<string>();
public mainFrm()
{
InitializeComponent();
}
.....
private void clipboardUpdater_Tick(object sender, EventArgs e)
{
string clipText = Clipboard.GetText();
if (!uniqueTexts.Any(x => x.Equals(clipText, StringComparison.OrdinalIgnoreCase)))
{
clipboardSaveTextBox.AppendText("\n" + clipText);
uniqueTexts.Add(clipText);
}
}
答案 1 :(得分:0)
如果要使用不区分大小写的比较,可以在调用Contains方法之前在两个字符串中添加ToLower:
if (!clipboardSaveTextBox.Text.ToLower().Contains(Clipboard.GetText().ToLower()))
{
clipboardSaveTextBox.Text += "\n" + Clipboard.GetText();
}
答案 2 :(得分:0)
对我有用的是......
我创建了一个计时器,Is和滴答间隔为0.5秒,所以它可以每0.5秒重复一次监视过程,我可以把它放到0.1秒但我不想让它变重。
然后我将其添加到方法中。
private void clipboardUpdater_Tick(object sender, EventArgs e)
{
if (!clipboardSaveTextBox.Text.Contains(Clipboard.GetText()))
{
clipboardSaveTextBox.Text += "\n" + Clipboard.GetText();
}
}
这是..如果clipboardSaveTextBox.Text不包含剪贴板的值,它将(+ =添加)存储在剪贴板中的当前值传递给clipboardSaveTextBox.Text。
我希望我的回答可以帮助其他可能遇到同样问题的人。