Laden...

Forenbeiträge von ThomasR Ingesamt 93 Beiträge

26.11.2011 - 12:23 Uhr

Hallo,

ich bin relativ fit in C# und WindowsForms, jedoch ein kompletter Neuling in Webtechniken.

Ich würde gerne ein bestehendes recht komplexes Projekt auf eine Weboberfläche umstellen. Es geht um eine Software zur Bedienung von Industrieanlagen. Der Traum wäre es, dass dies in Zukunft über Webbrowser von beliebigen Geräten bedient werden kann.

Die bisherige Anwendung ist recht sauber in Model und View getrennt. Es wäre natürlich schön wenn die Modellklassen größtenteils 1:1 beibehalten werden könnten. Ich habe mal ein wenig gegoogelt, bin aber nicht sicher ob soetwas mit ASP.NET und AJAX realisierbar ist.

Die Windows-Form Oberfläche ist halt wirklich sehr dynamisch, es werden dort zur Laufzeit Forms erstellt, (per Plugin-Mechanismus generierte User)Controls darauf platziert, per Drag und Drop verschoben und und und...

Anhand der "Hallo Welt" Beispiele, die man so im Internet findet, wird mir nicht wirklich klar, ob und wie soetwas in ASP.NET machbar ist.
Da die Oberfläche zur Entwurfszeit praktisch noch leer ist, wäre der zugrundeliegende html-Code ja mehr oder weniger leer und müsste zur Laufzeit irgendwie generiert werden...?!?

Kann sich jemand vorstellen worum es geht und hat vielleicht einen Tipp ob das möglich ist bzw. ein Hinweis wie ich da rangehen könnte?

Grüße
Thomas

31.01.2010 - 16:19 Uhr

Hallo,

vorneweg: Ich entwickle ein Program für Windows Mobile, d.h. Speicherbedarf und Performance sind sehr wichtig.

Folgendes:
Mein Program enthält einige kleine Grafiken, die an verschiedenen Stellen per GDI gezeichnet werden.

Bisher habe ich die Grafikendateien (.png) immer ganz einfach zur Resources.Resx hinzugefügt und im Program dann einfach direkt gezeichnet, also so
g.DrawImage(Resources.MyBitmap, ..., ...)

Nun habe ich festgestellt, dass diese Methode extrem langsam ist. In meinem Program muss diese Grafik oftmals häufig gezeichnet werden und auf diese Weise muss das Bitmap scheinbar erst jedes Mal aus der Resource geholt werden.

Ich habe festgestellt, dass es sehr viel schneller geht, wenn ich die Grafik in ein Bitmap Objekt lade und dann im weiteren Program immer nur das Bitmap zeichne. Also so:
Bitmap bmp = Resources.MyBitmap;
...
g.DrawImage(bmp, ..., ...)

So, durch das zusätzliche Bitmap Objekt habe ich aber natürlich jetzt einen höheren Speicherbedarf.

Meine Idee ist es nun, eine statische "BitmapPool" Klasse zu erstellen. Beim ersten Zugriff auf eine Grafik wird darin ein Bitmap Objekt aus der Resource erzeugt. Bei allen weiteren Zugriffen wird direkt das Bitmap Objekt zurückgegeben. Also so:


public static class BitmapPool
    {
        static Bitmap myBitmap;
        public static Bitmap MyBitmap
        {
            get
            {
                if (myBitmap == null)
                    myBitmap = Resources.MyBitmap;
                return myBitmap;
            }
        }

    }

Meine Frage ist nun: Ist das wirklich ein sinnvoller Ansatz oder gibt es da eine viel bessere/elegantere Lösung?

Gruß
Thomas

08.11.2009 - 22:07 Uhr

Wow, super!
Vielen Dank.
Läuft es jetzt bei euch allen?

Thomas

08.11.2009 - 21:29 Uhr

Ok, sorry habe nicht genau gelesen, hier die x86 Version.

08.11.2009 - 21:13 Uhr

So, bitte nun mal die angehängte x64 kompilierte Version testen. Danke.

Grund dafür, dass eine dll vom CF referenziert ist ist der, das diese dll sowohl von einem PC Programm als auch von einem PocketPC Programm verwendet wird. Die dll enthält im Prinzip nur simple Klassen. Das funktioniert unter 32bit XP auch einwandfrei so.

08.11.2009 - 18:22 Uhr

Ich wusste nicht, ob es nur 64bit betrifft. Jetzt weiß ich es, das ist ja schonmal ein Ansatz. Danke.

Das Projekt steht auf "Any CPU".
Vielleicht liegt es auch an dem Windows Mobile 6 Professional Class Library Projekt, welches referenziert wird?! Ist das vielleicht nicht 64bit kompatibel?

08.11.2009 - 15:44 Uhr

@Fabian: Hast du die neue Version probiert oder die aus dem Anfangspost?
Schade. Jetzt habe ich keine wirkliche Idee mehr.

Könnte bitte mal jemand das Projekt im Visual Studio debuggen und nachschauen, wo diese Prozessoraulastung her kommt?

Ihr seit meine einzige Hilfe 🙂

08.11.2009 - 15:10 Uhr

Ok, könnte bitte jemand die nun angehängte Version noch einmal unter Win7 testen?
Hat sich irgendetwas verändert?

Gruß
Thomas

08.11.2009 - 11:41 Uhr

Ok danke schonmal.

Komisch finde ich halt, dass es unter XP läuft.

Naja, wäre echt super wenn mal jemand schauen könnte, wo er hängen bleibt. Habe das VS Projekt angehängt.

Kurz noch zu Erklärung:
Das Programm lädt Karten aus dem Internet. Bevor die Karte gezeichnet wird, werden die einzelnen Teilbilder zuerst asynchron (in einem eigenen Thread) in einen Cache geladen. Erst wenn das abgeschlossen ist, wird invalidate() aufgerufen.

Ich hoffe ihr kommt einigermaßen klar damit.

1000Dank
Thomas

08.11.2009 - 10:42 Uhr

Hallo,

ich habe ein kleines Problem. Ich selbst habe kein Windows 7 sondern nur XP.

Nun berichten mir die Win7 (x64) User, mein Programm würde nicht unter Win7 laufen. Der Prozess startet aber das Userinterface wird nicht geladen. Leider habe ich keine Ahnung, woran das liegen könnte und kann es auch selbst nicht testen. Das Programm verwender .NET 3.5 und ausschließlich managed Code...

Ich habe das Programm mal angehängt, vielleicht könnte das jemand mit Win7 mal testen. Einfach entpacken und die .exe starten.

Gruß und Danke
Thomas

02.08.2009 - 16:05 Uhr

Puh, danke.
Floste, könntest du mir da bitte ein wenig auf die Sprünge helfen: Heißt das ich kann dies durch Angabe des Attributs lösen? Was für ein Attribut muss ich wie setzen?

02.08.2009 - 15:17 Uhr

Hallo zusammen,

Ich habe folgendes Problem:

Ich habe ein eigenes Steuerlement entwickelt, abgeleitet von Control. Es ist eine Art Container (ähnlich einem Panel) für childcontrols. Ich leite aber bewusst nicht von Panel ab.

Das Problem ist nun, dass wenn ich im Visual Studio Designer weitere Steuerelemente auf meinen Custom Container ziehe, diese nicht meinem CustomControl als Child hinzugefügt werden, sondern dem zugrundeliegenden Form. Es ist nur in den Griff zu kriegen, indem man von Hand im Designer Code rumpfuscht...

Wenn ich dagegen von Panel ableite, funktioniert es im Designer wie gewünscht (Das will ich aber wie gesagt nicht)

Nun ist die Frage, was muss ich an meinem Control verändern/hinzufügen, damit es sich Designer wie ein Panel verhält?

Falls es eine Rolle spielt: Ich verwende das Compact Framework (3.5)

Ich hoffe ihr könnt mir helfen.

Gruß
Thomas

07.06.2009 - 11:47 Uhr

Super, danke euch!

06.06.2009 - 18:05 Uhr

verwendetes Datenbanksystem: SQLite

Hallo,

ich bräuchte mal eure Hilfe, ich habe wenig Erfahrung mit Datenbanken und komme einfach nicht darauf, wie ich folgende Daten möglichst einfach und schnell erhalte:

Die Tabelle sehe zum Beispiel so aus:

X | Y | Level

1 | 4 | 2
10 | 2 | 2
3 | 20 | 2
4 | 12 | 2
2 | 5 | 3
35 | 6 | 3
21 | 22 | 3
11 | 345 | 4
12 | 0 | 5
2 | 34 | 5

(insgesamt muss ich mit ca. 2000 Datensätzen und ca. 20 Level rechnen)

So, nun möchte für jeden vorhandenen Level jeweils den minimalen und den maximalen X und Y Wert haben. Letzendlich sollen diese Daten in vier Dictionaries (mit Level als Key] landen:

minX[Level]
maxX[Level]
minY[Level]
maxY[Level]

Das ganze sollte möglichst schnell gehen! (windows mobile...)
Oder sollte ich lieber bereits beim Hinzufügen der Datensätze eine Abfrage einbauen und die min/max Werte sofort in eine getrennte Tabelle eintragen? (Da wäre genug Zeit) Wäre alleridings recht aufwendig... Oder kann man soetwas mit Datenbankbefehlen (Trigger o.Ä.) machen? 8o

Vielen Dank im voraus.
Thomas

29.05.2009 - 16:43 Uhr

Kann es sein, dass es die Pixelformat property im Compact Framework (3.5) nicht gibt?!

29.05.2009 - 14:24 Uhr

Ja, ich sehe das doch schon richtig dass das Bild im Speicher immer im "Rohformat" liegt, unabhängig davon ob ich ein jpg, png oder was auch immer im Konstruktor geladen habe??

Und Overhead gibt es da auch keinen? Gut, jetzt weiß ich nur noch nicht wie viel bpp ein so geladenes Bild hat. Ist das abhängig vom png file? Oder hat das standardmäßig immer 32bpp? Im Bitmap Konstruktor kann man das ja nicht angeben...

29.05.2009 - 14:04 Uhr

Hallo,

wahrscheinlich eine leicht zu beantwortende Frage:

Ich lese Bilder (png, jpg) von der Festplatte ein:
Bitmap bmp = new Bitmap("test.png")

Da ich eine bestimmte Menge an Bildern in einem Cache im Arbeitsspeicher zwischenspeichern möchte, würde ich nun gerne so einfach (und schnell) wie möglich die Größe eines solchen Bitmap Objekts im Speicher ermitteln. Gibt es da eine einfache Möglichkeit? Oder muss/kann ich mir das irgendwie über heigth*width ausrechnen? Aber so ein Bitmap hat ja auch noch etwas overhead etc, oder? Und wie viel bpp hat das eigentlich überhaupt wenn ich ein png per Konstruktor lade?

Gruß
Thomas

21.05.2009 - 14:23 Uhr

Ich finde nicht dass das Sinn macht.
Sinn würde es machen wenn ich die SelectedValue Eigenschaft der ComboBoxen an die GLEICHE Variable binden würde. Aber ich binde die beiden ja an unterschiedliche Variablen!

Das Array dass ich als Datasource verwende enthält doch eigentlich keine Information darüber welches der Items ausgewählt ist...

21.05.2009 - 12:29 Uhr

Hallo,

folgendes Problem:

Ich möchte 2 Comboboxen (per Databinding) mit den selben Items befüllen. Das klappt auch gut. Allerdings möchte ich jetzt jeweils unterschiedliche Items auswählen und an unterschiedliche Properties binden können.

Beispielcode:



class Test : INotifiyPropertyChanged
{

string[] items = new string[4] { "test1", test2". "test3", "test4"};
public string[] Items
{get;}

string combo1;
public string Combo1
{get; set;...}

string combo2;
public string Combo2
{get; set;}

....

}

class Form1 : Windows.Forms
{
....
Test test = new Test();

comboBox1.DataSource = test.Items
comboBox1.DataBindings.Add("SelectedItem", test, "Combo1");

comboBox2.DataSource = test.Items
comboBox2.DataBindings.Add("SelectedItem", test, "Combo2");

....
}

Das Ergebnis ist, dass wenn ich in einer ComboBox etwas auswähle die Auswahl der anderen ComboBox automatisch auf die selbe Auswahl gesetzt wird.

Warum ist das so? Kann ich das irgendwie lösen (ohne zwei gleiche Item Array erzeugen zu müssen)

Gruß
Thomas

26.04.2009 - 11:29 Uhr

Ok, hätte ja sein können dass es da einen Trick gibt. Naja, dann muss ich eben den Weg über Temp Files gehen.
Danke auch fürs umbenennen des Thread Titels, mir war nichts vernünftiges eingefallen 😃

22.04.2009 - 21:00 Uhr

Hallo,

in meinem Programm (ein einfaches Dokumentenmanagement) Speichere ich Dokumente (txt, doc, pdf etc.) direkt als BLOB in einer Datenbank ab.

Nun möchte ich die Dateien in meinem Programm auch anschauen können (Vorschaufunktion) bzw in einem entsprechenden Programm öffnen (z.B. Word)

Es gibt ja für so gut wie alle diese Dateiformate entsprechende Komponenten, mit denen das möglich ist. Das Problem: Alle erwarten als Übergabe den Pfad zu der Datei auf der Festplatte. Wenn ich meine Dateien hole ich mir aber als Byte[] aus der Datenbank in den Speicher.
Ich müsste nun also immer zunächst den Inhalt des Speichers in ein Temp-File auf die Festplatte schreiben, um dieses Tempfile dann wieder zur Anzeige zu öffnen. Das kostet natürlich einen haufen unnötige Zeit.

Hat jemand eine Idee wie man soetwas umgehen/lösen könnte?

Gruß
Thomas

10.04.2009 - 20:24 Uhr

Ich muss dieses Thema mal wieder hervor holen, das ich das Projekt mittlerweile begonnen habe.

Mir stellt sich folgende Frage:

Bis jetzt mache ich die ganzen Datenbankoperationen händisch, d.h. ohne Dataadapter, DataSet etc.

Das hat mehrere Gründe:

  1. Ich bin mit diesen Dingen und deren Möglichkeiten noch nicht wirklich vertraut.

  2. Ich mache den kompletten Datenbankzugriff über Plugins, d.h. ich möchte mir die Möglichkeit offen halten, das ganze später mit Plugins für jede beliebige Datenbank zu erweitern. Mein Plugin-Interface enthält z.B. die Methoden AddFile(), AddFolder(), GetFiles() etc.
    ich wüsste nicht wie eine solche Datenbankunabhängige Schnittstelle über DataAdapter etc. zu realisieren wäre.

Jetzt frage ich mich, ob ihr das auch so händisch machen würdet oder ob man auf jeden Fall immer Dataadapter verwenden sollte. Falls ja, wie würdet ihr das dann in meinem konkreten Fall anwenden?

Gruß
Thomas

01.03.2009 - 17:46 Uhr

ah ja, das ist gut.
Rein interesse halber:
Die Datenbank macht das dann aber intern doch so wie ich es geschrieben habe, oder? Oder legt die Datenbank in keywords.fileId tatsächlich eine Referenz auf einen Eintrag in der files Tabelle ab? Dazu müsste man der DB aber ja zuerst irgendwie mitteilen, dass das Feld keywords.fileId immer eine Referenz auf einen Eintrag in der Files Tabelle darstellt und nicht nur 'irgendeine' Zahl....

01.03.2009 - 16:34 Uhr

Ok, danke.

Aber wird die Suche da nicht recht aufwendig/langsam.

Die Suche läuft doch dann so ab:

  • Liste aller Einträge mit dem Keyword aus der Keywordtabelle holen
  • Für jedes Element in dieser Liste den zugehörigen Dokumenteneintrag in der Dokumententabelle suchen/abrufen.

Oder gibt es da Datenbankkommandos, die soetwas "auf einen Schlag" machen?
Sorry, falls diese Frage etwas blöd ist, bin wie gesagt Neuling bei Datenbanken...

01.03.2009 - 14:23 Uhr

Hallo haarrrgh,

meinst du pro Dokument eine extra Tabelle oder insgesamt eine extra Tabelle mit den Stichwörtern?

01.03.2009 - 11:39 Uhr

Hallo,

folgendes ist mein bisher erstes Projekt, bei dem ich mich mit dem Thema Datenbank auseinandersetze:

Ich möchte mir für die Arbeit ein simples, leichtgewichtiges Wissensmanagement/DMS System entwickeln. Mir ist durchaus bewusst, dass es bereits zahlreiche freie DMS Software gibt. Das ist mir aber größtenteils viel zu überladen und aufgeblasen. ich möchte ein simples/einfach handzuhabendes Einzelplatzsystem, kein auf einem Server laufendes Programm mit Webzugriff...

Trotzdem möchte ich die Option offen lassen, das Programm später auch für Mehrbenutzerbetrieb zu erweiteren. Aus diesem Grund möchte ich gerne eine saubere 3-Schichten Architektur verwenden. Dabei habe ich vor, die Datenzugriffschicht als Plugins vorzusehen, so dass später über Plugins jede beliebige Datenbank benutzt werden kann.

Für den Anfang/Einzelbenutzer habe ich mich auf SQLite festgelegt. Da die DB Thematik für mich neu ist, bräuchte ich ein paar Ratschläge zum Datenbankdesign. Das Programm soll folgende Grundfunktionen haben:

  • Einchecken beliebiger Dokumente (txt, pdf, doc etc.)
  • Ablage der Dokumente in Kategorien/Unterkategorien (Ordner/Baumstruktur)
  • Dann natürlich auch Verschieben in eine andere Kategorie etc.
  • Zu jedem Dokument möchte ich beliebig viele Stichworte eingeben können, nach denen das ganze dann durchsucht werden kann.

So, nun zu meinen Ansätzen:

  • Ich tendiere dazu, die Dateien in der Datenbank und nicht im Dateisystem abzulegen.

  • Wie organisiere ich die DB? Meine Idee:

  1. Tabelle: Kategorien
    Spalten: ID, ParentID, Name
  2. Tabelle: Dokumente
    Spalten: ID, KategorieID, FileID, Name, Stichwörter,...
  3. Tabelle: Files
    Spalten: ID, Dateityp, Daten (BLOB)

Fragen dazu:

  • Ist das so sinnvoll?
  • Wie mache ich das mit den Stichwörtern/Suchbegriffen. Alle in eine Spalte schreiben oder wie?
  • Ist es sinnvoll eine extra Tabelle für die Files anzulegen oder sollte ich diese mit in die Tabelle "Dokumente" speicheren?

Über Tipps und Anregungen jeglicher Art würde ich mich sehr freuen.

Viele Grüße
Thomas

26.08.2008 - 14:21 Uhr

Hallo,

ich suche nach einer Möglichkeit, eine Clipboard ähnliche Funktionalität zu realisieren, ohne dass die Klassen, die in diesen Zwischenspeicher abgelegt sind, serialisierbar sein müssen. (Wie dies beim Clipboard leider der Fall ist).

Was ich möchte:

Ich habe in meinem Programm Plugins, die u.a. jeweils ein Usercontrol beinhalten. Diese Usercontrols kann ich in meinem Programm auf beliebigen Programmfenstern (Forms) per Drag & Drop platzieren. Das funktioniert auch soweit alles wunderbar.

Nun wollte ich noch eine Funktion einbauen, mit Hilfe derer sich ein solches Usercontrol aus einer Form ausschneiden und auf einer anderen Form einfügen lässt.
Nun habe ich mir gedacht, kein Problem, Clipboard müsste dafür ja wie geschaffen sein. Leider habe ich dann aber erfahren, dass ich nur serialisierbare Klassen ins Clipboard legen kann. Da dies bei den Plugins (auf die ich sowieso nur über ein Interface zugreife) aber nicht möglich ist, scheidet das Clipboard wohl aus (Oder?).

Ich verstehe wirklich nicht, warum meine Klasse serialisierbar sein muss, nur damit ich eine Referenz eines Objekts davon ins Clipboard legen kann 🙄

Drag&Drop geht doch beispielsweise auch ohne dass die Klasse serialiserbar ist...

Nun, es ist aber so und ich kann es nicht ändern, und deswegen suche ich nun nach einer alternativen Lösung. Natürlich wäre es irgendwie möglich, eine Variable zu haben, die jedem Form mitgegeben werden muss, und die dann sozusagen als globales Clipboard dienen würde. Das erscheint mir aber als sehr aufwändig/unschön. Da muss es doch irgendetwas schöneres geben. Also dieser "Clipboardersatz" den ich suche muss nur Programmintern existieren, nicht windowsweit (wie das richtige clipboard...)

Gruß
Thomas

13.08.2008 - 15:30 Uhr

So, Ergänzung meinerseits:

Die absolute Position bekommen ich so wie es aussieht hiermit:


Point absLocation = Location;
absLocation.Offset(-ParentForm.AutoScrollPosition.X, -ParentForm.AutoScrollPosition.Y);

Das 1. Problem bekomme ich aber nach wie vor nicht in den Griff.

13.08.2008 - 14:14 Uhr

Hallo,

ich verschiebe Usercontrols per drag und drop auf einem Formular. Und zwar so:


protected override void OnMouseMove(MouseEventArgs e)
        {
            if (_move)
            {
                Point newPos = new Point(((Left + e.X - _oldPosX) / 10) * 10, ((Top + e.Y - _oldPosY) / 10) * 10);
                if (newPos.X >= 0 && newPos.Y >= 0)
                    Location = newPos;

                           }
            base.OnMouseMove(e);
        }

(Code in den Usercontrols)
Das geteilt durch und mal 10 dient nur dazu, ein Raster mit den 10 Pixeln zu erstellen.

Nun habe ich in Verbindung mit autoscroll des Formulars aber 2 Probleme:

  1. Wenn ich ein Usercontrol aus dem Sichtbaren Bereich herausziehen will geht das zwar, allerdings scrollt er sobald ich an den Form-Rand komme mit einer Wahnsinnsgeschwindigkeit, so dass sich das Element nicht mehr wirklich positionieren lässt.

  2. Die Position der Usercontrols soll gespeichert werden, hierzu serialisiere ich die Location Eigenschaft. Nun ist die Location-Eigenschaft aber scheinbar immer relativ zum Sichtbaren Bereich des Formulars, d.h. wenn ich nach rechts scrolle und dann speichere, haben die nicht sichtbaren Elemente links einen negativen X-Wert. Wenn ich das dann wieder laden möchte sind die Elemente mit negativem X-Wert nicht mehr sichtbar.

Für das erste Problem habe ich noch keine Lösung gefunden.
Das Zweite ließe sich wohl beheben, indem man immer vor dem Speichern manuell ganz nach links oben scrollt...allerdings auch nicht gerade ellegant. Gibt es da keine andere Lösung (z.b eine Eigenschaft wie Location, nur unabhängig vom Scrollzustand.

Vielen Dank für eure Hilfe.

Gruß
Thomas

25.07.2008 - 10:12 Uhr

Hallo,

schließen tue ich schon richtig.

Ich benutze allerdings momentan zum Speichern nicht die ZipOutStream-Klasse, sondern mache das folgenermaßen:


ZipFile packageFile = ZipFile.Create(file);

packageFile.BeginUpdate();

packageFile.Add(new MemoryDataSource(mystream), "test");
...
...

packageFile.CommitUpdate();

packageFile.Close();


25.07.2008 - 09:42 Uhr

Hallo,

ich habe ein Problem mit der Sharpziplib, bei dem ich momentan nicht mehr weiter weiß:

Scheinbar sporadisch werden erzeugt mir das Programm fehlerhafte Archive, die beim Öffnen mit "cannot find central directory" fehlschlagen. Auch mit Winzip und Konsorten lässt es sich dann nicht mehr öffnen oder reparieren.

Das Problem tritt komischerweise nur dann auf (und auch dann nur in einem von 100 Fällen!!), wenn in dem Verzeichnis in dem das Archiv gespeichert werden soll bereits eine zip-Datei vorhanden ist. Diese muss aber nicht den gleichen Name haben.
Wähle ich also ein anderes Verzeichnis oder lösche die anderen zip-Dateien im Verzeichnis dann geht das archivieren wieder. Lediglich den Dateinamen zu ändern bringt aber nichts.

Das ist in meinen Augen äußerst mysteriös! Ich habe mir auch schon überlegt, ob es irgendwie mit dem SavefileDialog zusammenhängen könnte, den ich zum Auswählen der zu speichernden .zip-Datei verwende....kann mir aber auch da nichts erklären...

Hat vielleicht irgendjemand eine Idee woran das liegen könnte? Ich bin völlig ratlos und hoffe auf eure Hilfe.

Gruß
Thomas

19.07.2008 - 11:58 Uhr

ich glaube schon, dass der Dienst normalereise standardmäßig installiert ist. Bisher konnte ich zumindest auf allen Rechner problemlos den Message Queuing installieren und der Dienst ist bei meinem privaten Rechner auch unter Diensten aufgelistet. Ich wüsste jetzt halt auch nicht, wonach ich da auf der Windows CD suchen sollte...

19.07.2008 - 11:13 Uhr

Hallo herbivore,

liefert leider nur "Der Name für den Dienst ist ungültig" als Ergebnis.

19.07.2008 - 11:05 Uhr

Hallo,

vielleicht kann mir ja hier jemand helfen.
Mein Problem ist folgendes:

Ein Programm, das ich installieren möchte benötigt den Windows Message Queuing installiert. (Windows-Komponenten hinzufügen -> Message Queuing)

Leider lässt sich diese Komponente nicht installieren. Es kommt jedesmal Fehler 0x433 :
MSMQ Setup fehlerhaft
Kann den MSMQ-Dienst nicht starten.
Fehlerbeschreibung: der Abhängigkeitsdienst ist nicht vorhanden oder der Abhängigkeitsdienst ist zu dem Löschen markiert.

im Eventlog habe ich gesehen, dass dies am fehlenden "ntlmssp"-Dienst (NT LM Security Support Provider) liegt.
Tatsächlich ist dieser Dienst unter Verwaltung - Dienste garnicht gelistet. Irgendwas muss da an der Windowsinstallation faul sein...

Nun meine Frage: Hat jemand eine Ahnung, wie ich diesen Dienst installieren kann?
Da es sich um mein Firmen-Laptop handelt kann ich leider auch nicht so ohne weiteres einfach Windows neu installieren, sondern müsste den Rechner von der EDV neu aufsetzen lassen...und naja, die sind nicht gerade kompetent 🤔...

Gruß
Thomas

03.07.2008 - 22:19 Uhr

nun ja, das war ein stark vereinfachtes Beispiel. Das Load-Event kommt nicht in Frage, weil einige Operationen nicht erst beim ersten Laden des Forms ausgeführt werden sollen sondern gleich nach Erstellung...

03.07.2008 - 21:52 Uhr

Der Fall ist folgender:

Es geht um vererbte Forms bzw. UserControls. Ich wollte, dass im Konstruktor der Basisklasse irgendetwas mit allen Controls (sprich foreach Control in Controls) der Form gemacht wird. Damit hiervon auch die (zusätzlichen) Controls der abgeleiteten Klasse betroffen sind, müsste der Konstruktor der abgeleiteten Klasse zuerst aufgerufen werden....

Ich habe mir aber schon gedacht dass dies so nicht geht. Aber fragen kostet ja nichts =)

03.07.2008 - 20:45 Uhr

Hallo,

nur eine kurze Frage: Ist es möglich, das bei einer abgeleiteten Klasse zuerst der Konstruktor der abgeleiteten Klasse und erst anschließend der Konstruktor der Basisklasse aufgerufen wird.

Der Standardfall ist ja genau andersrum, und natürlich ist das im Normalfall auch sinnvoller, aber in meinem speziellen Fall wäre es umgedreht notwendig...

Gruß
Thomas

03.07.2008 - 20:38 Uhr

Danke, habe es nun im Getter implementiert, da ich sowieso Properties brauche ist das die einfachere Lösung als mit ISerializable.

03.07.2008 - 15:55 Uhr

Was müsste denn dann in die GetObjectData-Methode rein. Muss ich dann alle Objekte der klasse von Hand zum SerializationInfo hinzufügen. Und wie ich dort den Konstruktor bestimme habe ich jetzt auch nicht gefunden.

03.07.2008 - 14:47 Uhr

Hallo,

angenommen ich habe etwas in der Art:



[serializable]
public class TestClass
{
int _x;

[NonSerialized]Dictionary<String, MyClass> _dict;


public TestClass()
{
_dict = new Dictionary(<String, MyClass>);
}
}

So, und nun möchte ich Ein Objekt von TestClass Serialisieren, was natürlich auch funktioniert. Nach dem Deserialisieren soll nun aber mein _dict (welches nicht serialisiert werden soll) trotzdem auch wieder initialisiert werden (damit es nicht null ist nach dem Deserialisieren!)

Der Konstruktor wird aber beim BinaryFormatter nicht aufgerufen. Wie kann ich es das hinbekommen? Es kann doch nicht wirklich so sein, dass ich dafür eine Extra Methode erstellen muss welche ich dann von Hand immer nach dem Deserialisieren aufrufen muss....

Gruß
Thomas

28.06.2008 - 15:45 Uhr

Wieso selbst machen? Spricht irgendetwas gegen [Tutorial] Das neue Konfigurationsmodell im .NET Framework 2.0 ?

Gruß
Thomas

08.06.2008 - 12:36 Uhr

verwendetes Datenbanksystem: XML

Hallo,

Ziel ist es, eine Mischung aus "händischer" Xml Serialisierung und "automatischer" Xml Serialisierung zu realisieren.
Ich möchte also im Prinzip mit der XmlDocument Klasse eine Xml-Datei mit Knoten erstellen, und als untergeordnete Knoten dieser von Hand erstellten Knoten beispielsweise per XmlSerializer wiederum Knoten einfügen.

Mit der XmlDocument-Klasse habe ich hierfür keine Lösung gefunden. Per XmlWriter-Klasse geht es, die XmlDocument-Klasse wäre mir aber lieber, da praktischer.

Vielleicht weiß aber jemand von euch eine Möglichkeit.

Gruß
Thomas

26.05.2008 - 15:30 Uhr

Hallo,

hier eine kurze Frage zum Design:

Angenommen ich habe ein Programm, das in irgendeiner Weise Ähnlichkeiten zum Visual-Studio hat. D.h. es gibt ein Projekt, und dieses Projekt kann verschiedene untergeordnete Elemente besitzen, hier als Beispiel z.b. Seiten.

Das Projekt soll als ganzes gespeichert werden können, es sollen aber beispielsweise auch einzelne Seiten von anderen Projekten importiert(geladen) werden können. Die Speicherstruktur wird wohl also wohl oder übel auf z.B. eine Projektdatei und pro Seite jeweils eine Datei aufgeteilt werden müssen.

So, das ganze habe ich schön objektorientiert abgebildet, d.h. es gibt eine Klasse "Projekt" und eine Klasse "Seite". Die Klasse Projekt enthält eine Collection "Seiten" (Aggregation).

Die Frage ist nun, wie ich das Speichern/Laden designe. Ich habe mir überlegt eine zusätzliche Klasse "Persistor" zu erstellen, welche nur Methoden beinhaltet z.b. :


public Project LoadProject(string fileName){}

public Seite LoadSeite(string fileName){}

public void SaveProject(Project p, string fileName){}

public void SaveSite(Seite s, string fileName){}

Macht das Sinn, dies so in eine extra Klasse zu packen? Oder sollte ich die Methoden lieber in die anderen Klassen mit reinpacken (z.b. LoadProject in "Project", LoadSeite in "Seite"). Irgendwie gefällt es mir persönlich so in der extra Klasse besser, aber ich bin mir nicht sicher ob das nicht irgendwie "verkehrt" ist. 😉 Falls es ok ist, ist dann die Klasse "Persistor" und ihre Methoden ein Fall für static? 8)

Gruß
Thomas

23.05.2008 - 13:22 Uhr

Damit bekomme ich nur das übergeordnete Verzeichnis <user>/Anwendungsdaten.
Fehlt dann noch der <Firmenname>/<Assemblyname>/<Version>/...

23.05.2008 - 12:58 Uhr

Hallo,

gibt es eine Möglichkeit, aus einer dll-Datei, die von einer Exe geladen wird, auf die Application Eigenschaften der Exe zuzugreifen?

Speziell bräuchte ich z.B. die Verzeichniseigenschaften wie z.B. Application.UserAppDataPath etc.

Notfalls könnte ich mir diesen Pfad natürlich auch über den AssemblyName, Assemblyversion etc. zusammenbauen, aber vielleicht gibt es eine sicherere/einfachere Möglichkeit.

Gruß
Thomas

22.05.2008 - 17:18 Uhr

Hallo,

ich hätte zum Thema eigene EventArgs noch eine Ergänzung. Noch schicker (und von Microsoft ab .NET 2.0 auch empfohlen) ist die Möglichkeit mit Generics. Dadurch erspart man sich die Definition eines eigenen delegates...Ich habe den vorigen Codeausschnitt mal daraufhin angepasst.



public event EventHandler<TextIOEventArgs> TextRawReceived;

        protected virtual void OnTextRawReceived(string textReceived)
        {
            EventHandler<TextIOEventArgs> textRawReceived = this.TextRawReceived;
            if (textRawReceived!=null)
            {
                textRawReceived(this,new TextIOEventArgs(textReceived));
            }
        }


    public class TextIOEventArgs : System.EventArgs
    {
        private readonly string text;
        public TextIOEventArgs(string text) :base()
        {
            this.text=text;
        }
        public string Text
        {get{return this.text;}}
    }


21.05.2008 - 20:36 Uhr

Zitat:
Solltest das Programm wirklich vorm Reflecten schützen!

Sehr gerne , wie mach ich das ? ^^

mit dem DotFuscator. Bzw. [FAQ] .net Assembly vor Disassembling schützen

Schützt natürlich nicht vor Disassembling, aber erschwert es zumindest.

21.05.2008 - 18:58 Uhr

oh, da war ich wohl mal wieder zu ungeduldig. Das hatte ich mir alles noch garnicht angeschaut, war nur aufs connecten fixiert 😁 Wobei ich zu meiner Verteidigung aber auch sagen muss, dass man normalerweise wohl nicht erwarten würde schon auf Dateien zugreifen zu können, bevor man eingeloggt/verbunden ist, oder?

Solltest das Programm wirklich vorm Reflecten schützen!

21.05.2008 - 18:50 Uhr

Nette Idee. Gibt es eigentlich einen Hinweis auf das Passwort? Ich habe nichts entdeckt und nach ein paar erfolglosen Versuchen zum Reflector gegriffen... 8)

Gruß
Thomas

21.05.2008 - 15:31 Uhr

doch, das geht. Deshalb finde ich das ja auch irgendwie paradox...