Laden...
Avatar #avatar-2909.png
michlG myCSharp.de - Experte
Student + Programmierer Naturns - Südtirol - Italien Dabei seit 26.07.2007 3.430 Beiträge
Benutzerbeschreibung

Forenbeiträge von michlG Ingesamt 3.430 Beiträge

11.03.2008 - 22:33 Uhr

Hallo zusammen,

ich muss diesen sehr sehr alten Thread wieder einmal zum Leben erwecken.

Vor ca einem Jahr hatte ich auch mal ein ziemlich seltsames Ereignis:
Da meine Schule recht weit von mir entfernt ist muss ich ziemlich früh aufstehen (ca. um 6 Uhr). Und ich bin eigentlich auch noch ein langschläfer, deshalb habe ich meistens bis kurz vor 6:20 geschlafen (oftmals verpasste ich auch den Bus, weil ich zu lange geschlafen habe 😄).

Und eines Tages schaute ich am Morgen auf die Uhr und sah, dass es schon 6:40 war (und dachte mir sche....e I`m late 😄). Und der Bus fährt drei Minuten später. Also bin ich schnell aus dem Bett gesprungen, rein in die Klamotten, schnell noch abwaschen und aus dem Haus gelaufen. Dabei ist mir schon aufgefallen, dass es sehr dunkel für diese Uhrzeit war, ich habe mir aber nichts weiteres dabei gedacht. Als ich an der Bushaltestelle war, ist mir auch aufgefallen, dass kein Mensch auf der Straße zu sehen war. Nachdem ich nochmals auf die Uhr schaute, ist mir aufgefallen, dass ich zwei Stunden zu früh unterwegs war 😄...
Seitdem schaue ich morgens immer zwei-bis-drei mal auf die Uhr, damit sowas nicht noch einmal passiert, denn besonders für einen Programmierer ist es sehr untypisch, dass man sich vor acht Uhr blicken lässt. 😁

Gruss
MichlG

11.03.2008 - 21:36 Uhr

Hallo mirzahat,

Eigentlich sollte in diesem Link alles drinnen stehen....

Das Problem ist, dass du nicht in einem Thread auf ein Control zugreifen kannst welches du mit dem GUI-Thread erstellt hast.
Um dieses Problem zu umgehen ist es notwendig das ganze über Invoke zu machen.
siehe: [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke)

das heisst: Du musst wenn du auf dein Control zugreifen willst folgedes machen (Bei diesem Beispiel wird einfach die Texteigenschaft der Textbox geändert)


private void my_control_invoke(stirng text)
{
if(myTextBox.InvokeRequired) //Kontrollieren ob ein Invoke notwendig ist.. wenn ja, dann die methode erneut mit invoke aufrufen
     myTextBox.Invoke(new MethodInvoker(my_control_invoke));
else
     myTextBox.Text = text;
}

private void my_thread()
{
//Das ist dein Thread
//Hier kannst du alles ganz normal machen, du musst aber mit der my_control_invoke methode auf das Control zugreifen
my_control_invoke("MEIN TEXT");
}

Achtung... da könnten Fehler drinnen sein, da ich es ohne VS gecoded habe

ich hoffe, dass dir das ein bisschen weiter hilft

Gruss
MichlG

07.03.2008 - 23:51 Uhr

moin, oder besser guten abend =)

ich habe mir mal eine Eingabetastatur gebastelt. und dabei war es oftmals notwendig die Shift-Taste zu drücken bzw. loszulassen. und dafür habe ich dieses Codestück verwendet. Damit kannst du die Tasten drücken bzw loslassen.


        [DllImport("user32.dll")]
        static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);

            const int KEYEVENTF_EXTENDEDKEY = 0x1;
            const int KEYEVENTF_KEYUP = 0x2;
            keybd_event((byte)Keys.ShiftKey, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0); //Shift-Taste drücken
            keybd_event((byte)Keys.ShiftKey, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0); //Shift-Taste los lassen

zu punkt zwei:
Ob das Event auch durch das hier ausgelöst wird kann ich dir nicht genau sagen, da ich es nicht getestet habe.
Falls es immer ausgelöst wird, so kannst du dir ja einfach merken wenn ein User eine Taste drückt, dann weisst du was darauf folgt.
Wenn der User z.B. A drückt dann weisst du genau, dass durch dein Programm nun drei weitere A folgen.

mfg
MichlG

07.03.2008 - 23:11 Uhr

Hallo badastronaut,

dazu findst du hier auf der Linken Seite unter Ressourcen einige OpenBooks und das Guide to C# von Golo. Welche einen sehr guten einstieg in die Programmierung mit C# bieten.

Spezielle das hier ist das was du suchst: ADO.NET

Für den Anfang sollten diese OpenBooks auf jeden Fall reichen...

mfg
MichLG

07.03.2008 - 22:20 Uhr

Uuuuppppssss,

ich habe da eine kleine, aber wichtige Zeile übersehen....

Auf der von mir geposteten MSDN-Seite steht folgendes:

Diese Eigenschaft unterstützt die .NET Framework-Infrastruktur und ist nicht für die direkte Verwendung in Code bestimmt.

AFAIK kann dem Treeview doch kein Image als BackgroundImage zuweisen.... deshalb musst du das doch wieder selber zeichnen.

Sorry...

mfg
MichlG

07.03.2008 - 22:02 Uhr

Hi Inok,

du könntest auch versuchen den Farbverlauf als BackgroundImage dem Treeview zuzuweisen.

siehe: MSDN

aber die saubere Lösung ist auf jeden fall, wenn du es wie von Jaensen beschrieben selbst zeichnest.

mfg
MichlG

07.03.2008 - 21:46 Uhr

Hallo zero_x,

das sollte so schon funktionieren.
Ich habe aber ein paar kleine Tipps, woran es liegen kann dass es nicht funzt:

  1. Ist dir bewusst, dass der Opacity-Wert zwischen 0 und 1 liegen muss (z.B. 0.5)

  2. Wird diese Methode überhaupt aufgerufen, wenn du auf den Button klickst?
    Setze eventuell einen Breakpoint in der Methode, damit du siehst ob er in diese hinein geht.

mfg
MichlG

//aede war zwar schneller, aber vielleicht hilft dir mein bereits geschriebener post ja trotzdem ein bisschen weiter

07.03.2008 - 19:44 Uhr

Hallo Cannon,

Falls ich richtig gelesen habe, kostet das Ding 99,- USD.

Das stimmt schon... da wäre aber auch ein riesiges Paket von Controls dabei. Wenn du dich registrierst und das dann herunterlädst, dann findest du sehr viele neue Controls im VS.

Und das XtraNavBar sowie einige andere Controls (wie spezielle Button, Textfelder, Comboboxen usw...) können dazu frei verwendet werden (auch ohne zu zahlen). Habe das gerade selbst getestet und die Navbar erfolgreich in eines meiner Projekte eingebaut.

Alle anderen Controls kannst du zwar testen, es erscheint jedoch immer wieder eine Meldung, dass es sich dabei um eine nicht lizenzierte Version handelt.

mfg
MichlG

07.03.2008 - 15:59 Uhr

Hallo Cannon,

bei Devexpress gibts sowas. Man muss sich nur registrieren und kann das die sog. XtraNavBar frei verwenden (falls ich mich nicht irre🙂)

Schau dir dazu mal diesen Link an:
DevExpress

mfg
MichlG

06.03.2008 - 23:10 Uhr

Hm ich berechne aus den Daten der DB ein TreeView, fülle selbsterstelle Controls, verschlüssele die daten, ...

Aufwendig genug um sie wegzupacken?

Hm, das ist schwer zu sagen.
Ich würde die Daten in Klassen packen, weil es für die Weiterverarbeitung praktischer und flexibler ist.

Da hat jedoch jeder Programmierer seinen eigenen Stil.
Der eine hat die Daten lieber in einem DataSet und der andere schreibt sie in seine Klassen.

mfg
MichlG

06.03.2008 - 22:49 Uhr

Hallo TripleX,

wenn du die Daten nur anzeigen, oder einfach bearbeiten willst, dann würde die Version mit Dataset und DataGridView vollkommen ausreichen.

Aber wenn du damit diverse Berechnungen oder irgendwelche programmiertechnisch aufwendige Aufgaben zu erledigen hast, dann wäre es vielleicht vorteilhaft die Daten in eine Klasse bzw. mehrere Klassen zu packen.

Ich zeige die Daten meistens direkt im DataGridView an, ohne den Umweg über eigens dafür erstellte Klassen (z.B. Bücher-klasse).

Aber die Version mit den Klassen kann sicherlich auch oft sehr hilfreich sein.

Gruss
MichlG

05.03.2008 - 22:55 Uhr

Hallo belfry,

wo genau bekommst du die Exception??

versuche mal das hier


strSQL = "INSERT INTO TEST (KURS, ID) VALUES ('Mathe', 1)";
            create.CommandText = strSQL;
            create.ExecuteNonQuery(); //Bekommst du Die Exception hier??

Kannst du die erste Abfrage erfolgreich ausführen??
Wenn ja, dann probiere mal vor der zweiten Abfrage das SqlCommand neu zu instanzieren.


create = new SqlCommand(strSQL,connection);

Vielleicht hilft das.

Auf jeden Fall kann ich dir einen Tipp geben. Die Datenbankverbindung soll bzw. muss geschlossen werden


connection.Close();

da es sonst zu diversen Problemen kommen kann, weil der Server zu viele offene Verbindungen hat.

mfg
MichlG

04.03.2008 - 23:05 Uhr

Hallo MaxBones,

du kannst die Bilder einfach den Ressourcen hinzufügen (rechts im Projektmappen-Explorer).

Dann kannst du mit <deinProjekt>.Properties.Resources.<Dateiname> auf dein Bild zugreifen um es in der PictureBox anzuzeigen. Aber die schönere Lösung wäre es, wenn du wie Hebivore und joberschweiber die Karten selbst zeichnen würdest.

mfg
MichlG

04.03.2008 - 22:44 Uhr

Hallo zusammen,

Privat programmier ich auch auf meinen Laptop, Acer Aspire 5920G, Intel Core 2 Duo 9300, 3 GB DDR2, 320GB HDD, Geforce 8600M GT auf 15,4", ca. 3h Akkulaufzeit (da ich nie die Bildschirmhelligkeit auf 0% stell, sinds ca. 3h, ansonsten ca. 3,5h).
Aufm Laptop ist Vista Home Premium, Visual Studio 2008, Eclipse (für andere Programmiersprachen), Office 2007, also für unterwegs bin ich auch immer gerüstet. 👍

Das ist eine gute Wahl..... Dein Notebook wird ja abgehen.. 😁
Habe auch ein Acer Aspire 5920G mit Intel Core 2 Duo 7300, 2GB RAM und 160 GB HDD... der Rest ist bei mir gleich.....

und ich bin mehr als zufrieden mit dem Notebook....

mfg
michlG

04.03.2008 - 21:29 Uhr

Hallo etienne,

das liegt daran, dass die listbox nicht von selbst mitbekommt (auch wenn du sie neu zuweist) , dass sich die Werte der DataSouce geändert haben. Dazu müsstest du ein paar kleinigkeiten hinzufügen, damit das die DataSource von selbst versteht.
siehe dazu: ListBox (DS ist ein Array) aktualisieren

wenn dir das ein wenig zu kompliziert sein sollte, so kannst du das auch direkt mit den Items der Listbox lösen.

z.B.


            listBox.Items.Clear(); //items der Listbox löschen
            listBox.Items.AddRange(array); //items der Listbox hinzufügen

mfg
michlG

\EDIT: Hebivore war mal wieder schneller

04.03.2008 - 21:03 Uhr

Hallo Etienne,

Optional wollte ich es eigentlich so machen, das das Listenfeld sich schon bei der Eingabe in das Textfeld sich selbst aktualisiert. Das klappt leider gar nicht. Zwar wird der Buchstabe immer an die Suche übergeben, aber er springt gar nicht zu der if-Abfrage (auch mit Einzelschritt ausprobiert).

  
private void txtArtikelsuche_TextChanged(object sender, EventArgs e)  
        {  
            artikelliste.Clear();  
            foreach (Artikel x in artikelliste)  
            {  
                if (x.Name.Contains(txtArtikelsuche.Text))  
                {  
                    ergebnis.Add(x);  
                }  
            }  
            lstErgebnis.DataSource = ergebnis;  
            lstErgebnis.DisplayMember = "Name";  
}   
  

Sehr kurios, oder könnt ihr euch das erklären?!

also das hier kann ich mir schon erklären.
Denn du greifst ja mit der foreach - schleife auf jedes element der artikelliste zu. Jedoch löschst du alle Elemente aus der Artikelliste (mit artikelliste.Clear()😉 bevor du sie in der Schleife durchgehst. Deshalb findet er keine Elemente in der artikelliste und geht auch nicht in diese hinein.

Ich hoffe, dass dir das ein bisschen weiter hilft

mfg
MichLG

03.03.2008 - 23:01 Uhr

Hallo Der Anfänger,

Herzlich willkommen bei MyCsharp.de

Jetzt ist meine Frage ist solch eine Ausgabe mit Hilfe der RichTextBox überhaupt möglich , und wenn ja wie? Oder gibt eine andere möglichst einfache Möglichkeit einer tabellarischen Ausgabe, die später auch ausdruckbar ist.

Am einfachsten kannst du das mit einem DataGridView realisieren.

Denn die RichTextBox ist eigentlich nicht für so etwas gedacht. Aber um es so zu machen, wie du wolltest musst du eine bestimmte Schriftart wählen wie z.B. Courier. Denn bei dieser Schriftart haben alle Zeichen die selbe Breite.

Im Internet findest du Beispiele wie man einen DataGridView ausdrucken kann. Einfach in google nach "DataGridView ausdrucken" suchen.

Des Weiteren habe ich die vertikale und horizontal Scrollbar der RichTextBox in Visual Studio aktiviert ,jedoch funktioniert nur die vertikale Scrollbar .Horizontal wird ein ungewünschter Zeilenumbruch durchgeführt….Wieso?

Das kann vielleicht daran liegen, dass du den automatischen Zeilenumbruch aktiviert hast.

Ein weiterer Punkt ist die Möglichkeit die Eingaben im fertigen Programm zu speichern(das heißt die Arrays).Nur habe ich leider keine Ahnung wie dies funktioniert .

Wenn du damit meinst, dass du deine Daten für einen erneuten Aufruf des Programms abspeichern willst, so kann ich dir die XML-Serialization empfehlen.
Damit kannst du ganze Klassen (mit deinen Arrays) in ein XML-File serialisieren. Und das funktioniert auch relativ einfach. Auch dazu solltest du unter google bzw. in der Forumssuche einige Beispiele finden.

Ich hoffe, dass dir das ein bisschen weiter hilft

mfg
MichLG

03.03.2008 - 19:30 Uhr

Hallo Talla,

Ich will nicht außerirdisches Leben verneinen, aber die grauen Mänchen in ihren UFOs gibt es sicherlich nicht.

sag nie nie... Denn vielleicht hast du schon morgen eine Begegnung mit uns fremden Lebensformen 🙂 nicht ganz ernst gemeint

Gruss
MichlG

03.03.2008 - 18:05 Uhr

Hallo Teclis,

am einfachsten ist wirklich wie joberschweiber gesagt hat, wenn du dir ein Control baust, das die Karten eines Spielers anzeigt. In diesem Control fügst du so viele PictureBoxen hinzu, wie der Spieler Karten hat. Du musst dir halt irgendwie berechnen wie do die Pictureboxen positionieren musst, damit du sie alle im Control platz hast.
z.B. Karten überlappen sich immer mehr, je mehr Karten du hast

Wenn das funktioniert, dann kannst du für jeden Spieler so ein Control der Form hinzufügen.

Ich hoffe, dass dir das ein bisschen weiter hilft

mfg
MichlG

03.03.2008 - 17:57 Uhr

Hallo Teclis,

dazu kannst du am einfachsten eine PictureBox nehmen, in der du die entsprechende Karte als Bild anzeigst.

Dafür müsstest du aber jede Karte einscannen. selberzeichen oder was auch immer... 🙂

mfg
MichlG

03.03.2008 - 17:02 Uhr

Was macht die Eigenschaft Name dann? Werd leider aus der Hilfe net schlau. Zitat "Ruft den Namen des Strukturknotens ab, oder legt ihn fest"?!

Soweit ich weiss, ist die Name-Eigenschaft hauptsächlich für interne Zwecke gedacht.

Somit kann der Programmier dem Knoten einen bestimmten Namen zuweisen um später damit leichter arbeiten zu können.

Manchmal kann die Texteigenschaft auch vom Benutzer festgelegt werden, und dadurch kann es hilfreich sein, die Name-Eigenschaft zu verwenden.

mfg
MichlG

03.03.2008 - 16:44 Uhr

Hallo Etienne,

Herzlich willkommen bei MyCSHARP.de

ich glaube, mal dass du die Bezeichnung (der Text der beim Node steht) haben willst. Und das ist nicht die Name-Eigenschaft, sondern die Text-Eigenschaft

VA-Name.Nodes[index].Text 

liefert dein gewünschtes Ergebnis

mfg
MichlG

02.03.2008 - 13:06 Uhr

HI Yellow,

ich habe auch oft das Problem, dass ich einen Serverfehler bei unserer Stadt bekommen.... Aber auch nicht so oft (etwa jedes fünfte mal).

mfg
MichlG

01.03.2008 - 23:08 Uhr

Ich habe von vorher daran geglaubt,

aber diese Zitat hat mich absolut davon überzeugt.

Das Weltall ist so gross, wenn es da draussen nicht noch anderes Leben gibt, wäre es eine ziemliche Platzverschwendung

Denn es wäre wirklich sehr ungewöhnlich wenn da so viel Platz verschwendet worden wäre 🙂

01.03.2008 - 23:01 Uhr

Hallo Zusammen,

ich habe mir auch gerade dieses Video angeschaut...

und ich bin da der selben Meinung wie TNDAri.

Denn es ist ja sogar ziemlich wahrscheinlich dass es einen weiteren Planeten gibt, worauf Leben möglich ist. Aber jeder kann sich da seine eigene Meldung bilden 😁

mfg
MichlG

01.03.2008 - 22:35 Uhr

Hallo mastereder,

ich habe schon öfters mit C# auf Beckhoff-Geräte zugegriffen, und das geht wie folgt:



//Verbindung mit der Steuerung
TcAdsClient tcClient = new TcAdsClient();
            
//Die AMS-NetID und der Port
tcClient.Connect("5.1.79.229.1.1", 801);

//Auslesen von Variablen
//MIt dem BinaryReader kann man aus der Steuerung auslesen
AdsStream dataStream = new AdsStream(256);
BinaryReader binaryreader = new BinaryReader(dataStream);

//VariablenHandle erstellen
tcClient.Read(tcClient.CreateVariableHandle("MAIN.p1"), dataStream);
dataStream.Position = 0;

string plc_string1 = binaryreader.ReadString().ToString();
                        
//UND das ist zum Schreiben in die Steuerung

//Mit dem BinaryWriter kann man in die Steuerung schreiben
AdsStream adsStream = new AdsStream(10);
BinaryWriter writer = new BinaryWriter(adsStream,System.Text.Encoding.ASCII); 

adsStream.Position = 0;
writer.Write("TRUE".ToCharArray());
writer.Write('\0');       
                                 tcClient.Write(tcClient.CreateVariableHandle("MAIN.Reboot"), adsStream);

Hier könnten aber noch irgendwelche Syntaxfehler usw. sein, da ich das nur schnell aus mehreren Projekten zusammenkopiert habe.

Habe da jetzt ein gutes PDF gefunden, das das ganze ausführlich erklärt:
Beckhoff -> ADS -> C#

Welche art von Projekt muß ich im Sharpdevelop anlegen, damit ich eine Visualisierung kreieren kann.
Die Visualisierung muß eigentlich nur Werte (Temperaturen,Positionen usw.) aus der Steuerung anzeigen und andere Werte bzw boolsche Schaltzustände an die Steuerung senden.

Da auch das von mir verlinkte PDF die Thematik mit Visual Studio erklärt (wie die klassenbiblithek einzubinden ist usw.) würde ich dir empfehlen Visual Studio zu nehmen.

Davon gibt es nun auch eine freie Version: Visual Studio 2008 Express

Damit erstellst du dann einfach ein neues WinForms projekt und folgst den einzelnen Punkten im PDF.

Ich hoffe, dass dir das ein bisschen weiter hilft

mfg
MichlG

01.03.2008 - 18:14 Uhr

Hallo chrische,

ich nehme mal an, dass du mit Überschrift einfach meinst, dass der Text fett oder z.B. in einer anderen Farbe sein soll.

Wenn du das so willst, dann sollte dir dies behilflich sein:
Wie Farbe für markierte Elementen von Windows bei gewähltem TreeView-Knoten überschreiben?

mfg
MichlG

01.03.2008 - 13:33 Uhr

Hallo VBMichi,

IMHO gibt es Access das Limit 10 nicht....

deshalb ist es notwendig dieses durch ein TOP 10 zu ersetzen


SELECT TOP 10 * FROM Tabelle1 WHERE ID = 5;

das sollte so funktionieren.

mfg
MichlG

29.02.2008 - 18:24 Uhr

Hallo MichaelG,

Herzlich willkommen bei mycsharp.de.....

Du kannst das ja einfach einen FileDialog einbauen... damit der user selbst die Exe suchen kann. Der FileDialog ist so wie das eingabefenster (z.B. beim MS word) wo wenn du eine Datei öffnest.

Siehe dazu: Dialog erstellen

Willst du dem Benutzer diese Antwort auch noch abnehmen, so kannst du die Datei ja selbst im Dateisystem suchen.

Siehe dazu: Dateisystem durchsuchen

mfg
MichlG

29.02.2008 - 14:47 Uhr

Hallo zusammen....

beim Programmieren höre ich hauptsächlich Techno und Dance (internetradio: www.pulsradio.com)

und im Auto höre ich Rock und Metal..... 😁

mfg
MichlG

28.02.2008 - 18:46 Uhr

Hallo bloodhound,

Welcome bei mycsharp.de

der Grund für das Abstürzen deines Programmes wird sein, dass du das gesamte Auslesen der Datei im GUI-Thread machst. Dabei hängt sich jedoch das gesamte Programm auf. Deshalb ist es notwendig, das Auslesen der Daten in einen zweiten Thread zu legen.

Hier findest du eine gute Erklärung zu Threads:
Threads - Galileo Computing

dabei musst du jedoch aufpassen, da du nicht von einem Thread aus direkt auf die GUI zugreifen kannst. Eine Lösung des Problems findest du hier:
[FAQ] Controls von Thread aktualisieren lassen (Control.Invoke)

mfg
MichlG

28.02.2008 - 17:59 Uhr

Hallo sven88,

ich habe dein Problem gefunden.
IMHO hattest du da wohl einen kleinen Denkfehler, denn die radiobutton_Changed-Methoden werden wenn der radiobutton checked ist, und wenn der radiobutton nicht checked ist aufgerufen.

da heisst, wenn du auf den anderen radiobutton gedrückt hast, so wurden immer beide methoden aufgerufen, da sich die Checked-Eigenschaft beider radiobuttons geändert hat.

Deshalb habe ich bei beiden methoden eine If-anweisung mit der Radiobutton.checked-überprüfung gemacht. Weiters war es notwendig die PictureBox bei jedem Klick auf den Radiobutton neu zu instanzieren, damit sie nicht doppelt gezeichnet wird (siehe kommentar).

So, diese beiden Methoden habe ich modifiziert:


        private void radioButton2_CheckedChanged_1(object sender, EventArgs e)
        {
            if (radioButton2.Checked)
            {
                Controls.Remove(pictureBox12);


                label1.BackColor = Color.Black;
                label1.ForeColor = Color.Lime;
                label1.Font = new Font("Arial", 24, FontStyle.Regular,
                                        GraphicsUnit.Point, ((System.Byte)(128)));
                label1.Top = 20;
                label1.Left = 20;
                label1.Size = new Size(160, 45);
                timer.Tick += new EventHandler(timer_Tick);

                Controls.Add(label1);
            }
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton1.Checked)
            {
                Controls.Remove(label1);
               //Die PictureBox muss neu instanziert werden, damit die alte Uhr gelöscht wird
                pictureBox12 = new PictureBox();
                pictureBox12.Size = new Size(520, 520);
                timer.Tick += new EventHandler(timer_Tick);

                pictureBox12.Paint += new PaintEventHandler(pictureBox12_Paint);
                Controls.Add(pictureBox12);
            }        
        }

mfg
MichlG

28.02.2008 - 17:40 Uhr

Hallo nesa,

diese Methode hat nicht immer einen Rückgabewert.

Wenn die Eingabe des Benutzers falsch ist, dann gibt diese Methode nichts zurück.

Deshalb wäre es in diesem Fall notwendig ganz am Ende ein


return false;

anzuhängen.

Aber auch dieser Fehler sollte eine andere Fehlermeldung haben....

mfg
MichlG

27.02.2008 - 22:10 Uhr

Hallo Jaensen,

Check isch ned!
Wo kommt sgrad denn her?

hm, ich vermute, dass er sgrad irgendwo als statische Variable deklariert hat, auf die er dann von den einzelnen Methoden aus zugreift.

Theoretisch müsste es zwar so ungefähr funktionieren, die Lösung wäre jedoch sehr sehr sehr unsauber und fehleranfällig.

Deshalb würde ich dem hellboy195 auch empfehlen deine Lösung zu verwenden.

mfg
MichlG

27.02.2008 - 21:45 Uhr

Hallo hellboy195,

wo genau der fehler in deinem Code konnte ich auch nicht sehen, da dafür noch ein paar infos fehlen (was wird zurückgegeben wenn nicht mit Schwierigskeitstufe "1" usw.)

Versuche mal durch den Code zu debuggen, dann wirst du den Fehler schon selbst finden.....

mfg
MichlG

27.02.2008 - 17:32 Uhr

Hallo spocchie,

hier hast du genau den gleichen Fehler

das hier....


string[] inipw = ini[2].Split('-');
            string encpw = inipw[1];
            byte[] decbuff = Convert.FromBase64String(encpw);            
            inipw[1] = System.Text.Encoding.UTF8.GetString(decbuff);

...anstatt dem....


string[] inipw = ini[2].Split('-');
            string encpw = inipw[1];
            byte[] decbuff = Convert.FromBase64String(encpw);      
System.Text.Encoding.UTF8.GetString(decbuff);      
            inipw[1] = decbuff;

das müsste so funktionieren...

mfg
MichlG

27.02.2008 - 16:50 Uhr

Hallo spoochie,

die Exception bekommst du weil du versuchst einen Byte[] in einen string zu schreiben. Und das geht nicht ohne Konvertierung.


inipw[1] = encbuff;
// string <- byte[]

Ich habe gesehen, dass du das hier gemacht hast....


Convert.ToBase64String(encbuff);

... und das hier bringt dir gar nichts, da du den neuen Wert keiner Variable zuweist

deshalb kannst du das Problem am einfachsten Lösen, wenn du das hier so umänderst


inipw[1] = encbuff;
//In das hier umändern
inipw[1] = Convert.ToBase64String(encbuff);

Gruss
MichlG

27.02.2008 - 16:29 Uhr

Hallo spoochie,

ich verwende meistens das hier um strings zu verschlüsseln


            /// <summary>
            /// Diese Methode verschlüsselt den mitgegebenen String
            /// </summary>
            /// <param name="plainMessage">Zu verschlüsselnder String</param>
            /// <param name="password">Passwort mit dem der String verschlüsselt werden soll</param>
            /// <returns>Den verschlüsselten String</returns>
            public string EncryptMessage(string plainMessage, string password)
            {
                TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
                des.IV = new byte[8];
                PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, new byte[0]);
                des.Key = pdb.CryptDeriveKey("RC2", "MD5", 128, new byte[8]);
                MemoryStream ms = new MemoryStream(plainMessage.Length * 2);
                CryptoStream encStream = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                byte[] plainBytes = Encoding.UTF8.GetBytes(plainMessage);
                encStream.Write(plainBytes, 0, plainBytes.Length);
                encStream.FlushFinalBlock();
                byte[] encryptedBytes = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(encryptedBytes, 0, (int)ms.Length);
                encStream.Close();
                return Convert.ToBase64String(encryptedBytes);
            }

            /// <summary>
            /// Diese Methode entschlüsslt den mitgegebenen String
            /// </summary>
            /// <param name="encryptedBase64">zu entschlüsselnder string</param>
            /// <param name="password">Passwort mit dem der String verschlüsselt wurde</param>
            /// <returns>Den entschlüsslten string</returns>
            public string DecryptMessage(string encryptedBase64, string password)
            {
                TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
                des.IV = new byte[8];
                PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, new byte[0]);
                des.Key = pdb.CryptDeriveKey("RC2", "MD5", 128, new byte[8]);
                byte[] encryptedBytes = Convert.FromBase64String(encryptedBase64);
                MemoryStream ms = new MemoryStream(encryptedBase64.Length);
                CryptoStream decStream = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
                decStream.Write(encryptedBytes, 0, encryptedBytes.Length);
                decStream.FlushFinalBlock();
                byte[] plainBytes = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(plainBytes, 0, (int)ms.Length);
                decStream.Close();
                return Encoding.UTF8.GetString(plainBytes);
            }

Dabei kannst du den String mit einem Passwort verschlüsseln und mit dem selben wieder entschlüsseln.

Ich hoffe dass das ist, was du gesucht hast

mfg
MichlG

27.02.2008 - 14:33 Uhr

Salute,

danke, genau das habe ich gesucht....

Gruss
MichlG

26.02.2008 - 20:58 Uhr

Hallo Zusammen,

ich baue mir gerade eine Bildschirmtastatur, welche auch für Touchpanels geeignet ist.

Dabei muss ich den Status von CapsLock (also der Feststelltaste) herausfinden.
Ich habe jetzt eine Weile gesucht, ich konnte aber nichts passendes finden.

Gibts da eine Möglichkeit herauszufinden, ob die Feststelltaste aktiviert oder deaktiviert ist??

Vielen Dank im Voraus

mfg
MichlG

25.02.2008 - 17:59 Uhr

Hallo zusammen,

@mazo, da hast du ein wirklich geniales Projekt auf die Beine gestellt... THX

@human... was ist das für ein riesiger Bildschirm in der Mitte??? 23'' oder etwa noch ein bisschen größer?? 😁

mfg
MichlG

25.02.2008 - 15:39 Uhr

Hallo timmes,

wenn du täglich auf dem Notebook arbeitest, dann wirst du dich sicher über den 12,1'' Bildschirm ärgern. Denn da hast du wirklich fast keinen Platz. Ich arbeite momentan auf einem 15,4'' Notebook und ich ärgere mich da auch schon manchmal, da ich zu wenig platz habe.

Wenn du aber einen großen TFT zuhause stehen hast, dann kannst du ja den anschliessen, und dem Subnotebook steht nichts im Wege.

Ich kann dir auch noch empfehlen eine normale Tastatur und Maus an dem Notebook anzuschliessen, denn das ist, wie auch schon Talla gesagt hat, sehr unbequem mit dem kleinen Notebook zu schreiben.

mfg
MichlG

25.02.2008 - 15:08 Uhr

Hallo T.rue,

Willkommen bei myCSHARP.de

IMHO könntest für jede einzelne Zeile eine Variable vom Typ DataGridViewRow erstellen. Dieser fügst du dann die einzelnen Werte hinzu.
Hast du der die ganzen Werte der Zeile hinzugefügt, so kannst du sie der ArrayList hinzufügen.
Und wenn du dann dieses ArrayList über die DataSource an den DataGridView bindest, so müssten deine Daten korrekt angezeigt werden.

Aber du könntest die Daten auch direkt in den DataGridView schreiben, indem du als erstes die einzelnen Spalten anlegst, und dann Zeile für Zeile in den DataGridView schreibst.

Ich hoffe, dass dir das ein bisschen weiter hilft

mfg
MichlG

24.02.2008 - 21:49 Uhr

Hallo Paulo,

das liegt daran, dass du nur die SiteTag in der Group BY Clause hast.

Wie soll da so gehen... nehmen wir mal an, du hast folgende tabelle.

id test sitetagid sitetag
1, test1 siteid1 uid1
2, test2 siteid1 uid1
3, test1,siteid2 uid1

Mit der GroupBy clause gruppiert er dir nun alle uid1 zusammen d.h du hast nur noch einen Datensatz. Bei der Siteid weiss er aber nicht was er machen soll. Denn da Hat er verschiedene Werte drinnen, er kann aber nur einen im Resultat anzeigen. Deshalb bekommst du die Meldung, dass die SiteID in einer Aggregatfunktion drinnen sein muss, damit man dieses Problem nicht hat.

Solltest du also immer die größte (MAX) oder kleinste (MIN) SiteID brauchn, so kannst du das feld einfach wie folgt in die aggregatfunktion einfügen.

Guckst du:


SELECT siteTag,MAX(siteTagID) FROM site_tag WHERE UserID='" + UserID + "' GROUP BY siteTag

mfg
MichlG

24.02.2008 - 21:03 Uhr

Hallo RadioActiveMan,

der Grund für diese Exception ist, dass du auf die Texteigenschaft der Textbox zugreifst, obwohl sie keinen Objektverweis hat.

Dieses Problem kannst du lösen indem du den Text der Textbox vorher auf "" setzt, oder vor dem Zugriff auf die Eigenschaft kontrollierst ob sie null ist.

siehe Code:


using System;
using System.Drawing;
using System.Windows.Forms;
using System.Text;

class spiel : Form
{
    public int x;
    public Button btnStart;
    public Label lbl1;
    public Button btnOK;
    public string[] array1;
    public TextBox antwort;
    public Label beslbl1;
    public string[] array2;
    public string ant;
    public static void Main()
    {
        Application.EnableVisualStyles();
        Application.Run(new spiel());

    }
    public spiel()
    {
        Text = "Spiel";

        lbl1 = new Label();
        lbl1.Parent = this;
        lbl1.Location = new Point(32, 100);
        lbl1.Size = new Size(90, 30);
        lbl1.Name = "lbl";

        beslbl1 = new Label();
        beslbl1.Parent = this;
        beslbl1.Location = new Point(0, 100);
        beslbl1.Size = new Size(90, 30);
        beslbl1.Text = "Frage:";
        beslbl1.Name = "beslbl";

        Button btnStart = new Button();
        btnStart.Parent = this;
        btnStart.Location = new Point(30, 70);
        btnStart.Text = "Neue Frage";
        btnStart.Name = "btnStart";
        btnStart.Click += buttonClickStart;

        Button btnOK = new Button();
        btnOK.Parent = this;
        btnOK.Location = new Point(30, 160);
        btnOK.Text = "OK";
        btnOK.Name = "btnStart";
        btnOK.Click += buttonClickOK;

        TextBox antwort= new TextBox();
        antwort.Parent = this;
        antwort.Location= new Point(30, 130);
        antwort.Name= "antwort";
        antwort.Text = ""; //Somit hat die Text-eigenschaft einen Wert





    }

    public void buttonClickStart(object objScr, EventArgs e)
    {
        string[] array1 = { "Frage 1", "Frage 2", "Frage 3", "Frage 4", "Frage 5" };
        Random rnd = new Random();
        int x = rnd.Next(5);
        Button btnStart = (Button)objScr;


        try
        {
            lbl1.Text = array1[x];
            btnStart.Enabled = false;
        }
        catch
        {
            MessageBox.Show("falscher wert");
        }

    }



    public void buttonClickOK(object objScr, EventArgs e)
    {



        try
        {
            string ant;
            //weiters könntest du überprüfen ob die Variable ungleich null ist um darauf zugreifen zu können
            if(antwort.Text != null)
            {
                    ant = antwort.Text; // hier wird die Exception ausgelöst
            }

            string[] array2 = { "Antwort 1", "Antwort 2", "Antwort 3", "Antwort 4", "Antwort 5" };

        if (ant != array2[x])
        {
            MessageBox.Show("leider falsch");
            btnStart.Enabled = true;
        }
        else
        {
            MessageBox.Show("Richtig!");
            btnStart.Enabled = true;
        }

        }

        catch
            {
            MessageBox.Show("Fehler");
            }
    }

}

So die exception sollte so nicht mehr kommen...

Mir ist aber noch eine Kleinigkeit aufgefallen.....
du deklarierst zweimal die Variable ant


  public string ant;

//und

string ant;

eines der beiden kannst du entfernen

mfg
MichlG

24.02.2008 - 20:28 Uhr

Hallo RadioActivMan,

Herzlich Wilkommen bei myCSHARP.de

Bitte erkläre dein Problem genauer.
Siehe: [Hinweis] Wie poste ich richtig?

Schreibe, wo genau die Exception ausgelöst wird.

Und versuche mit dem Debugger durch das Programm zu gehen, so kannst du viel leichter verstehen wie das ganze abläuft und erkennst wo die Exception ausgelöt wird....

Und noch ein kleiner Tipp:

Versuche etwas aussagekräftigere Variablennamen zu verwenden. Am Anfang neigt jeder dazu die Variablennamen so kurz wie möglich zu halten, aber nachdem man mehrmals damit auf die Schnauze gefallen ist, überlegt man sich genau, wie man die Variablen nennt. 😁

mfg
MichlG

24.02.2008 - 13:24 Uhr

Hallo Levsen,

ich habe das ganze so gelöst...., mit dem Sendkeys hats mir auch nicht geklappt


using System.Runtime.InteropServices;
using System;
using System.Windows.Forms;

public class win_suche{
    [DllImport("user32.dll")]
    static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);

    public static void win_suche_oeffnen(){
        const int KEYEVENTF_EXTENDEDKEY = 0x1;
        const int KEYEVENTF_KEYUP = 0x2;

        keybd_event((byte)Keys.LWin, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0); //WIN-Taste drücken
        keybd_event((byte)Keys.F, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0); //F-Taste drücken
        keybd_event((byte)Keys.LWin, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0); //WIN-Taste los lassen
        keybd_event((byte)Keys.F, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0); //F-Taste los lassen
    }
}

Das müsste funktionieren

mfg
MichLG

24.02.2008 - 11:45 Uhr

Hallo Levsen,

das hier müsste dir ein bisschen weiter helfen

http://www.autoit.de/dokumentation/appendix/SendKeys.htm

mfg
MichlG

23.02.2008 - 22:43 Uhr

Hallo Levsen,

wie könnte ich denn z.b windows+F simuliern wenn man auf denn button klickt ???

Das ganze kannst du über Send-Keys lösen.

Guckst du hier:
SEND-KEYS MSDN

mfg
MichlG

23.02.2008 - 22:24 Uhr

Hallo 11.08.2006,

Kann es sein, dass ich das gar nicht in der DB berechnet bekomme, sondern in der verarbeitenden anwendung lösen muss?

Nein, du kannst das schon auch in der DB berechnen. Dafür ist aber wahrscheinlich ein Script notwendig (ähnlich dem von citizen geposteten beispiel). Ich weiss aber nicht, wie das genau in Oracle funktioniert.

Einfacher ist wenn du die Daten von der DB ausliest, und sie dann später in deiner Anwendung bearbeitest.

mfg
MichlG