Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> изменение порядка вызовов событий 
:(
    Опции темы
vasjon
Дата 9.10.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 26.9.2007

Репутация: нет
Всего: нет



возможен ли сабж ?
для чего это мне нужно: есть нестандартный грид, у него есть 2 события: FocusedRowChanged, FocusedColumnChanged. При смене фокуса может быть 3 варианта: 
1) FocusedRowChanged, FocusedColumnChanged
2) FocusedRowChanged
3) FocusedColumnChanged
мне надо узнать на какой ячейке сейчас фокус и вызвать метод, для этого надо какое-нибудь событие после отработки этих событий... идеально подошел бы MouseDown, но он выполняется перед этими событиями :(
соотвественно вопрос: можно ли измененить порядк вызовов событий ? или может есть более простой способ ?
PM MAIL   Вверх
mr.DUDA
Дата 9.10.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Обычно вместе с событием есть виртуальный метод с именем OnИмяСобытия, который можно перекрыть и добавить свои действия до (или после) вызова base.OnИмяСобытия. В base происходит генерация ИмяСобытия.


--------------------
user posted image
PM MAIL WWW   Вверх
vasjon
Дата 9.10.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 26.9.2007

Репутация: нет
Всего: нет



OnFocusedRowChanged, OnFocusedColumnChanged  - нету, а OnMouseDown есть, но от него мало толку, хотя тут вопрос откуда взять параметры (System.Windows.Forms.MouseEventArgs)для этого метода ?
PM MAIL   Вверх
1stain
Дата 9.10.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 3
Всего: 40



Код

    public partial class Form1 : Form
    {
        private MouseEventArgs ee;
        private object mouseDownSender;
        private bool redirect = true;

        public Form1()
        {
            InitializeComponent();
            Button button1 = new Button();
            button1.Parent = this;
            button1.Size = new Size(100, 50);
            button1.MouseDown += new MouseEventHandler(button1_MouseDown);
            button1.Click += new EventHandler(button1_Click);
        }

        private void button1_MouseDown(object sender, MouseEventArgs e)
        {
            this.Text += "MouseDown occured ";
            if (redirect)
            {
                ee = e;
                mouseDownSender = sender;
            }
            else
            {
                redirect = true;
            }
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Text += "Button1_Click occured ";
            if (redirect)
            {
                redirect = false;
                button1_MouseDown(mouseDownSender, ee);
            }
        }
    }


только не лучше ли в этом случае использовать событие CellEnter ? Хотя бы потому, что фокус может менятся с клавиатуры...

Это сообщение отредактировал(а) 1stain - 9.10.2007, 15:21


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
vasjon
Дата 9.10.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 26.9.2007

Репутация: нет
Всего: нет



было бы событие CellEnter проблем не было бы...
моих знаний Ваш код применить не хватает.
PM MAIL   Вверх
mr.DUDA
Дата 9.10.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Как костыльный вариант - создать таймер с частотой 100мс и int переменную-счётчик, и при генерации любого из событий FocusedXXXChanged сбрасывать счётчик в 0. В обработчике Timer.Elapsed увеличивать счётчик на 1 и проверять, к примеру, если он равен 5 значит прошло полсекунды с последнего события (и больше не поступало), значит можно выполнить нашу проверку выбранной ячейки и т.п. действия. События FocusedXXXChanged будут генерироваться генерироваться в любом случае быстрее, чем за полсекунды, поэтому будет некая гарантия что ячейка выбрана окончательно.


--------------------
user posted image
PM MAIL WWW   Вверх
vasjon
Дата 10.10.2007, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 26.9.2007

Репутация: нет
Всего: нет



имено этот вариант и использовал smile хотя способ читерский 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.