none
PropertyGrid, событие вызова редактора свойства RRS feed

  • Вопрос

  • При нажатии на кнопку редактора свойства не происходит смена фокуса выделенного  элемента в списке, возможно ли отловить событие вызова редактора или как-то убедить control менять фокус?

    18 января 2011 г. 4:11

Ответы

  • Странно...

    Проверьте, пожалуйста, работает ли у Вас следующий код:

    private void Form1_Load(object sender, EventArgs e)
    {
      PropertyGrid propertyGrid = new PropertyGrid() { Width = 400, Height = 400 };
      propertyGrid.SelectedObject = this;
      propertyGrid.SelectedGridItemChanged += propertyGrid_SelectedGridItemChanged;
      Controls.Add(propertyGrid);
    }
    
    private void propertyGrid_SelectedGridItemChanged(object sender, SelectedGridItemChangedEventArgs e)
    {
      Text = e.NewSelection.Label;
    }
    
    

    • Помечено в качестве ответа Vasilyev Anton 18 января 2011 г. 16:06
    18 января 2011 г. 10:42
  • Код рабочий. Благодаря ему, я понял ошибку в логике работы моего обработчика. Спасибо.
    • Помечено в качестве ответа Vasilyev Anton 18 января 2011 г. 16:04
    18 января 2011 г. 16:04

Все ответы

  • А каким образом у Вас отображаются кнопки редактора без выделения?

    В стандартном поведении PropertyGrid в Windows Forms эти кнопки не видны, пока соответствующая строка не будет выделена.

    18 января 2011 г. 9:01
  • Прошу прощения, некорректно поставил вопрос. Выделение строки, конечно, происходит по щелчку мышкой, но не возникает событие "SelectedGridItemChanged", в обработчике которого у меня происходит смена значения переменной-индекса в массиве данных для контрола. Таким образом, класс редактора не может правильно определить, с данными какого элемента ему следует работать. Как можно выйти из этой ситуации?
    18 января 2011 г. 9:49
  • Странно...

    Проверьте, пожалуйста, работает ли у Вас следующий код:

    private void Form1_Load(object sender, EventArgs e)
    {
      PropertyGrid propertyGrid = new PropertyGrid() { Width = 400, Height = 400 };
      propertyGrid.SelectedObject = this;
      propertyGrid.SelectedGridItemChanged += propertyGrid_SelectedGridItemChanged;
      Controls.Add(propertyGrid);
    }
    
    private void propertyGrid_SelectedGridItemChanged(object sender, SelectedGridItemChangedEventArgs e)
    {
      Text = e.NewSelection.Label;
    }
    
    

    • Помечено в качестве ответа Vasilyev Anton 18 января 2011 г. 16:06
    18 января 2011 г. 10:42
  • К сожалению, рабочий и интернетовский компьютер у меня не рядом. Проверю обязательно и отпишусь. На данный момент могу высказать предположение, что проблема, наверное, в том что в propertyGrid отображаются составные свойства (для них применяется ExpandableObjectConverter). Событие SelectedGridItemChanged отрабатывает, если выделить строку с "родительским" элементом - тут всё в порядке, но вот при выделении "подчинённого" свойства этого не происходит.
    18 января 2011 г. 11:24
  • Проверил код, приведенный выше, SelectedGridItemChanged вызывается для всех свойств и "главных" и "подчиненных". Ждем ваших результатов.


    Для связи [mail]
    18 января 2011 г. 12:17
  • Код рабочий. Благодаря ему, я понял ошибку в логике работы моего обработчика. Спасибо.
    • Помечено в качестве ответа Vasilyev Anton 18 января 2011 г. 16:04
    18 января 2011 г. 16:04