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.
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;
}
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.
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
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"
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:
Ich würde das ganze mittels DateTime.Parse() und der passenden CultureInfo lösen.
Edit: Mittels Convert 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.
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.
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
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.
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);
}
}
}
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)
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]);
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.
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?
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.
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
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.
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.