Laden...
Avatar #avatar-3411.png
DaSchroeter myCSharp.de - Member
Anwendungsentwickler Dabei seit 24.06.2004 215 Beiträge
Benutzerbeschreibung

Forenbeiträge von DaSchroeter Ingesamt 215 Beiträge

12.07.2006 - 15:12 Uhr

Fragen:

  1. Wozu brauchst Du den Index?
  2. Warum reicht keine Referenz auf die TabPage?

Wenn's nicht anders geht:


lock( tabControl1 ){
    // hinzufügen und Index holen
}

Damit verhinderst Du ein Anfügen während der Index (==Count) abgefragt wird.

12.07.2006 - 15:05 Uhr

Sorry, hatte Deinen Code nicht richtig gelesen!

Da gibt es noch mehr in StartInfo zu beachten.
CaptureStandardOutput = true oder so ähnlich.

12.07.2006 - 12:39 Uhr

Versuch's mal mit dem StandardError.
Mache Programme schreiben (warum auch immer) lieber dort rein 😉

10.07.2006 - 23:39 Uhr

Würde ich so machen (und hab ich auch schon 1000mal):


string hex = "0791947122723033040C...".ToUpper();
string res = "";
char c1,c2;

for(int i = 0; i<hex.Length; i++){
    
    switch( hex[i] ){
        case '0':case '1':case '2':case '3':case '4':
        case '5':case '6':case '7':case '8':case '9':
            c1 = hex[i] - '0';
            break;
        default:
            c1 = hex[i] - 'A';
            break;
    }
    if( i % 2 == 0 ){
        c2 = c1 * 0x10;
    }else{
        c2 += c1;
        res += c2;
    }
}

return res;

Ist natürlich ungetestet 🙂
Und die eine oder andere Fehlerabfrage fehlt noch...z.B.:
Sind Zeichen ausser '0'...'F' im Input-String?
Ist die Input-String-Länge gerade?

greetz
DaSchroeter

07.07.2006 - 12:11 Uhr

Ha...diesmal war ich schneller 🙂

07.07.2006 - 12:10 Uhr

Ähm....Fehlermeldung?
Fehlerbeschreibung?
Irgendwas?

06.07.2006 - 14:03 Uhr

Tja, vielleicht schon, aber dazu müsstest Du mal ein bischen direkter beschreiben, was Du eigentlich machen willst.
Also nicht mit Klasse A soll und B in C, sonder z.B.:
Ich möchte ein PlugIn schreiben für Programm X und das soll Dies und Das können.
Probleme gibt es dann beim Aufruf von Blub.
Codeschnipsel wären hilfreich!

Vielleicht liegt ja ein grundsätzlicher Denkfehler (vielleicht ja auch bei mir) vor.

06.07.2006 - 13:50 Uhr

Naja, deshalb gibt es ja für PlugIns immer Interfaces.
Was die bietet geht, sonst nix.

06.07.2006 - 13:32 Uhr

Also wenn Du keinen Code des Formulars hast, was genau machst Du denn da eigentlich? Nur per Referenz und DLL einbinden?

Ich denke das Forumal startet Deinen Worker?!

ch brauche also ein Event in dem Gui-Thread, welches ich aus der asynchronen Methode aufrufen kann...

GUI == Form -> Kein Zugriff -> Geht nicht

Im Großen und Ganzen kann man sagen: HÄ?

06.07.2006 - 12:56 Uhr

Ich glaube Du solltest dich nochmal genauer schlaumachen.

Die beiden Routinen, die ich gepostet habe, befinden soch im Code vom Formular.
Du gibst doch der TcpListener Klasse an, wo sie sich zurückmelden soll.
Und das ist eben wieder im Formular. Nur wird der Code dann in einem anderen Thread-Kontext ausgeführt. Deshalb das Invoke.

Edit:


class Form1 : Form {
    
    private void Bla() {

        TcpListener tcp = new TcpListener(1234);
        tcp.BeginAcceptTcpClient(new AsyncCallback(AcceptClientCallback), null);
    }

    private void AcceptClientCallback(IAsyncResult state) {

        if( InvokeRequired ) {
            Invoke(new AsyncCallback(AcceptClientCallback), new object[] { state });
        } else {
            //mach was
        }
    }
}
06.07.2006 - 12:47 Uhr

Nur mal um zu sehen, ob ich jetzt alles geblickt hab:


private void Bla() {

    TcpListener tcp = new TcpListener(1234);
    tcp.BeginAcceptTcpClient(new AsyncCallback(AcceptClientCallback), null);
}

private void AcceptClientCallback(IAsyncResult state) {

    if( InvokeRequired ) {
        Invoke(new AsyncCallback(AcceptClientCallback), new object[] { state });
    } else {
        //mach was
    }
}

So?

06.07.2006 - 12:42 Uhr

Du gibst doch der TcpListener.BeginAcceptTcpClient eine Callback-Routine mit, oder?

Das ist eine Methode mit der Signatur AsyncCallback.

Also dort drinnen einfach mit InvokeRequired prüfen und evtl. eben eins machen (Selbstaufruf).

06.07.2006 - 12:36 Uhr

string strZahl = (String)floZahl;

Das funktioniert nicht.


string strZahl = floZahl.ToString();

So muss es, und das ist 'eine formatierte Ausgabe'.

Wie gesagt: Es kann, muss aber keine Fehler geben...hängt vom System (Sprache,...) ab.

06.07.2006 - 12:25 Uhr

Bei größeren floats aber aufgepasst:
Eventuell wir ein '.' (Punkt) als Tausendertrennzeichen verwendet!

Generell sollte bei solchen Konvertierungen der Kram aus CurrentCulture und Co Verwendung finden.

06.07.2006 - 12:18 Uhr

Nur um mal klarzustellen, was passieren soll:

  1. Deine Main Routine startet Deine GUI (Form)
  2. Dein Form startet einen Thread
  3. Dein Thread terminiert und soll vorher die GUI benachrichtigen

Ist das richtig?
Oder:

  1. Deine Main Routine startet einen Thread
  2. Deine Main Routine startet Deine GUI (Form)
  3. Dein Thread terminiert und soll vorher die GUI benachrichtigen

Isses das?

Ansonsten poste mal bitte Code (Pseudo reicht).

06.07.2006 - 11:40 Uhr

Typischerweise nimmt man für sowas Events.
In den Handler-Routinen(in der GUI) kannst Du dann mit InvokeRequired prüfen, ob
Du direkt Änderungen machen kannst, oder ob Du ein Invoke einsetzen musst.

05.07.2006 - 13:43 Uhr

Hi!

Grundsätzlich sind das zwei verschiedene Ansätze:

  1. Relationale Datenbank
  2. Objektorientierte Datenstruktur

Du musst also die Daten aus der Datenbank rausholen und zu Objekten zusammenbauen (Object-Relational-Mapping). Beim Sichern halt umgekehrt.

Oder Du nutzt eine Objektorientierte Datenbank.
Oder Du nutzt keine Datenbank sondern serialisierst Deine Objekte in Dateien.

greetz
DaSchroeter

04.07.2006 - 12:18 Uhr

zu 2.: Im Konstruktor Deines Formulares die string-Valiable auf "" setzen.

04.07.2006 - 12:16 Uhr

Hi!

Ich würde anders vorgehen.
Nimm die BitConverter Klasse.
z.B.:


UInt16 shortUIntValue = BitConverter.ToUInt16(buf,0);

und dann mit ner for:


char[] charAr = new char[buf.Length-2];
for(int i=2; i<buf.Length; i++)
    charAr[i-2] = (char)buf[i];

Das erste geht natürlich nur, wenn die Bytes richtig im Array liegen (->MSDN->BitConverter).

04.07.2006 - 11:42 Uhr

Hab's aufgegeben, danach zu suchen.
Ist ein Bug, soviel steht fest, aber woher der kommt weiss wohl niemand 🙂

04.07.2006 - 11:28 Uhr

Menu->Window->Close All Documents
Menu->Build->Batch Build...->Select All->Rebuild

Dann sollte es wieder funktionieren.

04.07.2006 - 10:01 Uhr

Versuch mal sowas:
String.Split("\r\n");

04.07.2006 - 09:54 Uhr

Original von Dr.Cool
Wie kann eine Maschine aus leblosem Plastik und Metall dieses innere ich entwickeln, von dem man nicht genau weiß, was es ist.

Einfach toll!
Kann ich mir das ausborgen? 🙂
Das kann man gar nicht besser ausdrücken!

04.07.2006 - 09:44 Uhr

Seht Ihr, geht schon los, das 'drüber streiten, ob sie nötig sind' 🙂

04.07.2006 - 09:38 Uhr

Original von no1gizmo
....
So kann auch unser Gehirn sich mit der Zeit erschaffen haben, leistungsfähigere haben sich ggf. durchgesetzt, leistungsschwächere sind wahrscheinlich verschwunden.

Aber das sind nur körperliche Ausprägungen, welches uns nun das Denken wie es ist ermöglichen. Das hat mit unserer eigenen Ideenfindung, z.B. bei der C# Programmierung, nichts zu tun.

Naja, aber es geht ja um die Frage, ob wir alle inklusive Umwelt komplett simuliert sein könnten, d.h. ob es prinzipiell möglich wäre.

Und dazu gehört auch die Evolution, also der Zufall, also 'echte' Zufallszahlen.

04.07.2006 - 09:20 Uhr

Original von no1gizmo
Ich glaube nicht, dass Zufallszahlen eine Rolle spielen.

Ich denke schon, da sonst keine 'Entwicklung' des Programmes möglich ist.
-> Evolution ist nunmal zufallsgesteuert.

Aber für die eigentliche Verarbeitung kann man darüber streiten, ob sie nötig sind 😉

greetz
DaSchroeter

04.07.2006 - 09:17 Uhr

Original von Traumzauberbaum
Ich weiß auch garnicht warum man sich hier so zurückhaltend gibt und die Position für heutige Rechner schon aufgibt. Da ist noch garnichts gezeigt, noch nichts argumentiert außer "das kann doch nicht sein". Da kann ich genauso sagen "klar kann das". Was jetzt? Diskussion beendet? Ich finde das doch etwas dürftig. Bringt mal bitte ein paar Argumente, davon ist irgendwie noch nichts zu sehen. Das macht es irgendwie schwer darüber zu diskutieren.

Neuronale Netze sind eine Datenstruktur. Die sind auf heutigen Rechnern leicht umsetzbar und keine Erfindung von Startrek.
Es gibt verschiedenste evolutionäre und "genetische" Algorithmen, die auf intuitive Weise eine Lösung hernehmen und die immer weiter durch Variation verbessern zu versuchen. Genauso wie wir an irgendeinem Problem tüfteln und "kreativ" sind.

Das ist mir durchaus bewusst. Ich meinte auch nicht, dass ein Neuronales Netz den Rechner bildet, sondern dass sich die Konzepte und Ideen, die hier Eingang finden gut zur Lösung Aufgabenstellung eignen. Dazu gehören sicherlich auch die von Dir genannten 'genetischen' Algorithmen.

Ich denke aber auch, dass das Potential, dass in diesen Konzepten steckt auf heutiger Hardware lange nicht ausgeschöpft werden kann.

Daran, dass sie auch auf heutigen Rechnern funktionieren besteht wohl kein Zweifel.

greetz
DaSchroeter

03.07.2006 - 23:51 Uhr

Hi Dr.Cool,

grundsätzlich redest Du hier von einem 'herkömmlichen' Computer.
Also von solchen mit einer Von-Neumann-Architektur oder Vergleichbarem.

Es gibt aber durchaus auch andere Kozepte, wie z.B. Neuronale Netze.
Nie war hier von aktueller Hardware die Rede und das meinte zumindest ich auch nie.

Um 'Leben' zu 'erschaffen' muss meiner Ansicht nach ein massiv Parrallel verarbeitendes System her.

Sowas ist durchaus zu realisieren und was dann an 'Software' drauf läuft bleibt abzuwarten.

greetz
DaSchroeter

03.07.2006 - 23:08 Uhr

Original von gespannter_Bogen
Es gibt eine ganz einfache Methode, 'uns nachzubauen':

      Kinder kriegen.  

Vor allem aber, dabei mithelfen, sie großzuziehen. Wenn man das macht, bzw. gemacht hat, wird man unschwer feststellen, welch fundamentaler Unterschied zwischen Mensch und Maschine besteht. Der wichtigste: Kinder haben einen eigenen Kopf. Sie sind Subjekte, die vielleicht ein bischen Hilfestellung brauchen, im Prinzip aber selbst wissen, was für sie gut ist und wie sie vorankommen.
Auch ist das Hirn keine festgelegte Hardware, sondern selbst in seiner Substanz im übrigen auch im Alter noch höchst wandelbar und lernfähig.

Das hat überhaupt nichts mit der Aussage von mir zu tun, die Du hier zitiert hast.

Im Grunde genommen sind wir uns aber einig:

Dies ist teilweise evolutionär entstanden und teilweise anerzogen/trainiert.

greetz
DaSchroeter

03.07.2006 - 20:02 Uhr

Hehehe...hört sich an wie mein Chef:

  • Da gibt's doch schon was!
  • Das kann doch nicht so kompliziert sein!
  • Andere machen das doch auch!

Im Ernst: Fremdsoftware korrekt Einbinden ohne Doku ist nicht drin!
Und manche Sachen sind einfach nicht trivial, obwohl die Ergebnisse nicht viel hermachen.
Einfach mal eben ne SMS raushauen...hört sich so einfach an, aber hängt viel dran 🙂

Meine Empfehlung: Recherche bei Motorola.
Haben die ein Developer Center oder sowas?
-> Website

greetz
DaSchroeter

03.07.2006 - 19:55 Uhr

Hmmm...ich glaube die musst Du einzeln zeichnen.
Aber es gibt irgendeine Methode, um eine String-Breite auszumessen.
MeasureString oder so (weiss nicht mehr, ob das C# war 🙂 ).
Dann das Zeichnen in einer Methode kapseln und fertig.
So etwa:


public void DrawMenuItem(int x, int y, string text){
    // hier den ersten Buchstaben malen und die Breite ausmessen
    // dann den Rest hintendran tun ;)
}

03.07.2006 - 19:49 Uhr

@herbivore: hast ja recht, aber mir ist grad langweilig 😉
Und manchmal hilft ein Stückchen Code mehr als 1000 Stichworte...ist ja nix Komplettes 😉

03.07.2006 - 19:43 Uhr

okay...also:


TestReader tr = File.OpenText("..\\..\\Schublade\\Test.txt");
string res = "", line;

line = tr.ReadLine();
string pw = ""; // hier das Passwort aus der ersten Zeile lösen (Stichwort: Split());
string rndStr = ""; // hier die Zufallszahl aus der ersten Zeile löschen (s.o.)
int rnd;
if( !int.TryParse(sndStr,out rnd) ){
    tr.Close();
    throw new Exception("Falsche Zufallszahl");
}

while( (line=tr.ReadLine()) != null ){
    for( int i=0; i<line.Length; i+=3 ){
        res += line[i];
    }
    res += "\r\n";
}
tr.Close();
return res;

Ist aber nicht getestet, sondern einfach nur hier reingetippt.
Liefert die Einträge lesbar zeilenweise.

greetz
D

P.S.: Ich hoffe ich helfe nicht beim Mogeln 😉

03.07.2006 - 19:32 Uhr

Frage: Wieso willst Du sowas machen?
Sieht für mich relativ sinnlos aus 😉

03.07.2006 - 16:55 Uhr

Moin!

Also ich stimme herbivore grundsätzlich zu.

Ich denke das Grundproblem leigt darin, dass sich keiner ein so kompliziertes 'Programm' wie einen Menschen vorstellen kann.

Ein Mensch hat für alle 'Eingaben' ein Reaktionsmuster eingebaut. Dies ist teilweise evolutionär entstanden und teilweise anerzogen/trainiert.
Beispiel: Schmerz als Indikator 'Nicht-Gut'(evolutionär) -> Reaktion: Schmerz vermeiden
Aber 'Schmerz' heisst ja nicht einfach nur Schmerz, sodern 'Schmerz im linken, kleinen Finger'. Also alles in allem ZIEMLICH VIEL Input.

Da das Gehirn auch noch massiv parrallel arbeitet, ist von einem 'Programm' eigentlich nichts zu erkennen.

Es gibt heutzutage keine Hardware, auf der ein vergleichbares, von Menschen erschaffenes Programm laufen könnte.
Es spricht aber meiner Ansicht nach Nichts dagegen - eher sogar Einiges dafür - dass solche Hardware entwickelt werden wird.

Aber Sicherlich nicht in den nächsten paar Jahren 🙂

Und mal ganz allgemein: Warum ist es eigentlich 'schlecht', wenn wir uns nachbauen können?
Perfekt ist der Mensch ja nun wirklich nicht, also warum nicht mal eine V2.0 erstellen 🙂
Und wenn wir das schaffen: Dann war die V1.0 ja doch nicht so blöde 🙂

greetz
DaSchroeter

23.06.2006 - 13:31 Uhr

Sicher, dass die Linien auch im sichbaren Koordinatenbereich liegen?
x = e.Graphics.Width (oder Ähnlich) liegt da z.B. nicht mehr drin, weil der Bereich
von 0-(Width-1) geht.

23.06.2006 - 13:28 Uhr

Das kann aber Probleme geben wenn z.B. folgende Verzeichnisse existieren:
c:\dummes ding 1\hallo.welt
c:\dummes ding 2\hallo.ihr

Schau mal hier nach:
http://www.pinvoke.net/default.aspx/kernel32.GetShortPathName

Aber zu beachten: Das geht NUR für existierende Dateien!
Für Verzeichnisse müsstest Du ne Dummy-Datei anlegen.

23.06.2006 - 13:19 Uhr

Gibt es da (sinngemäß) StayOnTop?

Edit: TopMost? Hiess das so? Steh grad auf'm Schlauch 😉

23.06.2006 - 13:16 Uhr

Zu Registry: Du kannst im Setup-Projekt angeben, welche Schlüssel geschrieben werden sollen (und auch wo). Es gibt da auch 'Variable' wie '[Manufacturer]' und so.

Zu Code: Hab ich zwar noch nicht gemacht, aber es gibt 'Events', bei denen Du Code ausführen kannst. -> MSDN

Zu Schnell: Bin ich immer 🙂

23.06.2006 - 12:39 Uhr

Du kannst doch mit dem Installer in die Registry schreiben.
Und darauf hinterher mit Deiner Anwendung zuzugreifen ist auch kein Problem.

Evtl. kann der Installer ja auch Änderungen an den AppSettings machen?

23.06.2006 - 12:35 Uhr

@herbivore: Mist....wieder zu spät...Du bist aber auch was schnell 🙂

23.06.2006 - 12:34 Uhr

Ich würde permanent prüfen, welches Fenster aktiv ist, und, solange es nicht Dein eigenes ist, es mir als 'Current' merken.

Dahin kannst Du dann die Tasten schicken.

22.06.2006 - 12:00 Uhr

Login myObject = new Login();
XmlSerializer mySerializer = new XmlSerializer(typeof(Login));
Stream myStream;
mySerializer.Serialize(myStream, myObject);

byte[] bytesToSend = // Wie muss ich hier wandeln???(myStream);
this._SendStream.Write(bytesToSend, 0, bytesToSend.Length);

Was genau ist denn _SendStream?
Ist das nicht ein Stream?

Warum serialisierst Du nicht direkt da rein?

20.06.2006 - 14:27 Uhr

Probier mal das hier:


ListViewItem item = listView1.Items.Add("<key>");
item.SubItems.Add("<value>");

20.06.2006 - 10:43 Uhr

Hmm...warum wirfst Du denn kein 2-dimensionales Array vom Typ Eintrag in Deine rekursive Funktion?
Dazu noch Parameter x und y für den zu bearbeitenden Eintrag und fertig.

Dann brauchst Du nicht klonen und die Parameter x und y als int werden eh By-Value übergeben.

greetz
D

20.06.2006 - 10:12 Uhr

Ups, da war mal wieder jemand (wer wohl 🙂 ) schneller!

20.06.2006 - 10:11 Uhr

Hab zwar den Anwendungsfall nicht ganz kapiert, aber TextBox hat ein Ereignis EnabledChanged.
Da kannste Dich dranhängen.

greetz
D

14.06.2006 - 20:09 Uhr

Du könntest auch 'einfach' im ListViewItem.Tag den Treenode hinterlegen, der diesem Eintrag entspricht.

13.06.2006 - 18:55 Uhr

Sieh mal nach, welcher Zeilentrenner bei der Serial Komponente angegeben ist.
ReadLine() verursacht glaube ich nen Fehler, wenn der Trenner nicht innerhalb einer bestimmten Zeit kommt. Gibt gestimmt auch eine TimeOut Eigenschaft für sowas.