So, ich habe inzwischen Teil 2 veröffentlicht. Da dieser im Vergleich zu Teil 1 wesentlich umfangreicher ist und wichtiges Basiswissen lehrt, habe ich versucht, mit einer Zusammenfassung und einem Glossar am Ende des Artikels eventuelle Fragen zu beantworten. Sollten trotzdem Fragen aufkommen, stellt diese bitte. Eventuell kann ich den Artikel dann ein wenig verbessern.
Viel Spaß,
Simon
Hi,
Wäre schön, wenn du in deinem Einleitungspost mit eins, zwei Sätzen erklären würdest, was der SharpDevelop Kern überhaupt ist, und wofür man ihn braucht.
Gruß Thomas
Hallo Thomas B!
Stand zwar eh schon da, aber ich hab es jetzt noch ein wenig erweitert 😉
vg,
Simon
Hi Simon,
wenn du die Möglichkeit hast wäre ein Tutorial über den ICSharpCode.TextEditor sehr nett. Ich kämpfe mich nämlich gerade mühsam durch die Möglichkeiten und Funktionen der Komponente und komme nur sehr langsam vorwärts.
Gruß
Burli
Hallo Simon,
wo ist die Fortsetzung? 😁
Habe mich vor ca. 3Monaten mal durch das englische Material der Autoren von SharpDeveloper gewühlt und nicht durchgeblickt.
War definitiv zu viel für den Anfang.
Dank deiner kleinen Einführung ist mir jetzt einiges klarer geworden und hoffe doch das es bald weitergeht. 👍
Gruß falangkinjau
Hallo!
Ich werde demnächst anfangen, den Teil 3 zu schreiben. Was würdest du dir denn für dem 3. Teil wünschen?
vg,
Simon
Hallo Simon,
zum Wunsch mehr nachdem ich meine ersten Eindrücke beim Spielen mit der Beispielapplikation geschildert habe.
Ich habe deine Beispielapplikation um Toolstripitems erweitert, sowohl für die Workbench(Beenden) als auch für das TestAddin(Click me).
Das hat auch wunderbar funktioniert. Wie es geht findet man ja z.B. im Sample ICSharpCode.Core.Demo.
Was mich nun irritiert ist das ich beim TestAddIn die Resourcen nicht referenzieren kann, wenn diese im TestAddinprojekt erstellt werden.
Beispiel:
So geht es, wenn ich die Einträge der Resourcen in der globalen StringResources.resources bzw. Image... also unter Applikation/Startup ablege bzw. eintrage.
aus TestAddIn.addin
<Path name="/Workbench/MainMenu/File">
<MenuItem id="TestMenuItem" class="TestAddIn.TestItem" label="${res:TestAddIn.Menu.File.ClickMe}" insertbefore="Quit" />
</Path>
<Path name="/Workbench/Toolbar">
<ToolbarItem id="TestMenuItem" tooltip="${res:TestAddIn.Tooltip.File.ClickMe}" icon="DocumentHS" class="TestAddIn.TestItem" insertafter="Quit" />
</Path>
Erstelle ich die Resourcen aber im TestAddInprojekt, dann werden diese nicht referenziert. Als Label wird dann "${res:TestAddIn.Menu.File.ClickMe}" angezeigt.
Hier muß ich wohl noch was falsch machen bwz. ich habe es noch nicht verstanden wo für was welche Resourcen abgelegt werden.
Nun zu mein Wunsch und Vorschlag für Artikel 3:
Konfiguration eines AddIn. Neuer Menüeintrag erstellen "Option..." Es geht der Konfigurationsdialog auf wie bei SharpDeveloper. Dort gibt es natürlich nur den Eintrag TestAddIn. Was wollen wir konfigurieren: z.B. Messagestring der Messagebox welche bei ClickMe angezeigt wird.
Ich denke das ist sehr heftig, würde aber gut die Interaktion demonstrieren. Darüber würde auch gezeigt werden wie ein AddIn konfiguriert wird.
Vielleicht hast du ja auch eine andere und bessere Idee.
Gruß falangkinjau
Hallo,
ich finde deine Artikel immer wieder gut und auch diesen. Ich habe nachdem ich Artikel 2 durchgelesen haben, auch ein bisschen rumgespielt mit der beigelegten Testapplikation und habe ein neues AddIn geschrieben. Doch leider musste ich festellen, dass es nicht funktioniert.
Er schmeißt ne Fehlermeldung raus und meint, er könne TestAddinB nicht in ICSharpCode.Core.ICommand umwandeln, dabei habe ich alle nach dem vorhanden AddIn gemacht.
Hier die Datei TestAddIn2.addin
<AddIn name="TestAddIn2" author="Christian">
<Runtime>
<Import assembly="TestAddIn2.dll" />
</Runtime>
<Path name="/Workbench/MainMenu/File">
<MenuItem id="TestMenuItemB"
class="TestAddInB.TestItemB"
label="Click me harder!"
insertbefore="TestMenuItem" />
</Path>
</AddIn>
Hier die Datei TestItem2:
using System;
using ICSharpCode.Core;
using System.Windows.Forms;
using System.Collections.Generic;
namespace TestAddInB
{
public class TestItemB : AbstractMenuCommand
{
public override void Run()
{
}
}
}
Hallo!
@DarkKiller: Hast du im TestAddInB eine andere Version der ICSharpCode.Core Library verwendet, als für das Hauptprogramm? Wenn nicht, poste mal deine Version der Beispielanwendung oder schick sie per E-Mail an simon.schweiger AT tnr.at
@falangkinjau: Du musst die Resourcendateien für dein AddIn registrieren, bevor sie das erste Mal verwendet werden. Am Besten machst du dass über einen Eintrag in den Pfad "/Workspace/Autostart/".
<Path name="/Workspace/Autostart">
<Class class="TestAddIn.ResourceRegistrar" />
</Path>
Alle Klassen die dort eingetragen werden müssen von ICommand abgeleitet sein und werden vor dem Start der Anwendung ausgeführt. In der oben eingetragenen Klasse registrieren wir nun die Resourcen. Der erste Parameter ist eine Art ID und der zweite die Assembly, in der die Resourcen als EmbeddedResource eingebunden sind.
using System;
using System.Collections.Generic;
using ICSharpCode.Core;
namespace TestAddIn
{
public class ResourceRegistrar : ICommand
{
private object owner;
public event EventHandler OwnerChanged;
public object Owner
{
get
{
return owner;
}
set
{
owner = value;
if (OwnerChanged != null)
OwnerChanged (this, EventArgs.Empty);
}
}
public void Run()
{
ResourceService.RegisterStrings("TestAddIn.StringResources", typeof(ResourceRegistrar).Assembly);
}
#endregion
}
}
Der Code ist ungetestet, sollte aber hoffentlich funktionieren. Im nächsten Artikel werde ich auf jeden Fall das Speichern von Einstellungen behandeln.
vg,
Simon
Hallo
Ich hab das Problem von DarkKiller gelöst bekommen. Es wichtig, dass das AddIn keine aktuellere Version der ICSharp.Code Library referenziert, als das Hauptprogramm! Bei DarkKillers TestAddIn wurde die Version 2.1.2199 referenziert und im Hauptprogramm 2.1.2017
vg,
Simon
Hallo Simon,
nur noch
public event EventHandler OwnerChanged;
hinzufügen und es funktioniert tatellos.
Danke und Gruß falangkinjau
Ich könnte mir auch gut ein Tutorial über die Einbindung eigener Pads vorstellen. Und mit den globalen Einstellungen finde ich gut.
Gibt es eigentlich schon ein Termin für den 3. Teil?
Krischan100