Guten Morgen
Brauche nocheinmal eure Hilfe:
Beim laden der Statistik Form wird dies aufgerufen:
private void InitChartAktuell(ZedGraphControl zgc)
{
myPane = zgc.GraphPane;
myPane.CurveList.Clear();
//Titel
myPane.Title.Text = "Statistik " + IQuizPanel.IHauptprogramm.IBenutzerInfo.benutzername;
myPane.Title.FontSpec.Size = 20;
//X Labels
myPane.XAxis.Title.FontSpec.Size = 15;
myPane.YAxis.Title.Text = "Anzahl";
myPane.YAxis.Title.FontSpec.Size = 15;
try
{
//XLabels
string[] XLabels = { "Übungstag: " + DateTime.Now.ToShortDateString () };
myPane.XAxis.Type = AxisType.Text;
myPane.XAxis.Scale.TextLabels = XLabels;
myPane.XAxis.Scale.FontSpec.Size = 15;
//Y Labels
myPane.YAxis.Type = AxisType.Exponent;
myPane.YAxis.Scale.FontSpec.Size = 15;
myPane.YAxis.Scale.FontSpec.IsBold = true;
//Refresh
zgc.AxisChange();
zgc.ZoomOutAll(myPane);
zgc.Refresh();
}
catch (Exception)
{ }
}
Via Menü hat der User die Möglichkeit die anderen Statistiken anzeigen zu lassen:
private void aktuelleStatistikToolStripMenuItem_Click(object sender, EventArgs e)
{
if (activChart == 0)
{
UpdateChartAktuell(zedGraphControl1);
return;
}
LangzeitanzeigenToolStripMenuItem.Enabled = true;
AktuellanzeigenToolStripMenuItem2.Enabled = false;
FachbereichanzeigenToolStripMenuItem1.Enabled = true;
SchwierigkeitToolStripMenuItem.Enabled = true;
InitChartAktuell(zedGraphControl1);
activChart = 0;
}
private void langzeitstatistikAnzeigenToolStripMenuItem_Click(object sender, EventArgs e)
{
if (activChart == 1) return; //evtl. neu zeichnen ?
myPane.CurveList.Clear();
LangzeitanzeigenToolStripMenuItem.Enabled = false;
AktuellanzeigenToolStripMenuItem2.Enabled = true;
FachbereichanzeigenToolStripMenuItem1.Enabled = true;
SchwierigkeitToolStripMenuItem.Enabled = true;
InitChartLangzeit(zedGraphControl1);
activChart = 1;
}
usw...
Hier der Code zur Langzeitstatistik:
public void InitChartLangzeit(ZedGraphControl zgc)
{
if (XMLStatistik == null) return;
if (structlist == null) structlist = new List<statistikstruct>();
zgc.Invalidate();
zgc.GraphPane.GraphObjList.Clear();
List<String> zeitpunkte = new List<string>();
//Alle Daten (Datums) in eine Liste holen
foreach (XmlNode dateNode in XMLStatistik.DocumentElement.ChildNodes) if (zeitpunkte.Contains (dateNode.FirstChild.InnerText) == false) zeitpunkte.Add (dateNode.FirstChild.InnerText);
foreach (String zeitpunkt in zeitpunkte)
{
statistikstruct s = new statistikstruct();
s.datum = zeitpunkt;
foreach (XmlNode node in XMLStatistik.DocumentElement.ChildNodes)
{
//Wenn Datum übereinstimmt - richtig und falsch zusammenzehlen
if (node.FirstChild.InnerText != zeitpunkt) continue;
else
{
s.richtig = s.richtig + Convert.ToInt16(node.ChildNodes[1].InnerText);
s.falsch = s.falsch + Convert.ToInt16(node.ChildNodes[2].InnerText);
}
}
structlist.Add(s);
}
myPane = zgc.GraphPane;
//Needed for redrawing the chart, to remove old curves
//myPane.CurveList.Clear();
// Set the title and axis labels
myPane.Title.Text = "Langzeitstatistik " + IQuizPanel.IHauptprogramm.IBenutzerInfo.benutzername;
myPane.XAxis.Title.Text = "Datum der Bewertung";
myPane.YAxis.Title.Text = "Falsch / Richtig";
// Make up some data points
string[] labels = zeitpunkte.ToArray();
List<double> ri = new List<double>();
List<double> fa = new List<double>();
foreach (statistikstruct s in structlist)
{
ri.Add(s.richtig);
fa.Add(s.falsch);
}
double[] y2 = ri.ToArray();
double[] y = fa.ToArray();
// Generate a red bar with "Curve 1" in the legend
BarItem myCurve = myPane.AddBar("Falsch", null, y, Color.Red);
// Fill the bar with a red-white-red color gradient for a 3d look
myCurve.Bar.Fill = new Fill(Color.Red, Color.White, Color.Red);
// Generate a blue bar with "Curve 2" in the legend
myCurve = myPane.AddBar("Richtig", null, y2, Color.LimeGreen);
// Fill the bar with a Blue-white-Blue color gradient for a 3d look
myCurve.Bar.Fill = new Fill(Color.LimeGreen, Color.White, Color.LimeGreen);
// Draw the X tics between the labels instead of at the labels
myPane.XAxis.MajorTic.IsBetweenLabels = true;
// Set the XAxis to Text type
myPane.XAxis.Type = AxisType.Text;
// Set the XAxis labels
myPane.XAxis.Scale.TextLabels = labels;
//myPane.XAxis.Scale.FontSpec.Size = 10;
// Set the bar type to stack, which stacks the bars by automatically accumulating the values
myPane.BarSettings.Type = BarType.Stack;
// Calculate the Axis Scale Ranges
zgc.AxisChange();
zgc.ZoomOutAll(myPane);
zgc.Refresh();
}
Das Problem ist nun, das bei einem Wechsel von einer Statistik zur anderen, die alte Statistik nicht gelöscht, sondern die neue angehängt wird. Wie umgehe ich das ?
Hallo,
hast du denn auch die Eigenschaft DataPropertyName der ComboBoxColumn gesetzt?
Ansonsten sollte es eigentlich funktionieren, s.a. How to: Bind Objects to Windows Forms DataGridView Controls
Ja nicht nur in der Sprache, anscheint auch in der Deutschen Sprache.
Dein Satzbau und deine Worte sind etwas wirr.
Du willst also ein vorhandenes Bild in einen 30x30 Ausschnitt kopieren und diesen dann woanders einfügen?
Dann brauchst du das MouseDown Event. Dort musst du überprüfen ob es die Linke-Maustaste ist, welche gedrückt wurde. Wenn ja musst du überprüfen das du innerhalb des Images bist, danach schneidest du einfach ausgehend von der Position wo du dich befindest einen 30x30 ausschnitt aus. Achte aber darauf das du nicht aus den Grenzen des Bildes schneidest.
Es gibt es nichts "frei zu geben".
TextBoxen haben diese Funktionalitäten bereits, da musst du nichts machen.
Aber bei ListBoxen und anderen Controls gibt es das per Default nicht, denn
-> Was soll kopiert werden?
-> Wie?
-> Alles was irgendwie selektiert ist?
-> Wann gilt etwas als selektiert?
-> Wie können komplexe Objekte in die Zwischenablage?
Schnapp dir die entsprechenden ApplicationCommands und implementiere es selber für die anderen Controls..
ArrayList ist völlig veraltet, nimm gleich eine typisierte List<..>, und du hast die Casting-Probleme nicht mehr...
Und um 'Structs' (also Werttypen) zu ändern, mußt du erst die komplette Struktur lokal in einer Variable speichern, dann den einzelnen Wert ändern und danach wieder die komplette Struktur wegspeichern (solltest du dies öfter machen, würde ich dir empfehlen, daraus eine Klasse (Referenztyp) zu machen).
Hallo,
ich möchte gern eine *.aspx Seite entwickeln. Einige Erfahrung habe ich schon in C# deswegen habe ich mich dafür entschieden. Die Entwicklungsumgebung wird microsoft web developer express werden. Nun suche ich ein gutes Tutorium oder ein Buch was nicht all zu teuer ist. Vielen dank.
teddymc schrieb:
hejj
helft mir schnell
meine angaben sind bei einem test und ich kenn mich null aus...
Schreiben sie ein programm das von 4 eingegebenen Frequenzen die erforderliche Kapazität der Kondensatoren berechent.
gegeben Strom Ic=0,50 A
Spannung Uc =230
Formel C= IC/W(omega)*Uc
Verwenden Sie für die Eingabewerte (frequenzen) und die berechneten Kapazitäten Felder.
Geben Sie die berechneten Kapazitäten in [µF]aus.
*Bittee helft mir*
Sag schon mal danke
_mC_
Wo liegt das Problem ?
Das ganze klappt nun schon hervorragend. Besten Dank bis hierher. Noch eine kleine Sache hätte ich gerne. Aber die fällt eher in die Kategorie Featurewünsche. Wenn ich das noch hinkriege wäre das aber ziemlich nett.
Aktuell wird mir keine Eingabe vorgeschlagen obwohl ich mit
m_ComboBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
m_ComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
arbeite.
Das Problem liegt wohl am DropDown mode, hier hätte ich gerne das List verhalten. D.H.: Wenn ich etwas eingebe was nur 1 Eintrag aus der Liste entsprechen kann, wird dieser Eintrag schon vorselektiert und brauch nur noch bestätigt zu werden. KAnn ich das verhalten irgendwie erzwingen?
P.S.: Habs lösen können, hab dafür am TextUpdate event folgende Funktion gehängt:
void ComboBoxTextUpdate(object sender, EventArgs e)
{
int oldSelection = m_ComboBox.Text.Length;
//check if we have an item wich is equal to the text
int value = m_ComboBox.FindString(m_ComboBox.Text);
// this check must be made, so we doen't select the item 2 times
if (value != -1 && m_ComboBox.Items[value].ToString() != m_ComboBox.Text)
{
//select this item
m_ComboBox.SelectedIndex = value;
m_ComboBox.Select(oldSelection, m_ComboBox.Text.Length);
}
}
Dravere schrieb:
@GPC,
Das ref ist da gar nicht nötig. Das ref wäre nur nötig, wenn du die übergebene Referenz verändern möchtest, also worauf sb referenziert.
Ich weiß schon Aber wenn schon Referenzierung, dann richtig
Also ich denke nicht, dass Disposing am Ende fehlt.
Habe das ganze mal in ein using gepackt, was so aussieht :
using (DataClasses1DataContext context = new DataClasses1DataContext())
{
DataClasses1DataContext context = new DataClasses1DataContext();
Spotmessungen21 spot_q12 = new Spotmessungen21();
Spotmessungen2 spot_q11 = new Spotmessungen2();
KochMessung kochmessung = new KochMessung();
Table<Spotmessungen2> cats11 = context.GetTable<Spotmessungen2>();
Table<KochMessung> koch = context.GetTable<KochMessung>();
var query = from cats in cats11
select new { cats };
foreach (var item in query)
{
//Konvertierungen
//zum Beispiel:
kochmessung.Operator = "CATS";
//zur Liste hinzufügen
context.KochMessung.InsertOnSubmit(kochmessung);
}//ende foreach
//Datenbank aktualisieren
context.SubmitChanges();
}
Allerdings bin ich mir nicht 100% sicher, ob das richtig ist, denn das habe ich bisher noch nicht gemacht. Aber es funktioniert auch nicht wie gewünscht. Es wird wieder nur der letzte durchgelaufene Datensatz in die Tabelle gespeichert.
theta schrieb:
In C# werden alle Variablen (implizit) auf ihren Default Wert initialisiert.
Wenn Du das explizit tun möchtest ist das auch ok.
Aber nur wenn es Klassenmember sind.
Lokale Variablen in Methoden werden nicht mit dem Default-Wert initialisiert.
Anfänger64 schrieb:
public static int zero = 0;
Hast Du Angst, dass sich der Wert von Null mal ändert?
Mittels der SerialPort.BytesToWrite-Eigenschaft könntest du mal überprüfen, ob wirklich noch Daten im Sendepuffer stehen. Und falls ja, diese mit der SerialPort.DiscardOutBuffer-Methode löschen.
Dies steht aber auch alles in der MSDN: http://msdn.microsoft.com/de-de/library/system.io.ports.serialport_members.aspx
hustbaer schrieb:
Dass C# das re-throw nicht wie C++ unterstützt wusste ich nicht, aber man könnte ja immer noch "object" fangen und dann weiterwerfen. Oder gilt die Beschränkung auf "System.Exception" in C# auch für's Fangen?
Nimm die Fehlermeldung von vorhin und subtrahiere 1 davon, dann erhälst du CS0155.
Allerdings habe ich nicht so recht verstanden, worauf du damit eigentlich hinaus willst.
@loks,
Ist die "Lösung" nicht ein kleines bisschen übertrieben?
Zudem behandelt man dann die Exception nicht dort, wo man möchte. Und das Programm stürtzt danach trotzdem ab, bzw. wird beendet. Ich glaube kaum, dass dies Fedaykin möchte
Grüssli