c# - 事件不是第一次触发
问题描述
在 RichTextBox 中,我试图用按下句点 ('.') 触发一个事件,但它不是第一次工作。
如果我写“Lorem Ipsum”。,它不起作用,但如果我写“Lorem Ipsum”。或“Lorem Ipsum ..”没关系。
PS:我还添加了 KelimeGuncelle 方法和 GetWordGroupInstances() 字典。
这是块:
private void rtbMakale_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.OemPeriod)
{
kelimeGuncelle();
}
}
kelimeGuncelle 方法:
void kelimeGuncelle()
{
Dictionary<String, int> TekliKelimeGruplari = GetWordGroupInstances(1);
foreach (var item in TekliKelimeGruplari)
{
for (int i = 0; i < lstKelimeler.Items.Count; i++)
{
var kelime = lstKelimeler.Items[i];
string guncellenecekKelime = kelime.ToString().Remove(kelime.ToString().IndexOf(" ( ") - 1);
string gelenKelime = item.Key;
string _guncellenecekKelime = kelime.ToString();
int pFrom = _guncellenecekKelime.IndexOf("(") + 1;
int pTo = _guncellenecekKelime.LastIndexOf("/");
int guncellenecekSayi = Convert.ToInt32(_guncellenecekKelime.Substring(pFrom, pTo - pFrom));
int kFrom = _guncellenecekKelime.IndexOf("/") + 1;
int kTo = _guncellenecekKelime.LastIndexOf(")");
int toplamYazilacakSayi = Convert.ToInt32(_guncellenecekKelime.Substring(kFrom, kTo - kFrom));
int kelimeninSirasi = lstKelimeler.Items.IndexOf(kelime);
if (Equals(guncellenecekKelime, gelenKelime))
{
guncellenecekSayi = item.Value;
lstKelimeler.Items.RemoveAt(kelimeninSirasi);
lstKelimeler.Items.Insert(kelimeninSirasi, guncellenecekKelime + " ( " + guncellenecekSayi + "/" + toplamYazilacakSayi + " )");
//lstKelimeler.Refresh();
}
if (rtbMakale.Text.Contains(guncellenecekKelime) == false)
{
lstKelimeler.Items.RemoveAt(kelimeninSirasi);
lstKelimeler.Items.Insert(kelimeninSirasi, guncellenecekKelime + " ( 0/" + toplamYazilacakSayi + " )");
//lstKelimeler.Refresh();
}
}
}
TekliKelimeGruplari.Clear();
}
和 GetWordGroupInstances:
Dictionary<String, int> GetWordGroupInstances(int GroupSize)
{
Dictionary<String, int> WordGroupInstances = new Dictionary<string, int>();
String[] sourceText = GetSourceText().Split(' ');
int pointer = 0;
StringBuilder groupBuilder = new StringBuilder();
while (pointer < sourceText.Length - GroupSize)
{
groupBuilder.Clear();
int offset = pointer + GroupSize;
for (int i = pointer; i < offset; i++)
{
groupBuilder.Append(" ").Append(sourceText[i]);
}
String key = groupBuilder.ToString().Substring(1);
if (!WordGroupInstances.ContainsKey(key))
{
WordGroupInstances.Add(key, 1);
}
else
{
WordGroupInstances[key]++;
}
pointer += 1;
}
return WordGroupInstances;
}
解决方案
尝试使用 MessageBox.Show("Test"); 对于测试,也许您的 kelimeGuncelle() 方法中的某些内容是错误的。
private void rtbMakale_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.OemPeriod)
{
MessageBox.Show("Test");
}
}
推荐阅读
- odoo-8 - 问题原型继承 res 伙伴 odoo 8
- java - Junit 测试失败,mvn clean install for aspectj 装饰类
- postgresql - 如何使用 ansible 设置 postgres 密码
- git - 如何使用 repo init -u 确定最初从 android repo 工具初始化存储库的 URL
? - google-drive-api - 如何将文件从 URL 保存到 Google Drive
- sql-server - SQL Server 图形边缘插入
- html - 如果未设置高度,则不显示 CSS 背景图像(为什么不自动调整?)
- javascript - 可以在括号内设置一个变量,例如我的这个例子吗?
- docker - 如何在 Cypress Docker 容器中安装节点模块?
- python - 在图像文件夹中查找与 id 关联的所有文件?