EventHandler() oder Onclick() für Dynamisch, hinzugefügtes Item



  • Hallo Freunde.

    Ich hab ein Riesiges Problem ( zumindest, ist es für mich Riesig, weil es die Ganze Entwicklung aufhält )

    Ich möchte gerne bei einem Dynamisch Erzeugtem Item in meiner Menüleiste ein Befehl geben, ebenfalls Dynamisch.

    Der Code zum erzeugen sieht so aus:

    System::IO::DirectoryInfo^ dirInfo = gcnew System::IO::DirectoryInfo( "config\\" );
    array<System::IO::FileInfo^>^files = dirInfo->GetFiles( "*" );
    if ( files != nullptr )
    {
    	System::Collections::IEnumerator^ myEnum = files->GetEnumerator();
    	while ( myEnum->MoveNext() )
    	{
    		System::IO::FileInfo^ file = safe_cast<System::IO::FileInfo^>(myEnum->Current);
    		ListViewItem^ item = gcnew ListViewItem( file->Name );
    		item->SubItems->Add( file->FullName );
    		[b]configLoad->DropDownItems->Add(file->Name);[/b]
    	}
    }
    

    Die Objekte werden so erzeugt wie ich will, leider Passiert nichts, wenn ich draufklicke. Und genau das soll sich ändern. ich will eine Aktion hinzufügen, aber wie mache ich das?

    Ich hab es mir folgendermaßen vorgestellt:

    configLoad->DropDownItems->Add(file->Name)->[b]Events(MessageBox::Show("hallo"))[/b];
    oder
    configLoad->DropDownItems->Add(file->Name)->[b]OnClick(MessageBox::Show("hallo")[/b]);
    

    Natürlich möchte ich auch mehr können, anstatt "nur" eine MessageBox zu öffnen. Bsp, einen Variablenwert ändern, oder eine Neue Form öffnen. Aber ich bin echt am Ende!

    Vielen Dank im vorraus, für die Hilfe!

    Liebe Grüße

    errox



  • Etwa so...

    System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
    {				 
    	ToolStripItem^ item = testToolStripMenuItem->DropDownItems->Add(L"test");
    	item->Click += gcnew EventHandler(this, &Form1::OnItemClick);
    }
    
    void OnItemClick(Object^ sender, EventArgs^ e)
    {
    	Debug::WriteLine(L"i was clicked");
    }
    

    Simon

    Edit:
    BTW, das gehört ins C++/CLI Forum.



  • Vielen Vielen vielen vielen lieben dank!!!

    Genau das hab ich gesucht!

    Aber eine frage hab ich noch: Mit der Funktion die du mir vorgegeben hast, öffne ich ein neues Fenster:

    void load_config(Object^ sender, EventArgs^ e)
    {
    loadconfig^ testdialog = gcnew loadconfig();
    testdialog->ShowDialog();
    }
    ....
    ....
    ....
    if ( files != nullptr )
    {
    	System::Collections::IEnumerator^ myEnum = files->GetEnumerator();
    	while ( myEnum->MoveNext() )
    	{
    		System::IO::FileInfo^ file = safe_cast<System::IO::FileInfo^>(myEnum->Current);
    		ListViewItem^ item = gcnew ListViewItem( file->Name );
    		item->SubItems->Add( file->FullName );
    		ToolStripItem^ item2 = configLoad->DropDownItems->Add(file->Name);
    		item2->Click += gcnew EventHandler(this, &Form1::load_config); 
    
    	}
    }
    

    In dem Fenster ist ein label enthalten ( name: label1 ). Wie kann ich dieses Label nach der angeklickten Konfiguration benennen?
    Außerdem ist in der geöffneten Form eine Textbox. Wie hol ich die eingabe der Textbox in die Mainform zurück? ( Die textbox soll einen Buttontext umbenennen )

    Nochmals vielen lieben dank!



  • das ist C++/CLI mit .NET -> falsches forum



  • C# und .NET



  • C++ mit .NET? C++ mit WinForms? Nennt sich C++/CLI, oder in der früheren Version Managed C++. Programmierung des .NET-Frameworks mit C++, oder Fragen zu den Erweiterungen von C++/CLI mit dem Visual Studio.


Anmelden zum Antworten