Laden...

Forenbeiträge von maYer Ingesamt 49 Beiträge

07.09.2017 - 10:11 Uhr

*lach*

Naja, wenn man es von der Seite her aufdröselt, dann wirkt es in der Tat komisch.
Ich hatte gehofft, dass es eine andere Möglichkeit gibt ein Paste zu emulieren als das SendKeys, also eine "gefrickelte 32API-Lösung" 😉

Wenn dem nicht so ist, begnüge ich mich damit.

Schönen Tag noch,
maYer

06.09.2017 - 18:11 Uhr

Hallo,

ich habe mir ein Programm geschrieben, mit dem ich alles, was in die Zwischenablage geschrieben wird, mittels der Win32Api-Funktion SetClipboardViewer tracke und intern verwalte.

Wenn ich die Werte anschließend in eine Applikation schreiben möchte, öffne ich ein Kontextmenü über eine Tastenkombination und wähle den entsprechenden Wert aus.

Anschließend soll der String in die andere Applikation eingetragen werden. Das realisiere ich darüber, dass ich mir im Vorfeld das Handle der Applikation merke, und diese dann vor dem Paste aktiviere. Anschließend mache ich ein schnödes

SendKeys.Send("^{v}");

Gibt es für das Paste eine elegantere Lösung? Der Umgang über SendKeys fühlt sich in meinen Augen als gefrickelt an.

Danke für eure Ideen.

Gruß,
maYer

08.08.2017 - 20:28 Uhr

Hallo zusammen,

ich war schon lange nicht mehr hier aktiv, da ich nicht mehr aktiv programmiere.
In meiner aktuellen Position möchte ich de Office Skripte ablösen und suche eine Möglichkeit herauszufinden, was für Makros in den 40 Office-Dokumenten überhaupt hinterlegt sind.

Kennt hier zufällig irgend jemad eine Möglichkeit diese auszlesen ohne jede Datei anzufassen?
Die verschiedenen Passwörter der unterschiedlichen Dateien liegen mir vor.

Vielen Dank für eure Antworten,

maYer

22.07.2011 - 10:54 Uhr

Vielen Dank.

Manche Dinge können so einfach sein 😉

Grüße,
maYer

22.07.2011 - 09:55 Uhr

verwendetes Datenbanksystem: MSSQL

Hi,
ich möchte gerne ein Programm schreiben, welches einen Dump aus der MSSQL Datenbank ziehen und einspielen kann.

Also von der Funktionalität her ein Äquivalent zu "Tasks/Sichern" und "Tasks/Wiederherstellen/Datenbank".

Jeweils in Datei und aus Datei.
Gibt es da Möglichkeiten?


Warum möchte ich das machen?
Ich bekomme vom Kunden eine Backup-Datei und möchte diese schnell über ein eigenes Tool einspielen können.

Ich möchte einen test machen ohne die bestehende Umgebung zu gefährden und möchte mit wenig manuellem Aufwand eine Kopie der Umgebung erstellen.


Es würde mir weiterhelfen, wenn mir jemand einen Ansatzpunkt für eigene Recherche geben würde. Ich bin nicht zu Faul ich habe nur keine Anhaltspunkte, nach denen ich Suchen soll.

Vielen Dank für Eure Tips.
maYer

09.03.2011 - 16:13 Uhr

Ich finde Forum auch besser.

Ich denke, dass ihr auch Veranstaltungen habt, in denen es Stammgäste gibt. Diese können sich dann im Forum gut verabreden oder auch kennenlernen.

Sowas kommt finde ich besser an.

Grüße,
maYer

08.03.2011 - 08:30 Uhr

Naja, das passt schon, zwischendurch kann ich noch Rauchen gehen. 😃

Tagesbedarf! Kann aber auch variieren. Mal 3,5 mal 2 Flaschen.

Hab noch eine vollautomaten vergessen, der sogar Milch aufschäumen kann. Die Milch muss allerdings jeder selber mitbringen.

Grüße,
maYer

07.03.2011 - 14:46 Uhr

Bei uns gibt es Filterkaffe (Jakobs) und Kaffeautomatenkaffe (ebenfalls Jakobs) je nach Wunsch und Küche gratis.
Zusätzlich gibt es Wasser (Gerolsteiner mit viel und wenig Kohlensäure) frei Haus. Tee muss sich jeder selber mitbringen.

Mein Bedarf liegt bei ca. 6 Tassen Kaffe und 3 Flaschen Wasser mit wenig Kohlensäure.

Grüße,
maYer

07.03.2011 - 09:43 Uhr

Hi Tom,
mir ist gerade aufgefallen, dass eventuell eine Zeile abgeschnitten ist.
Ich habe mal nen Screenshot angehängt.

Grüße,
David

08.02.2011 - 15:39 Uhr

Hi,
ich arbeite immer mit dem

System.Data.IDbConnection

Interface.
Mit dem kann ich alles allgemeine machen und bei Bedarf kann ich es in die konkrete Klasse casten.

<edit>
Hier die Methode, die eine korrekte Connection aufbaut und das Interface zurück gibt:

private IDbConnection GetProviderConnection()
        {
            IDbConnection retVal = null;
            switch (_Provider)
            {
                case Provider.SQLSERVER:
                    retVal = new System.Data.SqlClient.SqlConnection(_ConnectionString);
                    break;
                case Provider.OLEDB:
                    retVal = new System.Data.OleDb.OleDbConnection(_ConnectionString);
                    break;
                case Provider.ODBC:
                    retVal = new System.Data.Odbc.OdbcConnection(_ConnectionString);
                    break;
                default:
                    break;
            }
            return retVal;

        }

</edit>

Grüße,
maYer

26.01.2011 - 11:27 Uhr

Hi,

wir haben nicht viel Code verschlüsselt.

An der einen oder anderen Stelle ist es von Interesse und diese Stellen verschlüsseln wir punktuell.

Grüße,
maYer

19.01.2011 - 11:51 Uhr

Abfragen in anderer Form als "select * from {tablename}" funktionieren noch nicht, der SQL-Parser ist aber in Arbeit.

öhm,
ich habe ein korrektes Ergebnis bekommen, als ich ein Snippet mit zuhilfenahme von cte gebaut habe.

Gibt es eien Unterschied zwischen Snippets und Abfragen?

17.01.2011 - 11:42 Uhr

#Bug 😉

Der Versuch das Kontextmenü auf dem Hauptknoten MSSQL zu öffnen wirft eine unbehandelte Exception. Im Protokoll wird auch nichts hinterlegt.

Ähm und kann es sein, dass erstellte Snippets nicht gespeichert werden? Das wäre sehr schade und macht das Tool zu diesem Zeitpunkt leider fast unbrauchbar...

<edit>
Okay, gespeichert wird.
Aber nur, wenn das Programm nicht mit einer unbehandelten Exception beendet wird 😉
</edit>

Grüße,
maYer

17.01.2011 - 11:23 Uhr

Hi,
ich baue ja kein eigenes Snippet.

Ich öffne die Verbindung zur DB (MS SQL), gehe auf eine Tabelle öffne das Kontextmenü und klicke Öffnen an.

Als Benutzer gehe ich dabei eigentlich davon aus, dass das Programm erkennt, ob das Schema der Tabelle mein gesetztes ist oder nicht.

Um sicher zu gehen würde ich, wenn ich das Tool programmiere, die Tabelle immer mit dem Schema aufrufen 😃

Ist kein krittischer Fehler, da ich das Schema anschließend im Sql-String selber vor die Tabelle schreiben kann und der Inhalt präsentiert wird.

Grüße,
maYer

17.01.2011 - 08:42 Uhr

Hi,
das schaut ja nett aus.

Wenn nicht das Standardshema genutzt wird, bekommt man bei jeder initialen Abfrage (öffnen) eine Fehlermeldung, dass das Objekt nicht gefunden wird.

Erst, wenn das Shema vor die Tabelle geschrieben wird, funktioniert die Abfrage.

Grüße,

maYer

21.12.2010 - 17:00 Uhr

Hi,
ich habe ein PlugIn, das von einer Fremdsoftware aufgerufen wird.

Eine Methode dieses PlugIns wird innerhalb eines MTA-Threads der Fremdapplikation aufgerufen.

Innerhalb dieser Methode möchte ich nun Dinge tun, die einen STA-Thread voraussetzen (Clipboard, Drag an Drop u.ä.).

Welche Möglichkeiten habe ich da?

Das einzige, das mit einfällt ist, einen eigenen STA - Thread innerhalb der Abarbeitung zu erzeugen und damit arbeiten.

Funktioniert das denn auch, wenn ich innerhalb meiner Abarbeitung Formulare aufbaue und anzeige?
grmml...

Danke für Hinnweise und Anregungen,

maYer

17.12.2010 - 13:07 Uhr

Hab es selber herausgefunden.
Ich habe die Kommerzielle Edition benutzt.

Die Private kann auch A0...

Grummel...

17.12.2010 - 13:00 Uhr

Hallo,
das hat wenig mit C# aber viel mit einer Entwicklungsumgebung zu tun 😃

Ich habe für die Modellierung meines DB-Shemas das MSSQL Server Menagement Studio genutzt.
Nun möchte ich das Ding ausplotten...

Der Plotter steht leider nicht bei mir und ich habe auch so keinen direkten Zugriff darauf.

Ich muss also das Shema in eine Datei 'drucken' und dieses neutrale Format zum plotten weitergeben. Das Blattformat soll A0 sein.

Kennt jemand einen Drucker/Converter etc. der Frei ist und das unterstützt?
http://de.pdf24.org/pdf-creator-features.html

Habe ich ausprobiert und der stellt unter den Betriebssystemen Win7 und Server2008 nur eine Papiergröße bis A3 zur Verfügung.

Danke für die Info, falls sie jemand hat.

maYer

14.12.2010 - 09:14 Uhr

Hi FZelle,
OR/Mapper kommt leider nicht in Frage.
Es hat viele Gründe von denen einige historisch gewachsen sind und gegen die wir nicht ankommen.

Zusammenhängende Operationen ist auch so ein Thema.
Ich werde im Nachhinein eine Möglichkeit schaffen, dass von Außen eine Verbindung in der unteren Zugriffsschicht geöffnet und geschlossen werden kann. Aber erst möchte ich sehen, ob es nicht auch so klappt und wie die zeitlichen Unterschiede sind.

Grüße,
maYer

14.12.2010 - 09:04 Uhr

Stored Procedures sind schön. Das gebe ich zu. Sie sind schnell. Auch das ist korrekt.
Aber!! Wir haben unsere komplette BL in C# und dadurch in SVN gesichert und Versioniert. Leider habe ich noch keine "komfortabele" Lösung gefunden dies mit SP´s zu machen. Alles was ich gefunden habe ich Fummellösungen, bei denen schnell mal ein Fehler auftreten kann...

Deswegen bleibe ich bei der oben beschriebenen Lösung.

Grüße und vielen Dank noch einmal für die immer wieder erfrischenden Antworten,
maYer

13.12.2010 - 15:28 Uhr

Hi,
danke für die Antworten.
Über die transactionscope habe ich nun ausreichend Informationen gefunden.
http://msdn.microsoft.com/de-de/library/ms172152%28VS.90%29.aspx
Das ist ein richtig schönes Werkzeug an dem ich noch viel Freude haben werde.

Leider habe ich aber noch keine Informationen über den Connectionpool gefunden.

Ich werde es nun so machen, dass ich alle SQL-Statements an einer Stelle kapsel. Diese Klasse kennt den ConnectionString und holt für jedes Statement eine Verbindung aus dem Pool.

Wenn es zu langsam wird, dann muss ich mir noch etwas anderes einfallen lassen aber im ersten Schritt bin ich damit bestens bedient.

Grüße,
maYer

13.12.2010 - 14:04 Uhr

verwendetes Datenbanksystem: verschiedene

Hallo zusammen,

Ich arbeite gerade an einer db-Zugriffsschicht. Diese wird von mehreren Applikationen genutzt und soll die Operationen auf der DB durchführen.

Alle größeren Operationen werden in kleinere atomare Operationen zersplittet, die einzeln ausgeführt werden.

Jetzt lese ich überall, dass man immer die SQL-Connection mit using benutzen soll und außen ein Transaction Scope drum herum basteln soll. Dafür habe ich zwei Fragen welche ich so gestellt leider weder hier im Forum noch wo anders gefunden habe. Wenn sie doch irgendwo stehen entschuldigt meine Fragen hier.

  1. Wie arbeitet TransactionScope wenn es verschachtelt wird?
  2. Soll man wirklich für jedes Select, Insert, Update eine neue Verbindung öffnen? Kann das nicht Nachteile in der Performanze haben?

Grüße,
maYer

02.12.2010 - 14:16 Uhr

Hi Xynratron,
das war ein Thread von mir, über den ich auf die Idee gekommen bin genauer nachzuforschen. 😃

Ich wollte allerdings die Frage mit den spezielleren Anforderungen nicht in den alten Thread schreiben, da ich damit nicht mher auf das eigentliche Thema eingegangen wäre.

Grüße,
maYer

02.12.2010 - 13:57 Uhr

Hi,
danke für die Antwort.

Der Inhalt der Dokumente ist für mich uninteressant.

Im Moment bin ich bei Graph-Datenbanken gelandet und versuche mich in die Funktionalitäten von DB von Sones einzulesen.

Eine Möglichkeit aus C# heraus zu arbeiten muss natürlich auch gegeben sein 😃

<edit>
Ach ja, und es gibt noch eine Bedingung. Der Preis 😃
Es handelt sich um keine InHouse-Lösung sondern eine, die an einen/mehrere Kunden geht und die DB muss dort ebenfalls installiert werden. Bedeutet, dass die DB nicht so teuer sein darf wie die oben erwähnte Lösung von Sones ... Schade eigentlich.
</edit>

Grüße,
maYer

02.12.2010 - 13:22 Uhr

verwendetes Datenbanksystem: Bislang MSSQL

Hallo zusammen,
Meine Frage richtet sich nicht danach, ob es besser ist MSSQL oder SQLite zu benutzen. Ich möchte mich einen Schritt früher beginnen.

Rellational oder nicht.
Wenn etwas anderes in Betracht kommt, dann werde ich mich damit auseinandersetzen.

Die Frage, die dabei für meine Entscheidungen immer an erster Stelle steht ist, was soll gespeichert werden und wie wird darauf zugegriffen. Ich denke, damit liege ich richtig.

Es sollen in erster Linie Dokumente gespeichert werden. Diese Dokumente stehen in einem Hierarchischen Zusammenhang wobei jedes Dokument mehrere Väter und mehrere Kinder haben kann. Zusätzlich werden diese Dokumente Versioniert.

Das ist es im Kern.

Die Details sind dann, dass den Dokumenten noch einzelne Eigenschaften gegeben werden können, die wieder in hierarchischen Strukturen angeordnet sind.

Nun zu den Anforderungen.
Es soll möglich sein mit einem Serverzugriff:1.einzelne Dokumente zu finden. (können alle) 1.einen ganzen Strang(Baum) von Dokumenten zu finden. (Mit SQL realisierbar) 1.einen ganzen Strang(Baum) von Dokumenten in der neuesten Version zu finden. (Mit SQL realisierbar)

Ist das auch in anderen Systemen möglich? Wenn ja, in welchen? Hat jemand diesbezüglich Erfahrungen?

Danke für Antworten,

maYer

30.11.2010 - 15:03 Uhr

Hi,

danke für die Antworten. Mit Normalisierung hat das nur bedingt etwas zu tun.

Breit bedeutet, dass ich für alle Informationen, die ein Dokument haben kann eine Spalte in der Tabelle erstelle.
1.ID 1.Bezeichnung 1.Bez_En 1.Bez_Sp 1.Bez_Kor 1.Seitenanzahl 1.Buchstabenanzahl 1.HintergrundFarbe 1.etc. (100 weitere)

Oder ich baue eine Tabelle mit den Spalten
1.ID 1.SpaltenName 1.SpaltenWert

Für alle der oben angegeben Inhalte füge ich dann eine Zeile in diese Tabelle ein.

Bei ca. 500.000 Dokumenten habe ich bei der oberen Variante eine sehr Breite Tabelle mit 500.000 Datensätzen.

In dem unterne Beispiel habe ich eine schmale Tabelle mit 50.000.000 Datensätzen.

Was würdet ihr bevorzugen?

Grüße,
maYer

30.11.2010 - 14:23 Uhr

verwendetes Datenbanksystem: MS SQL

Hallo,

Gibt es eine generellte Regel, ob es besser ist breite oder lange Tabellen zu benutzen?

Beispiel:
Ich habe möchte Daten hinterlegen, zu denen es bis zu 150 Stammdatenwerte gibt. Dabei sind 20 Werte mit Inhalten für die Businessbehandlung interessant und die restlichen sind beschreibende Werte, die in 5% der Businessprozesse von Interesse sind.

Welches Modell ist nun das richtige?
*Eine Tabelle mit allen Spalten *Eine Tabelle mit den Hauptspalten und eine mit den restlichen *Eine Tabelle mit den Hauptspalten und eine Tabelle mit den Spalten Name und Wert, die sehr lang aber nicht breit ist.

Möglichtkeit 1 bestimmt nicht. 😃
Möglichtkeit 2 hat gegenüber Möglichtkeit 3 den Vorteil, dass hier bei einem Insert bzw. einem Update nur eine Zeile verändert werden muss. Allerdings holen wir beim Select sehr breite Ergebniss-Zeilen.

Unser Datenzugriffsmuster ist ungefähr *75% Zugriff (Select) *20% Einfügen (Insert) *5% Ändern (Update)

Danke für Eure Meinungen und

viele Grüße,
maYer

30.11.2010 - 14:11 Uhr

verwendetes Datenbanksystem: MS SQL

Hallo,
ich habe leider noch keine Erfahrungen mit Linq gemacht, deswegen stelle ich hier die Frage, was ihr mir empfehlt.

Ich möchte eine Anwendung für die Datenhaltung von Dokumenten schreiben. Da ich eine sehr große Anzahl von Dokumenten erwarte, möchte ich es variabel halten, in welche Tabellen die unterscheidlichen Dokumente gespeichert werden.

Rechnungen sollen in die Eine Tabelle und z.B. Angebote in eine andere. Über eine dritte Tabelle verden die Beziehungen dargestellt.

Wenn der Kunde nun auch noch den Schriftverkehr hinterlegen möchte, dann soll er sich eine neue Tabelle definieren können, in die die Daten gespeichert werden.

Bin ich mit Linq immer an ein statisches Datenmodell gebunden?

Ich habe mich ein bisschen in Dynamik Linq eingelesen. Hierbei ist mir aufgefallen, dass es mir mehr Nachteile als Vorteile bringt, da ich gerade das Syntax Highlightning als Vorteil sehe, der mit damit genommen ist. Der Grund für Dynamik Linq war aber, so wie ich es beim ersten drüberschauen festgestellt habe, dass man dynamische spalten nutzen kann. Ist es für dynamische Tabellen ebenfalls notwendig?

Wenn, dann muss ich wieder den konventionellen Weg gehen und die Daten über plain SQL auslesen.

Danke für Eure Antworten.

maYer

06.09.2010 - 16:21 Uhr

Hi Khalid,

der Arbeitsablauf ist so, dass die Administratoren das System für die Eingaben definieren.
Bei den Eingaben handelt es sich um Werte für Verknüpfungen von unterschiedlichen Themenbereichen.
Die Eigenschaften, die in Thema 1 hinterlegt sind haben folgende Typen:
E1 Pflichtfeld, Datum
E2 Pflichtfeld, VarChar
E3 kein Pflichtfeld, Min 50, Max 200, nummerisch
E4 kein Pflichtfeld, nummerisch

Irgendwann stellt der Admin fest, E4 ist doch ein alphanummerischer Wert.
Was nun?

Muss ich nun durch die komplette DB gehen und alle Werte aus der Num-Spalte in die Char-Spalte umtragen? Das möchte ich eigentlich nicht so gerne machen.

Grüße,
maYer

06.09.2010 - 15:48 Uhr

Hi,
erstmal danke für die Antwort. Ich schließe daraus, dass es prinzipiell geht?
Das freut mich! Wie denn? 😃

Mit mehreren Spalten zu arbeiten habe ich mir auch schon überlegt.

Leider geht es nicht so einfach, da dann im Vorfeld der Datentyp definiert und von da an nicht mehr geändert werden darf. Das möchte ich eigentlich nicht.

Grüße

06.09.2010 - 13:59 Uhr

Hallo zusammen,

ich habe eine Tabelle, in der es die Spalte Wert gibt.
Die Spalte Wert ist als Vchar(MAX) angelegt.
Als Inhalt kann ein nummerischer, eine alphanummerischer oder ein Datumswert hinterlegt werden.

Wie setze ich nun folgende Selects ab?
a: größer 01.01.2010 und kleiner 20.03.2010.
Gewünschtes Ergebnis: alle Zeilen mit dem Wert 02.01.2010 bis 19.03.2010.

b: kleiner 2000
Gewünsches Ergebnis: alle Zeilen mit einem nummerischen Wert bis 1999.

c: hat acd im Text enthalten
Gewünschtes Ergebnis: alle Zeilen mit einem alphanummerischen Wert mit dem Inhalt acd.

Ich lege mir hierbei irgendwie die Karten ...
Danke für Eure Hilfen.

Grüße,
maYer

verwendetes Datenbanksystem: MSSQL

22.07.2010 - 13:44 Uhr

Hallo herbivore,

so viel zum Bekannten 😃

Gibt es Lösungen, wie man es kontrollieren kann in welcher Reihenfolge die Eventhandler abgearbeitet werden?

Trotzdem danke für die Antwort .

Grüße,
maYer

22.07.2010 - 13:32 Uhr

Hi,
ich habe zwei dlls, die dynamisch geladen werden.
Im Konstruktor der zu ladenden Klasse abbonieren diese beiden DLL´s das selbe Event.

Wenn die Hauptaplikation nun das Event wirft, reagieren beide DLL´s und arbeiten ihre Aufgaben ab.
Soweit gewünscht und Wunderbar.

Nun komme ich an die Stelle, an der ich bestimmen möchte, welche der beiden DLL´s zuerst auf das Event reagieren soll. Gibt es da irgendeine Möglichkeit?

Ganz naiv angedacht:
Zum Beispiel beim Abbonieren einen Index hinzufügen oder so.

Grüße,
maYer

16.07.2009 - 11:30 Uhr

So wie ich den Blog-Eintrag aus dem Kommentar verstehe haben die Module alle die Selbe Version.

Ich werde es aber noch einmal vertiefen und mir genauer anschauen.

Danke für die Ansätze!

16.07.2009 - 11:11 Uhr

Hi,
ich hätte gerne die Möglichkeit Informationen der Assemblyinfo für ein komplettes Projekt in einer Datei zu verwalten.

Mir fehlt da leider der Ansatz, wo ich mich darüber Informieren könnte. Im MSDN hab ich so auf Anhieb nichts gefunden.

Danke für Eure Infos,
maYer

11.11.2008 - 10:11 Uhr

Und wenn du den MemoryStream, den du bekommst auf die "traditionelle" Art deserialisierst ?

Wie?
Was muß ich dafür machen?

Dafür fehlt mir der Ansatz, da Serialisierung für mich neu ist.

Grüße,
maYer

11.11.2008 - 10:09 Uhr

so 🙂

Die Klasse MeinclipboardItem wirft in der Methode ToString() alle Elemente mit einem # voneinander getrennt als Zeichenkette aus und ich habe einen neuen Konstruktor eingepflegt, der den String in seine Einzelteile zerlegt.

Methoden um das Clipboard zu füllen und zu lesen:


        /// <summary>
        /// Methode, um die Objekte, die für das Format in der Zwischenablage liegen zu lesen.
        /// </summary>
        /// <param name="Format">Das Format, für welches die Objekte ausgelesen werden sollen.</param>
        /// <returns>gibt die liste der Objekte wieder.</returns>
        public static List<MeinClipboardItem> ReadClipboard(FormatEnum Format)
        {
            List<MeinClipboardItem> retList = new List<MeinClipboardItem>();

            List<string> items = Clipboard.GetData(Format.ToString()) as List<string>;
            
            if (items != null)
            {
                foreach (string item in items)
                {
                    retList.Add(new MeinClipboardItem(item));
                }
                
            }
            return retList;
        }

        /// <summary>
        /// Methode, um ein neues Objekt in das Clipboard hinzu zu fügen.
        /// </summary>
        /// <param name="Item">Das Objekt, welches hinzu geefügt werden soll.</param>
        /// <param name="Format">Das Format, für welches das Objekte eingepflegt werden soll.</param>
        public static void Add(MeinClipboardItem Item, FormatEnum Format)
        {
            List<string> list = Clipboard.GetData(Format.ToString()) as List<string>;

            string newItem = Item.ToString();
            
            if (list == null)
            {
                Clear();
                list = new List<string>();
            }

            list.Add(newItem);
            
            Clipboard.SetData(Format.ToString(), list);

            OnChangeCount(list.Count, Format);
        }

Im ClipBoardItem enthaltene Methoden:


        public MeinClipboardItem(string clipBoardText)
        {

            string[] texte = clipBoardText.Split("#".ToCharArray());
            if (texte.Length != 4)
                return;

            _key = texte.GetValue(0).ToString();
            _parent = texte.GetValue(1).ToString();
            _type = texte.GetValue(2).ToString();
            _state = texte.GetValue(3).ToString();

        }

        override public string ToString()
        {
            return _key.ToString() + "#" + _parent.ToString() + "#" + _type.ToString() + "#" + _state.ToString();
        }

Danke noch einmal für Eure Hilfen und angenehme Tage noch.

Grüße,
maYer

11.11.2008 - 08:45 Uhr

Also ich löse es jetzt simpel und unelegant. Wenn ich irgendwann einmal Lust habe beschäftige ich mich erneut mit der Geschichte aber im Moment habe ich da keine Lust mehr zu (OK, Zeit spielt auch eine rolle 🙂 ).

Die Klasse MeinclipboardItem wirft in der Methode ToString() alle Elemente mit einem # voneinander getrennt als Zeichenkette aus und ich habe einen neuen Konstruktor eingepflegt, der den String in seine Einzelteile zerlegt.

Damit kann ich das Clipboard nutzen, da List<string> wieder so aus dem Clipboard kommt, wie ich es hineinstopfe.

Danke noch einmal für Eure Hilfen und angenehme Tage noch.

Grüße,
maYer

11.11.2008 - 08:32 Uhr

hehe,
ich glaube ich ahne wo dein Verständnisproblem ist. 🙂
Also, im oberen Bild habe ich die Vorschau auf der Liste geöffnet. Die Liste ist das Objekt, das ich in das Clipboard einpflegen möchte. Hier füge ich in beiden Fällen identische Elemente in eine identisch definierte Liste. Inzwischen habe ich das Testprogramm auch in die Umgebung der Main Applikation integriert so dass beide Testfälle die selbe Methode und die selben Klassen nutzen. trotzdem habe ich eine unterschiedliche Ansichten der Liste, die in das clipboard eingepflegt werden sollen.

Nun zum zweiten Bild. Hier hole ich (zu Testzwecken) direkt nach dem SetData die Daten mit dem GetData wieder aus dem Clipboard heraus und packe sie ein ein 'object'. das mache ich, weil das 'object' jede art von Daten aufnehmen kann. Wenn ich mit as einen Softcast mache, bekomme ich nur in dem einen Fall, wo die Daten wohldefiniert zurück kommen mein Ergebnis. Im anderen Fall bekomme ich null zurück.

Ich hoffe, ich konnte dir mit dieser Ausführung mein Problem näher bringen.

Grüße,
maYer

10.11.2008 - 20:49 Uhr

Um nur die eigenen Elemente aus dem Clipboard zu holen kann man ein String als "Format" angeben. Ich gebe für Kopieren und Ausschneiden unterschliche Werte rein, die ich in einem Enum hinterlegt habe um Verschreiber zu vermeiden.

Das hat aber keinen Einfluss auf das, was mich eigentlich interessiert 🙂

Grüße,
maYer

10.11.2008 - 18:15 Uhr

Zu dem Bild in einem der vorangegangenen Posts stelle ich noch einmal ein Bild rein, wie die Daten aus dem Clipboard wieder raus kommen.
Leider sind sie spiegelverkehrt zu betrachten. Also so wie die Daten in dem vorangegangenen Post links hineingeschoben werden, kommen sie hier rechts wieder raus und umgekehrt.

Ich finde das Verhalten an dieser Stelle höchst unzuverlässig. Vielleicht hat ja noch jemand ne Idee ...

Danke an alle für ihre Mühen.

10.11.2008 - 16:39 Uhr

Hi little Squirrel,

In der Benutzung selbst gibt es aber keinerlei unterschiede.

Dann verstehe ich nicht, dass ich die Liste aus dem ersten Fall ins clipboard einpflegen kann (mit dem erwarteten Ergebnis der Abfrage).
Im zweiten Fall ist im Clipboard ein "System.IO.MemoryStream" hinterlegt, den ich nicht wieder in den entsprechenden Typ umwandeln kann.

Grüße,
maYer

10.11.2008 - 16:34 Uhr

hm... Irgendwie versteh ich Dein Problem nicht ganz...

Mein Problem liegt darin, dass meine serialisierte Klasse im einen Programmkontext nicht als serialisierte klasse anerkannt wird und ich habe keine Ahnung weswegen.

Zumindest ist das meine Vermutung.

Wenn du dir den linken Teil des Bildes anschaust, dann siehst du, dass dort eine andere Ansicht der Liste.
Diesen Aufbau erreiche in in meiner Mainapplikation auch, wenn ich die Lsite mit normalen Strings aufbaue.
Mein Problem ist, dass ich nicht weiß, weswegen das so ist. Da ich nicht die serialisierbare Liste in das Clipboard einpflegen kann.

Grüße und danke für deine Mühe,
David

10.11.2008 - 16:17 Uhr

Hi,

Es geht darum, dass eine Liste, wenn ich sie aus einem unterschiedlichem Context aufbaue, zwei verschiedene Gesichter hat.
Ich gebe als Typ T in beiden Fällen eine Serialisierbare Klasse an und in dem einen Fall habe ich den Eindruck, als wenn VS es ignoriert und so tut, als wenn es eine ganz gewöhnliche Datenklasse ist, die ich als Typ angebe.

Hat jemand eine Idee, weswegen das ist?

Also gibt es Regeln, anhand derer entschieden wird, wie das Erscheinungsbild der List<T> ist?

Grüße,
maYer

10.11.2008 - 15:01 Uhr

Beim durchsteppen der Methoden ist mir eine Sache aufgefallen.

Ich habe unten mal einen Screenshot mit der OnMouseOver Überwachung angefügt.

Auf der linken Seite sieht man die Liste, wie sie in das clipboard eingepflegt und auch wieder ausgelesen werden kann.

Auf der rechten Seite ist die Liste, die hinterher als binarieStream im Clipboard vorliegt.

Der einzige Unterschied, den ich feststellen kann ist, dass ich im zweiten Fall in einer statischen Klasse bin. Die Methode ist aber in beiden Fällen statisch.

Habt Ihr eine Idee?

Grüße, maYer

10.11.2008 - 14:06 Uhr

hmm,
in der TestApplikation klappt auch das 😦

Hier der Code:

private void buttonCopy_Click(object sender, EventArgs e)
        {
            List<MeinClipboardItem> list = new List<MeinClipboardItem>();
            for (int i = 0; i < 2; i++)
            {
                MeinClipboardItem ci = new MeinClipboardItem("Key" + i.ToString(), "Parent" + i.ToString(), "Type" + i.ToString(), "State" + i.ToString());
                list.Add(ci);
            }
            

            Clipboard.SetData("MeinFormat", list);
        }

        private void buttonInsert_Click(object sender, EventArgs e)
        {

            List<MeinClipboardItem> list = Clipboard.GetData("MeinFormat") as List<MeinClipboardItem>;
            if (list != null)
            {
                foreach (MeinClipboardItem item in list)
                {
                    textBox1.Text += "Key= " + item.Key + " Type= " + item.Type + " State= " + item.State + " Parent= " + item.Parent;
                    textBox1.Text += "\r\n";
                }
            }

        }

Werde dann mal in meiner MainApplikation schauen, woran es liegen kann 🙂

Grüße und Danke fürs lesen und nachdenken.

10.11.2008 - 14:01 Uhr

Also, wärend ich hier gefragt habe, versuche ich direkt weiter, ob ich ein Ergebnis herausbekomme. (Wäre ja langweilig, alles vorgekaut zu bekommen 🙂 )

also meine Fortschritte sehen wie folgt aus:
aus

[Serializable]

habe ich

[Serializable()]

gemacht und
aus

[SecurityPermissionAttribute(SecurityAction.LinkDemand, SerializationFormatter = true)]

ist

[SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]

geworden.

Dann habe ich mir überlegt, dass ich mit der Liste vielleicht ein bisschen viel gewollt habe und hab das Objekt einzeln über das Kontextmenü geschickt.
Ich konnte es dann auch auslesen! Riesen Erfolg 🙂

Jetzt versuche ich mal eine Liste dieser Werte über das Clipboard zu schleifen. Wenn jemand einen Tip hat, wie dies am besten zu bewerkstelligen ist, bin ich sehr dankbar.

Grüße,
maYer

10.11.2008 - 13:20 Uhr

Hi zusammen,
ich stehe vor dem Problem, dass ich gerne eine eigene Klasse im Clipboard hinterlegen möchte.

Ich habe es mit einer StringListe versucht und das hat einwandfrei geklappt. Nun versuche ich es mit einer Liste eigener Objekte (List<MeinClipboardItem>). Ich habe schon herausbekommen, dass die Objekte auf jeden Fall von einem Typ sein müssen, die ISerializable implementiert haben. (korrekt?)
Leider habe ich bis lang noch nicht mit Serializable gearbeitet. Deswegen habe ich mal einfach etwas probiert, bei dem die Vermutung nahe liegt, dass es das richtige sein kann 🙂

Hier meine ersten Gehversuche für Serializable:


    [Serializable]
    public class MeinClipboardItem : ISerializable
    {

        private string _parent;
        private string _type;
        private string _key;
        private string _state;

        protected MeinClipboardItem(SerializationInfo info, StreamingContext c)
        {
            _parent = (String)info.GetValue("parent", typeof(string));
            _type = (String)info.GetValue("type", typeof(string));
            _key = (String)info.GetValue("key", typeof(string));
            _state = (String)info.GetValue("state", typeof(string));
        }

        public MeinClipboardItem(string Key, string Parent, string Type, string State)
        {
            _parent = Parent;
            _key = Key;
            _type = Type;
            _state = State;
        }

        [SecurityPermissionAttribute(SecurityAction.LinkDemand, SerializationFormatter = true)]
        public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("parent", _parent);
            info.AddValue("key", _key);
            info.AddValue("state", _state);
            info.AddValue("type", _type);
        }

        public string Parent
        {
            get
            {
                return _parent;
            }
        }

        public string Key
        {
            get
            {
                return _key;
            }
        }

        public string State
        {
            get
            {
                return _state;
            }
        }

        public string Type
        {
            get
            {
                return _type;
            }
        }

        override public string ToString()
        {
            return _key.ToString();
        }
    }

Wenn ich das in eine Liste packe und diese Liste ins Clipboard schmeiße bekomme ich leider nüscht wieder raus.

Kann es an dieser Klasse liegen?

Grüße,
maYer

p.s. bin in für mich "neuen" Bereichen oft ein Copy - Paste - Edit - Understand --- Typ 🙂

20.10.2008 - 20:18 Uhr
ContextMenu contextMenu = new ContextMenu(UIDisplayTypeEnum.ProjectExplorer);
                explorerTree.ContextMenu = contextMenu.ItemList;

Grüße