myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Knowledge Base (https://www.mycsharp.de/wbb2/board.php?boardid=68)
-- Artikel (https://www.mycsharp.de/wbb2/board.php?boardid=69)
--- [Artikelserie] SharpDevelop Kern in eigenen Anwendungen verwenden (https://www.mycsharp.de/wbb2/thread.php?threadid=29417)


Geschrieben von SimonKnight6600 am 11.12.2006 um 15:15:
  [Artikelserie] SharpDevelop Kern in eigenen Anwendungen verwenden
Den SharpDevelop Kern in eigenen Anwendungen einsetzen

Artikelserie


Zielgruppe: Einsteiger und Fortgeschrittene
Aktueller Artikel: Teil 2 - Erste Beispielanwendung
Vorraussetzungen:  SharpDevelop 2.1 Beta 2 oder höher (für den Einstieg empfohlen, da es dafür eine Projektvorlage gibt)

In dieser Artikelserie geht es um das Entwickeln von Anwendungen auf Basis des SharpDevelop Kerns. Dieser bietet ein mächtiges, einfach zu einbauendes AddIn System sowie weitere nützliche Features, die die Erweiterbarkeit und Flexibilität der eigenen Anwendung erheblich steigern. Diese werden in Teil 1 der Serie beschrieben werden. Die einzelnen Teile der Serie bauen auf einander auf.

  Teil 1
...befasst sich mit den Grundlagen und der Einrichtung einer entsprechenden Projektvorlage für SharpDevelop.

 Teil 2
...befasst sich mit einer ersten Beispielanwendung. Viele elementare Aspekte werden hier erklärt!

Teil 3 (in Planung)
...wird sich mit einem weiterführenden Thema beschäftigen. Wahrscheinlich wird Lokalisierung und das Speichern von Einstellungen zum Zug kommen. Für Vorschläge bin ich natürlich immer offen Augenzwinkern .

Ich bin für jegliches Feedback dankbar. Der aktuelle Teil 2 stellt eine echte Informationsbombe dar, daher scheut euch nicht zu fragen wenn ihr am Ende nicht mehr durchblickt.

Eine guter Test, ob man den Artikel halbwegs verstanden hat ist, die Applikation um einen eigenen Menübefehl zu erweitern.

Viel Spaß beim Lesen smile


Geschrieben von SimonKnight6600 am 12.12.2006 um 15:50:
 
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


Geschrieben von Thomas B am 13.12.2006 um 10:18:
 
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


Geschrieben von SimonKnight6600 am 13.12.2006 um 14:46:
 
Hallo Thomas B!

Stand zwar eh schon da, aber ich hab es jetzt noch ein wenig erweitert Augenzwinkern

vg,
Simon


Geschrieben von burli am 30.12.2006 um 00:53:
 
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


Geschrieben von falangkinjau am 03.01.2007 um 01:27:
 
Hallo Simon,

wo ist die Fortsetzung? großes Grinsen

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. Daumen hoch


Gruß falangkinjau


Geschrieben von SimonKnight6600 am 03.01.2007 um 09:26:
 
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


Geschrieben von falangkinjau am 04.01.2007 um 13:10:
 
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

C#-Code:
<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


Geschrieben von DarkKiller am 04.01.2007 um 20:52:
 
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

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
<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:

C#-Code:
using System;
using ICSharpCode.Core;
using System.Windows.Forms;
using System.Collections.Generic;

namespace TestAddInB
{
    public class TestItemB : AbstractMenuCommand
    {
        public override void Run()
        {

        }
    }
}


Geschrieben von SimonKnight6600 am 05.01.2007 um 22:22:
 
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/".

Code:
1:
2:
3:
  <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.

C#-Code:
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


Geschrieben von SimonKnight6600 am 06.01.2007 um 12:28:
 
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


Geschrieben von falangkinjau am 06.01.2007 um 18:00:
 
Hallo Simon,

nur noch

C#-Code:
public event EventHandler OwnerChanged;

hinzufügen und es funktioniert tatellos.

Danke und Gruß falangkinjau


Geschrieben von krischan100 am 13.02.2007 um 14:05:
 
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


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 24.02.2020 11:44