Laden...
O
onlinegurke myCSharp.de - Member
Student/Hilfswissenschaftler Dresdner in Karlsruhe Dabei seit 15.01.2007 778 Beiträge
Benutzerbeschreibung

Forenbeiträge von onlinegurke Ingesamt 778 Beiträge

18.04.2007 - 15:18 Uhr
  1. Mit Convert.ToDouble mag das sicher nichts zu tun haben, trotzdem spricht einiges gegen
Convert.ToDouble(row[2].ToString())

weil

(Double)row[2]

würde auch schon reichen, zumindestens, solange die Spalte in der Datenbank mit einem Fließkommatyp deklariert ist.

  1. Der Formatcode #####0.## sollte in etwa das bewirken. Wenn auf alle Fälle die beiden Nachkommastellen angezeigt werden sollen, dann #####0.00.
18.04.2007 - 14:18 Uhr

Allgemein nicht, da musst du wohl wohl oder übel noch dazu sagen müssen, was genau du machen willst.

Ganz allgemein gibts das schon (IList, IList<T>)

18.04.2007 - 14:16 Uhr

Ja, wie Lion1984 schon sagt, mach mal aus

public MathFunction Function
        {
            get { return m_function; }
            set { m_function = value; }
        }
public MathFunction Function
        {
            get { return m_function; }
            set { m_function = value; 
            this.Invalidate();}
        }

Damit löst du das Neuzeichnen aus...

18.04.2007 - 11:06 Uhr

würde es in etwa so machen (MSDN bisschen abgeändert)

using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;

class RijndaelSample
{

    
    public static string EncryptText(String Data, byte[] Key, byte[] IV)
    {
        try
        {
            // Create or open the specified file.
            MemoryStream ms = new MemoryStream();

            // Create a new Rijndael object.
            Rijndael RijndaelAlg = Rijndael.Create();

            // Create a CryptoStream using the FileStream
            // and the passed key and initialization vector (IV).
            CryptoStream cStream = new CryptoStream(ms,
                RijndaelAlg.CreateEncryptor(Key, IV),
                CryptoStreamMode.Write);

            // Create a StreamWriter using the CryptoStream.
            StreamWriter sWriter = new StreamWriter(cStream);

            try
            {
                // Write the data to the stream
                // to encrypt it.
                sWriter.WriteLine(Data);
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred: {0}", e.Message);
            }
            finally
            {
                // Read MemoryStreamContent
                Byte[] b = ms.ToArray();
                // Close the streams and
                // close the file.
                sWriter.Dispose();
                cStream.Dispose();
                ms.Dispose();
                return Encoding.UTF8.GetString(b);
            }
        }
        catch (CryptographicException e)
        {
            Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
        }
        catch (UnauthorizedAccessException e)
        {
            Console.WriteLine("A file error occurred: {0}", e.Message);
        }
       return null;
    }

    public static string DecryptText(String Crypted, byte[] Key, byte[] IV)
    {
        try
        {
            // Create MemoryStream
            Byte[] b=Encoding.UTF8.GetBytes(Crypted);
            MemoryStream ms = New MemoryStream(b);

            // Create a new Rijndael object.
            Rijndael RijndaelAlg = Rijndael.Create();

            // Create a CryptoStream using the FileStream
            // and the passed key and initialization vector (IV).
            CryptoStream cStream = new CryptoStream(fStream,
                RijndaelAlg.CreateDecryptor(Key, IV),
                CryptoStreamMode.Read);

            // Create a StreamReader using the CryptoStream.
            StreamReader sReader = new StreamReader(cStream);

            string val = null;

            try
            {
                // Read the data from the stream
                // to decrypt it.
                val = sReader.ReadLine();


            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred: {0}", e.Message);
            }
            finally
            {

                // Close the streams and
                // close the file.
                sReader.Dispose();
                cStream.Dispose();
                ms.Dispose();
            }

            // Return the string.
            return val;
        }
        catch (CryptographicException e)
        {
            Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
            return null;
        }
        catch (UnauthorizedAccessException e)
        {
            Console.WriteLine("A file error occurred: {0}", e.Message);
            return null;
        }
    }
}
18.04.2007 - 10:49 Uhr

Original von nin

Muss das ganze in VB.NET machen...

will ja nicht meckern... aber das ist eine C# Forum 🙂

Das Forum ist für C# und .NET, und VB.NET ist sehr wohl .NET, der Unterschied zu C# ist ja kurz gesagt ja nur ein bisschen Grammatik...

18.04.2007 - 10:35 Uhr

Wenn ich dich richtig verstanden habe zählt die Item-Eigenschaft einer Aufzählung da mit dazu, oder?

Da ist es halt so, dass Klassen immer Defaulteigenschaften bestimmen können, mit denen man den Zugriff auf bestimte Eigenschaften von außen erleichtern kann, z.B., jede IList oder IList<T>-implementierende Klasse die Item-Eigenschaft als eine solche Defaulteigenschaft anbietet. In jedem Fall muss aber auch die Eigenschaft vorhanden sein, deshalb kannst du auf beide Arten drauf zugreifen.

Demzufolge gibts auch keine allgemeine "richtige" Lösung, schreibs immer so, wie es dir besser lesbar erscheint. Es kann sein, dass eine Variante auch ein Geschwindigkeitsvorteil bringt, aber selbst wenn, dann dürfte der im Millisekundenbereich liegen, wenn überhaupt...

17.04.2007 - 12:45 Uhr

'Gurke' war mein erster Spitzname, der nicht auf meinem Nachnamen basierte und gegen mich gerichtet war. Zu dieser Zeit hab ich auch mal eine eigene Webseite machen wollen und da war mir mein Name zu trist. Irgendwie bin ich dann darauf gekommen und der Name hat bis heute überlebt (aus Faulheit, mir einen neuen auszudenken 🙂 )...

17.04.2007 - 12:40 Uhr

@dani.net:
Mit dem StartsWith stimme ich dir zu.
Exceptions sind teuer, ja, aber die Katalogisierung von Zeichen auch, insofern würd ich mich was das anbelangt streiten wollen, zumal eine Gleitkommazahl auch eine Zahl ist, aber einen Fehler verursacht.

Wenn du es auf die feine englische machen willst, dann nimm

Long.TryParse(StrResult,Globalization.NumberStyles.[Integer bzw. HexCode],Globalization.CultureInfo.CurrentCulture)
17.04.2007 - 11:11 Uhr

Wenn du das zu Long konvertieren willst, dann nimm Convert.ToInt64.

Einen vorgefertigten Algorithmus gibts dafür aber nicht

13.04.2007 - 14:10 Uhr

Warum sollte man nicht auf die von Dir beschriebene Weise vorgehen?

Bei zehn Auswahldialogen hast du dann auch 10 offene Formulare. Das geht mit der Zeit auf die Systemrecourcen und sieht einfach sch... aus.

Was spricht denn gegen die Verwendung von Assistenten (Frameworks dazu gibts ja nu wohl genügend auf http://www.codeproject.com

13.04.2007 - 13:24 Uhr

@herbivore

müsste das nicht

(?<key>\w.):\s(?<value>.*)

heißen? Ansonsten beschränkst du doch den key auf ein Zeichen

13.04.2007 - 12:35 Uhr

Da ich Tooltips nicht an Radiobuttons u.ä. binden kann

Kannst du doch, brauchst doch nur eine ToolTip-Komponente im Formular. Den kannst du meines Wissens auch per Hand aktivieren

12.04.2007 - 10:37 Uhr

Der Object.ToString-Methode ist es logischerweise egal, ob das Objekt ein Wert- oder Referenztyp ist (laut Objektorientierung weiß eine Basisklasse nichts von den abgeleiteten Klassen und ValueType ist nun mal von Object abgeleitet).

12.04.2007 - 10:34 Uhr

und was spricht gegen

myObject.ToString

?

11.04.2007 - 12:10 Uhr

ob die MousePosition im kleinen Rechteck liegt.

ich glaub, genau ist fängt bei deweby das Problem erst an. Schau mal nach Rectangle.Contains(me.PointToClient(e.Location)), wobei Rectangle das Rectangle-Objekt ist, dass die Größe und Position des kleinen blauen Rechtecks enthält (kannst du ruhig zwischenspeichern)

11.04.2007 - 10:25 Uhr

Es gibt keine normalen Anwendungen. Spezifizier mal deine Anforderungen

http://msdn.microsoft.com/vstudio/products/compare/default.aspx

11.04.2007 - 10:16 Uhr

Ja, der Designer lädt immer die direkte 'Vaterklasse', also bei der abstrakten die nichtabstrakte und bei der anderen versucht er die abstrakte zu laden. Er kann ja auch nicht die aktuell zu bearbeitende Klasse laden, weil die ja gerade bearbeitet wird. Aber eine abstrakte Klasse kann er auch nicht instanzieren...

10.04.2007 - 14:37 Uhr
  1. Schließ den Dialog mit Dispose
  2. Jede von Component abgeleitete Klasse bietet ein Disposed-Ereignis an
10.04.2007 - 14:03 Uhr

sondern sich explizit diejenigen holen soll die man auch wirklich erwaret

und was machst du, wenn du nicht weißt, was du erwarten sollst, weil der Code nicht ausreichend dokumentiert ist? Trial and Error?

Meiner Meinung kann es durchaus sinnvoll sein, einfach alle Exceptions zu fangen, z.B. wenn es egal ist, ob eine Information nicht ermittelbar oder nicht vorhanden ist.

10.04.2007 - 13:16 Uhr

Das müsste aber ohne C# einfach nur mit Bordmitteln viel effizienter gehen, oder? Ich kann mir nicht vorstellen, dass es keine Bordfunktion gibt, die die ihr übergebenen Argumente in die Zwischenablage schreibt. Der Rest ist dann nur noch, in der Registry sowas zu registrieren...

10.04.2007 - 12:50 Uhr

In der Tat ist die Position-Eigenschaft der DeflaterOutPutStream-Klasse (von der ZipOutputStream ja abgeleitet ist) ziemlich blöde implementiert (schmeißt nur einen Fehler raus). Aber die Klasse ist eigentlich nur ein Wrapper für einen anderen Stream (in der Regel ja wohl einen Filestream). Die Position-Eigenschaft dieses FileStreams kannst du verändern.

zStream.Finish();

schreibt nur eine Anzahl Bytes, die es rauszukriegen gilt, dann könnte man um diese Anzahl Bytes zurückgehen und dann dort einsetzen.

10.04.2007 - 08:10 Uhr

kann man:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleTest
{
    class Program
    {
        static IEnumerable<string> EnumStrings() // return type should implement IEnumerable
        {
            EnumStrings=new List<String>;
            for(int i=0; i<5; i++)
                EnumStrings.Add(i.ToString()); // add i.ToString() to result List
            return EnumStrings
        }

        static void Main(string[] args)
        {
            List<string> result =new List<string>(EnumStrings());

            foreach (string s in result)
                Console.WriteLine(s);

            Console.Read();
        }
    }
}
10.04.2007 - 08:06 Uhr

kleiner Tip nebenbei: Wenn du alle Packfunktionen in eine Klasse mit meinetwegen auch statischen Methoden packst hast du nachher sogar die Chance, dass du das wiederverwenden kannst

Merk dir doch einfach, an welcher Stelle du den letzten Eintrag geschrieben hast und setz den FileStream dann auf diese Position. Du kannst auch mal gucken, wie lang das Dateiende ist, dann kommst du sogar ohne merken aus. Schau mal in die #ZipLib wie es da umgesetzt ist, wenn du ne Lösung hast, kannst du sie hier ja mal posten...

Nochwas:

byte[] buffer = File.ReadAllBytes(file);

führt bei einer 1Gb großen Datei, die zu Zippen ist, zu einem Array mit einer Länge von über 1.000.000.000 (oder genauer 2^30). Die maximale Dateigröße, die du Zippen kannst liegt bei 4Gb und wenn du solche großen Dateien zippen willst kriegst du richtig Effizienzprobleme. Was ich dir sagen will ist, die Variable buffer heißt buffer weil es ein Buffer (oder zu Deutsch auch gern Puffer) ist. Du liest die Datei normalerweise Häppchenweise, dann brauchst du auch keine 2Gb Ram zum Zippen eines CD-Images.

10.04.2007 - 07:49 Uhr

oder 3. (die Variante, die Leute wie herbivore bevorzugen): Ganz ohne Designer auskommen...

10.04.2007 - 07:48 Uhr

Um mit dem Designer arbeiten zu können, muss dieser aber die Basisklasse instanzieren können (und eine abstrakte Klasse kann man nicht instanzieren). Zur Lösung des Problems gibt es zwei Umwege:

  1. UserControl erstellen, alle Steuerelemente einfügen und dann die InitializeComponent-Methode kopieren

  2. (besser) Zwischenklasse implementieren, die alle zwingend zu überschreibenden Methoden (keine Ahnung, wie die in C# heißen) so implementieren, dass keine Fehler passieren, kompilieren und dann der Designer. Wenn du dann fertig bist mit den Designerarbeiten musst du nurnoch die Zwischenklasse löschen und deine Klasse wider von der Ursprungsbasisklasse erben lassen

05.04.2007 - 16:21 Uhr

Hiermal ein Beispiel was ich mit den Abhängigkeiten meinte...

05.04.2007 - 16:19 Uhr

Hab seit einiger Zeit das Problem, dass mein Projekt auf Arbeit zunehmend undurchsichtig wird. Als ich damit angefangen hab war ich noch Anfänger und hab halt Anfängerfehler gemacht, von denen ich mehrere auch jetzt noch mache.

Einer dieser Fehler ist die Übersichtlichkeit des Codes, ich hab immer den kompletten Code in eine Datei gehauen, nie nach Membertypen sortiert usw., das geht soweit, dass ich selber kaum noch durchgesehen hab und dann soll die ganze Schose auch noch wartbar sein...

Deshalb hab ich mich die letzten Tage damit beschäftigt, dieses kleine Programm zu schreiben, was genau diese Fehler behebt. Es kann aber noch etwas mehr, nämlich solche Abhängigkeiten wie von Form1.Designer.vb auf Form1.vb selber zu erstellen. Wer will kann's ja mal ausprobieren...

Der CodeParser ist aber (leider) nur für VB.NET, C# geht leider nicht. (VB.NET bietet in dieser Hinsicht wundervolle Möglichkeiten, indem es einem sagt, was für Codeelemente gerade geschlossen werden, während C# einem nur sagt, dass ein Codeabschnitt zu Ende ist.

Wenn ich mal wieder richtig Zeit hab mach ich auch mal die Implementation für C#...

05.04.2007 - 09:28 Uhr

Also in soeinem Fall sind Funktionen ganz schlecht. Du kannst per Funktion den Download initiieren, ja, aber auf einen Vorgang zu warten geht nicht. Guck mal, ob der Verbindungsobjekt oder über was auch immer du den Download initiierst, entsprechende Ereignisse anbietet, auf die du dann reagieren kannst...

P.S.: Wenn das Verbindungsobjekt keine brauchbaren Ereignisse anbietet (und du nicht die Möglichkeit hast, selber welche einzufügen), dann mach es über einen Timer und frag in regelmäßigen Abständen nach, ob der aktuelle Download bereits abgeschlossen ist

04.04.2007 - 14:31 Uhr

Danke!

04.04.2007 - 13:47 Uhr

Kann man das Verzeichnis, von dem aus relative Pfade interpretiert werden irgendwie ändern?

03.04.2007 - 15:06 Uhr

Hab mal nachgeschaut (in einem VB.NET-Projekt):

    <Compile Include="Form1.vb">
      <SubType>Form</SubType>
    </Compile>
    <Compile Include="Form1.Designer.vb">
      <DependentUpon>Form1.vb</DependentUpon>
      <SubType>Form</SubType>
    </Compile>

Daraus würde ich mal folgendes entnehmen wollen:
Compile bedeuted, dass eine Datei eingebunden werden soll, die gleich mit kompiliert werden soll
SubType gibt dem Parser die Info, dass es sich um ein Formular handelt
DependentUpon bedeuted, dass die Datei als "Unterdatei" hier zu Form1.vb behandelt werden soll

Das würde bedeuten, dass man nichts anderes machen muss, als die *.vbproj bzw. *.csproj mit Notepad o.ä. öffnen, den Eintrag DependentUpon ergänzen, speichern, schließen, Projekt neu laden, fertig

03.04.2007 - 14:55 Uhr

Die Form1.Designer.cs ist es, die das sagt, und zwar mit partieller Klassendefinition.

Zurück zu deiner Frage:
Ich schätze mal, das wird in der Solution-Datei (.sln) oder Projektdatei (.csproj) stehen (wohle eher in der Projektdatei)

Im Grunde genommen ist das eine einfache XML-Datei. Ein möglicher Weg wäre also, eine neue Form anzulegen und zu gucken, was an dem Eintrag für die Datei "Form1.Designer.cs" anders ist und das dann auch (manuell) zu übertragen auf die Datei, die du so noch unterordnen willst...

03.04.2007 - 13:33 Uhr

@Lakrimosa: Tschuldige, ich wollte nicht harsch wirken,
Der Fehler passiert, weil DateTime halt eine Zeit ist und demzufolge Convert.ToDateTime eine einzelne Uhrzeit nicht als Zeitspanne sondern eben als Heute, diese Uhrzeit interpretiert. Deswegen ist dt.Ticks sehr viel höher, und wenn du jetzt sechs Zeiten addierst bist du ungefähr im Jahr 12040, und da passiert der Stapelüberlauf.

03.04.2007 - 13:17 Uhr
  1. Was genau ist eigentlich kein Problem?

  2. Wenn du ein Verhalten eines Referenztyps von einem Wertetyp wie MyType erwartest dann machst du sehr definitiv was falsch. Man kann das Referenzverhalten eines Typs schon sehr viel einfacher erreichen: Indem man die Klasse als Referenztyp erstellt, d.h., statt

public struct MyType

einfach

public class MyType
  1. Ein solches Thema als Topthema gibts glaub ich schon irgendwo (Stichwort "Unterschied Werttypen und Referenztypen")
03.04.2007 - 08:00 Uhr

Original von Lakrimosa

  
                TimeSpan ts1 = new TimeSpan(dt1.Ticks + dt2.Ticks + dt3.Ticks + dt4.Ticks + dt5.Ticks + dt6.Ticks);  

Was willst du denn damit erreichen? Du addierst hier 6 Zeiten und willst eine Zeitspanne rauskriegen? Was willst du damit? Wenn das nicht so vorgesehen ist, dann hat das auch seinen Grund...

02.04.2007 - 15:26 Uhr

Naja, ja es geht, aber nicht direkt. Du brauchst halt ne Extra Datenbank (kann auch wieder in Form einer XML-Datei sein), in der die Informationen gespeichert sind, die du zum suchen brauchst. Dann durchsuchst du diese eine XML-Datei, aus der du dann halt die Namen der gesuchten XML-Dateien rauskriegst. Wenn du das nicht machen willst, musst du wirklich jede Datei einzeln auswerten, das geht, dürfte aber performancemäßig untragbar sein...

02.04.2007 - 14:28 Uhr

Geht nicht. Jedenfalls nicht so einfach. Die einzige Chance, die du hast, wenn du das so machen willst, ist dir jede einzelne XML-Datei anzugucken und zu prüfen, ob sie dem Suchmuster entspricht.

02.04.2007 - 09:44 Uhr

Ja, gibt es, sogar gleich mehrere Möglichkeiten:

  1. (einfache Möglichkeit) System.Drawing.ToolBoxBitmapAttribute

  2. (komplizierter, aber mächtiger) System.ComponentModel.ToolBoxItemAttribute

Bei 2. musst du dich aber dann komplett selber um das ToolBoxItem kümmern...

02.04.2007 - 09:21 Uhr

System.ComponentModel.EditorAttribute
System.ComponentModel.TypeEditorAttribue
System.ComponentModel.DesignerAttribute

Die drei helfen dir da weiter. Schau mal in der MSDN und bei CodeProject.com nach...

30.03.2007 - 16:02 Uhr

Original von purestrain

  
SELECT * FROM orders WHERE id IN (SELECT OrderId FROM POS WHERE xxx) AND ID IN (SELECT OrderId FROM POS WHERE YYY)  
  

lässt sich generell vereinfachen zu

Select O.* From orders as O Inner Join Pos as P On P.OrderID=O.ID Where xxx and yyy

Das einzige, was du machen musst, ist xxx und yyy genauer ausdrücken:

XXX = "p.Artikelnummer = "TEST" UND p.Menge=2"
YYY = "p.Artikelnummer = "TEST" UND p.Menge=3"

In dem Fall kommt zwar kein Ergebnis, weil Menge nicht gleichzeitig 2 und 3 sein kann, aber egal

30.03.2007 - 15:29 Uhr
Select Orders.* From orders as Orders Inner Join Pos as Pos On Pos.OrderID=Order.ID Where Pos.Artikelnummer=4652345 And Pos.Menge>1

Spielt nämlich doch eine Rolle. Ich hatte das Datenbankdesign anders vermutet...

30.03.2007 - 14:23 Uhr

Was für Bedingungen sind denn xxx und yyy?

30.03.2007 - 14:20 Uhr

Nein, du musst nur halt die InnerHtml-Eigenschaft mit Html füllen. Das Rendern übernimmt dann das Steuerelement. Hintergrund kannst du sicher irgendwie mit dem Body machen, aber das ist dann mehr Html als C#...

30.03.2007 - 13:48 Uhr

Hab ich schon mal gemacht, geht also, Problem ist, dass der Code nicht mehr existiert 🙁 Ich glaub das ging über WebBrowser.Document.Body.InnerHtml...

30.03.2007 - 13:15 Uhr

Select A.ID as ID,Count(B.ID) as Anzahl From TabelleA as A OUTER JOIN TabelleB as B On B.Ref=A.ID Where Anzahl ≥ 2;

Probier das mal und poste was passiert!

30.03.2007 - 07:29 Uhr

Wenn du es so machen willst, wie du oben geposted hast, dann benutz aber unbedingt einen StringBuilder, ansonsten wird jedenmal ein neuer String erzeugt.


Text.StringBuilder sb=New Text.StringBuilder
while ((line = sr.ReadLine()) != null) {
    if(lineCounter>=10){
       sb.AppendLine(line);
    lineCounter++;
    }
}
inputString=sb.ToString
29.03.2007 - 15:58 Uhr

StreamReader.BaseStream.Position-Eigenschaft verändern.
Das geht aber nur, wenn der StreamReader auf einem Stream basiert, der das unterstützt, IO.FileStream, auf dem deine Variante basiert, sollte das aber unterstützen

29.03.2007 - 15:54 Uhr

Der Designer hat bei abgeleiteten Forms manchmal ein Problem, wenn die Felder als Friend deklariert sind. Ändere das mal in dere BaseForm zumindest für das MenuStrip-Steuerelement (Modifier-Eigenschaft) in Protected, dann könnt's gehen.

Mit Menü Merge hat das aber nix zu tun.

29.03.2007 - 15:43 Uhr

Weil man so auch ohne eine Instanz der Klasse RgbColor die Farbe Rot auslesen kann und du so

new RgbColor(255,0,0)

mit

RgbColor.ColorRed

abkürzen kannst, und sich dadurch die Lesbarkeit des Codes erhöht. Macht man halt einfach so.

29.03.2007 - 15:38 Uhr

@JAck30lena: Da beschmeißt dich der Compiler aber mit NullReferenceExceptions, sobald ad Null wird

Meine Variante:


if (this.ad != ad)
{
 if (this.ad!=Null) {this.ad.messageHandler -= new MessageDelegate(ad_messageHandler);}
 this.ad=ad;
 if (ad!=Null) {ad.messageHandler += new MessageDelegate(ad_messageHandler);}
}