-
Gesamte Inhalte
1167 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Alle Inhalte von Gateway_man
-
[C#] Schwerwiegender Fehler bei der Erstellung eines UserControls
Gateway_man erstellte Thema in .NET
Ich wollte mir ein eigenes UserControl schreiben, welches vom Prinzip her wie ein ToolStrip aufgebaut ist. Ich wollte es gegenwärtig nur mal testen ob er alles richtig zeichnet und da haut mir Visual Studio Fehler entgegen ohne ende. Wenn ich es versuche über die Toolbox ins Form zu ziehen kommt der Fehler welchen ich als bild angehängt habe. (Anhang toolstrip_exception.PNG) Wenn ich dann ins Designerfile gehe um das Element wieder rauszulöschen kommen im Sekundenintervall neue Fehlerdialoge. (Siehe Anhang toolstrip_exception2.PNG). Die Klassen selbst sehen wie folgt aus: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Windows.Forms; using System.ComponentModel; namespace test { public class ToolStripDrawed : UserControl { List<ToolStripItemDrawed> items = new List<ToolStripItemDrawed>(); public ToolStripDrawed() : base() { this.Size = new Size(150, 300); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.DoubleBuffered = true; } [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public List<ToolStripItemDrawed> abcCollection { get { return items; } set { items = value; } } public void DrawItems() { //Graphics g = this.CreateGraphics(); //g.Clear(this.BackColor); //int currentheight = 0; //for (int i = 0; i <= (items.Count - 1); i++) //{ // ToolStripItemDrawed citem = items[i]; // Rectangle r = new Rectangle(0, currentheight, (citem.AutoSize) ? (this.ClientRectangle.Width) : (citem.Width), (citem.AutoSize) ? (30) : (citem.Height)); // g.DrawRectangle(new Pen(new SolidBrush(Color.Black)), r); // g.FillRectangle(new SolidBrush(citem.BackColor), r); // g.DrawString(citem.Text, citem.Font, new SolidBrush(citem.ForeColor), new PointF(0, currentheight + ((citem.AutoSize) ? (15) : (citem.Height / 2)))); // if (citem.AutoSize) // currentheight += 30; // else // currentheight += citem.Height; //} //g.Dispose(); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Windows.Forms; namespace test { //[Serializable] public class ToolStripItemDrawed { #region Fields private Font font = new Font("Arial", 9f, FontStyle.Regular, GraphicsUnit.Point); private bool autosize = true; private Size size = new Size(150, 30); private Point location = new Point(0, 0); private Brush bordercolor = new SolidBrush(Color.Black); private Brush backgoundcolor = new SolidBrush(SystemColors.Control); private Brush forecolor = new SolidBrush(Color.Black); #endregion public ToolStripItemDrawed() { } #region Properties public Font Font { get { return font; } set { font = value; } } public bool Autosize { get { return autosize; } set { autosize = value; } } public Size Size { get { return size; } set { if (!autosize) size = value; } } public Point Location { get { return location; } set { location = value; } } public Brush BorderColor { get { return bordercolor; } set { bordercolor = value; } } public Brush BackgroundColor { get { return backgoundcolor; } set { backgoundcolor = value; } } public Brush ForeColor { get { return forecolor; } set { forecolor = value; } } #endregion } } Diesen Lösungsvorschlag habe ich bereits ohne nenneswerte Veränderungen versucht. Ich bin kurz davor dem Rechner was schlimmes anzutun :beagolisc . Wenn einer von euch andere Lösungsvorschläge weiß dann wäre ich wie immmer sehr dankbar. Wenn ich die elemente zur laufzeit generiere dann funktioniert das wunderbar, nur der Designer möchte nicht so wie ich das möchte. lg Gateway -
[WIN2K8] Paging in der Kommandozeile möglich?
Gateway_man antwortete auf Gateway_man's Thema in Windows
Bei get-process | less sagt er: Die Benennung "less" wurde nicht als Cmdlet, Funktion, asführbares Programm oder Skriptdatei erkannt. Überprüfen Sie die Benneung, und versuchen Sie es erneut. get-process | more kennt er hingegen. Sieht zwar nicht gerade schön aus aber es geht. Vielen dank. lg Gateway -
[WIN2K8] Paging in der Kommandozeile möglich?
Gateway_man antwortete auf Gateway_man's Thema in Windows
Hi, wenn ich in der Kommandozeile bin, rufe ich die Powershell auf und frage mit get-process die aktuell laufenden Prozesse ab. lg Gateway PS: Gibt es more/less nicht nur bei unix basierenden Betriebssystemen? -
Hi, ich verbinde mich momentan mit putty über ssh zu meinem v-server und prüfe gelegentlich die laufenden Prozesse über die Kommandozeile. (schaun ob irgendwas auffälliges mitläuft) Jedoch zeigt er mir alle Prozesse auf einen Schlag an und putty selbst gibt mir keine möglichkeit zu scrollen, ergo sehe ich nur die letzten Prozesse in der Liste. Deswegen meine Frage: Gibt es eine Möglichkeit das ganze so abzurufen, das der Inhalt Stückweise geliefert wird und ich per Taste die nächsten Zeilen anzeigen lassen kann? lg Gateway
-
Hi, ja das ganze ist sehr kurios. Jetzt kommt kein Fehler mehr sondern er bleibt nurnoch bei der Datenabfrage hängen. Eventuell sieht einer von euch den Fehler. Wenn ich die Klasse mehrfach benutzte hängt er bei der Datenabfrage client.Available > 0. Ohne Fehler aber es geht einfach nicht weiter. Das ist irgendwie seltsam. Die Client Klasse (entschuldigt wenn es etwas unsauber ist, aber es ging mir vorerst nur um eine schnelle funktionierende Lösung). using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO; namespace tms_trans.Tms_Authenticate { public class Client : IDisposable { private Socket client; private const int BUFFER_SIZE = 1024; private string username = string.Empty; private string pass = string.Empty; private bool isAuthenticated = false; private bool isAsynchronous = false; private IPEndPoint localbinding; public Client(IPEndPoint Binding) { client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.Bind(Binding) ; this.localbinding = Binding; } public bool Connect(IPEndPoint target) { bool result = false; //try //{ if (client != null) { IAsyncResult result1 = client.BeginConnect(target.Address, target.Port, null, null); bool success = result1.AsyncWaitHandle.WaitOne( 5000, true ); if (!success) { client.Close(); return false; } isAsynchronous = true; ServerMessage msg= GetResponse(2000); if (msg != null && !msg.isMessageEncrypted) { string response = Encoding.ASCII.GetString(msg.ByteMessage); response = response.TrimEnd(new char[] { '\n', '\0', '0', '\r' }); Console.WriteLine(response); } result = true; } //} //catch //{ // result = false; //} return result; } public bool Authenticate(string User, string Pass) { bool result = false; SendCommand(Encoding.ASCII.GetBytes("User:" + User)); ServerMessage msg = GetResponse(2000); if (msg != null) { string response = Encoding.ASCII.GetString(msg.ByteMessage); if (response.StartsWith("+OK")) { this.username = User; SendCommand(Encoding.ASCII.GetBytes("Pass:" + Pass)); msg = GetResponse(2000); if (msg != null) { response = Encoding.ASCII.GetString(msg.ByteMessage); if (response.StartsWith("+OK")) { this.pass = Pass; } else { result = false; return result; } } } else { result = false; return result; } } if (username != string.Empty && pass != string.Empty) { isAuthenticated = true; result = true; } return result; } public string RetriveConnectionString() { string response = string.Empty; if (isAuthenticated) { SendCommand(Encoding.ASCII.GetBytes("RETRCON")); ServerMessage msg = GetResponse(2000); if (msg != null) { response = Encoding.ASCII.GetString(msg.ByteMessage); response = response.TrimEnd(new char[]{'\n','\0','0','\r'}); response = response.Split(new char[] {':' })[1]; } } return response; } public void QUIT() { SendCommand(Encoding.ASCII.GetBytes("QUIT")); //client.BeginDisconnect(true, null, null); client.Shutdown(SocketShutdown.Both); client.Disconnect(true); client.Close(); client.Dispose(); } private void SendCommand(byte[] Command) { if (client != null && client.Connected) { //StreamWriter wr = new StreamWriter(client.GetStream()); client.Send(Command); Thread.Sleep(500); } } private bool WaitForResponse(int timeout) { bool result = true; DateTime start = new DateTime(); while (client.Available <= 0) { Thread.Sleep(200); if (DateTime.Now.Subtract(start).Milliseconds >= timeout) { result = false; break; } } return result; } private ServerMessage GetResponse(int timeout) { ServerMessage msg = new ServerMessage(); if (client != null) { if (client.Available > 0) { string response = string.Empty; while (true) { int hread = 0; byte[] buffer = new byte[BUFFER_SIZE]; if (client.Available > 0) hread = client.Receive(buffer, 0, buffer.Length, SocketFlags.None); if (hread <= 0) { break; } else { response += Encoding.ASCII.GetString(buffer).Trim(); } } response = response.Trim(); response = response.Replace('\n', '\0'); bool isNullTerm = true; foreach (char cc in response) { if (cc != '\0') { isNullTerm = false; break; } } response = response.TrimEnd(new char[] {'\n','\0','\r','0' }); if (!isNullTerm) { if (response.StartsWith("*")) { msg.isMessageEncrypted = false; byte[] msg1 = Encoding.ASCII.GetBytes(response.ToCharArray(), 1, Encoding.ASCII.GetBytes(response).Length - 1); msg.ByteMessage = msg1; } else if (response.StartsWith("#")) { msg.isMessageEncrypted = true; byte[] msg1 = Encoding.ASCII.GetBytes(response.ToCharArray(), 1, Encoding.ASCII.GetBytes(response).Length - 1); msg.ByteMessage = msg1; } else { msg.isMessageEncrypted = false; msg.ByteMessage = Encoding.ASCII.GetBytes(response); } } } else { if (WaitForResponse(timeout)) { string response = string.Empty; while (true) { int hread = 0; byte[] buffer = new byte[BUFFER_SIZE]; if (client.Available > 0) hread = client.Receive(buffer, 0, buffer.Length, SocketFlags.None); if (hread <= 0) { break; } else { response += Encoding.ASCII.GetString(buffer).Trim(); } } response = response.Trim(); response = response.Replace('\n', '\0'); bool isNullTerm = true; foreach (char cc in response) { if (cc != '\0') { isNullTerm = false; break; } } if (!isNullTerm) { if (response.StartsWith("*")) { msg.isMessageEncrypted = false; byte[] msg1 = Encoding.ASCII.GetBytes(response.ToCharArray(), 1, Encoding.ASCII.GetBytes(response).Length - 1); msg.ByteMessage = msg1; } else if (response.StartsWith("#")) { msg.isMessageEncrypted = true; byte[] msg1 = Encoding.ASCII.GetBytes(response.ToCharArray(), 1, Encoding.ASCII.GetBytes(response).Length - 1); msg.ByteMessage = msg1; } else { msg.isMessageEncrypted = false; msg.ByteMessage = Encoding.ASCII.GetBytes(response); } } } else { msg = null; } } } return msg; } private class ServerMessage { #region Fields private bool messageencrypted = false; private byte[] bytemessage = null; #endregion #region constr public ServerMessage() { } public ServerMessage(byte[] message, bool ismessageencrypted) { this.messageencrypted = ismessageencrypted; bytemessage = message; } #endregion #region Properties public byte[] ByteMessage { get { return bytemessage; } set { bytemessage = value; } } public bool isMessageEncrypted { get { return messageencrypted; } set { messageencrypted = value; } } #endregion } #region IDisposable Member public void Dispose() { if (client != null) { if (client.Connected) { client.Shutdown(SocketShutdown.Both); client.Disconnect(true); } client.Close(); client.Dispose(); } } #endregion } } Der Aufruf (ebenfalls etwas unsauber): cl = new Client(new IPEndPoint(IPAddress.Any, 3000)); if (counter >= 2) { MessageBox.Show("Sie haben Versucht sich zu oft mit falschen Angaben anzumelden! Das Programm wird jetzt beendet!"); cl.Dispose(); Application.ExitThread(); return; } if (txt_pass.Text != string.Empty && txt_user.Text != string.Empty) { if (cl.Connect(new IPEndPoint(Dns.GetHostAddresses(main.AppSettings.AuthenticHost)[0], main.AppSettings.AuthenticPort))) { if (cl.Authenticate(txt_user.Text.Trim(), txt_pass.Text.Trim())) { string con = cl.RetriveConnectionString(); if (con != string.Empty) { main.AppSettings.ConnectionString = con; } LogonSuccess = true; } else { counter++; MessageBox.Show("Anmeldedaten wurden vom Server als falsch zurückgewiesen. Bitte prüfen Sie Ihre eingaben!", "Authentifizierungsfehler", MessageBoxButtons.OK, MessageBoxIcon.Error); } cl.QUIT(); } else { MessageBox.Show("Der Server konnte nicht erreicht werden. Folgende Problemlösungen werden empfohlen:" + Environment.NewLine + "1. Prüfen Sie Ihre Internetverbindung" + Environment.NewLine + "2. Prüfen Sie Ihre Firewalleinstellungen (Eventuell fehlt eine Ausnahme für dieses Programm" + Environment.NewLine + "3. Wenn Sie eine langsame Internetverbindung haben ist es möglich das der Timeout zu klein definiert wurde!", "Verbindungsfehler", MessageBoxButtons.OK, MessageBoxIcon.Error); cl.Dispose(); } if (LogonSuccess) { this.DialogResult = System.Windows.Forms.DialogResult.OK; this.Close(); } } Okay irgendwas läuft da nicht rund. Ich glaube ich werde das ganze nochmal sauber neuschreiben. Aber sofern ihr Anmerkungen habt wäre das klasse xD. lg Gateway
-
Hi, ich habe mir für ein Projekt einen Authentifizierungsserver geschrieben der auch einwandfrei funktioniert. Bei dem Client jedoch gibt es ein Problem. Wenn der User einen Logout macht und sich wieder anmelden will, kommt eine Fehlermeldung bei der Zuweisung des Bindings. Die Meldung sagt in etwa folgendes aus: Es existiert bereits ein Binding für diesen Port und dieser IP Adresse. Ich mache nach jeder Verwendung des Clientklasse doch schon folgendes: //Client ist vom Typ Socket client.Shutdown(SocketShutdown.Both); client.Disconnect(true); client.Dispose(); Und dennoch wird das Objekt scheinbar nicht richtig geschlossen/freigegeben. Kennt einer von euch das Problem? Ich verzweifle allmählich. lg Gateway
-
Allgemeine openSource Community für angehende Software Entwickler erwünscht?
Gateway_man antwortete auf derwunner's Thema in Small Talk
Ich ziehe meine Aussage doch wieder zurück . Das klingt doch eher lahm und ich würde mal behaupten das sourceforge für solche dinge bereits bestens geignet ist. Diskutieren kannst du da auch für jedes Projekt individuel und auch deine Opensource Lizenz ist frei wählbar. Ich denke auch nicht das da sehr viele schreiben werden, da ein Forum nicht gerade viel hergiebt. Und folgende Frage ist denke ich gerechtfertigt: Warum soll ich mein Sourcecode auf sourceforge hochladen und dessen Berschreibung respektive dessen zugehörige Diskussionen auf einer anderen Seite in einem Forum Thread schreiben? Macht für mich überhaupt keinen Sinn. Ich denke langsam das IT-Fraggle nicht ganz unrecht hat. Klingt für mich danach das du unbedingt eine Website erstellen willst, deren Zweck aufgrund bereits bestehnden und beseren Angeboten überflüssig ist. -
Allgemeine openSource Community für angehende Software Entwickler erwünscht?
Gateway_man antwortete auf derwunner's Thema in Small Talk
Hi, ich finde die Idee garnicht mal so schlecht. Es stimmt schon das solche Seiten bereits existieren, aber es spricht ja nichts dagegen es besser zu machen. Sourceforge beispielsweise sehe ich mehr als eine Art publishing Seite mehr aber auch nicht. Da gibt es zwar Bugreport möglichkeiten aber die werden in den seltensten Fällen genutzt. Was ich beispielsweise vermissen ist eine möglichkeit einer direkt in der Seite eingebetten Möglichkeit zur Kommunikation intern sowie extern. Beispielsweise könnte man ja zu jedem Projekt auch ein Login bereitstellen um Projektinterne Aktionen durchzuführen. In diesem Portal könnte man dann ja auch so ne art Chat Funktion einbauen, damit man sich mit den anderen Entwicklern des Projektes in "Echtzeit" austauschen kann. Des weiteren, was bei vielen solcher Seiten komplett fehlt sind erweiterte Dokumentationsmöglichkeiten. Ich denke da an Gant Diagramme mit Milestones und eventuell einer aktuellen Fortschrittsanzeige des aktuellen Prozesses. Ich denke das es hierbei nicht nur um das bereitstellen von fertigen SourceCodes geht und somit wäre es natürlich auch Sinnvoll die eventuell noch nicht fertiggeschriebenen TeilProzesse ebenfalls auf der Plattform bereitzustellen. Also prinzipiell sind dem ganzen keine Grenzen gesetzt und du könntest durchaus eine bessere alternative bereitstellen (Ich nutzte Sourceforge beispielsweise schon nicht weil die Möglichkeiten für mich einfach viel zu gering sind. Da mach ich das aktuell lieber über meine Website). Bedenke das so ein Projekt durchaus viel Geld kosten kann. Das ist natürlich immer vom Mengengerüst abhängig. Aber nimm einfach mal Sourceforge als Beispiel. Die haben aktuell über 300.000 Projekte gehostet. Geh wir jetzt einfach mal Pauschal von 5 MB pro Projekt (was fast in jedem Fall mehr sein dürfte das ja häufig viele verschiedene Revisionen gehostet werden). (300.000 * 5) / 1024 = ~1464,84 GB Das ist ne Menge Holz und die Anbindung der/des Server/s muss natürlich auch stimmen. lg Gateway -
Naja nächstes Jahr wenn ich etwas mehr verdiene werde ich nebenbei zum Arbeitgeber und werd ne stellenanzeige aufgeben: Jobbezeichnung : ??? (Noch keine Bezeichnung kannt) Beschreibung: Sie Arbeiten in einem Schichbetrieb und sind für die Sicherung von Wertgegenständen verantwortlich. Ihr Arbeitraum beträgt 10x5 Meter. Zur Ausübung ihrer Arbeit wird Ihnen Wahlweise entweder ein Hochleistungsteaser oder ein Besenstiel bereitgestellt. Für die bequemliche atmosphäre sorgt ein Schaukelstuhl sowie eine Flasche Whiskey pro Tag. Kling das Interessant für Sie und denken Sie das dieses Stelle genau auf Sie zugeschnitten ist. Dann schicken Sie Ihre Bewerbung an job@paranoia.de
-
Ich hab gestern bei der Polizei angerufen, und die zwei Herren die vorbeikamen habe alles sachdienliche aufgenommen und das Schloß mitgenommen. Es hätte auch noch die Möglichkeit gegeben Fingerabdrücken von der Metaltür zu nehmen, allerdings hab ich das abgelehnt da der Aufwand verglichen mit dem geschätzten Wert des Diebesgut um ein vielfaches größer wäre. Die waren drauf und dran die Spurensicherung zu holen . Ich hab den Herren dann auch gesagt das es mir nur um die Meldung an sich geht und ich die Sachen eh schon abgeschrieben habe. Ich fands hammer als die beiden Herren das große Kellerabteil betreten hatten. Ich musste denen nichtmal zeigen welche Parzelle mir gehört das konnten die mir sagen . Die meinten Sie hätten das anhand des billigen Schloßes erkannt :beagolisc. Einer der Polizisten meinte es ist schon eine Abschreckung für den Täter wenn ein entsprechendes Schloß dran hängt. Ergo werd ich mich demnächst mal um ein etwas stabileres Vorhängeschloss kümmern. lg Gateway
-
Im Sommer steht bei uns die Wohnungstür offen aber der Keller ist durch eine seperate Tür gesichert. Das es ein Mitbewohner sein muss ist mir auch schon in den Sinn gekommen. Es wohnen aber sehr viele Mieter in diesem Haus. Wir haben 4 Stockwerke und 3 Haupteingänge. Da an jeder Tür klingeln wird schwierig. Aber ich denke ich werd mal an unsere Hausinterne "Pinnwand" einen Vermerk anbringen, mal schaun ob sich jemand meldet und reue zeigt. @unicode: Deine Ideen sind genauso amüsant wie die meiner Arbeitskollegen , nur dummerweise kann sowas schnell nach hinten losgehn, da ich eine Anzeige wegen Mutwilliger Körperverletzung bekommen könnte. Deswegen habe ich bei der Polizeisirenne auch nur geschmunzelt, da 110 DB in einen schallenden Raum durchaus Schaden anrichten kann. Ein anderer meinte ich solle mein Kellerabteil (welches umringt von Gitterstäben ist) mit einer Autobatterie und einer Fernschaltung unter Strom setzten xD. lg Gateway
-
Guten Morgen, was für ein geniales Wochenende. Erst sanft durch Trompeten geweckt :beagolisc und nun muss ich feststellen das mein Kellerabteil schon zum zweiten mal aufgebrochen wurde. Habs leider versäumt die Polizei zu rufen. Das Kellerabteil ist/war mit einem handelsüblichen Schloß versehn. Der Bolzen, welcher im schloß einrastet wurde mit brachialer Gewalt herausgerissen und schließt auch nichtmehr. Entwendet wurden mir nur eine PSone und ein 19" TFT Monitor. Es ist jedoch trotzdem ziemlich ärgerlich. Was könnte man tun um es dem Einbrecher etwas zu erschweren. Ein Arbeitskollege meint ich solle Lichtschranken an der Tür installieren und diese mit einer Polizeisirenne und einer Autobatterie verbinden . lg Gateway
-
Wie verhält sich das mit der Ruhestörung
Gateway_man antwortete auf Gateway_man's Thema in Small Talk
Danke für eure Anregungen. Es handelt sich hierbei um eine Wohngegend. Hier wurde ein Gebäudekomplex gebaut indem sich eine Katholische Schule befinden. Der Italiener scheint bei denen als Untermieter zu hausen. Kommt ganz drauf an wo man wohnt. Wenn man in der Innenstadt lebt schon. Ich wohne jedoch nicht direkt im Kern und bevor das Gebäude errichtet wurde, war der Geräuschpegel auch sehr angenehm muss ich sagen. Die Polizei will ich auch wirklich nur im ernstfall rufen, da ich das eigentlich nur ungern machen würde. Sollte sich das diesen Sonntag erneut wiederholen werd ich da mal aufschlagen und versuchen das zu klären. Danke nochmals. lg Gateway -
Gute Morgen, neuerdings hat ein Italiener bei uns eröffnet. Der hat des öfteren Livebands im Programm. Meistens Sonntag vormittags und dann gehts um 10 Uhr los. Die Trompeten hört man noch über zwei Wohnblocks hinweg. Ich muss sagen ich bin schwer begeister wenn ich mal wieder um 5 Uhr früh heim komme ins Bett gehe und um 10 Uhr wieder rausgeworfen werde. Ich denke ich werde mir erst mal ohropax besorgen, aber kann man dagegen was machen? Eventuell werd ich da auch erstmal hingehn und den Inhaber fragen ob das nicht unter umständen etwas leiser geht. lg Gateway
-
C# Gedankliche Hilfestellung bei Verschachtelung
Gateway_man antwortete auf Gateway_man's Thema in .NET
Eine hervorragende Frage . Es ist nicht zwangsläufig gewährleistet. Jedoch wird für jedes ChannelListEntry eine Order nummer mitgeliefert. Vielen Dank an alle, für die ganzen Anregungen. Ich werde Sie mir mal zu gemüte führen und mich gegenfalls dann wieder melden. lg Gateway -
C# Gedankliche Hilfestellung bei Verschachtelung
Gateway_man antwortete auf Gateway_man's Thema in .NET
Ich werde mal kurz per Code zeigen was ich meine: public class Viewer{ public List<Channel> GetChannelList() { List<Channel> result = new List<Channel>(); foreach (ChannelListEntry item in m_sock.GetChannelList()) { Channel citem = new Channel(); if (item.ParentChannelId <= 0) { citem.ID = item.ChannelId; citem.name = item.Name; result.Add(citem); } else { foreach (Channel xitem in result) { if (xitem.ID == item.ParentChannelId) { citem.ID = item.ChannelId; citem.name = item.Name; if (xitem.SubChannels == null) xitem.SubChannels = new List<Channel>(); xitem.SubChannels.Add(citem); } } } // So wie es jetzt ist erhalte ich maximal die Zuordnung der ersten Subchannel. //Da aber jeder Subchannel weitere Subchannel habe kann usw usw usw, geht das hier nicht so ganz auf. } return result; } } internal class Channel { internal List<Channel> SubChannels = new List<Channel>(); internal uint ID = 0; internal string name; } Ich hoffe ihr versteht mein Dilema. Lg Gateway -
Guten Morgen allerseits, ich bin momentan an einem Problem, bei dem mir ein "akurrater" Lösungsweg nicht einfällt. Zum Ausgangspunkt. Ich erhalte eine generische Liste mit Feldern deren wichtigste Strukturelemente wie folgt aussehn: Jedes element hat die Felder ID und ParentID (kann 0 sein) vom Typ int. Jetzt will ich diese "Ordnen" das heißt ich habe eine Struktur geschrieben (nennen wir Sie mal Clients) die intern nochmal ein generisches Feld hat das ParentClients heißt. So nun meine Frage, wie loope ich die urpsrungsliste (am effektivsten durch) um alle ParentClients zu den richtigen Clients zuzuordnen. Wenn es nur eine ebene geben würde, wäre das nicht so schlimm. Nur kann auch jeder ParentClient weitere ParentClients besitzten und diese wiederrum weitere. Wenn ich das mit Schleifen mache, schreibe ich mir einen Wolf und bekomm es (gedanklich) trotzdem nicht hin das ich alle ebenen erhalte. Ich weiß es ist nicht ganz so super ausformuliert, ich hoffe jedoch das ihr es trotzdem verstanden habt. Vielleich noch ein treffenderes Beispiel: Nehmen wir an Ihr habt alle Daten + Ordnernamen eures Primären Laufwerkes in einer Generischen Liste. So nun möchtet ihr jedoch wieder die Baumstruktur herstellen, da diese in der bereitgestellten Liste nicht mehr existiert. Wie geht ihr also die Liste am besten durch um diese Struktur wiederherzustellen ohne am Ende zig hundert Zeilen Code geschrieben zu haben. lg Gateway
-
Nur mal so nebenbei. Alle openbooks lassen sich bei galileo auch als Buchform ordern.
-
ADA . Nicht gerade weit verbreitet (leider).
-
So hat sich nun herrausgestellt das sich diese Klasse sich nicht "Klonnen" lässt . Ist mir bissher nie so richtig aufgefallen, aber mir hat diese Seite sehr geholfen. Ich muss sagen ich kann diese engen Regeln des .NET nicht ganz nachvollziehn. In anderen Sprachen ist man dahingehend doch etwas freier.
-
hi, sry steh hier echt aufm Schlau :old. Weder übergebe ich das Objekt einer Funktion mit einem ref Schlüsselwort oder definiere dieses in einer anderen Funktion neu. Gibts keinen Befehl mit dem ich ein Objekt gänzlich kopiere? Ich versteh grad nur Bahnhof. Das es bei Übergabeparametern prinzipiell zwei möglichkeiten gibt war mir schon bewusst. Aber das betrifft mich doch nicht da ich nichtmal einene Funktion aufrufe. Daher versteh ich jetzt den Zusammenhang mit der msdn Seite nicht ganz. Ich hab das mal eingegrenzt und den Wert Manuel geändert noch in der Foreach schleife mit dem selben irritierenden Ergebniss. foreach (ppt.SlideObject subitem in item.Define.GroupShapeCollection.Container) { if (subitem.Define.GroupLink != null && subitem.Define.GroupLink.GroupUniqueID == (int)dataGridView1.SelectedRows[0].Cells[1].Value && subitem.ID == (int)dataGridView1.SelectedRows[0].Cells[0].Value) { //System.Runtime.InteropServices.Marshal.cop ppt.SlideObject cobj = subitem; cobj.Define.TxTFrame.Value = "test"; //Auch hier wird ebenfalls der Wert des subitems auf test! //Ich versteh nurnoch Bahnhof break; } }
-
Da stimmt was nicht. Denn wenn ich mit C# selbiges Beispiel durchgehe erhalte ich genau das selbe verhalten wie bei vb.net. Und zwar exakt das selbe. Sprich es scheint wohl doch nicht referenziert zu werden in diesem Fall. Das würde mich auch wundern da mir so etwas schon früher aufgefallen wäre, da ich nicht erst seit gestern mit C# arbeite. Umso mehr wundert mich das Ereigniss im ersten Post, da ich wie gesagt das selbe Schema verfolge. lg Gateway
-
Warum ist das dann bei folgendem kleinen vb beispiel nicht so? Dim list As List(Of Object) = New List(Of Object) list.Add("test1") list.Add("test2") For Each item As Object In list Dim localstring as Object = item If localstring = "test1" Then localstring = "x1" End If Next Der Wert des ersten Elements in der Liste bekommt nicht den wert x1. Das ist genau die selbe konstelation (nur vereinfacht) wie in meiner C Sharp Routine. der wert des localstrings wird auf x1 gesetzt werden der Wert des Objects Item weiterhin "test1" lautet. lg Gateway
-
Ich nutze kein ref schlüsselwort also ist mir auch nicht klar wo da referenziert wird oder wo da der ein Referenztyp ist? Das hat er doch vorher auch nicht getan.
-
Hi allerseits, folgendes Ereigniss iritiert mich und ich hoffe ihr könnt mir das näher erläutern. Ich habe eine Liste von objekten, welche ich durchschleife. Deren Elemente lasse ich auf diverse Konstelationen prüfen. Sofern diese den Anforderungen entsprechen, werden Sie zur Bearbeitung an eine weitere Klasse weitergegeben (ohne ref etc.). Wenn der Dialog dann zweckmäßig beendet wird, wird das veränderte Objekt einer neuen Liste hinzugefügt. Jedoch verwirt mich das das ursprungsobjekt der Ursprungsliste ebenfalls den geänderten Wert innehält. foreach (ppt.SlideObject item in cSlide.Objects) { if (item.UniqueID == (int)dataGridView1.SelectedRows[0].Cells[1].Value && (Core.MsoShapeType)item.Type == Microsoft.Office.Core.MsoShapeType.msoGroup) { for (int ival =0;ival<=item.Define.GroupShapeCollection.Container.Count - 1;ival++) { if (item.Define.GroupShapeCollection.Container[ival].Define.GroupLink != null && item.Define.GroupShapeCollection.Container[ival].Define.GroupLink.GroupUniqueID == (int)dataGridView1.SelectedRows[0].Cells[1].Value && item.Define.GroupShapeCollection.Container[ival].ID == (int)dataGridView1.SelectedRows[0].Cells[0].Value) { el.obj = item.Define.GroupShapeCollection.Container[ival]; if (el.ShowDialog() == DialogResult.OK && el.hChanged) { ppt.RevSlideObject xobj = new pptdispatcher.ppt.RevSlideObject(el.obj); xobj.TempName = "TempRev" + (refobjects.Count + 1).ToString() + " " + xobj.Name; xobj.VirtualID = "v" + (virtualidcounter++).ToString(); xobj.ID = id; refobjects.Add(xobj); object[] row = new object[4]; row[0] = xobj.VirtualID; row[1] = false; row[2] = xobj.TempName; row[3] = "-----------"; dataGridView2.Rows.Add(row); } break; } } break; } } Kleineres Beispiel anhand von PseudoCode: String Stringliste Für jedes Stringelement in Stringliste BEGIN String lokalerstring = Stringelement WENN lokalerstring gleich "Test123" BEGIN lokalerstring = "Fertig" //Wird dieser Wert verändert wird auch das Stringelement in der Liste entsprechend verändert. //Meine Frage also: Warum wird hier referenziert und wie kann ich das verhindert? END END lg Gateway