2010-11-10 3 views
0

Мне нужно создать приложение, которое может запускать код в частной функции на основе того, что пользователь выбрал с помощью combobox.Вызов частных функций из combobox

Для примера со списком имеет три значения, один, два, три

Если пользователь выбирает один, код, написанный под Private Function One() работает и наоборот

Благодаря

Фуркан

+1

-1 Это обман ** вашего собственного вопроса ** http://stackoverflow.com/questions/4059461/using-private-функция, еще более короткая и с добавлением 'Три'. – delnan

+0

Пожалуйста, объясните проблемы, которые вы испытываете, с решениями, предложенными в качестве ответов на ваш другой вопрос. Это облегчит нам адаптацию наших предложений к конкретному использованию, а не с нуля. –

+0

Ниже приведен пример, который покажет, что я хочу Public Class Form1 Protected Sub One() MsgBox ("Один называется") End Sub Protected Sub Два() MsgBox ("Two называется") End Sub Protected Sub Три() MsgBox ("Три называется") End Sub Private Sub ComboBox1_SelectedIndexChanged (ByVal отправитель Как System.Object, ByVal е Как System.EventArgs) Ручки ComboBox1.SelectedIndexChanged Вызов ComboBox1.Text End Sub End Class –

ответ

0

Посмотри мой другой post. Это отлично работает!

0

Почему вы объявляете их закрытыми?

Элементы управления формы не могут получить доступ к закрытым функциям. Вы должны объявить их защищенными.

+0

Неправильное использование. Элементы управления, размещенные в форме, могут, безусловно, обращаться к закрытым членам, объявленным в одной форме. Вам нужно будет только отметить их как защищенные, если вы пытаетесь получить доступ к членам, объявленным в классе формы, который выше иерархии наследования. –

+0

Мы говорим о формах Windows или веб-формах здесь? – Scottie

+0

Неплохо, я принимаю WinForms, потому что это казалось консенсусом для его последнего вопроса. –

1

Простым способом было бы назначить функцию для выбора комбинированного блока. Внутри вашей функции есть оператор выбора, как: (Pesduo)

Function comboSelected 

    Case "One" 
     call Onefunction() 
    Case "Two" 
     call Twofunction() 

End function 
0

Вот способ заставить его работать - если Windows Forms.

Во-первых, определить этот класс:

Public Class ComboAction 

    Public Sub New(ByVal text As String, ByVal action As Action) 
     _text = text 
     _action = action 
    End Sub 

    Private _text As String 
    Public ReadOnly Property Text() As String 
     Get 
      Return _text 
     End Get 
    End Property 

    Private _action As Action 
    Public ReadOnly Property Action() As Action 
     Get 
      Return _action 
     End Get 
    End Property 

    Public Overrides Function ToString() As String 
     Return Me.Text 
    End Function 

End Class 

Теперь создайте форму, как это:

Public Class ComboActionForm 

    Private Sub ComboActionForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Me.ComboBox1.Items.Add(New ComboAction("Show Foo", AddressOf Foo)) 
     Me.ComboBox1.Items.Add(New ComboAction("Show Bar", AddressOf Bar)) 
    End Sub 

    Private Sub Foo() 
     System.Windows.Forms.MessageBox.Show("Foo") 
    End Sub 

    Private Sub Bar() 
     System.Windows.Forms.MessageBox.Show("Bar") 
    End Sub 

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged 
     CType(Me.ComboBox1.SelectedItem, ComboAction).Action.Invoke() 
    End Sub 

End Class 

Вы можете добавить столько, сколько ComboAction классов к ComboBox, как вы хотите. Каждый из них может иметь любые Action, которые вы определяете - частные методы или иным образом. Небо это предел. :-)

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