Laden...

Forenbeiträge von cyanide Ingesamt 88 Beiträge

14.01.2011 - 20:00 Uhr

Danke für eure Antworten.

Habe Interesse das ganze mal mit WPF auszuprobieren. WIe genau könnte mein gesuchtes Problem hier beseitigt werden? Habe schon einiges zum Thema Animation gelesen aber wie ich eine Linie aufbaue habe ich noch nicht so herausfiltern können.

Habt ihr evtl. ein paar Stichworte für mich?

13.01.2011 - 18:31 Uhr

@JAck30lena: Wie aber hat man es vor WPF getan?

@Chilic:Ich habe natürlicher vorher gegooglet, das Problem ist aber manchmal, genau zu formulieren wonach man sucht. Suchwörter wie "C# Linie aufbauen" oder "C# Linie langsam zeichnen" brachten mir keinen Erfolg.

13.01.2011 - 17:19 Uhr

JAck30lena: Genau, aber nichts besonders wie 3D oder hochwertige Grafiken, sondern einfach nur einfache Kreise/Rechtecke/Linien etc.

Mit WPF hab ich mich noch nicht beschäftigt und habe es, sofern es anders möglich ist, auch auf Grund mangelnder Erfahrung in dem Bereich, nicht vor.

Ich habe ein Textfeld, in dem Reihenweise Koordinaten stehen und meine Simulation soll genau diese abfahren können, ohne dass ich direkt das fertige Bild sehe.

13.01.2011 - 17:02 Uhr

Hallo Frankhammer,

gibt es noch andere Möglichkeiten?

Das Problem ist, dass ich auch Kreise zeichne, habe ich hier nicht erwähnt, der Einfachkeithalber.

Jeden einzelnen Pixel eines solchen Kreises herauszubekommen wäre (für mich zumindest) unmöglich.

@chilic: So in etwa habe ich mir das theoretisch auch gedacht, an der Umesetzung hapert es aber.

13.01.2011 - 16:30 Uhr

Moin!

Ich möchte eine Linie zeichnen, die sich (zeitlich einstellbar) langsam aufbaut, also nicht direkt da ist sobald ich z.B DrawLine() aufrufe.

Habt ihr da einen Tipp für mich?

22.08.2010 - 13:50 Uhr

Moin!

Ich möchte eine List<string> sortieren und zwar genau so, wie es Array.Sort() tut, bis auf eine kleine Regel und zwar möchte ich dass ich die Priorität des ersten Zeichens angeben kann.

Angenommen ich habe diese Liste:

/Datei1
\Datei1
/Datei3
\Datei3
/Datei2
\Datei2

dann möchte ich nach der Sortierung folgendes haben:

/Datei1
/Datei2
/Datei3
\Datei1
\Datei2
\Datei3

Der Funktionsaufruf sollte so aussehen:

myList.Sort("/&quot;);

Der Parameter von Sort (hier "/&quot;) soll der Liste sagen, welches Zeichen Priorität hat, aber eben nur für das erste Zeichen jeden Eintrags der Liste.

Habt ihr eine Idee, wie ich das anstellen kann?

15.08.2010 - 21:07 Uhr

Moin!

Ich habe schon etliche Beispiele bzw bereits fertige Klassen/Sample codes für den Crc32 Algo gefunden, wo aber bekomme ich die Originalbeschreibung her es muss doch eine offizielle Quelle gebe oder nicht. Ich möchte nichts fertiges kopieren.

Danke für eure Hilfe.

PS: Sorry wegen fehlender Fragezeichen, meine Tastatur spinnt z.Z.

07.08.2010 - 18:23 Uhr

Moin,

danke, aber gehts noch etwas detailreicher? g

07.08.2010 - 17:33 Uhr

Moin,

Ich habe eine Struktur und möchte, dass diese beim lesen komplett befüllt wird, ohne dass ich jede Membervariable einzeln zuweisen muss.

In C war das ganz einfach:

 struct SOMETHING s = { 0 };
FILE* fp;

if ((fp = fopen("file", "rb")) != NULL) {
    fread(s, sizeof(s), 1, fp);
    fclose(fp);
}

Wie aber stelle ich das in C# an?

09.07.2010 - 23:51 Uhr

Moin herbivore,

danke erstmal für deine Antwort.

Wie ist es denn aber, wenn meine Hauptklasse in der Helferklasse noch einen Wert verändern müsste?

Gegeben seien 3 Klassen:

Form1
MainClass
SubClass

SubClass enthält nun ein Feld namens "blubb", dieser soll aber nur von MainClass beschrieben werden dürfen, nicht aber von Form1.

Wie löse ich soetwas? Das Problem habe ich überall.

Klar, ich könnte die ganzen Klassen in eine Assembly packen und dann internal.. aber das möchte ich ja auch nicht..

28.05.2010 - 12:23 Uhr

Moin!

Erstmal vielen Dank für eure Antworten. Wenn mein Text wirklich so unleserlich war, schreib ich hier mal kurz ein Beispiel, wie ich es meine:

Helferklasse:

    public class RawEventArgs : EventArgs
    {
        internal RawCommand rawCommand = null; // Soll nur für die Hauptklasse sichtbar sein.
        internal bool performDefault = true;

        public RawCommand RawCommand
        {
            get { return rawCommand; }
        }

        public bool PerformDefault
        {
            get { return performDefault; }
            set { performDefault = value; }
        }
    }
}

in diesem Fall einfach eine EventArgsklasse die meine Hauptklasse erst "befüllt", dabei soll nach außenhin (FormKlasse) "rawCommand" nicht verändert werden können, da die Hauptklasse damit evtl. nochmal weiterarbeitet.

Hauptklasse:

    public class MainClass
    {
        public delegate void RawEventHandler(object sender, RawEventArgs e);
        public event RawEventHandler Raw;

        private void DoRead()
        {
            byte[] buffer = new byte[bufferSize];
            int bytesRead = 0;
            BufferParser bufferParser = new BufferParser();
            RawCommandParser rawCommandParser = new RawCommandParser();

            while ((bytesRead = networkStream.Read(buffer, 0, bufferSize)) != 0)
            {
                bufferParser.Add(buffer, bytesRead);

                while (bufferParser.RawCommandAvailable())
                    HandleRawCommand(rawCommandParser.Parse(bufferParser.GetRawCommand()));
            }
        }

        /// <summary>
        /// Handles the overgiven RawCommand.
        /// </summary>
        /// <param name="rawCommand">Contains the prefix, the command and its parameters.</param>
        private void HandleRawCommand(RawCommand rawCommand)
        {
            RawEventArgs rea = new RawEventArgs();

            if (Raw != null)
            {
                // Hier beschreibe ich die EventArgs
                rea.rawCommand = rawCommand;

                Raw(this, rea); // und hiernach arbeite ich damit weiter s.u.
            }

            if (rea.performDefault)
            {
                switch (rawCommand.command.ToLower())
                {
                    case "blubb":
                        {

                        }
                        break;
                  }
             }
         // usw.

Meine Frage ist nun, ob ich wirklich jede von EventArgs abgeleitete Klasse als nested class in meiner Hauptklasse haben sollte? Ich finde es schöner jede Klasse und sei sie noch so klein, in einer extra Datei zu haben. Geht das nicht auch irgendwie? Denn EventArg'klassen habe ich recht viele..

28.05.2010 - 02:34 Uhr

Moin!

Ich habe eine Form, eine Hauptklasse und eine Hilfsklasse für die Hauptklasse.

Die Hilfsklasse enthält Felder und Eigenschaften für die Felder.

Meine Form enthält eine Instanz der Hauptklasse und letztere wiederrum eine Instanz der Helferklasse.

Ist es mir möglich, die Felder meiner Helferklasse der Hauptklasse sichtbar zu machen, während ich in meiner Form nur auf die Eigenschaften der Hilfsklasse Zugriff habe?

Grund: In meiner Hauptklasse setzte ich überhaupt erst Werte für die Helferklasse, sodass ich Schreibzugriff haben muss. In meiner Form sollen aber wie gesagt die Eigenschaften verwendet werden..

15.05.2010 - 17:33 Uhr

Moin,

ich würde gerne wissen, ob ihr eure Klassen (über den uses) beschreibt, und wenn ja, nach welchem Schema ist diese Beschreibung dann aufgebaut?

Alles was ich hierzu gefunden habe war folgendes: automatische Kommentare in Klassen

Vielleicht habt ihr ja ein paar Tipps für mich, da ich meine Klassen schon gerne beschreiben würde. Evtl. gibt es ja auch hier Richtlinien?

11.05.2010 - 09:36 Uhr

Moin!

Ich habe nicht die direkte Frage, WIE man den Hintergrund des Desktops ändert, sondern ob es möglich ist, dies über das Framework, sprich ohne die user32.dll zu importieren, möglich ist?

Wenn ja, könnt ihr mir ein paar Stichworte nennen? Wenn nein, warum gibt es das nicht?

Danke euch.

23.03.2010 - 12:38 Uhr

Würde das nicht mit nem params objekt funktionieren?

23.03.2010 - 10:26 Uhr

Bestens, danke für die Hilfe.

23.03.2010 - 10:15 Uhr

Moin herbivore,

das ist eine gute Idee, daran hatte ich auch schon gedacht, allerdings stellte sich mir dabei eine Frage:

Ist es mir erlaubt, den gleichen Namen für das Event zu benutzen? Eher nicht oder? Ich frage deshalb, weil ich mich frage, was wäre, wenn es um (rein theoretisch natürlich) 20 Klassen gehen würde und jede dieser arbeitet mit dem Event, ohne dieses aber spezifischer werden zu lassen, so dass es immernoch komplett dem Namen entspricht als das es benannt wurde. Irgendwann würden einem die Namen für ein immer gleichbleibendes Event natürlich ja ausgehen bzw. es immer unaussagekröftiger werden lassen.

23.03.2010 - 09:26 Uhr

Moin,

vielen Dank für eure Antworten.

ich habe es so verstanden, das du im abarbeiten des einen events ein zweites auslöst, das dir dann in die quere kommt

Dem ist auch so.

Ich zeige mal genauer auf, wie meine zwei Klassen aufgebaut sind; Zumindest den Teil um den es hier geht:

// Klasse 1, der "MessageServer" sagt bescheid wenn Daten gelesen/geschrieben wurden.

    public class MsgServ : TcpListener
    {
        // Events.
        public event ClientMessageReceivedHandler ClientMessageReceived;
        public event ClientMessageSentHandler ClientMessageSent;

        public delegate void ClientMessageReceivedHandler(object sender, MsgClient client, string message);
        public delegate void ClientMessageSentHandler(object sender, MsgClient client, string message);

        private MsgClients msgClients = new MsgClients();
        private List<Thread> clientThreads = new List<Thread>();

        // Liest den Stream und
        // löst das "ClientMessageReceived" event aus
        private void ClientLoop(object state)
        {
            MsgClient msgClient = (MsgClient)state;
            TcpClient tcpClient = msgClient.GetTcpClient();
            NetworkStream ns = tcpClient.GetStream();
            byte[] buffer = new byte[512];
            int bytesRead = 0;
            string queue = String.Empty;

            while ((bytesRead = ns.Read(buffer, 0, buffer.Length)) != 0)
            {
                queue += ASCIIEncoding.ASCII.GetString(buffer, 0, bytesRead);
                queue = queue.Replace('\r', '\n').Replace("\n\n", "\n");

                while (queue.IndexOf('\n') != -1)
                {
                    string message = queue.Substring(0, queue.IndexOf('\n'));

                    queue = queue.Remove(0, queue.IndexOf('\n') + 1);

                    if (ClientMessageReceived != null)
                    {
                        ClientMessageReceived(this, msgClient, message);
                    }
                }
            }

            if (ClientDisconnected != null)
            {
                ClientDisconnected(this, msgClient);
            }

            lock (msgClients)
            {
                msgClients.Remove(msgClient);
                Thread.CurrentThread.Abort();
            }
        }

        // Schreibt in den Stream und
        // löst das "ClientMessageSent" event aus.
        public void SendText(MsgClient msgClient, string text)
        {
            text += "\r\n";
            msgClient.GetTcpClient().GetStream().Write(Encoding.ASCII.GetBytes(text), 0, text.Length);

            if (ClientMessageSent != null)
            {
                text = text.Substring(0, text.Length - 2);
                ClientMessageSent(this, msgClient, text);
            }
        }
    }
// Zweite Klasse

   public class SS : MsgServ
    {
        // Constructor
        public SS(IPAddress localAddress, int port) 
            : base(localAddress, port)
        {
            ClientMessageReceived += ServServ_ClientMessageReceived;
        }

        private void ServServ_ClientMessageReceived(object sender, MsgClient msgClient, string message)
        {
            string[] token = message.Split(' ');

            switch (token[0].ToLower())
            {
                case "irgendwas":
                    {
                        SendText(msgClient, ":" + hostname + " 113 uName :Not available");
                    }
                    break;

                case "irgendwas2":
                    {
                        SendText(msgClient, ":" + hostname + " 115 uName 1");
                    }
                    break;       
            }
        }
    }

Nicht wundern, falls etwas fehlt oder namentlich zu kurz ist, habe nur versucht es so klein wie möglich zu halten, da es ja nur um den Sinn geht.

Wie man sieht braucht die zweite Klasse das "...Received"-Event und sie muss auch auf die Nachrichten eingehen bzw schreiben (SendText, welches gleichzeitig das "...Sent" -Event auslöst).

Da meine Windows-Forms-Anwendung nun die zweite Klasse verwendet (damit ich so wenig Code wie möglich in der Anwendung habe), und auch wiederrum die beiden Events abboniert um das gelesene/geschriebene in einer richTextBox anzuzeigen funktioniert das ganze so nicht, da Klasse2 durch den Aufruf von SendText() innerhalb des "...Received"-Events zuerst das "...Sent"-Event auslöst, bzw es meiner FormAnwendung so aussehen lässt.

Gelten eure Antworten darauf bezogen immernoch?

20.03.2010 - 15:03 Uhr

Besten Dank füre eure Hilfe 😃.

Frage mich natürlich, warum die Schablone nicht direkt so aussieht, wie ihr es beschreibt.

Oder anders gefragt: Brauche ich überhaupt 2 Konstruktoren?

20.03.2010 - 13:24 Uhr

Moin!

Habe bereits gestern den ganzen Tag versucht was zu finden (Google, und auch hier), bin aber nicht fündig geworden, obwohl ich denke, dass das Forum diese Sache schon behandelt hat...

Es geht um folgendes:

Wenn ich eine Klasse von Control ableite, dann habe ich ja zwei Konstruktoren:

        public TcpClient()
        {
            InitializeComponent();
        }

        public TcpClient(IContainer container)
        {
            container.Add(this);

            InitializeComponent();
        }

In welche der beiden kommt denn mein Initialisierungscode? Oder muss ich den Code in beide schreiben? Wäre jedenfalls ne Menge...

Hoffe auf Antworten.

Gruß 😃.

19.03.2010 - 10:19 Uhr

Moin!

[Fiktiv]
Ich habe eine Klasse, welche zwei Events hat: Read und Write.

Jetzt habe ich eine zweite Klasse, welche von der obigen Klasse abgeleitet ist und im Read Event einen Text parsed und dann eine Methode(die auch aus der obigen Klasse stammt) aufruft: Write(). Diese Methode wiederrum löst das WriteEvent aus.

Bis hierhin ist alles soweit in Ordnung...

Jetzt habe ich eine Windows Forms Anwendung, welche die zweite Klasse benutzt und im Read/Write Event lasse ich mir den Text in einer RichTextBox ausgeben.

Das blöde ist jetzt, dass das Write-Event vor dem Read-Event einzutreten scheint, was aber definitiv nicht sein kann. Ich weiß dass zuerst gelesen wird! Ich denke mal, es liegt daran, dass die zweite Klasse selbst das Readevent nutzt und daraufhin eine Methode aufruft, die das Write-Event auslöst...

Was kann ich nun tun?

Kann ich meinem Hauptprogramm irgendwie sagen, dass es das ReadEvent zuerst bekommt und nicht die Klasse die von der ersten abgeleitet ist?

15.03.2010 - 13:40 Uhr

Moin MotS,

so kannte ich es auch. Dennoch war mir auch bewusst, dass man vom Client aus Leute/Channels und auch den Server als Client pingen kann, ich wusste nur nicht, dass mIRC dies jetzt automatisch tut. Schau mal in den Optionen, da ist eine, die heißt "Check for timed out connection", diese wird dann per ping vom Client geprüft, da die Server auch mit PONG antworten.

Gruß 😃

15.03.2010 - 11:20 Uhr

Moin MotS,

danke für deine Hilfe! 😃

Habe rausgefunden woran es liegt -> an mIRC. Seit neuern Versionen sendet auch der Client ein "PING" an den Server und dieser muss mit "PONG"(anscheinend innerhalb von 10 Minuten) antworten; Tut er das nicht -> DC.

Danke nochmals 😃.

15.03.2010 - 10:16 Uhr

Moin,

ich habe per:

        private void button2_Click_1(object sender, EventArgs e)
        {
            MessageBox.Show(ss.Server.ReceiveTimeout.ToString());
        }

geschaut. Ergebnis: 0

Ich verstehe es einfach nicht.

Ich setze definitiv keinen Timeout, dies würde ich wissen und wenn nicht, dann würde ich es sehen, da die Unit sehr kleingehalten ist.

Ich denke auch nicht, dass es ein sonstiger Fehler ist, denn das Timeout ist fast bis auf die Sekunde wirklich pünktlich.

Gibt Windows evtl. einen Defaultwert vor? Im MSDN steht ja, dass 0 wie auch -1 "unendlich" bedeutet. Wieso aber zwei Werte dafür? Könnte die 0 nicht heißen, dass wenn es ihn denn gäbe, der Windows Defaultwert genommen werden soll?

Ok, bestimmt auch nicht, sonst würde es dort ja so stehen.. ich bin mit meinem lateien am Ende, hm..

15.03.2010 - 09:28 Uhr

Moin MotS,

dort habe ich natürlich schon geschaut und dort steht u.a:

Eigenschaftenwert
Typ: System..::.Int32
Der Timeoutwert in Millisekunden. Der Standardwert ist 0 und gibt ein unendliches Timeoutintervall an. Durch die Angabe von -1 wird ebenfalls ein unendliches Timeoutintervall angegeben.

Ich habe nie einen Wert angegeben, also ist dieser doch 0?

15.03.2010 - 06:55 Uhr

Moin!

Ich habe ein Problem. Entgegen anderer Posts in denen gefragt wird, wie man seinem Client/Server einen Timeout einbaut, habe ich das gegenteilige Problem: Mein Server disconnectet meine Clients einfach nach zehn Minuten.

Habt ihr eine Idee woran das liegen könnte? Explizit eingebaut habe ich es nirgends, gibt es einen DefaultTimeout-Wert?

Hier kann man es bestens sehen:

[05:59:35] * Connecting to 109.91.114.129 (4005)

[06:09:44] * [10101] Host disconnected

[06:09:44] * Disconnected

[06:09:49] * Connect retry #1 109.91.114.129 (4005)

[06:19:48] * [10101] Host disconnected

[06:19:48] * Disconnected

[06:19:53] * Connect retry #2 109.91.114.129 (4005)

[06:29:54] * [10101] Host disconnected

[06:29:54] * Disconnected

[06:29:59] * Connect retry #3 109.91.114.129 (4005)

[06:39:58] * [10101] Host disconnected

[06:39:58] * Disconnected

^^^^^Dies ist ein Auszug des Clients der mit meinem Server verbunden ist

Hoffe ihr habt einen Tipp für mich

12.03.2010 - 16:14 Uhr

Aha, und in welchem Zusammenhang stehen sich Quote 2 und 3?

Was hat z.B mein String den ich formatieren möchte, überhaupt mit dem Thema hier zu tun?

Vielleicht weißt du ja die Antwort darauf auch, danke schonmal.

12.03.2010 - 00:29 Uhr

Moin FZelle,

ich verstehe es eben nicht so ganz, mein Code besteht wirklich aus mehreren 10.000en Lines und dann soll ich mit dem Fitzel Code meine Arbeit gemacht bekommen wollen?
Ich habe vorher Google ohne Ende benutzt und bin nicht auf die Lösung gekommen.

Gefunden habe ich z.B unter anderem Codes die als Ergebnis:

Int32 NumRows = (Int32)cmd.ExecuteScalar(); 

heben.

Diese Zeile lässt sich bei mir nichteinmal kompilieren: "Die angegebene Umwandlung ist ungültig".

*Wie hätte ich deiner Meinung nach hier fragen können, wie ich etwas bestimmtes erreichen kann, wenn ich es sonst anderweitig nicht finde? Oder muss man sein Projekt dann abbrechen und damit leben?*

Außerdem finde ich lieber was im Internet, als 'nen Beitrag verfassen zu müssen.

Weißt du, mir ist klar, dass man die Verbindung schließt und dass man auch keine Strings durch Strings als Parameter formatiert, dies wäre ja total unsinnig, da ich das ganze ja dann nicht formatieren bräuchte, sondern das ganze direkt in den zu formatierenden String packen könnte.

Es war lediglich eine Testmethode und nur die letzte Zeile, also das was ich returnen muss, hat mich interessiert, nichts anderes.

Wenn ich mich deiner Meinung anscchließe, dann wird sogut wie jedem hier im Forum irgendwie "Arbeit" abgenommen.
Selbst wenn es so wäre, würde man sich damit einen Zacken aus der Krone brechen?
Wenn ich gefragt hätte, ob mir hier jemand mein Projekt schreibt, ok, aber das hier ist etwas übertrieben.

Dies war mein letzter Post in diesem Thread, nicht wegen Dir, sondern wegen dem OT meinerseits.

11.03.2010 - 20:30 Uhr

Lothi: Besten Dank! 😃

FZelle:

Ich brauche lediglich diese eine Methode die SQL-Befehle beinhaltet. Muss ich deswegen jetzt die komplette SQL-Syntax lernen?
Weiter habe ich nicht gefragt wie ich das ganze ressourcenschonend hinbekomme.
Ich wollte lediglich wissen, was ich hinter "return" angeben muss um zu wissen, ob der User in der Tabelle existiert oder nicht.

Wozu ist dieses Forum? Ich habe nicht nach nem kompletten Code gefragt sondern nur wie ich obiges rausfinden kann.

Wenn es nach Dir ginge, wäre dieses Forum völlig sinnlos. Sorry, ich finde es einfach blödsinnig.

11.03.2010 - 19:50 Uhr

Moin Leute, besten Dank für eure Antworten.

Leider klappt es noch nicht so wie es soll....

Habe es gerade so:

        public bool check()
        {
            string connectionString = "SERVER=85.255.24.46;" +
                          "DATABASE=sss;" + 
                          "UID=puk;" + 
                          "PASSWORD=jo123;";

            MySqlConnection sqlConnection = new MySqlConnection(connectionString);
            MySqlCommand command = sqlConnection.CreateCommand();

            command.CommandText = String.Format("SELECT COUNT(*) FROM `players` WHERE `players`.`name` = '{0}';", "sggggilent");

            sqlConnection.Open();

            return (command.ExecuteScalar() != null);
        }

Die Methode gibt True zurück, obwohl der name "sggggilent" definitiv nicht existiert... Könnt ihr mir noch sagen was falsch ist?

11.03.2010 - 18:36 Uhr

verwendetes Datenbanksystem: <MySQL>

Moin,

wie kann ich prüfen ob ein Wert vorhanden ist?

Habe es unfertig so:

            string connectionString = "SERVER=localhost;" +
                                      "DATABASE=mydb;" + 
                                      "UID=sil;" + 
                                      "PASSWORD=t321;";

            MySqlConnection sqlConnection = new MySqlConnection(connectionString);
            MySqlCommand command = sqlConnection.CreateCommand();

            command.CommandText = String.Format("SELECT COUNT(*) FROM `players` WHERE `players`.`name` = '{0}';", "silent");

            MySqlDataReader reader;

            sqlConnection.Open();

            reader = command.ExecuteReader();

            // Wie prüfe ich den Reader nun, ob "silent"-Eintrag vorhanden ist? Als bool hätte ich es gerne

Habt ihr da ne Idee?

10.03.2010 - 08:27 Uhr

Moin,

zweiteres ist der Fall. Kann ich keinen Service mit blockierenden Sockets erstellen? Dann muss ich den ganzen Server meiner anderen klasse ja wieder total umbauen hmm....

Gibt es keine andere Lösung?

10.03.2010 - 07:09 Uhr

Moin!

ich habe einen Service erstellt, wenn ich diesen nun starten möchte, wird er kurz gestartet und dann wieder beendet, weil er angeblich im Leerlauf sei... Jedenfalls l#uft nebenbei noch ein weiterer Thread, ein Server.

Wie kann ich den Service(Ist jawohl der Hauptthread?) nun dauerhaft laufen lassen?

Habe in nem anderen Forum gelesen, dass empfohlen wird, sinnlos eine Variable nach oben zählen zu lassen. Macht das Sinn? Und wie genau sähe das aus? In einer while()-Schleife würde ich ja ne CPU-Auslastung von 100% bekommen....

Ich habe alle 8 Seiten die das Forzm per "Dienst" ausgibt gelesen, gefunden habe ich das passende nicht.

09.03.2010 - 22:48 Uhr

Moin,

danke erstmal für deine Antwort.

Also folgendes ist ja in C# möglich:

class MeineKlasse
{
    List<Irgendwas> irgendwas = new List<Irgendwas>();

    public Irgendwas this[int i]
    {
        get { return irgendwas[i]; }
    }
}

Nun würde ich ja, wenn ich eine Instanz meiner Klasse hätte, per: meineInstanz_ auf ein Item der beinhaltenden Liste kommen.

Nun möchte ich aber nicht soetwas, sondern dass allein die Angabe meiner KlassenInstanz einen Standardstringzurück gibt.

Z.B sowas hier:

MessageBox.Show(meineInstanz); // Soll ein Feld der Klasse ausgeben

Ist sowas möglich?

PS: Dass ich ToString() überschreiben könnte weiß ich, frage mich trotzdem ob obiges irgendwie klappt.

09.03.2010 - 22:19 Uhr

Tag,

ist es eigentlich möglich, dass nur die Angabe des Objekts meiner Klasse einen String zurückgibt? Wie das mit nem Indexer funktioniert weiß ich ja, aber geht es auch ohne [] ?

06.03.2010 - 18:55 Uhr

Moin Golo Roden!

Vielen Dank für deine Antwort(en).

Mit dem Verb hast du recht, dies werde ich gleich raus nehmen.

Die Klasse "User" ist leider keineswegs gleich, sonst würde ich sie für beide Server nutzen und nicht zwei mal schreiben.

Jeder Server wird eine menge mehr Klassen bekommen, das steht fest, auch wenn noch nicht klar ist, wieviele es werden.

Wie gesagt möchte ich bei jeder Serverklasse eine seperate Klasse "User" haben können. Da bleiben nur Namespaces oder? Allerdings weiß ich dann wieder nicht, wie ich diesen benennen soll, da dieser ja nur meine Hauptklasse repräsentiert.

Ein gleicher Name funktioniert jedenfalls nicht:

Fehler 1 "MessageServer" ist ein(e) "Namespace", wird aber wie ein(e) "Typ" verwendet. C:\Users\Admin\Desktop\TSSA\ChatServer\ChatServer.cs 9 24 TSSA

Hastdu eine Idee?

06.03.2010 - 18:16 Uhr

Moin!

Um das ganze vereinfacht darzustellen, benutze ich mal andere Namen als die im meinem Projekt.

Gehen wir mal davon aus ich habe 2 Klassen, eine heißt "ChatServer" und die andere "RegisterServer" und beide sollen die Klasse "User"(nicht geschachtelt) haben (Ich möchte keine namen wie "RegisterServerUser...), dann kann ich innerhalb eines Namespaces die Klasse "User" logischerweise nicht zwei mal definieren.

Nun habe ich an soetwas wie das hier gedacht:

namespace ChatServer
{
    class ChatServer
    {
    }

    class User
    {
    }
}

Nun ist dies aber ja nicht möglich, da von außerhalb ja nicht unterschieden werden kann ob ich mit "ChatServer" den Namespace oder die Klasse meine... Selbst wenn möglich, wäre ChatServer.ChatServer" auch nicht wirklsch schön.

Wie löst ihr soetwas? Ich möchte meine Klasse nicht umbenennen, denn der Name passt ja perfekt. Und wenn ich den Namespace zu "ChtServer" umbenenne siehts auch irgendwie blöd aus...

Hoffe ihr wisst was ich meine

05.03.2010 - 12:58 Uhr

Vielen Dank für eure Antworten 😃.

  1. Regexe finde ich auch etwas übertrieben und solange ich sie nicht gut behersche, möchte ich sie auch eigentlich gar nicht anwenden. Aber da kannst du nichts für 😉.

Die Sache mit der Schleife ist für mein Bedürfnis auch nicht geeignet, die Tokenlänge ist konstant und tut in meinem Fall nichts andere als das was ich getan habe, bloß, dass ich noch zusätzlich eine Schleife hätte.

Ich dachte an soetwas wie das hier(nur logisch gedacht):

string meinString = "Token1 Token2 Token 3 Token4";

return meinString.Split(' ')[1-3];

Dass dies so nicht funktioniert ist mir klar, aber so in der Art hätte ich es gerne gehabt.

xxMUROxx: Hast recht, so meinte ich es 😄.

@frisch: Dein Beispiel macht für mein Vorhaben bis jetzt den besten Eindruck, ich probiere es mal aus, danke:) (auch an die anderen)

05.03.2010 - 12:03 Uhr

Moin,

eigentlich 'ne Anfängerfrage die ich selbst auch lösen könnte, aber meine Frage:

Gibt es in .NET eine Möglichkeit im String: "Token1 Token2 Token 3 Token4" nur die letzten 3 Token zu bekommen?

Ich könnte es zwar so machen:

string blah()
{
    const string blubb = "Token1 Token2 Token 3 Token4";
    string token = blubb.Split(' ');

    return token[1] + " " + token[2] + " " + token[3];
}

Finde es aber etwas unschön...

04.03.2010 - 15:53 Uhr

Ich glaube protected ist genau das was ich suche! Danke dir, ich probiere es mal 😃.

Jo das man nur erhöhen kann, war in Delphi damals auch so, dachte dass C# dies vielleicht erlaubt. War damals schon überrascht, dass "case" strings akzeptiert 😉. Sehr nobel.

04.03.2010 - 15:48 Uhr

Moin!

Ich habe in Klasse A, 3 Events, welche ich in der abgeleiteten Klasse B, die diese verarbeitet nicht mehr sichtbar haben, wenn man von dieser Klasse ein Objekt erstellt.

Ist das möglich?

Klasse A ist meine Hauptklasse und Klasse B, C, und D hat das zu interessieren, da aus diesen Events weitere detailiertere Events entstehen sollen. Die "BasisEvents" sollen dann aber raus.

25.02.2010 - 22:04 Uhr

Moin!

Ich suche schon stundenlang in Google danach, aber gefunden habe ich nichts.

Es geht um folgendes:

Wenn sich mehrere Clients bei meinem TcpListener verbinden, speichert er diese irgendwo in einem Array oder muss ich das selbst machen? Wenn ja, wie am besten? Oder einfach irgendwo mittenrein?

In Delphi damals wurden alle Clients gespeichert und man konnte sie z.B per:

ServerSocket.Socket.Connections[0].SendText() anschreiben.

14.12.2009 - 07:37 Uhr

Woher soll das Framework wissen, welche Daten du da überträgst, wie diese kodiert sind und welche Delimiter du für deinen Text verwendest?

Du hast recht, generell ist das gar nicht klar, aber in meinem Fall, ist der Stream nicht anders aufgebaut, als ein FileStream bzw er wird nur ascii übertragen und den Delimiter \r\n und genau DESwegen hab ich gedacht, dass doch StreamReader eigentlich damit klarkomen müsste, denn dort funktioniert ReadLine() ja z.b auch anhand solcher Delimiter

14.12.2009 - 01:22 Uhr

Was genau hat dir jetzt gezeigt, dass ich absolut keine Ahnung habe von Sockets?

Bis jetzt funktionieren sie zumindest immer und ich hatte noch keine Probleme.

Ich wollte lediglich fragen, ob es eine Klasse gibt, die eine Methode bereistellt, die ähnlich wie Read() arbeitet, aber statt die gelesenen Bytes in einem Buffer zurückzugeben eben einen String zurückgibt, sodass ich mir die Umwandlung sparen könnte!

Die Funktion soll also:

  • warten bis Daten(eine ganze Zeile, getrennt durch \r\n!) vefügbar sind
  • wenn der Server die Verbindung beendet hat z.B einfach einen leeren String zurückgeben.

Und mehr nicht.

Gibt es sowas oder nicht?

Und kein Socket-Tutorial der Welt wird mir nunmal beantworten können ob .NET eine solche Klasse bereitstellt oder nicht. Und ob mein Code perfekt ist habe ich hier auch gar nicht gefragt.

10.12.2009 - 20:58 Uhr

Schade, dachte ich hätte endlich was gefunden, dass strings aus einem stream lesen kann 😦.

Das Bytes nach String umwandeln per: ASCIIEncoding.Default.GetString(newData, 0, bytesRead)

ist total nervig/unleserlich wie ich finde. geht es denn nicht auch einfacher?

10.12.2009 - 18:47 Uhr

Ich möchte einen NetworkStream lesen, dort klingt "ReadToEnd" nicht ganz passable, da der Server ja die ganze Zeit läuft und kein Ende in Sicht ist, solange ich mit diesem verbunden bin.

MSDN sagt, es ist besser Read() statt ReadToEnd() zu benutzen.

Welche Vorteile bringt mir nun der StreamReader? der NetworkStream selbst besitzt doch schon eine Read() Methode?

10.12.2009 - 14:10 Uhr

Moin!

Bitte keine Links zu irgendwelchen Socket Tutorials, im Prinzip weiß ich schon wie es funktioniert.

Allerdings würde ich das auslesen des Streams nun mal gern per StreamReader machen, da ich denke, dass mein Code dann übersichtlicher wird.

Meine Frage ist:

Wie muss die Bedingung der Endlosschleife aussehen, die das dauerhafte Auslesen des Streams betrifft?

Ohne StreamReader hatte ich es so:

            do
            {
                bytesRead = ns.Read(buffer, 0, buffer.Length);
                ...
            } while (bytesRead != 0);

Nunja, ns.Read() benutze ich nicht mehr, d.h wie mache ich es nun?

10.12.2009 - 06:37 Uhr

Moin mal wieder! 8)

Ich habe nur eine kurze Frage und zwar:

Ist es richtig, dass eine Hilfsklasse immer ein Feld zur Hauptklasse besitzt, um auf diese zugreifen zu können?

Habe es nun so gemacht, dass die Hilfsklasse einen Konstruktor besitzt und man in diesem den Verweis zur Hauptklasse mitgibt.

Es geht zwar, aber ist es auch richtig so? Geht es überhaupt anders?

Habe mehrere solcher Klassen und es sieht ein wenig eigenartig in der Hauptklasse aus, dass bei jeder instanziierung der Hilfsklassen, die Hauptklasse selbst mitgegeben wird.

Gruß.

09.12.2009 - 11:44 Uhr

Moin Peter Bucher,

ich schreibe gerade eine IRC Komponente, und ich bin auch eigentlich schon fertig, abgesehen von den Säuberungsarbeiten.

Die Klasse "Commands" beinhaltet Kommandos, die die Hauptklasse an den IRC Server senden soll, also z.b so:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;

namespace IrcClient
{
    class Commands
    {  
        IrcClient ircClient;

        public Commands(IrcClient ircClient)
        {
            this.ircClient = ircClient;
        }

        public void Join(string channel)
        {
            ircClient.Raw("JOIN " + channel);
        }

        //...usw...
    }
}

Nun muss meine Hauptklasse, die ein Objekt dieser Klasse besitzt, dieses nach außen per Property sichtbar machen, damit der Endbenutzer dann per:

ircClient1.Commands.Join()

rankommt.

Nur keine Ahnung wie ich das so hinbekomme. Ich wollte nicht unbedingt auf andere Namen ausweichen, aber das muss ich dann wohl oder?

09.12.2009 - 11:20 Uhr

Moin,

wie löst ihr soetwas?

Ich habe eine Klasse, sie heißt "Commands" und so soll es auch bleiben, da der Klassenname genau das repräsentiert, was die Klasse beinhaltet.

Nun erzeuge ich ein Objekt dieser Klasse und möchte dieses als Property nach Außenhin public machen.

Und genau da ist das Problem, die Klasse selbst heißt "Commands", wie kann ich die Property dann auch "Commands" nennen?

Was würdet ihr tun? Die Klasse in einen anderen Namespace packen?