私のプロジェクトには2つ のListViewコントロールがあり、そのうちの1つは完全に正常に機能するため、最近まで、その動作が非常に奇妙である理由がわかりませんでした。
チェックされたプロパティを認識しない場合もあれば、チェックされたプロパティを取得したときに「」が返される場合もあります。正常に動作し、TrueまたはFalseを返す場合もあります。
リストボックスにアクセスするためのコードは以下のとおりです。チェックステータスを取得するための同じコードを持つ2つが完全に正常に機能することを覚えておいてください。
また、他の列が機能しているときに中央の列のサブテキストが常に「」を返すときに問題が発生し始めたため、データテーブルから目的の出力を取得するためにコードを変更する必要があります。
アップデート
また、デバッグモードで、行ごとに移動する場合も、毎回正常に動作し、実行すると値が得られます。行をスキップするか、チェックされた行を認識しない可能性があります。
for (int i = 0; i < listView1.Items.Count - 1; i++)
{
// string tmpVal = string.Empty;
bool tmpVal = false;
if (listView1.InvokeRequired)
{
listView1.BeginInvoke(new MethodInvoker(
() =>
tmpVal = listView1.Items[i].Checked
));
}
else
{
tmpVal = listView1.Items[i].Checked;
}
if (tmpVal == true)
{
string senderEMail = string.Empty;
if (listView1.InvokeRequired)
{
listView1.BeginInvoke(new MethodInvoker(
() =>
senderEMail = listView1.Items[i].SubItems[1].Text.ToString()
));
}
else
{
senderEMail = listView1.Items[i].SubItems[1].Text.ToString();
}
int rowNumber = 0;
string rNumber = string.Empty;
if (listView1.InvokeRequired)
{
listView1.BeginInvoke(new MethodInvoker(
() =>
rNumber = listView1.Items[i].SubItems[3].Text.ToString()
));
}
else
{
rNumber = listView1.Items[i].SubItems[3].Text.ToString();
}
rowNumber = Convert.ToInt16(rNumber.Trim());
if (checkBox2.Checked)
{
//GET UNSUBSCRUBE URL IF ANY HIT IT AND ALSO SEND EMAIL
string unSubscribeUrl = resultSheet.Rows[rowNumber - 1]["UnsubscribeLink"].ToString();
string receiver = resultSheet.Rows[rowNumber - 1]["receiver"].ToString();
if (unSubscribeUrl != "")
{
unSubscribeUrl = unSubscribeUrl.Replace("amp;", "").Trim();
string html = getHtml(unSubscribeUrl);
}
//SENDING EMAIL
receiver = receiver.ToLower();
OutLook.Application oApp1 = new OutLook.Application();
OutLook.MailItem mail = oApp1.CreateItem(OutLook.OlItemType.olMailItem) as OutLook.MailItem;
mail.Subject = "unsubscribe | uitschrijven | gelieve geen mails te sturen";
mail.To = senderEMail;
SetAccount_2007_2010(mail, receiver);
Marshal.ReleaseComObject(oApp1);
}
if (checkBox3.Checked)
{
deleteSenderList.Add(senderEMail);
}
}
}