Laden...
Avatar #avatar-3234.gif
JunkyXL myCSharp.de - Experte
Software Developer Ein paar Bytes südlich von string Dabei seit 02.05.2006 1.665 Beiträge
Benutzerbeschreibung
Code-Junky

Forenbeiträge von JunkyXL Ingesamt 1.665 Beiträge

10.02.2010 - 09:17 Uhr

Registrier das AfterSelect Event von deiner TreeView und fülle die ListView anhand der Informationen aus DirectoryInfo.GetFiles().
Das DirectoryInfo bekommst du, indem du die Ordnerinformationen z.B. im Tag jeder TreeNode speicherst.

08.02.2010 - 12:10 Uhr

Wenn du die Beschriftungslabels auf AutoSize = true stellst oder lässt und ein TableLayoutPanel nimmst, sollte das normalerweise kein Problem sein.

Du könntest so etwas probieren:

04.02.2010 - 08:55 Uhr

Speicher dein Grid Layout mit einem beliebigen und eindeutigen Key (am Besten Guid) in der Datenbank ab.
Wo ist da genau das Problem?

28.01.2010 - 08:20 Uhr

Dann würde ich mich in erster Linie an den Entwickler wenden, sofern dieser noch erreichbar ist.

25.01.2010 - 08:40 Uhr

Du kannst das Control in ein UserControl packen, welches die Adorner zeichnet, sobald das Click-Event auf dem Control ausgelöst wird bzw. sobald das Control den Fokus bekommt.

15.01.2010 - 16:56 Uhr

Was ist Standard? Dass er die Anwendung auch beim Timer "blockiert"? Dass die Windows ProgressBar ab Vista animiert ist.

Du hast doch einen konkreten Lösungsvorschlag von mir bekommen.
Starte einen System.Windows.Forms.Timer und im Tick-Event tust du ihn wieder deaktivieren (timer.Enabled = false) und schließt dort auch deine Form.

Und nein, es blockiert nichts. Der Timer ist genau dafür gedacht, nicht zu blockieren.

15.01.2010 - 14:10 Uhr

Das ist Betriebssystem Standard..
Wenn du die Form danach sowieso schließt, müsste dir das doch egal sein?!

Du kannst die Visual Styles Anwendungsweit ausschalten, aber da ist der Seiteneffekt wohl zu groß. Müsstest du also ergooglen.

15.01.2010 - 13:56 Uhr

Die ist für den Style "Marquee" gedacht.. Kannst ja mal bisschen damit rumspielen.
Wenn du die 100 visuell voll erreichen willst, würde ich einen Timer starten (nach dem 100 gesetzt wurden), der nach 500ms die Form schließt.

15.01.2010 - 13:37 Uhr

😃

Das ist normal. Ich hab das mir fast gedacht, dass du deshalb zu dem Schluss kommst, da du die Form schließt.
Seit Vista wird die ProgressBar "animiert" gefüllt. Deswegen dauert es einen Augenblick, bis der eingegebene Wert (optisch) erreicht ist.

15.01.2010 - 13:26 Uhr

Außerdem gibt das eventuell eine unnötige hässliche Exception.

Wenn this.Controls.Find() kein Contrl findet, knallts beim Zugriff auf Index 0 [0].

ergo:

Control[] controls = this.Controls.Find(txtname, true);
if (controls.Length == 1 && controls[0] is TextBox)
{
    txt = (TextBox)controls[0];
}
15.01.2010 - 13:20 Uhr

Wie genau hast du denn deine Form "verglast"? Zeig mal den Codeteil, der dafür verantwortlich ist.

15.01.2010 - 13:17 Uhr

Also, wenn du so ein Control selber erstellen willst, dann tust du das im Normalfall mit dem Erben von System.Windows.Forms.Control und der Überschreibung der OnPaint()-Methode.

15.01.2010 - 13:14 Uhr

Das einzige, was ich mir vorstellen könnte, ist, dass du den Max-Wert zwischendurch änderst.
Ansonsten bau das nochmal in einem Testprojekt zusammen. Spätestens da sollte das Missgeschick klar werden.

Schließt du den Dialog mit der ProgressBar direkt wieder, wenn diese 100 erreicht hat? (sofern es eine separate Form dafür gibt)

11.01.2010 - 13:47 Uhr

Wenn du dir einen gewissen Zustand merken willst, dann auf keinen Fall über einen Bildvergleich (der außerdem viel zu komplex wäre), sondern über eine zusätzliche Variable, die du setzst, wenn du das Hintergrundbild vom Button änderst.

08.01.2010 - 14:12 Uhr

Das mit dem OnBackground reicht noch nicht [...] so richtig will das alles noch nicht.

Inwiefern drückt sich das aus?

07.01.2010 - 09:57 Uhr

ich möchte jedoch, dass analog einer ComboBox eine Form geschlossen wird, wenn ausßerhalb der Form geclickt wird!

Dafür gibt es das Deactivate Event der Form, auf der sich die ComboBox befindet. Wird das Event ausgelöst, weißt du, dass wohl außerhalb der Form geklickt worden ist.
Das ist eine viel saubere Lösung.

07.01.2010 - 08:35 Uhr

Gehts schöner? Und kann man das Panel noch beschneiden / partiell Transparent machen?

Deine Lösung ist so wie du sie hast, endgültig. Daran gibt es eigentlich nichts zu verbessern.

Bezüglich der Transparenz würde ich OnPaintBackground in deinem UserControl überschreiben und z.B. die Rundung per e.Graphics.FillElipse() mit einem beliebigen Alpha-Wert (0-255) zeichnen.

07.01.2010 - 08:22 Uhr

Das DefaultValueAttribute gibt nur an, das bei einem bestimmten Wert der Wert im PropertyGrid nicht fett markiert wird.

Und dass man per 'Reset' wieder auf diesen DefaultValue zurücksetzen kann.

06.01.2010 - 12:30 Uhr

Ein echt genialier, nein, ein geiler Film!
Seit Jahren wieder ein Film bei dem ich die Realität um mich herum komplett weggeblendet hab. Nach dem Film habe ich gemerkt, dass ich irgendwie die ganze Zeit mit in Pandora dabei war.
Auch endlich wieder ein Film der keine banale und simple Handlung hat. Ich bin begeistert und werde ihn mir sicherlich nochmal anschauen.

Ich war allerdings vom 3D Effekt etwas enttäuscht. In den einigen Szenen, in denen der 3D Effekt erkennbar sein sollte, war er es nicht so, wie ich es z.B. aus dem IMAX Kino gewohnt bin, in denen spezielle 3D Filme gezeigt werden. Das hat mich aber im Großen und Ganzen überhaupt nicht gestört, nur etwas schade.

Aber sonst ein Top Film, für den es auf jeden Fall lohnt, ins Kino zu gehen.

05.01.2010 - 13:16 Uhr

JuyJuka & pdelvo:
Freaks! 😉

27.12.2009 - 14:57 Uhr

Wie blöd, ich wollte ja eigentlich direkt am 24. Frohe Weihnachten wünschen.

Nun gut, dann möchte ich doch wenigstens hoffen, ihr hattet ein schönes und besinnliches Weihnachtsfest.
Einen guten Rutsch und auf ein weiteres tolles Jahr auf myCSharp!

21.12.2009 - 14:40 Uhr

Noch so ein heißer Kandidat, auch wenn nicht so gravierend:

public bool IsAlreadyInUse(string censored)
{
    // Indicates if the censored is already in Use
    bool isAlreadyInUse = false;

    // Loop through each censoredList
    foreach (CensoredItem item in censoredList)
    {
        if (item.Censored == censored)
        {
            isAlreadyInUse = true;
            break;
        }
    }

    // Return the Result
    return isAlreadyInUse;
}

Aus Ein-Zeiler mach X-Zeiler
So kann man auch ne Mücke zum Elefanten machen..

Sowas geht auch viel kürzer, indem man eine Contains-Methode in die Collection von censoredList einbaut.

public bool IsAlreadyInUse(string censored)
{
    return censoredList.Contains(censored);
}

Noch "schneller" gehts natürlich mit Extension Methods und LINQ 😉

public bool IsAlreadyInUse(string censored)
{
    return censoredList.Any(c => c == censored);
}

Original-Bezeichnungen wurden mit "censored" vertauscht.

21.12.2009 - 12:00 Uhr

Stimmen die Datentypen überein?

04.12.2009 - 15:26 Uhr

Naja, wär doch eine Beleidigung für die Methode, diese wegen nur 1 Zeile extra zu erstellen 😉

04.12.2009 - 10:19 Uhr

TheKleene: Ist dir langweilig? 😉

02.12.2009 - 08:37 Uhr

Erwähnt sei, dass e.Label immer :::

27.11.2009 - 10:34 Uhr

Solange sich die Assembly im GAC oder im .exe Verzeichnis befindet, geht das ohne die Assembly als Verweis einzubinden.
Das hat man bei den Framework Controls überall so gemacht, da man sonst eine zirkuläre Refferenz zwischen System.Windows.Forms und System.Design hätte.

Du könntest ja testweise eine Assembly mit einem eigenen ControlDesigner erstellen und vor dem Starten die Assembly umbenennen, sodass sie nicht mehr gefunden wird. Wenn das Programm ohne Meckern weiterläuft, dann wird sie wohl nur zur Designzeit geladen.

27.11.2009 - 10:08 Uhr

Irgendwie verstehe ich deine Frage nicht.
Aus welcher DLL soll sich .NET sonst den System.Windows.Forms.Design.ScrollableControlDesigner ziehen?
Also muss die entsprechende Assembly ja in die AppDomain geladen werden.

05.11.2009 - 09:37 Uhr

Evtl. wird noch dieser alte Code ausgeführt. Clean machen, evtl. VS neu starten.
Schon mal mit F11 reingesteppt?

05.11.2009 - 08:36 Uhr

Die Lösung solltest du in einer Antwort auf deinen eigenen Beitrag hinschreiben.

29.10.2009 - 09:23 Uhr

Zitat von: herbivore
Hallo zusammen,

if (this == null)  

ist schon sehr genial...

das ist echt eine perle unter den horror codes 😃
Nein, das kann eine durchaus sinnvolle Abfrage sein.

Jetzt weiß ich immerhin warum man virtuelle Methoden der Klasse nicht im Konstruktor aufruft/aufrufen sollte.

Ich kann aber zu 99,9% sagen, dass das nicht die Absicht unseres Mitarbeiters war.
Das ging eher in die Richtung "Sicher ist sicher" so wie hier:

Aus der SharpZLib:

  
public bool IsMatch(string name)  
{  
    return (IsIncluded(name) == true) && (IsExcluded(name) == false);  
}  
  
23.10.2009 - 14:54 Uhr

Eine weitere Delikatesse:

// Check this
if (this == null)
{
    return false;
}

und

if (this.Disposing == true)
{
    return false;
}

if (this.IsDisposed == true)
{
    return false;
}

return true;
23.10.2009 - 10:38 Uhr

Ansonsten VS neu installieren. Den Fehler konnte ich bei mir (Windows 7 VM) nicht feststellen.

22.10.2009 - 08:36 Uhr

Werde mir demnächst die Ultimate (64 bit) zulegen.

19.10.2009 - 16:44 Uhr

Unless you need reference type semantics, a class that is smaller than 16 bytes may be more efficiently handled by the system as a struct.
Interpretiere ich jetzt allerdings eher so das man Klassen unter 16 byte meiden sollte aber eher nicht so das structs über 16 byte langsamer wären.

Ich denke, das sagt das ja implizit aus. Wenn man <16 Byte eher struct verwenden sollte, dann wohl ab 16 Bytes auch fast automatisch class.

14.10.2009 - 14:37 Uhr
[TypeConverter(typeof(DeinTypConverter))]

über dem Property setzen.
Wobei DeinTypConverter von TypConverter erben muss. Bei google & Co. solltest du Beispiele finden, einen ordentlichen Typ Converter zu schreiben.

09.10.2009 - 12:02 Uhr

Wir haben das Problem teilweise so gelöst, dass wir bestimmte Dialogteile nur bei Bedarf erzeugen und hinzugefügen (per Toolbar/Ribbon Button z.B. "Details", "Bearbeiter").
Oft ist es nämlich der Fall, dass nicht alle Controls gebraucht werden und deshalb zunächst nur die wichtigsten per default angezeigt werden.

Außerdem geschieht das Daten laden asynchron.

09.10.2009 - 11:18 Uhr

wer soll denn die Exception werfen? Die Serialisierungsmethode?!
Das Framework kann doch gerade nicht erkennen, ob unverwaltete Ressourcen benutzt werden. Muss es ja nicht, oder?
Aber egal ob du das nun richtig findest oder nicht. Es ist so wie es ist (und m.E. aus gutem Grund) und es nützt nichts darüber zu lamentieren. 😃

Ich weiß, ich wollte nur eine handfeste Begründung warum das explizite Kennzeichnen Sinn macht 😃

09.10.2009 - 10:17 Uhr

Objekte sind nicht grundsätzlich automatisch serialisierbar, z.B. dann nicht, wenn sie unverwaltete Ressourcen enthalten. Daher muss man mit [Serializable] explizit kennzeichnen, dass Objekte der Klasse serialisierbar sind.

Wo ist das Problem, wenn solch eine Klasse dennoch versucht wird, zu serialisieren? Dann kann doch von mir aus eine Exception geworfen werden, dann muss ich mir eben was anderes einfallen lassen.
Wo habe ich denn also wirklich den Nachteil? Eine Exception bekomme ich so oder so, aber dann nicht weil ich ein Flag vergessen habe, sondern weil es eine echte Ausnahme war.

Ich fände es auch logisch gesehen besser, wenn das NotSerializable Attribut auch auf Klassen angewandt werden kann.

Ob es fragwürdig ist, dass dann z.B. B/DAL Klassen serialisierbär wären, ist doch nicht tragisch. Wer's braucht...
Mir sind in .NET und viel öfters in 3rd Party Bibliotheken häufig Objekte über den Weg gelaufen, die ich abgeleitet habe aber nicht serialisieren konnte, weil die betreffende Basisklasse nicht als Serializable markiert war. Das ist doch mehr ein Hindernis...

diese disskusion hatten wir schon mal 🙂
>

Dabei hatte ich doch (wenn auch nur schnell) hier im Forum nach "Serializable" gesucht 😭

09.10.2009 - 09:18 Uhr

Hallo zusammen,

eine Frage, die sich mir schon des öfteren gestellt hat und heute morgen wieder aktuell geworden ist, ist: Warum muss man eine Klasse explizit mit dem Serializable Attribut versehen, um ein Objekt dieser Klasse zu speichern?

Laut Reflector ist das Attribut nichts weiter als ein Flag. Meiner Meinung nach sollte es doch kein Problem sein, wenn jede Klasse grundsätzlich serialisierbar wäre.
Mir fällt zumindest kein Grund ein, warum das nicht erwünscht sein sollte.

Ich finde es eher lästig, wenn man es mal vergisst oder die Klasse später doch in ein Serialisierungsverfahren läuft. Beim Remoting passiert das hin und wieder.

Ich habe mich jetzt auch nur dazu entschlossen, das mal in die Runde zu werfen, da wir heute morgen festgestellt haben, dass unser Cache-Server deswegen seit einem halben Jahr nicht funktioniert. Das hat mich dann doch ziemlich aufgeregt.

Und nur, weil ein Objekt nicht als [Serializable] markiert war und der Server die Daten wegen der resultierenden Exception nicht gecached hat.
Das Ganze war in dieser Zeit völlig unbemerkt, da die Exception still und leise weggeloggt wurde. Das ist aber auch wieder ein anderes Thema.

08.10.2009 - 12:30 Uhr

danke zommi, dass mit return is natürlich dann klar!! aber irgendwie stehe ich gerade auf der leitung, d.h. ich müsste die ganzen werte zum bsp. als array übergeben, dann würde es klappen oder denke ich einfach wieder falsch??

double sinus()
{
    double ret = 0; // <--
    double i = 1;
    double j = 1;
    
    for (i=1; i < 100000; i++)
    {
        for (j=1; j < 100000; j++)
        {
            ret += (sin(i * j)); // <--
        }
    }

    return ret; // <--
}
06.10.2009 - 08:49 Uhr

Eben in unserem Sourcecode entdeckt schäm:

Boolean failure = false;
try
{
    // ...
    failure = false;
}
catch (Exception ex)
{
    failure = true;
}

// ...

if (failure)
{
    return false;
}
else
{
    return true;
}

Wurde erst kürzlich geschrieben.. 8o

02.10.2009 - 12:43 Uhr

Vielen Dank zommi!
strcpy hat hier geholfen.

Hallo kleines_eichhoernchen,

[In, Out] scheint nichts zu bewirken, zumindest macht es keinen Unterschied.

02.10.2009 - 11:50 Uhr

Habe das jetzt so geändert. StringBuilder bleibt nach Aufruf leer...

Header:

#include "stdafx.h"

extern "C"
{
    void __declspec(dllexport) GetString(char* str, LPTSTR key);
}

CPP:

void GetString(char* str, LPTSTR key)
{
    key = GetString(str);
}

.NET:

StringBuilder sb = new StringBuilder(256);
GetString("test", sb);

[DllImport("TestDLL.dll")]
static extern void GetString(string str, StringBuilder key);

Gebe ich den StringBuilder als out Parameter rein, ist er anschließend null, ansonsten instanziert ohne Inhalt.
Was nun?

02.10.2009 - 10:37 Uhr

Ich bin gerade dabei eine MFC Anwendung zu erstellen. Wenn du mir das ersparen willst, wäre es nett, wenn du mir bei dem StringBuilder helfen könntest. Habe die Variante nämlich schonmal probiert, dass ich einen StringBuilder als ref reingegeben habe und die entsprechende char* Variable in C++ gefüllt habe. -> StringBuilder war danach leer.

Hallo MarsStein,

das mit IntPtr als Rückgabewert habe ich auch schon probiert und anschließend per Marshal.PtrToX() den string Wert geholt. Mehr als Hyroglyphen kamen da leider nicht raus.

01.10.2009 - 13:10 Uhr

Hallo zusammen,

ich habe eine Funktion in C++ mit folgender Signatur:

LPCWSTR GetString(wchar_t* str1);

wie müsste das in .NET korrekt eingebunden werden?

Mit

[DllImport("LicenseKeyGenerator.dll", CharSet=CharSet.Auto)]
static extern string GetString(string s1);

funktioniert es schonmal nicht. Ich erhalte beim Zurückgeben des Wertes eine AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Die Parameterübergabe funktioniert ohne Probleme und der String wird weiterverarbeitet. Also lediglich beim Zurückliefern des Wertes von C++ auf .NET gibt es das Problem.

Wäre für jede Hilfe dankbar!

29.09.2009 - 14:23 Uhr

Danke für eure Bemühungen, hatte es mittlerweile schon rausgefunden 🙂
Habe jetzt einfach nur im Header File ein extern "C" { } um die Deklarationen geschrieben, was ich dachte schon so gehabt zu haben 🤔

Naja egal, es funktioniert. Jetzt muss ich nur noch die Fuktionalität implementieren. Das gibt auch wieder was.

Nochmals Danke an euch!

PS: danke auch für den Tipp mit dem Ausgabeverzeichnis. Das war der Grund, warum ich die DLL auch nicht auf Anhieb gefunden habe.

29.09.2009 - 13:21 Uhr

Hab jetzt einmal LPCWSTR und char* verwendet.
Ohne Probleme kompiliert, DLL ins Verzeichnis der Aufrufenden Anwendung und mit [DllImport] die Funktion zugänglich machen.
Bekomme nun eine

EntryPointNotFoundException: Unable to find an entry point named 'GenerateKey' in DLL 'LicenseKeyGenerator.dll'.

Habe mal die Solution angehängt. Wäre nett, wenn sie jemand von euch anschauen könnte.

29.09.2009 - 11:24 Uhr

Danke zommi,

wenn ich deine char* Variante auskommentiere, lässt es sich kompilieren.
Ansonsten bekomme ich folgenden Fehler:

[1] Warning C4190: 'GenerateKey' has C-linkage specified, but returns UDT 'std::basic_string<_Elem,_Traits,_Ax>' which is incompatible with C (line 10)
[2] Error C2059: syntax error : '__declspec(dllexport)' (line 12)

#include "stdafx.h"
#include "stdio.h"
#include "string"

using namespace std;

// Header
extern "C"
{
	string __declspec(dllexport) __stdcall GenerateKey(string s1, string s2, string s3, int number, double date);

	//char* __declspec(dllexport) __stdcall GenerateKey(char* s1, char* s2, char* s3, int number, double date);
}


// CPP
string __stdcall GenerateKey(string s1, string s2, string s3, int number, double date)
{
	return "test";
}

//char* __stdcall GenerateKey(char* s1, char* s2, char* s3, int number, double date)
//{
//	return "test";
//}

Eine Frage bleibt noch unabhängig von dem Fehler: Wo ist nun die DLL, die ich mit der kompilierbaren Version erhalten müsste? Habe im Debug/Release Ordner nur die Dateien, die ich oben im Screenshot bereits gezeigt habe.