Laden...
M
MrLeeh myCSharp.de - Member
Dipl.- Ing. (FH) Deutschland Dabei seit 19.02.2008 194 Beiträge
Benutzerbeschreibung

Forenbeiträge von MrLeeh Ingesamt 194 Beiträge

29.11.2009 - 02:33 Uhr

Hallo pebo,

1E-5 bedeutet 1 * 10^-5. Demzufolge wäre die richtige Schreibweise mit pow:


double dErgebnis = 1.0197 * Math.Pow(10, -5);

Du könntest natürlich auch ne kleine Funktion schreiben, die das noch kompakter erledigt. Aber falls du es nicht ständig brauchst ist das doch einfach genug, oder.

Beste Grüße
Stefan

07.11.2009 - 19:30 Uhr

Wenn ich das richtig verstanden habe willst du die Zahlen, welche als Zeichenfolge vorliegen in Double parsen. Das geht sehr gut, indem du Kultureinstellungen verwendest. Die folgende Funktion wandelt dir einen String in eine Double-Zahl um, du kannst den verwendeten Dezimalseparator festlegen.

using System.Globalization;
public double ParseStringToDouble (string sValue, string sDecimalSep, string sGroupSep)
{ 
    private NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat.Clone() as NumberFormatInfo;
    
    //Dezimaltrennzeichen festlegen
    nfi.NumberDecimalSeparator = sDecimalSep;
    
    //Tausendertrennzeichen festlegen
    nfi.NumberGroupSeparator = sGroupSep;
    
    double dRetVal = 0.0;
    if (Double.TryParse(sValue, NumberStyles.Number, nfi, out dRetVal))
    {
    }
    else
    {
        dRetVal = Double.NaN;
    }
    return dRetVal;
}

Beste Grüße

22.10.2009 - 09:59 Uhr

Hallo,

Alles was du nach dem setzen des completed-Flags tun möchtest solltest du mal probehalber in den Eventhandler packen.

ja der Meinung bin ich auch. In einer While-Schleife auf ein Flag zu warten, was in einem Ereignis gesetzt wird ist nicht sehr günstig. Ich weiß ehrlich gesagt auch nicht ob das überhaupt funktioniert. Richtig ist es auf jeden Fall, alles was du bei Auslösen des Completed-Events tun möchtest auch in den Ereignishandler zu packen und die While-Schleife wegzulassen.

Beste Grüße

14.08.2009 - 08:52 Uhr

Ich will euch Tutorial Database vorstellen.
Es ist eine Plattform, auf der jeder Tutorials schreiben und ansehen kann. Eine Registrierung ist nicht notwendig, aber von Vorteil.
Es soll eine zentrale Anlaufstelle für Tutorials werden.

Hallo wsl,

interessantes Konzept. Wird interessant zu sehen, wie sich die Seite mit der Zeit füllt. Leider sind jetzt noch keine Tutorials zu C# zu sehen. Aber das kann sich ja noch ändern 😉

Beste Grüße
MrLeeh

29.07.2009 - 14:38 Uhr

Ungetestet:


int iResult=0;
for (int i=0; i<binOut01.Length; i++)
{
    if (binOut01[i]) iResult += (int)Math.Pow(2, i);
}
string sRetVal = iResult.ToString();
09.07.2009 - 21:52 Uhr

Hallo,

Sowat gibt es schon in c# (open source):
>

Ich weiß, dass Unlocker diese Funktionalität bietet. Ich nehme das gern mal, wenn ich eine Datei nicht löschen kann, weil immernoch ein Handle drauf ist, obwohl der Prozess nicht mehr vorhanden ist (z.B. bei Absturz des Prozesses). Dann kann man die Handles entfernen und die Datei "unlocken"

Beste Grüße

07.07.2009 - 12:37 Uhr

Hallo,

hab mich mal vor ner Weile mit Threads, die eine Fortschrittsanzeige zulassen beschäftigt. Dabei ist der folgende Code entstanden. Ich nutze diese Struktur sehr oft. Kannst ja mal schaun, vielleicht hilft dir das ja weiter:

mrleeh.de: Thread mit Fortschrittsanzeige

Greets

25.05.2009 - 22:31 Uhr

Ich würde das ganze mittels
>
und der passenden CultureInfo lösen.

Edit: Mittels
>
klappts auch, da man auch hier die passende CultureInfo angeben kann.

Denke ich auch, über CultureInfo.DateTimeFormat kannst du das Datumsformat abrufen und verändern. Wenn du das gleich global ändern willst, dann kannst du die CurrentCulture verändern. Oder du nutzt die TryParseExact-Funktion.

19.05.2009 - 16:49 Uhr

Hallo Floschi,

habe gerade mal in der MSDN nachgesehen. ScrollToCaret führt einen Bildlauf bis zur Einfügemarke durch. Das heißt du musst in deiner Textbox noch die Einfügemarke ans Ende setzen, dann funktioniert es.

Beste Grüße
Stefan

30.04.2009 - 10:38 Uhr

Wie fügst du die Punkte in das Diagramm ein? Nimmst du dafür eine PointPairList? Kannst du den Code dafür mal posten?
Die Skala der Y-Achse kannst du über

myZedGraph.GraphPane.YAxis.Scale

verändern.

30.04.2009 - 08:16 Uhr

Hallo Foufou,

wenn ich den Wert 200.0 habe multiplizierte es * 10
dann zeichnete er 2000!!!

so ein Verhalten von ZedGraph ist mir nicht bekannt. Ich hab hier mal ein paar ZedGraph-Grundlagen-Statements zusammengefasst:
http://mrleeh.de/mrleeh/archives/189-Zed-Graph-Grundlagen.html
Vielleicht hilft es dir ja. Ansonsten beschreib doch dein Problem etwas genauer, damit dir gezielter geholfen werden kann.

Beste Grüße
Stefan

29.04.2009 - 14:08 Uhr

Darauf bezog ich mich ja, da ich aus dem ersten Beitrag herausgelesen habe, dass er bereits ein Setup erstellt hat.

Oh, tut mir leid Björn, ich habe die Namen vertauscht...Eigentlich wollte ich Pezor anschreiben. Dickes Sorry

Grüße

29.04.2009 - 11:59 Uhr

Hallo Björn,

Was nutzt du für eine Entwicklungsumgebung? In Visual Studio Pro 2005 kannst du ein Bereitstellungsprojekt erzeugen, welches eine Setup-Datei erstellt. Bei der Konfiguration dieses Projekts kannst du auch Registry-Schlüssel anlegen oder eine Verknüpfung im Startmenü erzeugen.

Wenn du das Einfügen in den Autostart evtl. innerhalb des Programms konfigurierbar machen möchtest, dann kann ich dir folgenden Code empfehlen:

using System.Win32;
public class CMain
{
    //Registry-Pfad für den Autostart
    private const string AUTOSTART_REGISTRY_KEY = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
    //Name des Registry-Eintrags
    private const string AUTOSTART_REGISTRY_VALUE_NAME = "Anwendungsname";
   
    private void RegisterForAutostart(bool bRegister)
    {
        //Autostart-Schlüssel des aktuellen Users, wenn Autostart für alle User gewünscht,
        //dann CurrentMachine benutzen
        RegistryKey autostartRunKey = Registry.CurrentUser.OpenSubKey(AUTOSTART_REGISTRY_KEY, true);
        if (autostartRunKey != null)
        {
            if (bRegister)
            {
                //Wert anlegen, wenn schon vorhanden wird dieser überschrieben
                autostartRunKey.SetValue
                (
                     AUTOSTART_REGISTRY_VALUE_NAME,
                     Application.ExecutablePath, RegistryValueKind.String
                );
            }
            else
            {
                //Wert löschen, wenn nicht vorhanden, dann wird keine Exception ausgelöst
                autostartRunKey.DeleteValue(AUTOSTART_REGISTRY_VALUE_NAME, false);
            }
        }
    }

Beste Grüße
Stefan

22.04.2009 - 08:37 Uhr

Ist ein Zahl durch n teilbar ohne Rest?

Ganz einfach: Ja, wenn ihre Quersumme durch n teilbar ist.

Bsp:

n = 3

783 / n = ? (teilbar ohne Rest)

7 + 8 + 3 = 18

--> 18 / 3 = 6 (Ist teilbar!)

Also auch 783 / 3 = 261.

Funktioniert aber nur bei bestimmten Teilern (genau 3 und 9). Für die zwei gilt diese Regel nicht:

n=22
31 / n = ?
3+1 = 4 --> ist durch 2 teilbar.

Aber 31 / 2 ist 15,5

Hier mal eine Übersicht zu den Teilbarkeitsregeln, hab ich gerade im Netz gefunden:

  • 2, wenn ihre letzte Ziffer eine 0, 2, 4, 6 oder 8 ist, sonst nicht,

  • 5, wenn ihre letzte Ziffer ein 0 oder 5 ist,

  • 10, wenn ihre letzte Ziffer eine 0 ist,

  • 3, wenn die Quersumme durch 3 teilbar ist,

  • 9, wenn die Quersumme durch 9 teilbar ist,

  • 4, wenn ihre letzten beiden Ziffern eine Zahl ergeben, die durch 4 teilbar ist,

  • 25, wenn ihre letzten beiden Ziffern eine Zahl ergeben, die durch 25 teilbar ist,

  • 8, wenn ihre letzten drei Ziffern eine Zahl ergeben, die durch 8 teilbar ist,

  • 125, wenn ihre letzten drei Ziffern eine Zahl ergeben, die durch 125 teilbar ist.

(Hoffe das Thema hat jetzt nicht schon jemd. aufgegriffen, hab nämlich noch nicht alle Beiträge durchgelesen)

Beste Grüße

15.04.2009 - 11:24 Uhr

Frag doch einfach mit

if (Path.Extension(sFilename) == "lnk");

ab, ob es eine Verknüpfung ist. Das kann man ja auch in ner eigens geschmiedeten Funktion unterbringen 😉

01.04.2009 - 11:35 Uhr

Da wirst du nicht drumrumkommen, die Eigenschaften neu zu setzen. Die eine Y-Achse kannst du ja über IsVisible = false verstecken.

Eventuell funktioniert folgender Ansatz: Die konfigurierten Achsen in einer Liste speichern und bei Wechsel des Diagrammtyps die Referenz auf die Achsen im Zedgraph neu setzen. Da die Y-Achsen in Listen gespeichert sind sollte das funktionieren.

            List<YAxis> lstYAxis = new List<YAxis>();
            
            lstYAxis.Add (new YAxis("Y1"));
            lstYAxis.Add (new YAxis("Y1Bar"));

            zedGraph.GraphPane.YAxisList.RemoveAt(0);
            zedGraph.GraphPane.YAxisList.Add(lstYAxis[1]);
01.04.2009 - 10:43 Uhr

Hallo DLCoder,

der zweite Teil deiner Beschreibung klingt so, als ob du die Autoscale-Anweisung, die im Kontextmenü von ZedGraph enthalten ist per Programmcode aufrufen willst.

Für den Fall gibt es den Befehl:

zedGraph.RestoreScale(zedGraph.GraphPane);

Allerdings mußt du dann immernoch die zusätzliche Y-Achse für den Bar-Graph per Code einfügen.

Beste Grüße
MrLeeh

20.03.2009 - 12:49 Uhr

Hallo Totty,

Da gab es doch eine lustige kleine Funktion namens String.Split. Die würde ich mir mal zu Gemüte ziehen.

Beste Grüße
MrLeeh

13.03.2009 - 13:41 Uhr

Hallo buyden,

Eventuell funktioniert da was mit der Reihenfolge der Events nicht. Ich kann mir vorstellen, dass du in der jeweiligen Funktion zwar die Focus-Anweisung gibst, aber danach noch ein Event gestartet wird, welches den Focus auf das Element mit dem niedrigsten Tabstopp-Index setzt. Wieso setzt du den Tab-Index von deiner Textbox nicht einfach am niedrigsten?

Beste Grüße
MrLeeh

06.03.2009 - 09:41 Uhr

Ich denke auch es liegt daran:

zgc.GraphPane.XAxis.Scale.Format = Stunden + ":" + Minuten + ":" + Sekunden + "," + hun;

Das Format solltest du eigentlich in der Form:

zgc.GraphPane.XAxis.Scale.Format = "hh:mm:ss";

angeben.

Versuchs mal stattdessen mit der Auto-Funktion:

            myPane.XAxis.Title.FontSpec.Size = 10;
            myPane.XAxis.Type = AxisType.Date;
            myPane.XAxis.Scale.FontSpec.Size = 8;
            myPane.XAxis.Scale.MajorStepAuto = true;
            myPane.XAxis.Scale.MinorStepAuto = true;
            myPane.XAxis.Scale.FormatAuto = true;

Grüße

04.03.2009 - 14:02 Uhr

[EDIT=herbivore]Abgeteilt von Dateiassoziation[EDIT]

Nun das Beispiel für .Net2.0

Sehr gutes Beispiel. Hat mir wirklich weitergeholfen. Vielen Dank an den Poster 👍

Eine Frage habe ich zum Thema IPC-Kommunikation. Ist diese Art der Kommunikation unproblematisch, d.h. kann es passieren, dass die Firewall alarmiert wird oder benötige ich einen speziellen Dienst, der immer aktiviert sein muss, wenn ich IPC nutze? Brauche ich Admin-Rechte? Das würde mich interessieren weil es eine recht komfortable Möglichkeit ist zwischen Prozessen zu kommunizieren und ich nicht durch eventuelle Einschränkungen überrascht werden will, die ich jetzt noch nicht kenne.

Beste Grüße und vielen Dank
MrLeeh

03.03.2009 - 11:54 Uhr

Wird durch das Drücken der Enter-Taste das Click-Ereignis ausgelöst? Dann kannst du doch in diesem Ereignis den Tastenstatus der Enter-Taste abfragen.

25.02.2009 - 08:19 Uhr

Sieht nett aus,
ich fände eine Ausschneiden-Funktion sinnvoll, wo der Nutzer ein Rechteck auf dem Bildschirm ausschneiden kann von dem dann der Screenshot gemacht wird. Ich nutze Printkey und dort fast ausschließlich diese Funktion.
Grüße

24.02.2009 - 07:21 Uhr

Ich hatte mich auch mal mit dem Thema auseinandergesetzt und ein kleines Beispielsnippet bei mir auf die Website geladen: http://mrleeh.de/mrleeh/archives/186-.NET-DLL-als-COM-zugaenglich-machen.html

12.02.2009 - 11:06 Uhr

Sourcecode wäre sicher hilfreich

12.02.2009 - 10:52 Uhr

Eigentlich gehört zu einem Event auch immer ein Parameter vom Typ Object, der den Sender angibt:

private void MeinEvent(object sender, EventArgs e)

Das kannst du dann nach deinem Klassentyp casten.
<Edit>siehe Programmierhans</Edit>

12.02.2009 - 09:18 Uhr

Also wirst du dir das Ding wohl selbst schmieden müssen. Falls du das machst kannst du ja mal nen Screenshot hier einfügen.

12.02.2009 - 08:15 Uhr

Du könntest doch den "Datei öffnen"-Dialog nutzen und dann nur das Verzeichnis auswerten und nicht den Dateinamen.

11.02.2009 - 09:15 Uhr

Kannst du nicht einfach ein neues Control aus zwei Textfeldern und einer Picturebox erstellen. Die Picturebox kannst du ja dann innerhalb des ersten Textfeldes positionieren. Das zweite Textfeld positionierst du rechts neben der Picbox auch innerhalb des ersten Textfeldes, den Rand blendest du aus.

11.02.2009 - 07:32 Uhr

In der Physik tauchen ganz oft Differentialgleichungen auf

Das stimmt, alle dynamischen Vorgänge (Energiespeicher werden gefüllt und entladen) werden mit Differentialglg. beschrieben. Dlgs lassen sich für die Berechnung mit dem PC unter Vorraussetzung einer festen Abtastzeit in Differenzengleichungen umwandeln. Bei der ganzen Sache muss nur beachtet werden, dass du das Abtasttheorem nicht verletzt, d.h. die Abtastzeit sollte mindestens die Hälfte, besser ein zehntel, der kleinsten Zeitkonstante betragen.

10.02.2009 - 09:00 Uhr

Ich habe gerade mal ein bißchen rumprobiert. Probiere es mal mit folgendem Code:

CurveItem ciNearestCurve;
int iNearestCurve;

bool b = zedGraph.GraphPane.FindNearestPoint(new PointF((float)e.X, (float)e.Y), zedGraph.GraphPane.CurveList, out ciNearestCurve, out iNearestCurve);

if (ciNearestCurve!=null)
{
   Console.WriteLine(ciNearestCurve.Label.Text);
}

Wenn kein Punkt in der Nähe vorhanden ist kommt für b false zurück, aber trotzdem kannst du ciNearestCurve auswerten. Funktioniert gut wenn du nur eine Y-Achse benutzt. Bei zweien findet er dann immer hauptsächlich die der ersten Achse, auch wenn die der zweiten Achse näher an der Maus sind.

08.02.2009 - 11:55 Uhr

Mit Serialisierung kannst du die öffentlichen Eigenschaften einer Klasse in einer XML-Datei speichern und auch wieder auslesen. Du kannst auch ganze Objektlisten ablegen und wieder auslesen. Das ist eine super Sache, weil wenn du einmal das richtige Klassendesign hast und die Serialisierung implementiert ist, dann kannst du auch ganz bequem Eigenschaften erweitern. Ein paar sehr gute Beispiele findest du hier: http://www.java2s.com/Code/CSharp/XML/UseXmlSerializer.htm

04.02.2009 - 16:52 Uhr

Wenn du den Node erst selektierst bevor du das Popup öffnest kannst du den Node über TreeNode.SelectedNode abfragen. Dann kannst du aber nicht die integrierte Popup-Funktion nutzen sondern musst im Click-Ereignis das Popup manuell werfen und an die die momentane Mausposition setzen.

03.02.2009 - 12:53 Uhr

Wie es klingt hast du die Eigenschaft in der Konfigurationsdatei nicht als Bentutzereigenschaft festgelegt. Deshalb wird es immer wieder auf den Standardwert zurückgesetzt.

30.01.2009 - 09:05 Uhr

Da ist Value nicht vom Datentyp string[]. Was string* sein soll, weiß ich auch nicht. Vielleicht hilft es ja weiter, wenn du mal die Deklaration von z aufschreibst.

23.01.2009 - 13:29 Uhr

@Bauhaus:
Muss Jack30Lena recht geben. Der Code ist nicht gerade das, was man übersichtlich nennt. Außerdem hast du die Möglichkeiten, die dir die XML-Klasse bietet überhaupt nicht genutzt. Dann kannst du eigentlich gleich den Text manuell parsen.

23.01.2009 - 12:57 Uhr

Vielleicht hilft dir das ja weiter:

//Alle Unterelemente vom Typ "Product" auflisten (per XPath Abfrage)
        XmlNodeList productNodeList = productsNode.SelectNodes("Product");
        if (productNodeList != null)
        {
            //jeden Node durchgehen und Attribute auslesen
            foreach (XmlNode productNode in productNodeList)
            {
            }
        }

Damit kannst du alle untergeordneten Nodes eines bestimmten Typs zugreifen.

16.01.2009 - 13:14 Uhr

@Follmann,
danke für den Tipp. So funktioniert es. Ich kann Achsen und Kurven "orten".
Thxs

17.12.2008 - 01:59 Uhr

Das UC kennt das neue Form doch gar nicht, oder

Muss es doch eigentlich auch nicht. Dein Hauptformular abonniert das Event des UC. In dem Eventhandler erstellst du dann dein ProduktDetailForm.
Grüße

16.12.2008 - 04:09 Uhr

Am Besten du machst ein Formular und darauf einen Button, der die Funktion die du zum Maximieren brauchst, implementiert 😁
[Hinweis] Bitte schau in die SDK-/MSDN-Doku

13.12.2008 - 12:12 Uhr

Das Sicherste wäre sicherlich wenn du den C++ Code in C# portierst. Aber das mach nur Sinn, wenn das Projekt nicht zu groß ist. Die andere Möglichkeit ist, den C++ Code als DLL auszuführen. Die kannst du dann über Verweise in deine C# Anwendung einbinden.

13.12.2008 - 12:06 Uhr

und was wichtig zu beachten ist: Geduld

Ja, die brauchst du. Und am besten kleine Ziele setzen und sich an den kleinen Erfolgen freuen. Am besten fängst du erstmal mit einem typischen Hello World Programm an, erst als Console und dann mit einem Formular. Und für später: Versuche dir immer ein Ziel zu setzen und nicht alles auf einmal.

Grüße

11.12.2008 - 09:14 Uhr

Wie wäre es denn so: vari1 einem int zuweisen, danach 8 Bit links schieben, danach vari2 addieren. Geht ganz ohne Bitconverter.

byte vari1 = 0x10;
byte vari2 = 0xFF;

int iBytesTogether = vari1;
iBytesTogether = iBytesTogether << 8;
iBytesTogether += vari2;
11.12.2008 - 08:19 Uhr

@pohlmann:
Den Sourcecode kann ich leider nicht hochladen, weil das Gesamtwerk recht umfangreich ist.

Aber mir wäre ja schon geholfen wenn jemd. in irgendeiner Weise positive Erfahrungen mit dieser lustigen Funktion gemacht hat 🙂

10.12.2008 - 16:22 Uhr

@pohlmann:
Danke für den Tipp mit Control.CreateGraphics(); Habe ich jetzt mal probiert, aber leider gibt er mir kein Objekt zurück, egal wo ich hinklicke:

        private void zedGraph_DoubleClick(object sender, EventArgs e)
        {
            object o;
            int i;
            Graphics g = zedGraph.CreateGraphics();
            zedGraph.GraphPane.FindNearestObject(MousePosition, g, out o, out i);
        }

Ich habe auch nochmal in der Hilfe gekuckt. Ich soll einen ScreenPoint als Parameter übergeben. Also muss ich auch kein PointToClient(MousePosition) durchführen. Hm, ist die Funktion fehlerhaft?

10.12.2008 - 15:27 Uhr

Ich würde es auch so machen wie Torley. Du hast ja die pictureboxen sicher in einer List hinterlegt. Mit foreach () müsste das registrieren für das MouseDown-Event eigentlich recht fix gehen.

Grüße

10.12.2008 - 14:58 Uhr

Hallo Leute,
mal wieder eine Frage zu ZedGraph 😁
Hat jemand schonmal die FindNearestObject Funktion verwendet?

public bool FindNearestObject(
	PointF mousePt,
	Graphics g,
	out Object nearestObj,
	out int index
)

Was ich machen möchte: Bei Doppelklick des Benutzers auf den Titel oder Achsentitel soll er diesen bearbeiten können. Ich denke dafür wäre diese Funktion gut geeignet, wie sich auch aus der Anleitung herauslesen lässt:

This method will search through all of the graph objects, such as Axis, Legend, Title, GraphObj, and CurveItem. If the mouse point is within the bounding box of the items (or in the case of ArrowObj and CurveItem, within NearestTol pixels), then the object will be returned. You must check the type of the object to determine what object was selected (for example, "if ( object is Legend ) ..."). The parameter returns the index number of the item within the selected object (such as the point number within a CurveItem object.

Ich weiß nur nicht so recht, wo ich das Graphics-Objekt herbekommen soll, das die von mir will. Hat jemand schonmal mit dieser Funktion gearbeitet?

Danke und Grüße
MrLeeh

09.12.2008 - 12:58 Uhr

Hi t0mmi,

schau mal unter regex nach. Das ist genau das was du brauchst.

Grüße
MrLeeh

08.12.2008 - 10:15 Uhr

In wie fern weicht denn die BIOS-Zeit von der Systemzeit ab? (abgesehen von dem Unterschied, den kleines_eichhörnchen gerade beschrieben hat)? Mit System.Now müsste ich doch eigentlich auch die genaue Uhrzeit bekommen.