Frage zum SaveFilename Ereignis

In der Hilfe zu L&L steht:

combit.ListLabel24 Namespace > ListLabel Klasse : SaveFilename Ereignis

Eigentlich alles klar: ein Objekt der Klasse “ListLabel” feuert das “SaveFilename” Event ab. Bloß… irgendwie klappt das nicht, oder ich bekomme es nicht zu greifen. Wahrscheinlich mache ich etwas falsch, oder in der falschen Reihenfolge. Gibt es irgendwo ein C#-Codebeispiel für die Events?

Ein direktes Beispiel dafür gibt es leider nicht.

private void DesignBTN_Click(object sender, EventArgs e)
{
    LL.SaveFilename += LL_SaveFilename;
    LL.Design();
}
private void LL_SaveFilename(object sender, SaveFilenameEventArgs e)
{
    MessageBox.Show($"Dateiname mit Pfad des gespeicherten Projekts: {e.SaveFilename}\n" +
        $"Im Designer gespeichert?:  {e.SavedInDesigner}");
}

Ist dieses Snippet hifreich?

Vergleich Sie hierzu: .NET-Hilfe SaveFilename Ereignis

Danke, es ist sehr hilfreich. Es hat mich auf ein anderes Problem aufmerksam gemacht.
Es ist so, dass ich die L&L-API in einem C#-Projekt nutze, das wiederum in einer C++/CLI-Projektmappe als DLL benutzt wird.
Der Code sieht in der C# DLL so aus:

 System.ComponentModel.IContainer components = new System.ComponentModel.Container();
 combit.ListLabel24.ListLabel LL = new combit.ListLabel24.ListLabel(this.components);

LL.SaveFilename += LL_SaveFilename;

Und da sagt der Compiler:

|Fehler|CS1061|"ListLabel" enthält keine Definition für "SaveFileName", und es wurde keine verfügbare SaveFileName-Erweiterungsmethode gefunden, die ein erstes Argument vom Typ "ListLabel" akzeptiert (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis).

(Natürlich sind der Verweis und die using-Direktive vorhanden, sonst könnte ich das LL-objekt gar nicht instantiieren)

Ihr Beispiel, Herr Boyaci, funktioniert prächtig, wenn man in reinem C#-Projekt so beginnt:

combit.ListLabel24.ListLabel LL = new combit.ListLabel24.ListLabel();

Ich verstehe das Problem noch nicht ganz, aber zumindest weiß ich jetzt, dass es gehen sollte.

Nachtrag:
Ist das C#-Projekt, das über die L&L-API mit dem Designer kommuniziert, in einer C++/CLI-Mappe eingewickelt (wrapped), so lassen sich aus irgendeinem Grund die Events nicht aus der API ansprechen.
Die Lösung: Der Eventhandler wird in der C++ - Klasse implementiert, die direkt mit dem C#-Projekt kommuniziert.
Beispiel:

designerControler->LL->SaveFilename += gcnew combit::ListLabel24::SaveFilenameHandler (this, &CSharpControl::OnSaveLLHandler);

System::Void CSharpControl::OnSaveLLHandler(System::Object^ sender, ListLabel24::SaveFilenameEventArgs^ e)
{
// Funktionalität
}
1 Like
  1. Nachtrag

Vorsicht!
Das SaveFileName-Event wird ebenfalls dann abgefeuert, wenn man den Designer mit einem Dataprovider und vorgegeben Dateinamen startet. Der Designer speichert allem Anschein nach DIREKT BEIM START das mit der Datenstruktur des Dataproviders gefüllte Template!
Lösung: beim ersten SaveFileName-Event wird nur der Dateiname zurückgeliefert, später, beim manuellen speichern wird der gesamte Pfad geliefert. So kann zwischen den beiden Arten unterscheiden.

Sie können auch e.SavedInDesigner verwenden um diese Fälle zu unterscheiden :slight_smile: . Wir lösen den Event auch schon beim Öffnen aus, so dass die Anwendung immer weiß, welches Projekt gerade geöffnet ist.