Laden...

Forenbeiträge von CoLo Ingesamt 224 Beiträge

05.02.2015 - 11:57 Uhr

Falls Du Daten in Hex übertragen willst, Googlesuche: "c# bytes to hex": c# - byte[] to hex string - Stack Overflow

03.02.2015 - 11:51 Uhr

tut wohl nicht viel zur Sache, aber ist das so gewollt? Zitat:


  [STAThread]
  public void Searchword(string searchword)

Ich kenne STAThread sonst nur beim Einstiegspunkt bzw. der Main Methode.

Wird get_Button_Click aufgerufen bzw. ist das Ereignis abboniert?

22.01.2015 - 16:00 Uhr

Idee:

Sobald Du die 1. Hälfte der Aufnahmeperiode beginnst auf Festplattenpartition A zu schreiben, kannst Du
Festplattenpartition B fragmentieren lassen.
Bei der 2. Hälfte der Aufnahmeperiode wechselst Du dann die Festplattenpartitionen und machst dann das gleiche wieder.

Die Festplattenpartitionen sollten sich in diesem Fall auf unterschiedliche Festplatten befinden.

06.01.2015 - 17:58 Uhr

Daraus folgt, wie Du das mit "Switch" lösen kannst. Statt:


    case 1:
        string[,] arraySpielfeld2d =
        {
            {"1", "1" },
            {"1", "1" }
        };
        break;

mache für jeden case:


    case 1:
        {
            string[,] arraySpielfeld2d =
            {
                {"1", "1" },
                {"1", "1" }
            };
        };
        break;

01.12.2014 - 16:55 Uhr

Hi, sorry, ich bin das nur kurz überflogen. Müsste da nicht


    foreach (Node child in node.Nodes)
         {
              iIndex = Math.Max(iIndex ,this.GetMaxIndex(child, iIndex));
         }

oder ähnlich stehen?

MfG CoLo

20.10.2014 - 13:36 Uhr

Hi janSharp,

wenn Du eine MyFormTopMost.exe erstellst, ist diese dann im Vordergrund?
Wenn ja, dann kannst Du ja über Dein Plugin die exe aufrufen (z.B. mit Argumenten) und diese Deine Daten schicken.

17.10.2014 - 16:55 Uhr

Zitat aus MSDN Form.TopMost:

Das oberste Formular ist ein Formular, das alle anderen (nicht obersten) Formulare überlagert, auch wenn es nicht das aktive Formular oder das Vordergrundformular ist. Oberste Formulare werden immer an oberster Stelle in der z-Reihenfolge der Fenster auf dem Desktop angezeigt. Mit dieser Eigenschaft können Sie ein Formular erstellen, das in der Anwendung immer angezeigt wird, beispielsweise ein Toolfenster zum Suchen und Ersetzen.

Mir fallen folgende Möglichkeiten ein:

  1. Ich habe eine Anwendung mit nur einer Form und die Form ist auf TopMost gesetzt.

Bei der Ausführung in der Entwicklungsumgebung rutscht dann das Fenster in den Hintergrund, wenn ich es durch ein anderes Fenster, z. B. dem Internet Explorer verdecke. Diesen Effekt habe ich nicht erwartet und ist für mich aus der MSDN Doku nicht ersichtlich.

Bei mir bleibt das Fenster im Vordergrund, wenn ich stattdessen das Kompilat ausführe und es durch ein anderes Fenster, z. B. dem Internet Explorer verdecken will. So soll es sein.

  1. Das Verhalten mit der Entwicklungsumgebung ist ein Hinweis für mich, dass es auch andere Konstellationen geben könnte, wo z.B. TopMost nicht global funktioniert, sondern lokal innerhalb der Anwendung beschränkt ist. Dies ist reine Vermutung.

  2. Dein Outlook ist ebenfalls TopMost.

16.10.2014 - 14:48 Uhr

Da hier noch keine komplette Lösung angezeigt wurde, stelle ich meine zur Verfügung (für .NETCF v2):


        static void NumericUpDownSelectAll(NumericUpDown numericUpDown)
        {
            if (string.IsNullOrEmpty(numericUpDown.Text)) return;
            
            const int EM_SETSEL = 0x00B1;
            const int SELECTIONSTART_FIRSTCHARACTER = 0;
            const int SELECTIONEND_LASTCHARACTER = -1;
            Microsoft.WindowsCE.Forms.Message message = Microsoft.WindowsCE.Forms.Message.Create
            (
                numericUpDown.Handle,
                EM_SETSEL,
                (IntPtr)SELECTIONSTART_FIRSTCHARACTER,
                (IntPtr)SELECTIONEND_LASTCHARACTER
            );
            Microsoft.WindowsCE.Forms.MessageWindow.SendMessage(ref message);
        }

18.07.2014 - 12:41 Uhr

Du könntest das Grid in einem eigenen Fenster anzeigen lassen und
die Form-Größe dann dem Grid anpassen.

28.04.2014 - 10:53 Uhr

Hi schorge.

Das klingt merkwürdig. Wieso sollte eine Messagebox ohne zutun irgendein Formular schliessen? Zeig mal den kritischen Code, zumindest den MessageBox Teil.

Wo verwendest Du form2.Close?
Was passiert, wenn Du MessageBox.Show("XYZ") auskommentierst, schliesst sich dann form2 automatisch?

Gruß,
CoLo
😃

24.04.2014 - 14:18 Uhr

@T-Virus:
in diesem Fall weiss MySQL nicht, dass der Wert ein double ist bzw. warnt davor nicht. Ich habe es jetzt nicht nachgeprüft, aber ich denke es ist das Komma, woran MySql sich stört:


            double floattest = 5.5;
            string query = "INSERT into test (floattest) VALUES ('" + floattest + "')";
            MessageBox.Show(query);//Ausgabe: "INSERT into test (floattest) VALUES ('5,5')"

Ansonsten stimme ich mit Dir überein. 😃

14.04.2014 - 15:05 Uhr

Oh. Probiere mal das hier:


bool Contains = (PictureBoxGegenstand.Bounds.Contains(new System.Drawing.Point(e.X, e.Y)));

Gruß,
CoLo

Edit:
ich habe wahrscheinlich ein anderes Framework als Du. Daran wird es wohl liegen.
(MouseButtonEventArgs!=MouseEventArgs)

14.04.2014 - 14:17 Uhr

Angenommen man hat eine PictureBox namens PictureBoxGegenstand auf PanelSpielfeld und PictureBoxGegenstand ist unsichtbar, dann würde nachfolgender Code funtionieren:


       private void PanelSpielfeld_MouseDown(object sender, MouseEventArgs e)
        {
            bool Contains = (PictureBoxGegenstand.Bounds.Contains(e.Location));
            System.Diagnostics.Debug.WriteLine("Contains = " + Contains.ToString());
        }

Wenn PictureBoxGegenstand hingegen sichtbar ist, wird PanelSpielfeld_MouseDown nicht ausgelöst, wenn man darauf klickt. Dafür logischerweise PictureBoxGegenstand_MouseDown.

20.11.2013 - 12:24 Uhr

string[] RecordFields = "0;0;0;-0,0003642819;0".Split(';');

23.10.2013 - 18:27 Uhr

Es ist also nicht möglich managed ressourcen stets selber zu befreien. Daraus erübrigt sich meine Frage.

Vielen Dank.

23.10.2013 - 14:40 Uhr

Hallo,

was ist, wenn man die managed ressourcen stets selber befreien möchte, aus welchen Gründen auch immer. Gibt es das Szenario?
Das steht ja im Widerspruch zur Dispose Funktionalität (MSDN:IDisposable.Dispose Code gekürzt):


        protected virtual void Dispose(bool disposing)
        {
                if(disposing)
                {
                    // Dispose managed resources. <-Kontrolle mal ja, mal nein 
                }
                // unmanaged resources here. 
        }

Bei Dispose(false) werden die managed ressourcen ja nie von einem selbst befreit. Gallilieo Openbook:

Der Grund dafür ist, dass beim Aufruf von Dispose noch alle Objekte über einen Verweis erreichbar sind, bei der Ausführung des Destruktors jedoch nicht mehr.

Beispielcode in dem der Finalizer mit Dispose(false) aufgerufen wird:


       myObject = null;
       GC.Collect();

Gruß, CoLo

21.08.2013 - 11:21 Uhr

Ich habe hierzu einen interessanten Artikel gefunden.
Im Artikel geht es darum, dass beim Umbenennen oder Entfernen von Bild-Ressourcen, welche in manchen Buttons verwendet werden, der Designer dazu bewegt wird, alle Controls mit Bildern oder dergleichen zu entfernen, anstatt nur die Bilder zu verändern bzw. rauszunehmen:

Controls disappear from a form although they are still in the Designer code

19.08.2013 - 17:51 Uhr

Hi C4RL0,

den Bug hatte ich auch schon mehrmals.
Irgendwas mache ich auf dem Designer und auf einmal sind alle Menüpunkte verschwunden.
In der Designer.cs fehlt dann "Controls.Add(...)" für alle toolStrip Elemente.

Wie Björn schon sagt: toolStripButtonEinstellungen ist dann <mit der "Form" oder was auch immer> nicht mehr verknüpft.

Gruß, CoLo

15.08.2013 - 19:27 Uhr

Hallo gfoidl,

Methode: (AppDomain.CurrentDomain.BaseDirectory

--> C:\Programme\Microsoft Visual Studio 9.0\Common7\IDE
Ist also nicht der Projektordner.

Momentan löse ich es über den oben genannten Workaround:
Beim Kompilieren speichere ich den Pfad zum Projektordner an einem bestimmten Ort.
Dieser Ort ist einer, den dann die vom Designer ausgeführte Assembly auch erreichen kann. In meinem Fall:

:::

Gruß, CoLo

13.08.2013 - 16:40 Uhr

Hi MrSparkle,

es gibt folgende 3 Ordner die beim Kompilieren eine Rolle spielen:

  • Projektorder "C:\CoLo\Projekte\Aktuell\MeineApp\MeineApp"
  • Ausgabeordner "C:\CoLo\Projekte\Aktuell\MeineApp\MeineApp\bin\debug"
  • *Designerordner "C:\Dokumente und Einstellungen\CoLo\Lokale Einstellungen\Anwendungsdaten\Microsoft\VisualStudio\9.0\ProjectAssemblies\hk3s7in201"

*)Ich Habe keine Ahnung, was das für ein Ordner ist. Ich nenne ihn hier Designerordner.

Bei Buildanweisungen "immer kopieren" werden zwar die Dateien auch im Ausgabeordner kopiert, aber nicht im Designerordner. Das habe ich mit dem Dateimanager überprüft. Im Ordner des Designers gibt es nur "MeineApp.exe" und "MeineApp.pdb", im Gegensatz zum Ausgabeordner, in dem es z.B. die Bilder und noch viele weitere Dlls gibt.

Das Problem was ich habe ist, dass wenn ich ein Formular im Designer öffne, der Designer sich anscheinend alle Informationen aus der Assembly aus dem Designerorder holt. Ich komme dort nicht ohne weiteres an dem Projekt- oder Ausgabeordner ran.

Kann sein dass schon der Ansatz - die Bilder in einem "Res" Ordner zu haben - Murks ist.
Mein Ziel ist es auf jeden Fall die Bilder unabhängig von der Anwendung verwalten zu können.

13.08.2013 - 14:16 Uhr

Ich habe leider festgestellt, dass CurrentDirectory nicht immer "C:\CoLo\Projekte\Aktuell\MeineApp\MeineApp" ausgibt. Nachdem ich ein paar mehr DynamicImageBoxen im CE Projekt hinzugefügt habe, ist CurrentDirectory ebenfalls "C:\Dokumente und Einstellungen\CoLo\Lokale Einstellungen\Anwendungsdaten\Microsoft\VisualStudio\9.0\ProjectAssemblies\hk3s7in201".

Nun habe ich ein Programm geschrieben, dass mir im "Environment.SpecialFolder.ApplicationData" + Unterverzeichnis eine Datei XYZ.XML erstellt, wo das Projektverzeichnis drinsteht.

In meinen Projekteigenschaften habe ich als Präbuildereignis nun "$(ProjectDir)DmcAppData.exe AppName=$(ProjectName) ProjectDir=$(ProjectDir)" stehen.

Bei Programmausführung prüfe ich die Existenz der XYZ.XML Datei und lese diese ggf. aus.

12.08.2013 - 12:19 Uhr

Hallo MrSparkle, hallo herbivore,

"Ins Ausgabeverzeichnis kopieren" = "immer kopieren" hat leider nichts gebracht.
Dafür habe ich mir herbivores Pfadermittlung nochmal angeschaut:

Methode 1: (Assembly.GetExecutingAssembly().GetName().CodeBase ::: --> (C:\Dokumente und Einstellungen\CoLo\Lokale Einstellungen\Anwendungsdaten\Microsoft\VisualStudio\9.0\ProjectAssemblies\hk3s7in201 ::: Methode 2: (Application.StartupPath ::: --> (C:\Programme\Microsoft Visual Studio 9.0\Common7\IDE ::: Methode 3: (Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) ::: --> (Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt. ::: Methode 4: (Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ::: --> (C:\Dokumente und Einstellungen\CoLo\Lokale Einstellungen\Anwendungsdaten\Microsoft\VisualStudio\9.0\ProjectAssemblies\hk3s7in201 ::: Methode 5: (Environment.CurrentDirectory ::: --> (++C:\CoLo\Projekte\Aktuell\MeineApp\MeineApp++ ::: Ich denke mit Environment.CurrentDirectory kann ich was anfangen. (Ausgerechnet mit CurrentDirectory). Auf dem PC gibt es Environment.CurrentDirectory und System.IO.Directory.GetCurrentDirectory(). Es soll auf PC, CE, WM laufen. Auf einem CE Gerät gibt es wiederum Environment.CurrentDirectory nicht und System.IO.Directory.GetCurrentDirectory liefert eine NotSupported Exception, aber die Exception kann ich ja abfangen. Sowas dahingebrochenes mag ich zwar nicht, aber derzeit ist es die einzige "einfache" Lösung, die ich kenne, in der der Designer berücksichtigt wird. Falls Ihr noch eine Idee dazu habt, lasst es mich wissen. ^^ Vielen Dank euch beiden.
09.08.2013 - 17:22 Uhr

Hallo,

Ich bin dabei ein Benutzersteuerelement DynamicImageBox zu entwickeln, welches die Bilder dynamisch lädt.
In meinem Projekt habe ich ein Bild unter "C:\CoLo\Projekte\MeineApp\MeineApp\Images\Test.png".
Das Bild soll nicht eingebettet sein, sondern direkt aus dem Verzeichnis geladen werden.

Ich habe eine Eigenschaft "MeineApp.Common.appPath", welche mir das Anwendungsverzeichnis zurückgibt.
Wenn ich das Programm starte, funktioniert auch alles so weit so gut.

Problem:
Nur im IDE im Designer findet er das Bild nicht.
Statt in "C:\CoLo\Projekte\MeineApp\MeineApp\Images\Test.png", sucht er in
"C:\Dokumente und Einstellungen\CoLo\Lokale Einstellungen\Anwendungsdaten\Microsoft\VisualStudio\9.0\ProjectAssemblies\3edjy7so01\Images\Test.png"
nur gibt es "Test.png" nicht, weil es beim Erstellen des Projektes nicht dahin kopiert wird.
(VSStudio kopiert mein Programm und führt die Kopie für den Designer aus.)

Code zu "MeineApp.Common.appPath":


using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace MeineApp
{
    public class Common
    {
        public static string appPath
        {
            get
            {
                string path = System.IO.Path.GetDirectoryName
                (
                    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
                );

                const string FILESCHEME = "file:\\";
                if ((path.IndexOf(FILESCHEME, 0)) == 0)
                    path = path.Substring(FILESCHEME.Length)
                ;
                
                System.Windows.Forms.MessageBox.Show(path);//Ausgabe zu Debugzwecken
                return path;
            }
        }
    }
}

Nun sehe ich 2 Möglichkeiten:

  1. entweder ich ermittle für den Designer das Anwendungsverzeichnis aus meinem Projekt über die laufende Entwicklungsumgebung und biege "appPath" um:


				//Verweise hinzufügen:
				// C:\Programme\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies\EnvDTE.dll
				// C:\Programme\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\EnvDTE80.dll
				// C:\Programme\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\EnvDTE90.dll
        private static string GetDTE_FullPath(string projectMapName)
        {
            EnvDTE80.DTE2 dte = (EnvDTE80.DTE2)Marshal.GetActiveObject("VisualStudio.DTE.9.0");

            System.Array solutionProjects = dte.ActiveSolutionProjects as System.Array;
            foreach (EnvDTE.Project project in solutionProjects)
            {
                if (string.Compare(
                    project.Name,
                    projectMapName,
                    true
                ) != 0) continue;
               EnvDTE.Property property = project.Properties.Item("FullPath");
                return (string)property.Value;
            }
            return null;
        } 

Funktioniert. Aber die Entwicklungsumgebung im Projekt mitschleppen, will ich vermeiden.

  1. oder ich lasse das Bild mitkopieren. Aber wie?
    Ich habe schon alle Buildvorgänge "Keine", "kompilieren", "Inhalt" etc. durchprobiert.
    Auch über die Präbuild und Postbuildereignisse schein ich nichts zu erreichen. Die Macros $(OutDir) $(ConfigurationName) $(ProjectName) etc. enthalten alle den Pfad "C:\Dokumente und Einstellungen\CoLo\Lokale Einstellungen\Anwendungsdaten\Microsoft\VisualStudio\9.0\ProjectAssemblies\3edjy7so01" nicht.

Hat jemand eine Idee?

Gruß, CoLo

PS: ich habe den Namen vom Projekt und vom Benutzersteuerelement der Einfachheit geändert.

26.07.2013 - 14:48 Uhr

Hi spoochie,

wozu ein struct? Gibt es verwendbare Alternativen dazu?

Gruß, CoLo

03.07.2013 - 14:53 Uhr

Ergänzung zu MartinH:

Interessant hierzu ist Reading from the serial port in C#.

Kernaussage:


  void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e)
  {
    byte[] data = new byte[serialPort.BytesToRead];
    serialPort.Read(data, 0, data.Length);

    //(...) Verarbeitung von data. Z.B. Anhängen von data in eine Queue, welche verarbeitet wird.
  }

02.07.2013 - 15:51 Uhr

Hast Du denn alle seriellen Parameter richtig eingestellt?

  • Baud
  • Parity
  • Handshake
  • Stopbits
    (...)usw.(...)
19.06.2013 - 12:55 Uhr

Das Erzeugen Deiner PictureBox im extra Thread auszulagern ist pfui. Sorry, ich war etwas ungenau mit dem Link. Zitat aus Link "FAQ: Warum blockiert mein GUI?":

Nur ein GUI-Thread

Alle Fenster sollten/müssen immer aus dem GUI-Thread erzeugt werden. Das Erzeugen von Fenster und :::

Siehe dazu auch Controls in anderem Thread erzeugen als das Form [==> auf keinen Fall]. Dort ist auch beschrieben, was man tun kann, wenn schon alleine das reine Füllen der Controls länger als 1/10 Sekunde dauert.

Mit dem Zugriff aus dem Array heraus auf die Slideshows, so wie Du das machst, handelst Du Dir jede Menge Probleme ein. Ob Du SlideShow[] objThread = new SlideShow[10]; machst, oder nicht, spielt dabei kaum eine Rolle.

19.06.2013 - 11:25 Uhr

Joe, Threads sind die Hölle, wenn man sich damit nicht auskennt. Wenn man sich mit der Speicherverwaltung ebenfalls nicht auskennt, dann erst recht.
Du könntest das ganze erstmal über einen Timer lösen.

Der folgende Code wird in einem Thread aufgerufen (...) in der Slideshow.Start rufe ich per Delegate die Funktionen zum Erstellen/Entfernen der PictureBox auf.

Siehe hierzu: FAQ: Warum blockiert mein GUI?

Edit:


            int i_slidezaehler = 0;

            objThread[i_slidezaehler] = new SlideShow(m_form, 1, 20, "20", 0, 0);
            arrthread[i_slidezaehler] = new Thread(new ThreadStart(objThread[i_slidezaehler].start));
            arrthread[i_slidezaehler].Name = "Slide" + i_slidezaehler.ToString();
            arrthread[i_slidezaehler].IsBackground = true;
            arrthread[i_slidezaehler].Start();

            //ist das Gleiche wie
            objThread[0] = new SlideShow(m_form, 1, 20, "20", 0, 0);
            arrthread[0] = new Thread(new ThreadStart(objThread[0].start));
            arrthread[0].Name = "Slide" + 0.ToString();
            arrthread[0].IsBackground = true;
            arrthread[0].Start();
            
            //macht so keinen Sinn

Edit2:


            objThread[i_slidezaehler] = new SlideShow(m_form, 1, 20, "20", 0, 0);
            arrthread[i_slidezaehler] = new Thread(new ThreadStart(objThread[i_slidezaehler].start));
            arrthread[i_slidezaehler].Name = "Slide" + i_slidezaehler.ToString();

            //angenommen i_slidezaehler ist z.B. =10.
            //Was passiert, wenn jetzt in diesem Moment ein Slidezähler befreit wird,
            //weil Slidezähler-Thread 1 fertig ist und ein arrthread Element befreit wird? Boom!
            arrthread[i_slidezaehler].IsBackground = true;
            arrthread[i_slidezaehler].Start();

19.06.2013 - 11:03 Uhr

Dein player ist hier noch in den VideoControls, obwohl Du ihn freigegeben hast. Wahrscheinlich sogar noch auf der Form. Besser:


AxWMPLib.AxWindowsMediaPlayer player = VideoControls[timestamp];
                 VideoControls.Remove(timestamp);
                 this.Controls.Remove(Player);
                 player.Dispose();

Wo tritt denn die erste Exception auf? Die erste Exception ist die wichtigste.
Die Message+Stacktrace der Fehlermeldung verrät einem meistens, was der Fehler ist und in welcher Codezeile der auftritt. Häufig findet sich dadurch die Ursache und Lösung relativ schnell.

Du kannst weiteres herausfinden. Falls der Fehler die Codezeile nicht preisgibt, kannst Du als allerletzten harten Schritt jede Zeile einfach mitloggen:


        void Methode()
        {
            string logLine = string.Empty;
            try
            {
                logLine = "string test = ...";
                System.Diagnostics.Debug.WriteLine(logLine);
                string test = "Hallo Welt.";
                // ... (weiterer Code)
            }
            catch
            {
                System.Diagnostics.Debug.WriteLine(logLine);
            }
        }

Bitte erste Exception mit Message+Stactrace posten und die betreffende(n) Codezeile(n).

Gruß, CoLo

18.06.2013 - 17:39 Uhr

Variablen vom Typ string, int, bool muss man nicht nullen.
Streams, Bitmaps, Fenster besitzen IDisposable. Die schon. Mit Close bzw. Dispose.
Aber das sind Grundlagen.

Ob Deine SlideShow Klasse IDisposable implementieren sollte, hängt davon ab, was Du damit machst. Kannst Du uns den Codeteil posten, wo Du den Fehler vermutest? Manchmal sagt eine Picturebox mehr als 1000 Worte. 😄

18.06.2013 - 14:18 Uhr

Hi Joe12,

Hier ein paar Links, die Dir evtl. weiterhelfen:
FAQ: Kommunikation von 2 Forms
FAQ: Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)
Suche Buch speziell für Threads (Multithreading)

Die Kommunikation von 2 Forms kannst Du evtl. auf Deine Slideshow Objekte anwenden.
Falls sich das ohne Threads lösen lässt und es sich nicht allzu kompliziert lösen lässt,
dann versuche erstmal ohne Threads auszukommen.

Gruß,
CoLo

18.06.2013 - 13:47 Uhr

Das Thema Threading ist sehr sensibel/fehleranfällig und extrem schwierig bei der Fehlersuche.
Besonders, wenn man sich nicht einigermaßen damit auskennt.

Gehe davon aus, dass Du Dich um das disposen selbst kümmern musst.
Gehe davon aus, dass Du Dich auf wirklich gar nichts verlassen kannst.
Alles mögliche kann zu beliebigen Zeitpunkten passieren.

Mit so einer Einstellung solltest Du rangehen und Dich im Thema Threading einlesen.

10.06.2013 - 15:25 Uhr

Hallo softwarefreak,

bei der Standardnormalverteilung gibt es eine Dichte- und eine Verteilungsfunktion.
Wikipedia: Standardnormalverteilung

Hier die Dichtefunktion:


        private static double DichteStandardnormalverteilung(double o, double x, double u)
        {
            //Dichtefunktion der Standardnormalverteilung
            //Formel:
            //
            //                                  2
            //                      1  ( x-u   )
            //           1        - -  ( ----- )
            // f(x) = --------- e   2  (  o    )
            //            ___
            //         o /2pi
            //

            double ergebnis
                = (1d / (o * Math.Sqrt(2d * Math.PI))) * Math.Exp
                (
                    -0.5d * Math.Pow(((x - u) / o), 2d)
                )
            ;
            return ergebnis;
        }

Falls Dich auch die Verteilungsfunktion interessiert, sie verwendet die Erf Funktion:
johndcook:Erf

19.03.2013 - 15:51 Uhr

@Console32:
in meinem ersten Post nahm ich an, das 'e' Problem läge im KeyPress Event.
Zu diesem Zeitpunkt hatte ich nicht vor, KeyValue mit KeyChar gleichzusetzen.
Das ist ein Missverständnis.

MfG, CoLo

19.03.2013 - 12:34 Uhr

Anscheinend ist KeyValue = KeyCode. 😉

KeyEventArgs.KeyValue

Property Value
Type: System.Int32
The integer representation of the KeyCode property.

-> System.Windows.Forms.Keys.NumPad5 = 101

19.03.2013 - 11:31 Uhr

Hi inflames2k,

also ich benutze hier VS 2008 auf XP.
Bei mir passiert nichts merkwürdiges mit meiner Testanwendung:


        //Auf einem leeren Formular hinzufügen:
        //  TextBox txtInput;
        //  Label lblDown;
        //  Label lblPress;
        //  Label lblUp;
        //  chkSupressPress;
        //
        //  Ereignis txtInput.KeyDown
        //  Ereignis txtInput.KeyUp
        //  Ereignis txtInput.KeyPress


        private void txtInput_KeyDown(object sender, KeyEventArgs e)
        {
            string text= e.KeyCode + "|" + e.KeyData + "|" + e.KeyValue;
            SetLabel(lblDown, text);

            e.SuppressKeyPress = chkSupressPress.Checked;
        }
        private void txtInput_KeyUp(object sender, KeyEventArgs e)
        {
            string text = e.KeyCode + "|" + e.KeyData + "|" + e.KeyValue;
            SetLabel(lblUp, text);
        }

        private void txtInput_KeyPress(object sender, KeyPressEventArgs e)
        {
            string text = ((int)e.KeyChar) + "|" + e.KeyChar;
            SetLabel(lblPress,text);
        }



        private void SetLabel(Label lbl, string text)
        {
            lbl.Text = text;
            if (lbl.BackColor == Color.Lime)
                lbl.BackColor = Color.Yellow;
            else
                lbl.BackColor = Color.Lime
            ;
        }

Wenn ich "qwertz" eingebe und selektiere, und chkSupressPress.Checked = true dann passiert
mit KeyPress nichts.

Wenn ich "qwertz" eingebe und selektiere, und chkSupressPress.Checked = false dann passiert mit KeyPress:

  • bei Numblock Taste '1' mit 'Num' wird e.KeyChar zu '1' und wird ausgeführt
  • bei Numblock Taste '1' ohne 'Num' wird KeyPress nicht ausgeführt. Der Textcursor wird zum Ende bewegt.

Gruß, CoLo

18.03.2013 - 12:07 Uhr

Hi,


  //(...)  
  //Image WeißundNeu = new Bitmap(16, 16,g); //Diesen Code entfernen.
  //Du übernimmst hier nur die Auflösung, also nicht das Bild, wenn ich das richtig verstanden habe. Siehe MSDN Doku.  
  
  //Dieser Code sollte Dein Problem lösen:
  g.Dispose();
  Image WeißundNeu = (Image)weiß;

Aber schaue Dir dazu das Beispiel von Programmierhans an. Insbesondere seine Methode:


   private Image GetThumbnail(Image pImage, Rectangle pBounds)

Damit fährst Du gut.

Gruß, CoLo

18.03.2013 - 11:02 Uhr

Hi hammlet90,

spontan könntest Du die Länge und Höhe prüfen und wenn es nicht 16*16 ist:

  • Ein neues 16x16 Bitmap erzeugen.
  • Daraus mit Graphics.FromImage ein Graphics erzeugen.
  • Beim Graphics Objekt die Clear(Color.White) Methode verwenden.
  • Beim Graphics Objekt mit DrawImage das andere Bild hineinkopieren.
  • Und dann das neue Bild speichern.

Gruß,
CoLo

08.03.2013 - 12:01 Uhr

Jetzt hast Du mich verwirrt....

Funktioniert Button "A" nicht
oder Button "Write" nicht?

08.03.2013 - 11:26 Uhr
  • Was sagt der Debugger/Haltepunkt/Deine eigenen Tests?

  • Hast Du das Ereignis abboniert?
    In einem Standardprojekt steht in der Form1.Designer.cs Datei


this.button1.Click += new System.EventHandler(this.button1_Click);

Abgesehen von den Namen, muss für Deine btnKeypad_Click das gleiche stehen.

  • Greifst Du die richtige Ereignis-Methode ab?
    Nicht, dass es statt btnKeypad_Click noch ein btnKeypad_Click_1 gibt. usw...
08.03.2013 - 10:51 Uhr

Sehr starke Vermutung: sender ist kein Button.

Debuggen:
Du kannst beim sender auch einen Haltepunkt setzen und mit der Maus drüberfahren, um zu sehen, was sender ist...

Oder mach mal:


        private void btnKeypad_Click(object sender, EventArgs e)
        {
            MessageBox.Show(sender.ToString());
        }

Was passiert bzw. wird ausgegeben?

08.03.2013 - 10:07 Uhr

Hi Fabian710,

Dein Code sieht noch etwas wirr aus.

Welche Funktion ist die Eingabefunkion? Ich vermute mal btnKeypad_Click.
Vermutlich hast Du dort eine InvalidCastException. Dann passiert nichts.
Wozu brauchst Du dort den sender mit try catch bzw. brauchst Du es für die Zukunft?

Gruß, CoLo

28.02.2013 - 18:33 Uhr

Hi dN!3L,

das ist ja einfach. Und es funktioniert super, vielen Dank! =)

Gruß,
CoLo

28.02.2013 - 16:22 Uhr

Hallo,

gibt es eine Möglichkeit auf einem Windows CE/WM Gerät per Webseite Seite eine Datei auszuführen?

Das Gerät soll eine Webseite aufrufen.
In dieser Webseite soll z.B. ein Button "jetzt ausführen" sein.
Dabei soll ein Programm mit Parameter aufgerufen werden. Z.B.:
"\BACKUP\MyApp\MyApp.exe -param1 -param2"

Ich habe schon versuch eine ActiveX Kopmponente in C# dafür zu entwickeln. Auf dem PC klappt es, aber für ein CE Gerät fehlen wichtige Eigenschaften, z.B. zur automatischen Registrierung.

Auch das Javascript Objekt var shell = new ActiveXObject("WScript.Shell"); scheint es auf dem Gerät nicht zu geben.

Mit C++ habe ich auch schon was versucht (MFC und ATL), kenne mich dort aber gar nicht aus.

Die Sicherheit spielt im ersten Schritt eine untergeordnete Rolle.

Gruß,
CoLo

21.02.2013 - 14:57 Uhr

Hallo,

angenommen Du hast folgende Beziehung:

SpielfeldDarstellung = SpielfeldBild * Faktor
BallDarstellung = BallBild * Faktor

Und Du hast SpielfeldDarstellung und willst Faktor ermitteln:
Faktor = SpielfeldDarstellung / SpielfeldBild

Ein Problem sind nur noch die Gleitkommaoperationen. Und die Typauswahl:
float und double sind im Gegensatz zu decimal ungenaue Geitkommatypen bzw. das Runden ist nicht immer (nach menschlicher Logik) korrekt.

Gruß,
CoLo

30.01.2013 - 16:18 Uhr

Hallo asimon,

im Idealfall sollte meiner Meinung die Textbox so groß sein,
dass gerade noch der größtmöglichst erlaubte Text hineinpasst.
Also ungefähr Anzahl Zeichen mal "W" breite plus ein paar Pixel für den Cursor.

Daran kann der Benutzer ungefähr abschätzen, wie groß die Texteingabe sein darf.

Wenn sich die Textbox-Länge je nach Eingabe verändert, ist das doch komisch...

MfG CoLo

23.01.2013 - 11:56 Uhr

Ich bekomme schon beim Laden des Formulars eine Fehlermeldung:

Fehlermeldung:
System.ArgumentOutOfRangeException
Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein. (...)

Auslöser:
e.RowIndex ist -1 und somit nicht festgelegt.

Damit wäre eine Absturzursache geklärt. Jetzt kann man sich Gedanken machen, warum ein Index -1 sein kann. Evtl. steht dazu was in der Doku...

Edit:
In diesen Dokus steht leider nichts dazu:
msdn: DataGridView.CellValueChanged Event
msdn: DataGridViewCellEventArgs
msdn: DataGridViewCellEventArgs.RowIndex
Schade.

Gruß, CoLo

17.01.2013 - 17:07 Uhr

Timer z.B. Aber ich kenne den Zusammenhang nicht.

MfG CoLo