2013-03-18 2 views
2

Я разрабатываю проект в вдовах C# .net. В форме у меня есть более 8 команд управления со списком. Я загружу данные в combobox2, когда выбор combobox1 будет изменен, как показано ниже.Метод передачи как параметр другому методу

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    comboBox2.DataSource = DataTable; 
    comboBox2.DisplayMember="Name"; 
    comboBox2.ValueMember = "ID"; 
} 

Combobox3 будет загружен, когда я выберу combobox2, как показано ниже.

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    comboBox3.DataSource = DataTable; 
    comboBox3.DisplayMember = "Age"; 
    comboBox3.ValueMember = "AgeCode"; 
} 

Как я буду загружать данные в остальную часть combobox.
Проблема здесь возникает ошибка, если я не зарегистрировал метод comboBox1_SelectedIndexChanged, загружен ли comboBox2 или нет.

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

так, что я думал, чтобы исправить это простой способ, что я буду использовать метод Add(combobox, Methodname) и Remove(combobox, method) методы для добавления и удаления в comboBox_SelectedIndexChanged функцию от SelectedIndexChanged события поле со списком.

Но я не мог передать метод как параметр. Может ли кто-нибудь сказать мне, как передать метод в качестве параметра для моего требования.

+0

Посмотрите на 'Func' и' Action' –

+0

Проверьте этот ответ http://stackoverflow.com/a/2082650/182344 – RredCat

+0

Вы можете передать делегаты в качестве параметров. Но я не думаю, что это решит вашу проблему. –

ответ

3

По method параметра в Add и Remove м еню если вы имели в виду comboBox1_SelectedIndexChanged и/или comboBox2_SelectedIndexChanged затем раствор

private void Add(ListControl dropDownList, EventHandler handlerMethodName) 
{ 
    dropDownList.OnSelectedIndexChanged += handlerMethodName; 
    //some logic here 
} 

private void Remove(ListControl dropDownList, EventHandler handlerMethodName) 
{ 
    dropDownList.OnSelectedIndexChanged -= handlerMethodName; 
    //some logic here 
} 

Пожалуйста, обратите внимание: Это DropDownList в ASP.NET, ComboBox для WinForms приложений.

Для более см: MSDN - DropDownList и MSDN - ListControl.SelectedIndexChanged Event

+0

давая +1 за помощь мне .... спасибо большое lol ... – jeevacl

+0

@jeevacl PLS принять полезный ответ .. :) –

+0

@jeevacl Я ответил до Александра и он дал тот же ответ, что и я .. :(Это не честная игра. –

1

Я не уверен, что вы пытаетесь сделать. но почему бы не словарь ComboBox и методы?

так:

var dict = Dictionary<ComboBox, Action<object, EventArgs>>(); 

private void Add(ComboBox c, Action<object, EventArgs>e) { 
    dict[c] = e; 
} 

private void Remove(ComboBox c, Action<object, EventArgs> e) { 
    dict.Remove(c); 
} 

И называть ::

private void CallHandler(ComboBox c, EventArgs e) 
{ 
    dict[c](c, e); 
} 

Альтернативно

private void AddHandler(ComboBox c, Action<object, EventArgs> e) 
{ 
    c.SelectedIndexChanged += e; 
} 

private void RemoveHandler(ComboBox c, Action<object, EventArgs> e) 
{ 
    c.SelectedIndexChanged -= e; 
} 
+0

Спасибо lol .... есть довольно сложно понять словарь .. так или иначе альтернатива полезна и получила решение ... еще раз спасибо – jeevacl

1

Я тоже не 100% уверен, что тип решения вы ищете, но мое понимание ваших потребностей являются следующие методы:

public void Add(DropDownList combo, EventHandler method) 
{ 
    combo.SelectedIndexChanged += method; 
} 

public void Remove(DropDownList combo, EventHandler method) 
{ 
    combo.SelectedIndexChanged -= method; 
} 

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

public void MyMethod1(object sender, EventArgs e) 
{} 

И вы можете регистрации и отмена регистрации своих методов, с помощью вызова выше определенных методов:

DropDownList lst = new DropDownList(); 
Add(lst, MyMethod1); 
Remove(lst, MyMethod1); 

Но будьте осторожны, что это может быть не оптимальным решением вашей проблемы.

+0

Спасибо lol .... это решение для моей проблемы .... спасибо большое – jeevacl

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