ฉันพบว่าโซลูชันของ @ Killercam ใช้งานได้ แต่ค่อนข้างหลบถ้าผู้ใช้ดับเบิลคลิกเร็วเกินไป ไม่แน่ใจว่าผู้อื่นพบว่ากรณีนี้หรือไม่ ผมพบว่าวิธีการแก้ปัญหาอื่นที่นี่
ใช้ดาต้ากริดCellValueChanged
และCellMouseUp
. ฉางหงอธิบายว่า
"สาเหตุที่ทำให้เหตุการณ์ OnCellvalueChanged ไม่เริ่มทำงานจนกว่า DataGridView จะคิดว่าคุณแก้ไขเสร็จแล้วสิ่งนี้ทำให้รู้สึกถึงคอลัมน์กล่องข้อความเนื่องจาก OnCellvalueChanged จะไม่ [รบกวน] ในการเริ่มการทำงานสำหรับการประท้วงแต่ละครั้ง แต่จะไม่ [ เหมาะสม] สำหรับกล่องกาเครื่องหมาย "
นี่คือการดำเนินการจากตัวอย่างของเขา:
private void myDataGrid_OnCellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
}
}
และรหัสเพื่อบอกช่องทำเครื่องหมายว่าแก้ไขเสร็จแล้วเมื่อคลิกแทนที่จะรอจนกว่าผู้ใช้จะออกจากฟิลด์:
private void myDataGrid_OnCellMouseUp(object sender,DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
แก้ไข: เหตุการณ์ DoubleClick จะถือว่าแยกจากเหตุการณ์ MouseUp หากตรวจพบเหตุการณ์ DoubleClick แอปพลิเคชันจะละเว้นเหตุการณ์ MouseUp แรกโดยสิ้นเชิง จำเป็นต้องเพิ่มตรรกะนี้ในเหตุการณ์ CellDoubleClick นอกเหนือจากเหตุการณ์ MouseUp:
private void myDataGrid_OnCellDoubleClick(object sender,DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
CurrentCellDirtyStateChanged
เหตุการณ์หรือไม่