Самый простой метод для отслеживания изменений между значениями поля со списком - PullRequest
1 голос
/ 29 января 2012

Я ищу элегантный способ отслеживать изменения между значениями для поля со списком. То, что я хочу сделать, это запускать пользовательское событие, когда происходит событие SelectionChanged, но только для изменения определенного значения. Это подразумевает знание начального значения. Событие будет запущено только при изменении начального значения с z. Если начальное значение a, b или c, событие не будет запущено. Но если начальное значение было z, оно будет запущено.

У кого-нибудь есть элегантный способ решить эту проблему?

1 Ответ

1 голос
/ 30 января 2012

Для этого вам нужно будет создать пользовательский обработчик событий и могут быть пользовательскими аргументами событий,

 //Event Handler Class
 public class SpecialIndexMonitor
 {
      public event EventHandler<SpecialIndexEventArgs> SpecialIndexSelected;
      //Custom Function to handle Special Index
      public void ProcessRequest(object sender, System.EventArgs e)
      {
           //Your custom logic
           //Your code goes here
           //Raise event
           if(SpecialIndexSelected != null)
           {
               SpecialIndexEventArgs args = new SpecialIndexEventArgs{
                    SelectedIndex = ((ComboBox) sender).SelectedIndex;
               };
               SpecialIndexSelected(this, args);
           }
      }
 }

 //Custom Event Args
 public class SpecialIndexEventArgs : EventArgs
 {
     //Custom Properties
     public int SelectedIndex { get; set; } //For Example
     //Default Constructor
     public SpecialIndexEventArgs ()
     {
     }
 }

Внутри вашей формы

 //Hold previous value
 private string _previousItem;

 //IMPORTANT:
 //After binding items to combo box you will need to assign, 
 //default selected item to '_previousItem', 
 //which will make sure SelectedIndexChanged works all the time

 // Usage of Custom Event
 private void comboBox1_SelectedIndexChanged(object sender, 
    System.EventArgs e)
 {
      string selectedItem = (string)comboBox1.SelectedItem;
      if(string.Equals(_previousItem, )
      switch(_previousItem)
      {
          case  "z":
          {
              SpecialIndexMonitor spIndMonitor = new SpecialIndexMonitor();
              spIndMonitor.SpecialIndexSelected += 
                   new EventHandler<SpecialIndexEventArgs>(SpecialIndexSelected);
              break;
          } 
          case "a":
          case "b":
              break;   
      }
      _previousItem = selectedItem; //Re-Assign the current item
 }
 void SpecialIndexSelected(object sender, SpecialIndexEventArgs args)
 {
     // Your code goes here to handle the special index
 }

Не скомпилировал код, но по логике он должен работать для вас.

...