Hallo,
zunächst, ja ich habe hier schon die Suche benutzt und die Grundlagen etc. durchgelesen. Hab hier kein Grundlagen problem zu csharp sondern zum aufbau einer ordentlichen Chart in forms mit c# natürlich.
Vorerst, arbeite mit .net framework 4 und visual studio 2010
Nun zu meinem Problem.
Ich habe mehrere Forms in den verschiedene dinge passieren. Dann gibt es auch noch eine Form die per knopfdruck vorher erzeugte werte in einem Diagramm ausgibt.
Das sind meine Private/Public auf die ich zugreife
private string[] _InfoNew = new string[80000];
public string[] InfoNew
{
get { return _InfoNew; }
set { _InfoNew = value; }
}
private string[] _YearNew = new string[80000];
public string[] YearNew
{
get { return _YearNew; }
set { _YearNew = value; }
}
private string[] _MonthNew = new string[80000];
public string[] MonthNew
{
get { return _MonthNew; }
set { _MonthNew = value; }
}
private string[] _DayNew = new string[80000];
public string[] DayNew
{
get { return _DayNew; }
set { _DayNew = value; }
}
private string[] _HourNew = new string[80000];
public string[] HourNew
{
get { return _HourNew; }
set { _HourNew = value; }
}
private string[] _MinNew = new string[80000];
public string[] MinNew
{
get { return _MinNew; }
set { _MinNew = value; }
}
private string[] _SecNew = new string[80000];
public string[] SecNew
{
get { return _SecNew; }
set { _SecNew = value; }
}
private string[] _MsecNew = new string[80000];
public string[] MsecNew
{
get { return _MsecNew; }
set { _MsecNew = value; }
}
Was soll überhaupt passieren:
Ich habe aus vorherig erzeugtem Programmcode mir meine genaue Uhrzeit in einem Array abgespeichert. Ich habe hier Jahr/Monat/tag/Stunde/Minute/Sekunde/Msekunde
Jeder wert ist in einem einzelnen Array.
Die Zusammengehörenden Zeiten haben den selben Array index.
als Bsp.
Die Uhrzeit 10.01.2014 14:30:10:123 wurde gespeichert.
Dann ist der inhalt von
YearNew[0] = 14
MonthNew[0]=01
DayNew[0]=10
HourNew[0]=14
MinuteNew[0]=30
SecoundNew[0] = 10
MSecoundNew[0] =123
Die nächste gespeicherte Uhrzeit hat komplett den index [1] usw.
Ich habe immer einen unterschiedliche anzahl von werten. Ich weiß aber die Anzahl der werte. Z.b. 4.
Mein großes Problem ist, das ich eine chart erstellen will, in der:
diese werte geben mir meine Y höhe an.
Problem bei der Zeit wie auch hier. Es kann zum einen Sein das nur Msec zwischen den Werten liegen und manchmal tage.
die werte von info können beliebig groß sein z.b . auch 50000
Ich bin hier sehr am verzweifeln und hab mir schon alles mögliche durchgelesen und angeschaut, kann es jedoch nicht auf mein problem übertragen
das ist mein programmcode
private void button_grafisch_auswerten_Click(object sender, EventArgs e)
{
if (FrmReadIn.AuswertungFlankeImp == true)
{
chart1.Series.Clear();
var s = new Series();
s.ChartType = SeriesChartType.Line;
//chart1.Series[0].XValueType = ChartValueType.DateTime; //dadurch ist auf der x-achse das Date and Time
s.XValueType = ChartValueType.DateTime;
int[] HighValue = new int[FrmReadIn.LineCounter]; //soviele high werte wie der LineCounter gezählt hat evtl -1
DateTime dt = new DateTime();
int YearI = 0, MonthI = 0, DayI = 0, HourI = 0, MinI = 0, SecI = 0, MSecI = 0;
#region Impuls Auswertung
for (int i = 0; i < FrmReadIn.LineCounter; i++)
{
HighValue[i] = 1;
Int32.TryParse(FrmReadIn.YearNew[i], out YearI); //Eingegebenen Wert in Int umwandeln
Int32.TryParse(FrmReadIn.MonthNew[i], out MonthI);
Int32.TryParse(FrmReadIn.DayNew[i], out DayI);
Int32.TryParse(FrmReadIn.HourNew[i], out HourI);
Int32.TryParse(FrmReadIn.MinNew[i], out MinI);
Int32.TryParse(FrmReadIn.SecNew[i], out SecI);
Int32.TryParse(FrmReadIn.MsecNew[i], out MSecI);
s.Points.AddXY(dt, 1);
}
chart1.Series.Add(s);
FrmReadin.Linecounter hat die Anzahl der Werte hinterlegt , also wieviele infos + datums ich habe.
ich hoffe ihr könnt mir ein paar tipps geben! und nicht nur auf grundlagen verweißen
danke
Hallo WilfriedHerman,
und willkommen im Forum.
Ehrlich gesagt habe ich dein Problem noch nicht verstanden. Was genau ist deine Frage?
Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 5
Ich glaube aber, dass du dir den DateTime-Typ mal anschauen solltest. Der spart dir vielleicht viel Arbeit.
... ich brauch schnell eine lösung.
Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 7
Beachte bitte ausserdem [Tipp] Anfängerfehler == true / == false
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
HI, sorry das ist ja total untergegangen vor lauter schreiben 😕 stressige arbeit sorry leute.
Also mein Problem ist, Ich bekomm die Genaue Zeitangabe also mit Msec und allem nicht auf der X-Achse angezeigt.
Das mit dem Datentyp hab ich mir schon angeschaut, werd es aber nochmal machen.
Und Außerdem hab ich das problem das meine X - Achse ja jedes mal anders sein kann, ich kann ihr keinen festen wert vorgeben.
aber das hauptproblem ist das ich die punkte im diagramm nicht angezeigt bekomm.
Also die zeit auf die x achse
edit:
Ja und ich muss aus meinen einzelnen int werten für jahr monat tag stunde min sec msec
in eine form packen das ich sie auf der X - achse ausgeben kann
Auch ein problem ist wie ich den Intervalltyp setze, ich kann ihn nicht auf stunden setzen da manchmal nur msec zwischen den datensätzen liegen, manchmal auch tage
Bei dir werden wohl alle Punkte auf einer Ebene hängen.
Du fügst den Punkt ja mit :
s.Points.AddXY(dt, 1);
hinzu. Aber dein "dt" ist immer new Datetime().
DateTime dt = new DateTime();
deine schleife wäre wohl besser wenn du
for (int i = 0; i < FrmReadIn.LineCounter; i++)
{
HighValue[i] = 1;
Int32.TryParse(FrmReadIn.YearNew[i], out YearI); //Eingegebenen Wert in Int umwandeln
Int32.TryParse(FrmReadIn.MonthNew[i], out MonthI);
Int32.TryParse(FrmReadIn.DayNew[i], out DayI);
Int32.TryParse(FrmReadIn.HourNew[i], out HourI);
Int32.TryParse(FrmReadIn.MinNew[i], out MinI);
Int32.TryParse(FrmReadIn.SecNew[i], out SecI);
Int32.TryParse(FrmReadIn.MsecNew[i], out MSecI);
dt = new DateTime(YearI,MonthI,DayI,HourI,MinI,SecI,MSecI);
s.Points.AddXY(dt, info[i]);
}
verwenden würdest. Noch besser natürlich wenn du gleich mit Datetime arbeiten würdest
++Rekursion ++
(lat. , die) siehe Rekursion
Das hab ich grad auch schon probiert
also so
chart1.Series.Clear();
var s = new Series();
s.ChartType = SeriesChartType.Line;
//chart1.Series[0].XValueType = ChartValueType.DateTime; //dadurch ist auf der x-achse das Date and Time
s.XValueType = ChartValueType.DateTime;
int[] HighValue = new int[FrmReadIn.LineCounter]; //soviele high werte wie der LineCounter gezählt hat evtl -1
// DateTime dt = new DateTime();
Dictionary<DateTime, int> values = new Dictionary<DateTime, int>();
int YearI = 0, MonthI = 0, DayI = 0, HourI = 0, MinI = 0, SecI = 0, MSecI = 0;
#region Impuls Auswertung
for (int i = 0; i < FrmReadIn.LineCounter; i++)
{
HighValue[i] = 1;
Int32.TryParse(FrmReadIn.YearNew[i], out YearI); //Eingegebenen Wert in Int umwandeln
Int32.TryParse(FrmReadIn.MonthNew[i], out MonthI);
Int32.TryParse(FrmReadIn.DayNew[i], out DayI);
Int32.TryParse(FrmReadIn.HourNew[i], out HourI);
Int32.TryParse(FrmReadIn.MinNew[i], out MinI);
Int32.TryParse(FrmReadIn.SecNew[i], out SecI);
Int32.TryParse(FrmReadIn.MsecNew[i], out MSecI);
DateTime dt = new DateTime(YearI, MonthI, DayI, HourI, MinI, SecI, MSecI, DateTimeKind.Utc);
// dt.ToOADate();
s.Points.AddXY(dt, 1);
Aber da bekomm ich beim debugen ein fehler an der stelle s.Points.AddXY(dt,1)
das des kein zulässiger OleAUt typ ist
die 1 bei s.Points.AddXY(dt, 1); hab ich nur zum testen reingeschrieben das ich quasi jedes mal wenn ein datum erfasst wurde auf y höhe = 1 gehe
Und wenn ich die Zeile dt.ToOADate(); drinne lass bleibt der debuger da stehen und sagt unzulässiges OleAut-Datum
Gibt es einen Grund das du die X Achseneinschränkung auf Datetime auskommentiert hast?
s.ChartType = SeriesChartType.Line; //chart1.Series[0].XValueType = ChartValueType.DateTime; //dadurch ist auf der x-achse das Date and Time s.XValueType = ChartValueType.DateTime; int[] HighValue = new int[FrmReadIn.LineCounter]; //soviele high werte wie der LineCounter gezählt hat evtl -1 // DateTime dt = new DateTime();
Edit: Formatierung
++Rekursion ++
(lat. , die) siehe Rekursion
ok also der fehler mit dem Datum ist behoben...
Ich hab dem für 2014 eine 14 übergeben und ich bin einfach net draufgekommen was da net passen sollte!
Problem ist jetzt:
Er Zeigt mir eine Chart an
aber da sich meine Zeiten nur im MSec bereich unterscheiden hab ich einfach an dem tag 17.1.2014 als beispiel einen strich.
hab den xvaluetyp auf DateTime
Nur brauch ich eine viel viel höherer Auflösung und vor allem muss man in der Grafik nicht nur Jahr:Monat:Tag sondern auch Stunde:Min:Sec:MSec sehen können.
kann mir wer sagen wie das geht.??
Hallo WilfriedHerman,
du brauchst eine feinere Skalierung deiner Achse.
Ich hab dem für 2014 eine 14 übergeben und ich bin einfach net draufgekommen was da net passen sollte!
Das hättest du mit dem Debugger leicht herausbekommen.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
jo hab ich ja dann auch letztendlich 😉
Ja gut das ich eine feinere skallierung brauch ist mir ansich klar, doch wie setz ich das um. Ich weiß ja nie wie fein sie werden soll
manchmal hab ich 5 werte auf 1 tag verteilt
manchmal 5 werte auf 1 sekunde verteilt.
das ist jetzt ja grad mein problem, um tipps wär ich dankbar. bin hier schon die ganze zeit am herumprobieren
folgendes problem
DateTime time = new DateTime(2014, 1, 17, 09, 30, 20, 100);
s.Points.AddXY(time.ToOADate(), 1);
DateTime time2 = new DateTime(2014, 1, 17, 09, 30, 30, 200);
s.Points.AddXY(time2.ToOADate(), 1);
DateTime time3 = new DateTime(2014, 1, 17, 09, 30, 40, 200);
s.Points.AddXY(time3.ToOADate(), 1);
DateTime time4 = new DateTime(2014, 1, 17, 09, 30, 50, 200);
s.Points.AddXY(time4.ToOADate(), 1);
//test ende
s.XValueType = ChartValueType.Time;
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "yyyy:MM:dd HH:mm:ss:fff "; //Format der Anzuzeigenden Daten auf der Xachse
Ich bekomme aber auf dem Chart einfach nicht die Milisecounds angezeigt,
Jahr:monat:Tag:Stunde:Minute:Sekunde geht, jedoch steht bei den Milisekunden im diagramm immer 000
Hast du Statt :
s.XValueType = ChartValueType.Time;
mal
s.XValueType = ChartValueType.DateTimeOffset;
versucht?
Zudem noch einmal der Hinweis auf: [Hinweis] Wie poste ich richtig?
- Nicht gleich pushen, nicht drängeln
++Rekursion ++
(lat. , die) siehe Rekursion
sorry wollt nicht drängen, bin nur im stress 😕 kennt ihr sicherlich
habe es zzt. auf .Time stehen!
aber beides hat nix gebracht er zeigt mir einfach nicht die Milisekunden an! der Rest passt.
Denn Stress solltest du bitte nicht ins Forum tragen. Die Helfer helfen hier kostenlos und freiwillig. Bitte setzte sie in keiner Weise unter Druck. Auch im eigenen Interesse, denn oft erreicht man dadurch das Gegenteil.