2016-03-25 4 views
0

Выполнение перехода с VB.NET на C# 2008. Я многому научился, но хочу задать несколько вопросов.Как вставить новую функцию (метод) в класс?

Когда я создаю динамические элементы управления, мне нужно добавить к ним события. Поэтому мне нужно вставить эти события в мои программы. IE ...

Создайте TextBox, затем необходимо добавить событие KeyUp. Теперь я отбрасываю текстовое поле в своей форме, перехожу к его событиям, дважды щелкаю по событию, которое я хочу, затем переименую функцию в то, что хочу, и удаляю текстовое поле из формы.

Нет ли вставки новой функции (меню или меню правой кнопки?) Или можно узнать все параметры? объект отправитель довольно легко, но изменения EventArgs.

ТИА:} DPRoberts

+0

Является ли это WebForms или WinForms? Кроме того, вы знакомы с делегатами? – onefootswill

+0

F12 ключ - ваш друг. Пожалуйста, не стесняйтесь. –

+0

@ DiligentKeyPresser F1 - еще одна альтернатива (также RTFM на самом деле не приемлемый подход, поэтому, возможно, ваш маршрут копания в метаданных/декомпилированном коде более современен). –

ответ

0

Вы могли бы узнать о delegates и lambda expressions для этого.

Вот пример, который может помочь.

 for(int k = 0; k < 5; k++) 
     { 
      TextBox tb = new TextBox(); 
      tb.Name = "tb1"; 
      tb.Click += (obj, evntArgs) => 
      { 
       //This is your click event code for this text 
      }; 
     } 

Надеюсь, это поможет!

+0

На строке tb.Click + = (obj, evntArgs) => как вы знаете, использовать evntArgs (sp?). У вас было это запомнено или есть список? :} DPRoberts – DPRoberts

+0

@DPRoberts на самом деле, IntelliSense поможет вам создать обработчик событий, когда вы нажимаете Tab после + = [пробел], для каких событий доступны, как только вы ставите «tb». Тогда IntelliSense начнет заселять и вас. Таким образом, работа с памятью минимальна ... Это верно для VS2010 по крайней мере .. – Ian

+0

@DPRoberts. Доля льва в событиях имеет тип делегата EventHandler, который принимает тип EventArgs для аргументов события. Для примера того, что использует другой тип, проверьте [CellValueChanged] (https://msdn.microsoft.com/en-au/library/system.windows.forms.datagridview.cellvaluechanged (v = vs.110). aspx). Обратите внимание, что тип делегирования для этого события - DataGridViewCellEventHandler, а не стандартный EventHandler. Итак, у него есть пользовательский DataGridViewCellEventArgs, который, очевидно, несет некоторые метаданные. Вам не нужно изучать все аргументы. Доко все это сложилось. – onefootswill

0

Надеюсь, я это делаю правильно, я не часто использую форумы и т. П. Но мой ответ был сложным, чтобы сделать в качестве комментария.

Последние несколько комментариев были по крайней мере близки к тому, что мне нужно. Я собираюсь привести здесь некоторый код, чтобы помочь с объяснением. НО!!! это не вопрос кодирования, поэтому любые разговоры об этом мне не помогут! Это IDE вопрос, который я ищу кнопку пункта меню или панели инструментов, которые позволяют мне, чтобы вставить новую функцию ОК здесь живой пример (который уже знает правильный Params для события.):

TextBox txtTemp = new TextBox(); 
txtTemp.KeyUp += fnKeyUp_txtQtySent; 

txtTemp.Font = fArial10; 
txtTemp.Location = new Point(nXPos, nYPos); 
txtTemp.Tag = sTag; 
txtTemp.Text = dbRDR.GetInt32(1).ToString(); 
txtTemp.TextAlign = HorizontalAlignment.Center; 
txtTemp.Width = 48; 
pnlContracts_Open.Controls.Add(txtTemp); 

сейчас следующим шагом будет создание/вставка функции/метода fnKeyUp_txtQtySent. В настоящее время я делаю это одним из двух способов: вырезать/вставить из другого события KeyUp или 5-6 шагов, описанных выше. Есть ли путь к меню, который сделает этот IE (Insert> Event> TextBox> KeyUp. Затем будет добавлено пустое событие KeyUp, которое будет переименовано и закодировано.

Спасибо всем за усилия, я был VB 3,4 , 5,6 программатор в течение многих лет и сделал перерыв, чтобы вернуться к .NET около 6 лет назад Так что это одна из тех немногих вещей, которые я не узнал, как это сделать правильно

:..} DPR

+0

. Дело в том, что вы, вероятно, должны (и, пожалуйста, попробуйте принять это как дружеский совет, я не пытаюсь быть средним, но конструктивным) «учиться» .net, а не пытаться самостоятельно изучать крошечные биты , После 6 лет работы .net у вас не должно быть проблем с событиями, так как это одна из довольно основных особенностей языка. Я настоятельно рекомендую вам взять книгу на .net и прочитать ее спереди назад (я предлагаю pro C# 5.0 и .net 4.5 Framework, он большой, но исчерпывающий, и если вы уже знаете, как делать большинство вещей, которые вам нужны, вы можете придерживаться простого чтения языковой части и оставить конец книги) –

+0

Что касается простого способа создания этого метода, сделайте это вручную, как только вы набрали txtTemp.KeyUp + =, вы должны дважды нажать на вкладку и в конечном итоге использовать метод, который вам нужен. Даже исходя из кода, как сейчас, вы должны щелкнуть правой кнопкой мыши по fnKeyUp_txtQtySent и выбрать метод генерации, визуальная студия будет определять параметры для вас. –

+0

Спасибо, Ронан, вы, наконец, получили его в нескольких последних словах, хорошо, теперь похоже, что у меня отключена в моей среде IDE, я использую 2008 Express. Я не вижу вариант метода генерации. Это только в редакции PRO? Кто-нибудь знает? :} DPR – DPRoberts

0

Надеюсь помочь в этом. Если я правильно понимаю, вы хотите создать обработчик «автоматически», чтобы получить правильные аргументы событий.

Когда вы являетесь типичным ИНГ имя объекта, а затем имя события, а затем +=:

TextBox.KeyUp +=TabTab

Нажмите вкладку дважды как только вы закончите += часть. Это создаст метод обработчика с правильными типами аргументов.

Другой трюк ОС набрать, скажем:

TextBox.KeyUp += (a, b) => { //this is an empty function block } 

А затем поставить курсор a и/или b, чтобы увидеть их всплывающие подсказки с их предполагаемыми типов. Обычно a - object (отправитель события) и b - это некоторый подкласс EventArgs, но много раз вам даже не придется использовать аргументы в любом случае.

И here you have a step-by-step руководство по внедрению события и обработчика, в случае необходимости.

+0

Спасибо, Хелтон, ваша ссылка - много чего делать, мне нужно, как это сделать. Мне очень нравится этот трюк, о котором ты говорил, я думаю, это будет третий путь. Но в IDE должен быть способ сделать это. Я думаю, что я очень близка к замечанию Ронина выше. Не могли бы вы взглянуть и посмотреть, сможете ли вы ответить на этот вопрос. :} DPR – DPRoberts

+0

«сделать это в среде IDE» означает набирать «+ =» после имени события и дважды вставлять вкладку. вы уже пробовали? Он создаст для вас шаблон кода метода! Вот как это делается, вот как все это делает в Visual Studio! – heltonbiker

0

Спасибо всем за попытку, особая благодарность Ронану! С помощью ключевых слов «Generate Method» из Ronan я нашел то, что мне было нужно. Похоже, что VS 2008 не имеет клавиш сокращения ctrl + K + M или меню правой кнопки мыши, чтобы сделать это. Я установил VS 2012, и они оба были там.

Потому что я меняю языки VB на C#, это также облегчит переключение версий. Удивительно, что он работает, после нескольких лет вырезания/вставки. Я нашел веб-страницу со списком ярлыков, и упомянутый выше не появляется только в 2015, 2012 и 2013 годах.

Еще раз спасибо, и я решил ответить на этот вопрос.

:} DPRoberts

Смежные вопросы