2015-01-09 3 views
0

Извините, если вопрос не имеет смысла в терминах C#. Я программировал в Obj-C и там, вы могли бы дать кнопку «тег».Можно ли связать информацию о кнопке?

Я спрашиваю, потому что я программно создаю много кнопок и использую их один и тот же метод для MouseDoubleClick. Проблема в том, что у меня нет способа определить, какая кнопка нажала ее без «тега». Надеюсь, это имеет смысл?

+0

, что я сделать, это назвать их btnxx где хх части это число является то, что вы хотите? – ZoomVirus

+8

Я уверен, что свойство «Тег» существует на кнопке, и оно принимает «объект», что означает, что вы можете назначить все, что хотите, – Charleh

+0

См. Здесь: http://msdn.microsoft.com/en-us/ library/system.windows.frameworkelement.tag (v = vs.110) .aspx - кнопка наследует от 'FrameworkElement' (я считаю, что это' Button-> Control-> UIComponent-> FrameworkElement' - edit: no it's FrameworkElement-> UIElement ... close, но не сигары :)) – Charleh

ответ

0

Существует Tag Недвижимость на каждые FrameworkElement, чтобы вы могли решить ее таким образом.

Если вы хотите использовать более WPFier-способ, вам следует рассмотреть возможность использования ViewModel с реализацией ICommand. Эта команда может принимать параметр, в котором вы можете передать, например. целое число (или значение перечисления, которое может быть более удобным для обслуживания). Это должно быть привязано к свойству Command вместо обычного EventHandler.

+0

Этот вид не подходит. Почему бы просто не использовать имя кнопки? Свойство «Tag» подходит для этого в Cocoa, а не в WPF. – mydogisbox

+0

Ничего себе, я так глуп, что даже не проверял. Не ожидал, что для этого даже выйти в C# haha ​​Спасибо :) На боковой панели @mydogisbox мне нужен цифровой тег, потому что я использую его для доступа к списку :) – Dilisqq

+0

@Dilisqq ах, t нужно знать, какая кнопка была нажата, вам просто нужна некоторая связанная информация. Может быть, вы могли бы обновить свой вопрос, чтобы уточнить это? В противном случае этот ответ заставит людей задуматься о том, что свойство «Tag» является правильным способом идентификации элементов управления пользовательского интерфейса! – mydogisbox

3

Если вы определяете кнопку в XAML как это:

<Button x:Name="nameOfButtonToIdentify"/> 

x:Name тег определяет имя элемента управления.

Если вы тогда имели обработчик событий для него, как это:

private void nameOfButtonToIdentify_Click(object sender, RoutedEventArgs e) 

вы можете проверить, чтобы увидеть, если кнопка nameOfButtonToIdentify была нажата так:

private void nameOfButtonToIdentify_Click(object sender, RoutedEventArgs e) 
{ 
    if(sender == nameOfButtonToIdentify) 
    { 
     //do stuff 
    } 
} 

Тип Button имеет Tag, но это всего лишь свойство хранить произвольную информацию, а не средство идентификации этого элемента управления.

+2

Я думаю, что вы хотите '((Button) отправителя) .Name == btnName', когда вы сравниваете яблоки/апельсины в данный момент :) (если, конечно, btnName не является ссылкой на кнопку ...!) – Charleh

+0

они бы только хочу, чтобы btnName не был кнопкой, но я считаю, что в этом примере – ZoomVirus

+0

Прошло некоторое время с тех пор, как я коснулся WPF, да, вы правы, сгенерированный код позади имеет соответствующий член, который ссылается на кнопку! – Charleh

0

как мой комментарий сказал, что это то, что я делаю

int numberForButton =0; 
for (int i =0;i<100;i++) 
{ 
    Button but = new Button(); 
    //usual place button fields 
    but.MouseDoubleClick += click_event; 
    but.Name = btn+numberForButton; 
    numberForButton++; 
} 


private void btnName_Click(object sender, MouseDoubleClick_event e) 
{ 
    //for button 97 chosen at random 
    if(((Button)Sender).Name.SubString(2) == 97) 
    { 
     //code what you want button 97 to do 
    } 
} 

Это создает 100 кнопки в C# часть вашей работы, и все называют то же событие, где комментарий ставится код для размещения кнопок, где вы, как изменение 100, сколько бы кнопок вы ни выбрали и не забыли

+0

Вам не хватает бит, в котором вы различаете, какую кнопку нажать. – mydogisbox

+0

добавлено для кнопки 97 Я предполагаю, что они могут работать для отдыха – ZoomVirus

+1

Я думаю, вы имели в виду «97». То, что вы сейчас используете, не будет компилироваться. – mydogisbox

0

Вы также можете использовать Lamdba для вызова того же метода с разными результатами. Это быстрее, если вам нужно передать определенные параметры вашей Clickmethod

foreach(var element in list) 
{ 
    //... 

    Button btn = new Button(); 
    btn.Click += (s,e) => YourClickMethod(element.Property); 
} 
Смежные вопросы