שפה: c# winform
עריכה:
בקצרה:
אני מנסה ליצור אירוע בעת לחיצה על תיבת סימון
והבעיה כשלוחצים 'דאבל-קליק' התהליך אינו מושלם כרצוני
בהרחבה:
אני מנסה לבצע פעולה חשבונאית של פיזור סכום בשורות בטבלה
בהתבסס על סכום שקיים ב textBox
החישוב מתבצע בעת שינוי בעמודה מסוג checkBox הנמצאת בתוך dataGridView
באמצעות הקוד דלהלן:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
_ = dataGridView1.Enabled = false;
if (string.Compare(dataGridView1.CurrentCell.OwningColumn.Name, "choose") == 0)
{
bool checkBoxStatus = Convert.ToBoolean(dataGridView1.CurrentCell.EditedFormattedValue);
if (checkBoxStatus)
{
if (Convert.ToDouble(dataGridView1.CurrentRow.Cells["debt_balance"].Value) <= Convert.ToDouble(textBox1.Text))
{
dataGridView1.CurrentRow.Cells["current_payment"].Value = dataGridView1.CurrentRow.Cells["debt_balance"].Value;
textBox1.Text = (Convert.ToDouble(textBox1.Text) - Convert.ToDouble(dataGridView1.CurrentRow.Cells["current_payment"].Value)).ToString();
}
else if (Convert.ToDouble(dataGridView1.CurrentRow.Cells["debt_balance"].Value) > Convert.ToDouble(textBox1.Text))
{
dataGridView1.CurrentRow.Cells["current_payment"].Value = textBox1.Text;
textBox1.Text = "0";
}
}
else
{
textBox1.Text = (Convert.ToDouble(textBox1.Text) + Convert.ToDouble(dataGridView1.CurrentRow.Cells["current_payment"].Value)).ToString();
dataGridView1.CurrentRow.Cells["current_payment"].Value = "0";
}
}
_ = dataGridView1.Enabled = true;
}
אממה
שאם אני מסמן את התא לאט ובעדינות בקצב סביר (קצב סביר = אינו דאבל / תלת קליק)
הפעולה מתרחשת בצורה תקינה
אבל אם אני מקליק עליו ברצף
הוא מפספס חלק מהלחיצות ומפחית מהסכום המופיע בtextBox שלא לפי התנאי
(הסכום בtextBox פוחת לפי הערך, אבל הסימון נשאר, כך שבלחיצה חוזרת הסכום פוחת שוב)
בהתחלה סברתי שאולי קצב ההקלקה יותר מהיר מהחישוב
ולכן הוספתי מייד בהתחלה את dataGridView1.Enabled = false
מה שאמור למנוע את הלחיצה הבאה עד לסיום הריצה
אבל זה עדיין לא עזר
היכן שגיתי?
והתשובה הינה:
private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{
dataGridView1_CellContentClick(sender, e);
}