Laden...
I
inva myCSharp.de - Member
Fachinformatiker Leipzig Dabei seit 08.03.2007 37 Beiträge
Benutzerbeschreibung

Forenbeiträge von inva Ingesamt 37 Beiträge

19.06.2012 - 10:23 Uhr

Also ich habe eine Antwort gefunden:

The reasoning behind this design decision is that Microsoft wants users to always know when a command is not a built-in command (comes from a third-party), what application (add-in) is providing it, and how that application can be disabled. This is because of negative experiences in earlier versions of Word with some third-party Add-ins that caused frequent problems, for which Microsoft was always blamed.

Social MSDN Post

As an end-user, yes. As part of your Add-in solution, no.

Social MSDN Post

15.06.2012 - 10:39 Uhr

Gibt es auch eine Möglichkeit das direkt von der AddIn (also ausgehend von der Application) Ebene aus zu steuern?
Ich möchte eigentlich kein Ribbon einfügen.

14.06.2012 - 17:56 Uhr

Liebe Community,
Nach Stunden des Probierens und suchens komme ich nicht mehr weiter und brauche eure Hifle!

Ich möchte gern die Symbolleiste durch ein Word 2010 AddIn um einen Button erweitern.

Ich habe bisher folgendes versucht:


Office.CommandBars cmdBars = Globals.PTPTWordAddIn.Application.CommandBars.ActiveMenuBar;
			
			Office.CommandBar Toolbar = cmdBars.Add("NewToolBar", Office.MsoBarPosition.msoBarTop, false, true);

			firstButton = (Office.CommandBarButton)Toolbar.Controls.Add(Office.MsoControlType.msoControlButton, missing, missing, missing, missing);
			firstButton.Style = Office.MsoButtonStyle.msoButtonCaption;
			firstButton.Caption = "Test";
			firstButton.Tag = "TestButton";
			firstButton.FaceId = 123;
			firstButton.Click += new Office._CommandBarButtonEvents_ClickEventHandler(FirstButtonClick);

... leider wurde hierdurch nur eine neue Gruppe, welche den Button enthält unter einem Ribbon hinzugefügt.

Mein Ziel wäre es aber, die Symbolleiste ganz oben rechts, die die Buttons wie Z.B Speichern enthält, zu erweitern.

Ich bin fest davon überzeugt das es gehen muss, schließlich lassen sich diese ja auch manuell hinzufügen, aber ich habe noch keinen programatischen Ansatz gefunden bzw. gehen mir so langsam auch die Stichworte nach denen ich suchen könnte aus.

Hat jemand eine Idee?

17.06.2011 - 14:00 Uhr

der Explorer zeigt ja als Miniaturansicht nicht das Originalbild sondern ein Thumbnail-Image davon an (also ein kleines Bild). Daher auch die versteckte thumbs.db Datei indem Ordner wo diese gecached werden.

D.h. dann doch aber, dass ich, wenn ich nur genügend Bilder in einem Ordner habe, auch im Explorer eine OutOfMemoryException produzieren könnte?

Vielen Dank an euch!
Die Idee bzgl. der Thumbnails werde ich aufgreifen. Ich dachte ich mache eventuell generell etwas falsch oder es gibt einen effizienteren Weg - aber eigentlich hätte ich da auch selber drauf kommen können. Nichts desto trotz, vielen Dank! 😃

17.06.2011 - 13:18 Uhr

2 GB könnten auch vorkommen - im ersten Fall könnte ich eventuelle Referenzen wieder freigeben und bei Bedarf neu allokieren.

Aber, was ich mich frage, wie macht es der Windows Explorer? Er verfügt ja auch über eine Miniaturansicht, und selbst wenn x-beliebig viele Bilder in einem Ordner sind, zeigt er brav alle an, er lädt sie zwar erst in dem Moment, wenn ich sie scrolle, aber einmal geladen sind sie persistent in der Miniaturansicht. Ich wollte prinzipiell das gleiche Verhalten wie die Windows Explorer Miniaturansicht implementieren (aber erstmal ohne das Laden bei Bedarf).

17.06.2011 - 09:04 Uhr

Wieviel in MB sind denn alle Bilder zusammen, die du laden willst?

Es können schon (weit) über 100 MB zusammen sein.

17.06.2011 - 08:35 Uhr

Hi,
zuerstmal: Dein Bild ist zu groß. Speicher und lad es entsprechend der in der ImageList gespeicherten Größe - das dürfte ein wenig helfen.

Danke, ich werde mir dann wohl eine kleine Thumbnail Methode Stricken, oder gibt es im.NET Framework bereits eine Methode die diese Funktion implementiert?

Vorab eine Frage: diesen "Anstieg" hast du im Taskmanager beobachtet?

Jep - ist das nicht aussagekräftig genug? Mein Problem ist, dass ich diesen Aufruf für mehrere Bilder in einer Schleife mache. Das führt dann irgendwann dazu, dass ich von genau dieser Stelle eine OutOfMemoryException geworfen bekomme.

Ich kann mir nicht so recht vorstellen, warum die ImageList sich Kopien erstellen sollte, aber nichts desto trotz. Gebe ich das Image Objekt explizit mit Dispose() wieder frei erscheinen die Bilder auch nicht mehr in der ImageList.
Der Speicherverbrauch steigt auch nicht beim Zuweisen des Image Objekts an de ImageList so stark an, sondern beim Aufruf von Image.FromFile(...).

16.06.2011 - 22:10 Uhr

Hallo Community,
Ich möchte gern ein ListView mit einer ImageList erstellen und diese anzeigen.
Jedoch habe ich dabei das Problem, dass der Speicherverbrauch (RAM) bereits bei einem geladenem Bild (~3MB) auf 53 MB (vor dem Laden: 17MB) steigt.

Anbei mein Code:


private void AddImage(string sFilePath)
        {
            Image newImage = Image.FromFile(sFilePath);// Viele Bilder: OutOfMemory Exception
            newImage.Tag = GetFileNameFromPath(sFilePath);

            imageList.Images.Add(newImage.Tag.ToString(), newImage);
            lPathsOfImagesToScale.Add(sFilePath);

            ListViewItem currentItem = new ListViewItem(sFilePath);
            currentItem.ImageIndex = imageList.Images.Count - 1;
            ctrlImagePreviewBox.Items.Add(currentItem);

            newImage = null;
        }

Der Speicherverbrauch schnellt an der Stelle


Image newImage = Image.FromFile(sFilePath);

wie oben beschrieben in die Höhe.

Bzgl. "Bildverarbeitung" bin ich leider noch ein absoluter Anfänger und ich habe das Laden der Bilder auf die einfachste Art und Weise implementiert und möchte es gern optimieren.
Leider weiß ich nicht, wie optimierbar der Code noch ist, da ich das Bild ja nicht irgendwann wieder freigebe, sondern ein Verweis darauf stetig in der ImageList hinterlegt ist.

Ideen? Vorschläge?

15.11.2010 - 09:46 Uhr

... alles Klar. DrawImage zeichnet in den aktuellen Graphics kontext. Das macht natürlich sinn.

Danke!

15.11.2010 - 09:15 Uhr

scheinbar nirgendswo, sonst wärs ja nicht schwarz, aber damit hilfst du mir nicht weiter.
Wenn ich das original Bild nehme (input), dann bringt das DrawImage gar nichts, das Bild ist immernoch genauso groß wie vorher. Also dachte ich, ich müßte ein neues erstellen und mein Graphics Objekt zeichnet dann dessen Inhalt in das angegebene Bild.

Scheinbar nicht.

15.11.2010 - 07:41 Uhr

hallo,
Ich möchte gern ein Bild verkleiner und abspeichern.

Hierfür verwende ich folgenden Code:


//scale image proportional
        public static Image Resize(Image originalImage, double newWidth_p)
        {
            double dlFaktor = newWidth_p / originalImage.Width;
            double newHeight = dlFaktor * originalImage.Height;
            double newWidth = dlFaktor * originalImage.Width;

            Graphics newGraphics = Graphics.FromImage(originalImage);
            newGraphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;

            Bitmap resizedImage = new Bitmap((int)newWidth, (int)newHeight);
            Rectangle DrawingArea = new Rectangle(0, 0, (int)newWidth, (int)newHeight);
            newGraphics.DrawImage(resizedImage, DrawingArea);

            return resizedImage;
        }

Jedoch ist das ouput Bild komplett Schwarz.
Mache ich generell etwas falsch?

Der Aufruf sieht wie folgt aus:



private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog OpenMyFiles = new OpenFileDialog();
            if (OpenMyFiles.ShowDialog() == DialogResult.OK)
            {
                Image currentImage = Image.FromFile(OpenMyFiles.FileName);
               
                Image resizedImage = ImageScale.Resize(currentImage, 480);

                resizedImage.Save(@"C:\Dokumente und Einstellungen\user1\Desktop\test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
            }
        
        }

25.08.2010 - 17:09 Uhr

Hi,
Also wenn ich es debugge, wird die OnCellClick Methode selbst beim Klick auf RowHeaders aufgerufen, undzwar sogar noch vor der OnRowHeaderMouseClick Methode.

Wie gesagt, das Problem besteht nur, bei "halben" rows (siehe Bild unten).
Klicke ich hier auf den RowHeader, wird weder das OnCellClick noch das OnRowHeaderMouseClick event aufgerufen.

Das ist meine ich mit einer halben Zeile (rot eingerahmt):
siehe Anhang

19.08.2010 - 08:13 Uhr

hey!
Danke für deine Post, aber leider springt er in dem beschriebenem Fall gar nicht in den Eventhandler hinein 😦
Sobald ich auf eine untere Zeile klicke, die nur halb da ist, tut das nicht mehr, ist das vielleicht ein Bug des DataGridView's?

16.08.2010 - 11:39 Uhr

Hallo liebe Community,

Ich hänge zur Zeit bei einem Problem in meinem DataGridView.

Ausgangssituation:
Ich habe ein eigenes DataGridView control erzeugt, indem ich von der Klasse DataGridView erbe und diverse Methoden/Events überschreibe.
So auch getan mit dem OnCellClick() Event in dessen Behandlungsroutine eigener Code ausgeführt werden soll. Zudem habe ich die "graue" Spalte in der der schwarze Pfeil angezeigt wird eingeblendet.

Ist das DataGridView nun soweit gefüllt, dass die Scrollbars eingeblendet werden, entstehen am unteren Rand "halbe" Zeilen. Also Zeilen die nicht mehr ganz angezeigt werden können und demnach nur noch halb erscheinen.

Nun folgendes Problem:
Klicke ich in solch eine halbe Zeile, wird der Code in meiner überschriebene OnCellClick() Behandlungsroutine ausgeführt. Klicke ich jedoch auf die "graue" Spalte vor der Zeile, wird die Behandlungsmethode nicht aufgerufen (funktioniert aber sonst in allen anderen Zeilen, also allen, die nicht "halb" angezeigt werden). Bei solch einem Klick, wird die OnCellClick() Behandlungsmethode auch gar nicht aufgerufen, bzw. wird zu keinem gesetzten Breakpoint gesprungen.

Ist dies ein Bug, oder gibt es die Möglichkeit noch irgendein Property zu setzen, welches Klicks auf die graue Spalte gleich Klicks auf Zellen im Grid behandelt, oder benutze ich das falsche Event?

Ich würde das Problem gerne lösen, eine Alternative wäre jedoch die graue Spalte auszublenden.

Grüße,
inva

29.09.2009 - 11:03 Uhr

Hey,
Danke für die Info's!
Über die ACLs bin ich auch schon gestolpert, leider hats bisher nicht geklappt, die Ordner-Berechtigungen während der Installationsroutine zu setzen.

Ich werds mir nochmal anschauen. Aber danke für die Tipps, Info's und den Link.

Grüße,
inva

25.09.2009 - 11:01 Uhr

Hey liebe Community,
Aufgrund eingeschränkter Benutzerkonten und Vistakompatibilität, wollen wir die Logfiles und Lizenzdateien für unsere Software, im best case Anwendungsbezogen, im CommonAppDataPath ablegen (AllUsers\Anwendungsdaten).
Soweit so gut!

Leider kommen uns hier die Schreibrechte der unterschiedlichen Windowsbenutzer ind ie Quere. Da wir gerne Anwendungsdaten auch gern für alle Benutzer zur Verfügung stellen würden (Logfile, Lizenzdateien).
Was meiner Meinung nach auch Sinn macht, da nicht jeder Nutzer die Software neu Lizenzsieren soll!
Folgendes Szenario: Benutzer A startet die Software, logfile wird angelegt. Benutzer A meldet sich ab. Benutzer B meldet sich an und startet ebenfalls die Software, nun kann er aber nicht ins logfile schreiben, da er für diese Datei keine Schreibrechte besitzt, weil er nicht Ersteller/Eigentümer dieser Datei ist.
Bei der Lizenz existiert folgendes Problem, Admin installiert Software, bekommt 30 Tage Testlizenz. Nach den 30 Tagen wird eine unbeschränkte Lizenz bestellt und eingefügt. Wird dies durch einen normalen Benutzer getätig, kann die alte Lizenzdatei nicht überschrieben werden.

Es ärgert mich ein wenig, dass ich über die Problematik Anwendungsbezogener kaum gute und aussagekräftige Dokumentation finde. Zwar sagen alle Dokumente, Dateien sollen ins CommonAppData geschrieben werden, aber keine erwähnt, dass die Daten trotzdem mit den rechten des erstellenden Benutzers verknüpft sind. Wodurch natürlich nur er, das logfile schreiben könnte.
Dafür muss es doch eine offizielle Richtlinie geben, oder?!
Das ist doch ein normaler Fall bei Software Entwicklungen. ich wäre enttäusacht, wenn es nur über einen kleinen hack funktioniert indem man bei der Installation die Ordner im Anwendungsdatenverzeichnis schon erstellt und die Rechte explizit manuell setzen muss um allen den Zugriff zu ermöglichen.

Grüße,
inva

26.06.2009 - 14:26 Uhr

Hey herbivore,
Also bei mir geht das Attachment nicht ... Aber das könnte auch an unserer super tollen firewall im Betrieb liegen. Ich versuch es später von zu Hause einfach nochmal.

Danke für die Antworten.

26.06.2009 - 10:46 Uhr

Hey Joetempes,
Danke für dein Kommentar.
Leider ist das Attachment in dem Post hinter dem Link von dir, nicht mehr verfügbar.

Grüße,
inva

26.06.2009 - 10:13 Uhr

Liebe Community,
Ich habe mich bereits mit dem Artikel [Tutorial] Das neue Konfigurationsmodell im .NET Framework 2.0 einsetzen. beschäftigt.
Aber ich habe leider eine etwas verzwickte Anforderung.
Ich habe eine App, die gewisse "Einstellungen" (Inhalte aus Textboxen) des Benutzers speichern und beim Neustart der App wiederherstellen soll.
Nun sollen die Einstellungen aber Anwendungsbezogen und nicht Nutzerbezogen sein. Sprich, jeder Nutzer soll beim App start, die selben Einstellungen zu sehen bekommen (bzw. die, die der vorherige auch hatte) und diese aber ebenfalls ändern/anpassen können. Nun habe ich es aber so verstanden, nicht in die app.config aus der App heraus schreiben zu können.
Ich möchte gern das neue Konfigurationsmodell verwenden und keine proprietäre Lösung bauen, mit der ich eventuell Probleme bzgl. Zugriffsrechte z.B. unter Vista bekommen würde.

*edit*
Ich habe zudem z.Z. noch eine log-datei die ich ins exe-Verzeichnis schreibe ...

Oder ist dies so gar nicht möglich?

17.06.2009 - 15:20 Uhr

Hey Community!
Danke für die flotten Antworten und Ideen.

Aber ich habs eben selbst rausgefunden. Meine Config-Klasse hat mich ein wenig geärgert, bzw. wenn in der user config nix drinne steht, sind die dafür passenden Member eben auch leer und wenn man bei denen dann .ToString() aufruft, knallts.
Fehler behoben und Prüfung eingebaut 😃

Danke für eure Unterstützung!

17.06.2009 - 14:49 Uhr

Hallo liebe Community,
Wie im Titel kurz beschrieben, habe ich eine Applikation die beim Start abschmiert.
Dies tut sie kurioserweise nur auf anderen Rechner und wenn ich dessen kompilierte (release version) .exe auf dem Entwicklungsrechner starte.

Beim Starten aus dem Studio heraus (Release & Debug) gibt es keine Probleme.

Bevor die App bei mir lokal abschmiert, kommt ein hübsches Just-In-Time Debugger Fenster, welcher sich aber nicht an den Prozess dranhängen kann. Zudem sagt dieses Fenster noch, dass eine Null-Referenced Exception aufgetreten sei. Die ich leider nicht nach voll ziehen kann.

Habt ihr Ideen oder hattet ihr schon einmal ähnliche Probleme?

Grüße,
inva

10.06.2009 - 12:06 Uhr

vielen lieben Dank Spooky!

10.06.2009 - 11:16 Uhr

Hallo liebe Community!
Folgender Umstand plagt mich ein wenig:
Ich habe eine Consolen App, die von einem anderen Prozess angestoßen werden soll.
Nun möchte ich aber gern, dass diese, meine, Console App in das Consolen Fenster der aufrufenden oder ggf. sogar in ein eigenes Consolen Fenster schreibt.

Daher wäre meine Frage
a) Gibt es eine Möglichkeit die Prozess-ID des Callers zu ermitteln?
b) Kann ich es erzwingen, dass meine App, ein eigenes Consolen Fenster öffnet?

Grüße,
inva

*edit*

achja, wenn man zu faul ist selber fix zu gucken.

Die Lösung für b), die bevorzugt war hab ich!

So geht's:


[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool FreeConsole();

[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool AllocConsole();

static void Main(string[] args)
{
    /* do something here
        ...
        ...
        ...
   */
   AllocConsole();

   Console.WriteLine("something");
   // wait for input
   Console.ReadLine();

   FreeConsole();
}


21.04.2009 - 09:03 Uhr

Guten Morgen Norman-Timo!

Also, deine Idee habe ich soweit verstanden. Aber nun ist mein 2. controll ja "blöderweise" ein 'echtes' controll und ich möchte ja auch mehr als einfach nur ein Rechteck malen, sondern auch den Inhalt des 2. controlls anzeigen.
Wie in meinem Beispiel gezeigt ist das 2. Controll auch ein DataGridView, ebenfalls ein eigenes abgeleitetes.

Dein Code-Beispiel brachte mich auf folgende Idee:

  • ich überschreibe die OnPaint des 2. controlls und merke mir dessen graphics objekt
  • das gemerkte graphics objekt und zeichne es im überschriebenen OnPaint() meines DataGridViews
    -> will ich das jedoch machen, bekomme ich eine OutOfMemory Exception beim scrollen (wenn also die position des 2. controlls verändert werden soll)

hier der Code (OnPaint() des DGVs):


protected override void OnPaint(PaintEventArgs e)
{
    // let the base do its paint
    base.OnPaint(e);
    // now draw the details grid over the main grid
    if (refToDetailsGrid.PaintEventArgs != null)
    {
        refToDetailsGrid.PaintEventArgs.Graphics.DrawRectangle(new Pen(Color.Black, 1), refToDetailsGrid.PaintEventArgs.ClipRectangle);
    }
}

Also ich kann mir schon denken, dass es dort kracht, aber ich weiß nicht was ich dagegen tuen soll. Vorallem, zeichnet mir DrawRectangle doch auch nur ein Rechteck und nicht die ganze Grafik. Da aber mein 2. DGV (2. controll) auch child-controlls hat (Scrollbar, rows ...) bin ich doch zwingend an die base.OnPaint() des 2. DGVs angewiesen, damit dies korrekt gezeichnet wird, oder?
Falls dies so richtig ist, bedeutet das doch, dass es nicht möglich ist beide controlls gleichzeitig zu zeichnen?!

Aber noch eine Alternative dazu, wobei die bisher nur als Idee existiert aber die Umsetzung noch fehlt bzw. das "wie" ichs umsetzen kann.
Undzwar: ich kann doch die controlls stink normal via OnPaint() zeichnen lassen unterdrücke aber den Refresh zum Bildschirm solange bis beide OnPaint's abgearbeitet sind, refreshe den Bildschirm und für den Nutzer sieht es zumindest so aus, als werden sie gleichzeitig gezeichnet. Oder ist dies so nicht realisierbar?

Grüße und ein großes Dankeschön für deine bisherige Mühe!

inva

20.04.2009 - 14:52 Uhr

Hey Norman-Timo,
Ich habe das schonmal so ausprobiert, aber, dann habe ich doch nur das Graphics object von DGV, in dem ist doch das 2. controll gar nicht enthalten.
Also, wenn ich es wie folgt mache.

OnPaint() des abgeleiteten DGVs überschreiben
PaintMe() des 2. Controlls aufrufen mit PaintEventArgs von OnPaint() als Parameter
OnPaint() des 2. Controlls aufrufen mit PaintEventArgs aus PaintMe() [also PaintEventArgs aus DGV]
Dann habe ich trotzdem den "schlieren-Effekt" und die stelle an der das Controll ist ist grau.

anbei mein Code


// 1. Controll (DGV)
class CMainDataGridView : DataGridView
    {
        private CDetailsDataGridView refToDetailsGrid;
        public CDetailsDataGridView DetailsGrid
        {
            set { refToDetailsGrid = value; }
            get { return refToDetailsGrid; }
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            // call Paint from details DGV
            refToDetailsGrid.PaintMe(e);

            // at last, call the base OnPaint()
            base.OnPaint(e);
        }
    }

// 2. controll (auch DGV)
class CDetailsDataGridView : DataGridView
    {
        private PaintEventArgs Helper;
        public void PaintMe(PaintEventArgs e)
        {
            Helper = e;
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(Helper);
        }
    }

20.04.2009 - 13:20 Uhr

Hallo Norman-Timo,
Danke für deinen Post! Deine Idee klingt logisch und gut.
Aber ich bin leider nicht allzu fit in GDI Geschichten.
Daher frage ich mich, wie ich das "selbst zeichnen" im Code umsetze.
Muss ich mir dafür das Graphics object des 2. controlls besorgen und rufe dessen .Draw...() auf ?!

Wie ich die zu überschreibene OnPaint() zu realisieren habe ist mir klar, denke ich.
Aber um Missverständnisse zu vermeiden, ein kurzes Snippet:

OnPaint() vom DGV:


protected override void OnPaint(PaintEventArgs e)
{
     // call Paint from second control           
     myControll.Paint(e);

     base.OnPaint(e);
}

... wie müßte nun die Paint() im 2. controll aussehen?! Mir fehlen hierfür leider jegliche Vorstellungen, da ich mich bisher nicht/wenig mit Oberflächen und der Paint-"Struktur" von Windows beschäftigt habe.

20.04.2009 - 10:26 Uhr

Hallo Liebe Community,
Kurz die Vorgeschichte:
Ich habe ein DataGridView im Hintergrund. Hier werden, wer hätte es gedacht, Daten angezeigt. Nun habe ich über dem DataGridView ein 2. controll eingeblendet, welches als das DataGridView iim Hintergrund als Parent hat. Das 2. controll hat eine "fixe" position im DataGridView, es soll sich also beim scrollen mit hoch oder runter bewegen.
Das funktioniert auch alles soweit.
Nun habe ich aber folgendes Problem. Beim Scrollen zieht nun das 2. controll nach. Es bewegt sich also nicht flüßig wie das unterliegende DataGridView sondern bewegt sich recht hackend/ruckelig und zieht einfach nach.
Die Ursache ist wohl folgende: Beide controlls werden zu unterschiedlichen Zeiten gezeichnet, was eben zur Folge hat, dass das 2. controll später gezeichnet wird, wodurch dieser "nach ziehen" Effekt entsteht.
Eine Idee wäre, das DataGridView-Controll ab zu leiten um ein eigenes Controll zu erstellen und dessen OnPaint() methode zu überschreiben um in dieser beide Controlls zu zeichnen. Nun weiß ich aber nicht so recht wie ich das anstellen soll.

Ist meine die Idee überhaupt erfolg versprechend oder ist der Ansatz schon falsch?
prinzipiell quält mich hier zu auch noch die Frage, ob es überhaupt möglich ist 2 controlls gleichzeitig zu zeichnen bzw. zumindest, gleichzeitig auf dem Bildschirm zu aktualisieren, sodass es für den Benutzer gleichzeitig aussieht.

Grüße,
inva

04.12.2008 - 08:53 Uhr

Gute Morgen, Danke euch zwei für die hilfreiche Antwort!

Die Idee, den Dateizugriff in einer extra Methode zu kapseln hatte ich auch schon. Wollte aber erst einmal abwarten, was hier für Reaktionen kommen.

Der Vorschlag von herbivore klingt ganz gut, ich denk ich probiere es einmal damit.

Nochmals, besten Dank für die Reaktionen und Ideen!

Liebe Grüße,
inva

03.12.2008 - 17:36 Uhr

Hallo liebe Community,
eine kurze Frage.
Nachdem es in C# nicht möglich ist Defaultparameter für Funktionen zu definieren, muss man die gewünschte Funktion überladen.
Ich habe eine Logging Klasse, in welcher, natürlich, ein Dateizugriff stattfindet.
Dieser ist jedoch innerhalb des locks. Nun soll diese funktionalität natürlich eine beide Methoden. Jedoch greifen beide Methoden auf die selbe log Datei zu, daher meine Frage, ob folgender Code möglich ist und einen doppelter Zugriff auf die log datei dadurch verhindert wird. Da ich mir unsicher bin ob es so Möglich ist, wie ich es mir vorstelle.

Vielen Dank im Vorraus für euer Feedback.


private static Object thisLock = new Object();

public static void Add(string strNew, bool bError)
{
     // lock the code segment below to avoid multiple access to the Logfile
     lock (thisLock)
     {
           .
           .
           .  
     }
}


public static void Add(string strNew)
{
     // lock the code segment below to avoid multiple access to the Logfile
     lock (thisLock)
     {
           .
           .
           .  
     }
}

MfG
inva

25.03.2008 - 10:28 Uhr

Yep - genau das wars! Besten dank!

25.03.2008 - 10:15 Uhr

Heyho liebe Community!
Ich habe eine kleine APP die eine Datei öffnen, eine DLL initialisieren/laden und anschließend noch etwas zeug erledigen soll.
Nun stehe ich da aber vor einem Problem. Sobald ich die Datei via OpenFileDialog geöffnet habe und im Anschluss die DLL laden will, erhalte ich immer den Fehler, das die DLL nicht gefunden werden konnte, trotzdem ich explizit den Pfad angebe.
Das Problem habe ich erkannt, weiß aber keine Lösung: Intern wird anscheinend der Pfad der via OpenFileDialog geöffneten Datei irgendwo/irgenfdwie gespeichert und trotz der absoluten Pfadangabe beim Laden der DLL weiterverwendet. Weil, öffne ich eine Datei im gleichen Verzeichnis in welchem auch die DLL liegt, gibt es keine Probleme.

Hatte jemand vielleicht bereits einmal ein ähnliches Problem und kann mir einen Tipp geben?

Liebe Grüße,
inva

16.05.2007 - 16:01 Uhr

Original von herbivore

Hallo inva,

warum passt es nirgends rein? Infrastruktur ist das Forum für Fragen zur IDEs. Visual Studio steht sogar explizit in der Forenbeschreibung. Und deine Frage ist ja eine Frage zu VS. ==> verschoben

herbivore){gray}

Oha, Sorry, habe ich wohl in meinem Eifer überlesen. Sorry.

Original von winSharp93
Das Problem wird das .Net Framework sein - VS 2003 verwendet 1.1 und VS 2005 verwendet 2.0.
Somit kannst du Teile deines Codes nicht mehr verwenden, müsstest alle Verweise umändern, auf das neue Konfigurationsmodell verzichten usw.
Außerdem könnte der Designer das Projekt gar nicht laden.

Es macht also auch keinen Sinn ein 2005er Projekt im 2003er Format zu speichern.
Wenn du es trotzdem unbedingt brauchst: Projektteile einzeln im 2003er hinzufügen und gegebenenfalls umschreiben.

Danke für die Info's.
Die Idee kam mir dann auch gerade, einfach die .cs Files zu nehmen, einzufügen und ggf. umzuschreiben. Denke es gibt wohl aufgrund des, wie von dir schön beschrieben, .NET Frameworks keine weitere Möglichtkeit.
Vielen Dank 😉

16.05.2007 - 15:46 Uhr

Heyho!

Da es sonst nirgends rein passt hoffe ich mit meiner Sorge hier in der richtigen Rubrik gelandet zu sein!
Undzwar würde mich interessieren ob es möglich ist, ein im Visual Studio 2005 generiertes Projekt/generierte Solution im "Format" des Visual Studio's 2003 zu speichern. Leider sind die Projekte standartmäßig nicht abwärtskompatibel 🙁 .

Hätte eventuell jemand von euch einen Tipp für mich?

Liebe Grüße,
inva

14.05.2007 - 13:53 Uhr

Danke für den guten Ansatz!

14.05.2007 - 12:53 Uhr

Hallo liebe C#-Community!
Ich habe vor eine kleine Stoppuhr zu schreiben.
Nun bin ich am Überlegen wie ich dies grafisch am Besten realisiere.
Ich möchte es gern wie folgt darstellen: HH : MM : SS
So weit so gut, nun könnte ich ganz simple hergehen und einfach 3 Labels nehmen, dass eine für die Anzeige der Stunden usw.. Nun ist jedoch meine Frage, ob dies eventuell noch etwas "hübscher" geht? Gibt es dort vllt in .NET schon ein Control o.ä. was mir bei der Darstellung behilflich ist? Ich denke, es müßte doch schon irgendsoetwas in der Richtung geben, sodass ich nicht manuell die Zahl im Label abprüfen muss, die bei jedem Timer-Tick Event um eins hochgezählt wird. Oder ich schmeiß alles in ein Label? NUr wüßt ich hier nichtso spontan wie ichs realisieren sollt das die Sekunden bei 59 wieder auf 0 springen und die Minuten um eins hochzählen.
Wahrscheinlich ist es am einfachsten Labels zu nehmen, aber ist dies auch am effizientestem?
Es geht mir lediglich um die visuelle Darstellung.

Freue mich auf eure Meinungen und Antworten!

Grüße,
inva

20.04.2007 - 14:46 Uhr

Besten Dank !

20.04.2007 - 14:37 Uhr

Hallo liebe Community!
Wie bereits im Topic kurz erwähnt, suche ich eine Möglichkeit ein oder mehrere Forms aus meinem C# Code heraus zu minimieren.
Ist dies überhaupt prinzipiell möglich?
Ich habe bereits alle Methoden und Eigenschaften der Form Klasse gewälzt aber leider nichts passendes gefunden. Aber irgendwie muss Windows es ja auch meistern das es ein Fenster minimiert bekommt und in der Statusleiste ablegt.
Bei mir handelt es sich nun leider noch um eine MDI-Anwendung, in welcher ich ein oder mehrere Fenster gern minimieren und eben unten ablegen möchte.
Jedoch bin ich des Rätsels Lösung noch kein Stück näher gekommen.

Ich hoffe hier kann mir jemand helfen.
Ich bedanke mich schonmal im voraus für eure konstruktiven Beiträge!

Grüße,
inva