c# - Handling the SelectedIndexChanged event handler in DataGridViewComboBoxCell -


i have 2 related issues here derived class.

i trying add selectedindexchanged event handler. getting called:

class datagridviewcolourcomboboxcell : datagridviewcomboboxcell {     public override void initializeeditingcontrol(int rowindex, object initialformattedvalue, datagridviewcellstyle datagridviewcellstyle)     {         // set value of editing control current cell value.         base.initializeeditingcontrol(rowindex, initialformattedvalue, datagridviewcellstyle);          datagridviewcolourcomboboxeditingcontrol ctl =              datagridview.editingcontrol datagridviewcolourcomboboxeditingcontrol;         // use default row value when value property null.         if (this.value == null)         {             ctl.selectedindex = (int)this.defaultnewrowvalue;         }         else         {             ctl.selecteditem = find(this.value.tostring());             try             {                 ctl.selectedindexchanged -= new eventhandler(selectedindexchanged);              }             catch { }             ctl.selectedindexchanged += new eventhandler(selectedindexchanged);         }     } }  private void selectedindexchanged(object sender, eventargs e) {     datagridviewcolourcomboboxeditingcontrol ctl = (datagridviewcolourcomboboxeditingcontrol)sender;     messagebox.show(ctl.selectedindex.tostring()); } 

but have 2 issues:

  1. the application seems piggy-backing event handler each time select on different combo in grid, because each time receive 1 more popup message before (1, 2, 3 , on). thought use of try/catch block prevent this.

i have fixed item 1. adding event handler in wrong place. needed here:

public class datagridviewcolourcomboboxeditingcontrol : datagridviewcomboboxeditingcontrol {     public datagridviewcolourcomboboxeditingcontrol() : base()     {         drawmode = drawmode.ownerdrawfixed;      }      protected override void ondrawitem(drawitemeventargs e)     {         //base.ondrawitem(e);         //....     }      protected override void onselectedindexchanged(eventargs e)     {         messagebox.show(selectedindex.tostring());          base.onselectedindexchanged(e);     } } 
  1. it not fireing like. want know when user has picked entry displayed dropped down list. @ moment above event handler fired when setting focus next cell.

but item 2 still issue. event clicking cell causing event fire (note have set grid edit on click). single click on cell not show dropdown anyway. don't want fire in context. has result choice dropdownlist.

i have seen this: how handle selectedindexchanged event combobox?

but don't want things in grid. want things in derived classes. want detect when show dropdown , click first item. if click first item should show form (kind of acting button).

update:

i believe may have found solution:

public class datagridviewcolourcomboboxeditingcontrol : datagridviewcomboboxeditingcontrol {     public datagridviewcolourcomboboxeditingcontrol() : base()     {         drawmode = drawmode.ownerdrawfixed;     }      protected override void ondrawitem(drawitemeventargs e)     {         //base.ondrawitem(e);         //....     }      protected override void ondropdownclosed(eventargs e)     {         if(selectedindex == 0) // display pop             messagebox.show("display pop colour dialog");          base.ondropdownclosed(e);     } } 

i needed use ondropdownclosed. problem solution entry has been selected in cell. since want first item in combo act button idea if select that, displays dialogue (where choose different colour not in combo) , add combo , select it. @ moment, if manually add selectedindex = 5; in handler (and had picked index 4) flashes cell index 4 first , index 5. make sense?


Comments

Popular posts from this blog

sequelize.js - Sequelize group by with association includes id -

android - Robolectric "INTERNET permission is required" -

java - Android raising EPERM (Operation not permitted) when attempting to send UDP packet after network connection -