2009-07-05 2 views
2

Простая проблема (я думаю): Я хочу, чтобы иметь возможность вызвать метод щелчка на предопределенном объекте, в частности, кнопку bindingNavigatorDeleteItem на стандартном C# BindingNavigator. Мне нужно перехватить удаление, чтобы я мог проверить, что запись разрешена для удаления. Если это так, я хочу вызвать вышеупомянутое событие click, которое делает хорошую работу по удалению указанной записи. Если запись не подходит для удаления, я хочу прервать удаление.Запросить метод щелчка кнопки программно

Инжиниринговая мой коллега говорит, что я просто добавить еще одну кнопку в ToolStrip и использовать его метод мыши (который, конечно же, я может добраться до), чтобы проверить записи права и вызвать оригинальную кнопку Удалить в случае необходимости ,

Если есть другой, лучший способ, пожалуйста, передайте его.

ответ

2

Чтобы просто вызвать клик - вы должны быть в состоянии использовать PerformClick().

Я был немного потерян из-за других вещей, о которых вы упомянули, - вы можете уточнить?

+0

Я попробовал метод «PerformClick()» и ... ничего не происходит! Есть ли какая-то другая подготовка, которую я должен выполнить до того, как действительно выполнит метод PerformClick()? Помощь, которая приходит с этим методом, - это не то, что вы бы назвали «информативным» - это единственная строка текста, которая гласит: «Активирует элемент инструментальной панели, когда он щелкнут мышью» - как я уже сказал, не очень полезен. Мне, должно быть, недостает чего-то, поскольку я пытался, успешно, вызвать метод через Reflection (благодаря другой публикации в StackOverflow), но элегантность PerformClick() - это то, что я ищу. Не беспокойтесь о других вещах. – Bruce

+1

Ничего. «Блестящие» программисты в MS решили, что если кнопка не была видна, ее функциональность не нужна, поэтому ... PerformClick работает только тогда, когда кнопка включена и видна (получена из исходного кода) - идите в цифру! – Bruce

+0

Спасибо за добавление этого комментария. У меня возникла аналогичная проблема. Я не чувствовал необходимости фактически показывать свой контроль во время модульного тестирования ... и поэтому кнопка не была видна, и ничего не произошло! –

2

Вместо того, чтобы перехватывать кнопку инструментальной панели (и оставлять другие методы открытыми для пользователя, например удаление строки в DataGrid), используйте одно из событий в вашем источнике данных, чтобы отменить удаление, если оно недействительно.

+0

Я думал об этом, но когда я изучил событие RowDeleting, я не видел очевидного способа прекратить удаление (например, Отмена в CancelEventArgs некоторых событий), поэтому я пошел по другому треку. Если я что-то пропустил, пожалуйста, осветите! – Bruce

+0

Вы ничего не пропустили - событие DataTable.RowDeleting не имеет способа отменить удаление. Позор, поскольку он заставляет вас обходить обходные пути. – Bevan