Information

  • Informatik
  • C#
  • Chaos

Zurreal.de

Fantasy Art ~ Phantastische Kunst

Fantasy Art ~ Phantastische Kunst

Please click on 'Switch Style'.
The style of the website will change.

Bitte klicken Sie auf 'Switch Style'.
Die Gestaltung der Webseite wird sich ändern.

Fehlermeldung


try
{ ... }
catch (Exception ex)
{
  MessageBox.Show(ex.Message);
}


try
{ ... }
catch
{
  MessageBox.Show("Fehler!");
}

Fehlermeldungen:

  1. programmgeneriert
  2. mit eigenem Text

Programm beenden


Application.Exit();


Message-Box


MessageBox.Show("Fehler!");


Strings verketten


txtBox.Text = "Ergebnis: " + Variable.ToString();

String-Bausteine mit + verketten.


StringBuilder


StringBuilder SB = new StringBuilder();

SB = SB.Append(Zahl.ToString() + "Alpha");
txtAusgabe.Text = SB.ToString();

StringBuilder:

Append
hinzufügen

Focus, Clear, Null


txtBox1.Focus();
txtBox2.Clear();
txtBox3.Text = null;
txtBox4.Text = txtBox5.Text = null;

Focus
Cursor wird platziert
Clear
String wird gelöscht
Null
String wird gelöscht

Neue Zeile


string NeueZeile = Environment.NewLine;
txtName.Text = "Text" + NeueZeile + "Text";

txtName.Text = "Text" + Environment.NewLine + "Text";

Möglichkeiten für einen Zeilenumbruch.


Try and Catch


  try { }
catch { }

Wenn der Versuch (try) misslingt, werden Gegenmaßnahmen (catch) ergriffen.


Konvertieren


double VarDub;
VarDub = Convert.ToDouble(txtEingabe.Text);

int VarInt;
VarInt = Convert.ToInt32(txtEingabe.Text);

double VarDub;
VarDub = Convert.ToInt32(txtEingabe.Text);

Konvertierung:
double to double, int to int32, double to int, usw.
Die Konvertierung eines Datentyps nochmals in denselbigen ist im Try-Block vorteilhaft.


int VarInt;
txtAusgabe.Text = VarInt.ToString();

VarInt wird für die Ausgabe in eine Textbox nach String konvertiert.


Cast


int Variable = 10;
(double)Variable;

double Variable = 22.22;
(int)Variable;

Casten:
Aus int wird double.
Aus double wird int.


Nachkommastellen, Währung


txtAusgabe.Text = ZahlDouble.ToString("F2");

("C")
Währung: Standardwert
("C", en-US)
Währung: Dollar
("C", de-DE)
Währung: Euro
("F2")
2 Nachkommastellen
("0.00")
2 Nachkommastellen
("0")
keine Nachkommastellen

Auffüllen mit führenden Nullen oder Zeichen


txtBox.Text = Zahl.ToString("D3");


txtBox.Text =
Zahl.ToString().PadLeft(3, ' ');

("D3")
Führende Nullen, bis zu 3 Stellen
PadLeft(3, '~')
Führende Zeichen, bis zu 3 Stellen

Variablen deklarieren


double VarA;
double VarB = 0;

int VarC = 1, VarD = 2;

bool Bool1 = false;
bool Bool2 = true;

string DerString = "Text";

Beim Erstellen einer Variablen kann ihr ein Initialwert zugewiesen werden.


ToolTip


ToolTip Trick17 = new ToolTip();
Trick17.SetToolTip(cmdEnde,"Ende");

ToolTip z.B. unter InitializeComponent(); einfügen.


If else


if (Variable < 0)
{
  Variable = Variable * (-1);
}

else
{
  Variable = Variable + 1;
}

Beispiel: Wenn Variable kleiner als 0, dann multipliziere Variable mit -1. Ansonsten addiere 1 zur Variable. Die geschweiften Klammern können bei nur einer folgenden Anweisung weggelassen werden.


if (Variable < 100)
  if (Variable > 50)
    if (Variable != 75)
    {
      ...
    }

Mehrere verschachtelte if-Anweisungen.


if (Variable < 100 && Variable > 50)
    {
      ...
    }

Eine if-Anweisung mit mehreren Bedingungen.


if (cmdVorgabe.Text == "Alpha")
{
    cmdVorgabe.Text = "Omega";
}
else if (cmdVorgabe.Text == "Omega")
{
    cmdVorgabe.Text = "Alpha";
}

if, else if:
Es wird entweder if oder else if ausgeführt. Nicht beides nacheinander.


Schleifen (Loops)


Zahl = 1;
while (Zahl <= 10)
  {
    Zahl = Zahl + 1;
  }

Kopfgesteuerte Schleife (Durchlauf nur, wenn WHILE zutrifft)
Beispiel: Zahl ist 1. Während Zahl kleiner-gleich 10 ist, addiere 1 zur Zahl.


Zahl = 1;
do
  {
    Zahl = Zahl + 1;
  }
while (Zahl <= 10);

Fußgesteuerte Schleife (min. 1 Durchlauf)
Beispiel: Zahl ist 1. Tue solange 1 zur Zahl addieren, während die Zahl kleiner-gleich 10 ist.


for(int x = 1; x <= 10; x++)
{...}

Zähl-Schleife
Anweisungen im Schleifenrumpf: Variable; Bedingung; Laufzeit. Im Schleifenrumpf kann direkt die benötigte Variable erzeugt werden.


string[] StringArray = {"System", "des", "integrator"};

foreach (string X in StringArray)
{
  txtAusgabe.Text += X;
}

Foreach-Schleife
Im Beispiel wird diese Schleife dreimal durchlaufen, da das Array namens StringArray 3 Strings gespeichert hat. Die String-Variable X wird direkt im Schleifenrumpf erzeugt und ist ein Stellvertreter für jeden gespeicherten Wert des Arrays. Nützlich für Arrays, deren genaue Anzahl der enthaltenen Werte unbekannt ist.
Die Textbox wird "Systemdesintegrator" ausgeben.


Diese Befehle können innerhalb einer Schleife {...} stehen:
Befehl Bedeutung
break; Abbruch der Schleife
continue; Wieder zum Anfang der Schleife

Switch and Case


string Buchstabe = "B";
switch (Buchstabe)
{
  case "A": TextBox.Text = "A";
  break;
  case "B": TextBox.Text = "B";
  break;
  default:  TextBox.Text = "C";
  break;
}


int Zahl = 3;
switch (Zahl)
{
  case 1:
  case 2:  TextBox.Text = "1 und 2";
  break;
  case 3:  TextBox.Text = "3";
  break;
  default: TestVariable++;
  break;
}

Nach dem "case" wird der Wert aufgeführt, nach dem gefragt wird.
"case" funktioniert nicht mit dem Datentyp: double.

case
Ein Fall (case) tritt ein. Es können auch mehr Fälle zutreffend sein.
break
Wenn ein bestimmter "case" eintritt, wird der "switch" unterbrochen.
default
Wenn kein "case" zutrifft, wird "default" aufgerufen. Kann weggelassen werden.

Text zuweisen


cmdButton.Text = "Berechnen";
txtBox123.Text = "Ausgabe45";

Text kann geändert oder zugewiesen werden bei: Textbox, Button, Label, usw.


Rechen-Operatoren [1]
Operator Bedeutung
+ Addition
- Subtraktion
* Multiplikation
/ Division
% Modulo, Restwert-Division

Rechen-Operatoren [2]
Operator Kurzschreibweise ausführlich
+= A += B A = A + B
-= A -= B A = A - B
*= A *= B A = A * B
/= A /= B A = A / B
++ A++ A = A + 1
-- A-- A = A - 1

Operatoren
C Sharp Bedeutung Sonstiges
&& UND
Alle Bedingungen müssen wahr sein.
and
|| ODER
Eine oder mehrere Bedingungen müssen wahr sein.
or
== IST GLEICH
!= IST NICHT GLEICH <>
! NICHT
^ exklusives ODER
Nur eine Bedingung darf wahr sein.
xor
= Zuweisung
< kleiner als
<= kleiner-gleich als
> größer als
>= größer-gleich als

Modulo: Division mit Rest


int Variable1 = 17;
int Variable2 = 17;
Variable1 / 5;
Variable2 % 5;

17 / 5 = 3
weil die 5 dreimal in die 17 passt
17 % 5 = 2
weil die 5 dreimal in die 17 passt, und dabei ein Rest von 2 verbleibt

Variablen tauschen


int A = 10;
int B = 50;
int temp;

temp = A;
A = B;
B = temp;


Komma verschieben


double Euro = 123456;
Euro = Euro * 0.01; /* 1234,56 */


Goto: Zeilensprung


Wiederholung:
Zahl++;
goto Wiederholung;


ASCII Zeichen ausgeben


string Ausgabe = null;
int AsciiCode;
AsciiCode = 12;
Ausgabe = Convert.ToChar(AsciiCode);

Vorgang:

  • Zeichen und dessen Nummern-Code anhand der ASCII-Tabelle ermitteln.
  • Diese Nummer einer Int-Variablen zuweisen.
  • Int-Variable nach Char konvertieren: Convert.ToChar(AsciiCode)
  • Ausgabe

Zufallszahl


int Zufallszahl, Zaehler = 1;
string Ausgabe = null;
Random Zufall = new Random();

  while (Zaehler <= 5)
  {
    Zufallszahl = Zufall.Next(0, 10);
    Ausgabe += Zufallszahl.ToString();
    Zaehler = Zaehler + 1;
  }

txtAusgabe.Text = Ausgabe;

5-stellige Zufallszahl aus den Ziffern 0 bis 9.

Zufall.Next(0, 10)
Ziffern: 0 bis 9

  int Zufallszahl;
  Random Zufall = new Random();
  Zufallszahl = Zufall.Next(0, 5);

Eine einstellige Zufallszahl aus dem Zahlenraum: 0 bis 4.


Zufall, der sich nicht wiederholt


List<int> Liste = new List<int>();
Random Zufall = new Random();
int[] DasArray = new int[4];
int Zufallszahl;

for (int i = 0; i < 4; i++)
{
  Zufallszahl = Zufall.Next(0, 4);
  if (!Liste.Contains(Zufallszahl))
  {
    Liste.Add(Zufallszahl);
  }
  else
  {
    i--;
  }
}

Liste.CopyTo(DasArray);

Eine Liste mit einer zufälligen Anordnung der Zahlen 0,1,2,3 ohne Wiederholung derselbigen. Zum Schluss wird die Liste in ein Array kopiert, um gezielt auf die Indexe zugreifen zu können.


Color: Farben zuweisen


/*Zuweisung an Textbox, Button, usw:*/
this.txtBox.ForeColor = System.Drawing.Color.Azure;
this.cmdButton.BackColor = System.Drawing.Color.HotPink;

/*Zuweisung an die Form selber:*/
this.ForeColor =
System.Drawing.Color.Azure;
this.BackColor =
System.Drawing.Color.MediumVioletRed;

ForeColor
Textfarbe
BackColor
Hintergrundfarbe

C# Color Name Table, getting all colors


Datentypen
Datentyp Info Größe (Bytes) Wert
sbyte positiv, negativ, ganzzahlig 1 -128 to 127
short Int16 positiv, negativ, ganzzahlig 2
int Int32 positiv, negativ, ganzzahlig 4
long Int64 positiv, negativ, ganzzahlig 8
float positiv, negativ, Gleitkomma 4
double positiv, negativ, Gleitkomma 8
decimal positiv, negativ, Gleitkomma 12
bool Boolescher Wert 1 true or false
char Ein einziges Zeichen 2
string Alphanumerische Zeichenfolge

Funktion mit Rückgabewert


private void Button_Click(...)
{
  int Zahl1 = 250,
      Zahl2 =  10,
      Zahl3 =  25,
      Ergebnis;
  Ergebnis = Auslagerung(Zahl1, Zahl2, Zahl3);
}


private int Auslagerung
(int WertA, int WertB, int WertC)
{
  int Berechnung = WertA / WertB * WertC;
  return Berechnung;
}

Sowohl Zahl1, Zahl2, Zahl3 und Ergebnis, als auch WertA, WertB, WertC und Berechnung sind eigenständige Variablen. Sie könnten auch dieselben Namen haben und wären doch unterschiedlich.

Um nun diese Variablen richtig zu übergeben, ist die genaue Reihenfolge derselbigen in den runden Klammern () entscheident: So werden diese zugeordnet.

Im Beispiel wird der Wert der Variable 'Berechnung' der Variable 'Ergebnis' mit 'return' zugewiesen.


Void


void Order66()
  {
    ...
  }

private void cmdX_Click(...)
  {
    Order66();
  }

Wiederkehrender Code nur einmal schreiben.
Geht auch: private void Order66() { }


Quersumme


  int Zahl = 11;
  int Quersumme = 0;
  while (Zahl > 0)
  {
    Quersumme += Zahl % 10;
    Zahl /= 10;
  }


Math


Quadrieren = Math.Pow(Zahl, 2);
WurzelZieh = Math.Sqrt(Zahl);
Rund3Stell = Math.Round(Zahl, 3);

Quadrieren: Math.Pow
Wurzel ziehen: Math.Sqrt
Runden: Math.Round


Form, Tools, Eigenschaften
Eigenschaft Bedeutung
Visible Un/Sichtbarkeit
Enabled De/Aktivierung
TextAlign Textausrichtung
ReadOnly Schreibschutz
TabStop Auswahl per Tabulator
TabIndex Auswahl Reihenfolge
MultiLine mehrzeilige TextBox
Location Platzierung
Size Größe, zB: 10;10
FormBorderStyle Fenster (nicht) vergrößern
Checked = true Radio-Button Vorauswahl
BorderStyle 3D, Single, None
ScrollBars Both
FlatStyle Flat (Buttons)

Zeichenkette auf Inhalt prüfen


if(String.IsNullOrEmpty(txtBox.Text))
{...}

Prüfen, ob leer
String.IsNullOrEmpty (txtBox.Text)
Prüfen, ob leer
txtBox.Text == ""
Prüfen, ob leer
txtBox.Text == null
Prüfen, ob voll
txtBox.Text != null
Prüfen, ob voll
!String.IsNullOrEmpty (txtBox.Text)

Datenfelder
Name mögliche Inhalte zur Laufzeit erweiterbar? untersch. Inhalte möglich?
Array Datentypen Nein Nein
ArrayList
List
Tuple Ja

Ist noch in Arbeit!

Datentypen:
int, string, bool, char, usw.


Listen


List<int> Liste01 = new List<int>();

Eine int-Liste. Weitere Datentypen sind möglich.


Liste01.Add(Variable);
Durchschnitt = (int)Liste01.Average();
txtBox.Text = string.Join(" ", Liste01);
Summe = Liste01.Sum();
Menge = Liste01.Count;
Liste01.Clear();
Liste01.CopyTo(InEinArray);

Add
hinzufügen
string.Join
alle Werte in TextBox ausgeben
Average
Durchschnitt berechnen
Clear()
Liste leeren
Sum()
Werte summieren
Count
Anzahl der Werte
CopyTo(Array)
In ein Array kopieren

Strings: Verarbeitung


string Datensatz;

Datensatz = Datensatz.Insert(2, ".");
Datensatz = Datensatz.Replace(" ", IntVariable.ToString());
Datensatz = Datensatz.Replace("A", "B");
IntegerVa = Convert.ToInt32(Datensatz.Substring(4, 2));
StringVar = Datensatz.Substring(4, 2);
Datensatz = Datensatz.Remove(3, 6);

Insert(2, ".")
Nach der 2ten Stelle einen Punkt einfügen.
Replace("A", "B")
Alle A's mit B's ersetzen.
Replace("A", Zahl.ToString())
Alle A's mit 'Zahl' ersetzen.
Substring(4, 2)
Eine Zeichenfolge von 2 Zeichen ab der Stelle 4 entnehmen.
Remove(3, 6)
Entfernt Zeichenfolge 3 bis 6.

Array-List


using System.Collections;
ArrayList MeineArrayListe = new ArrayList();

Die Array-Liste kann unterschiedliche Datentypen beinhalten.
Sie benötigt den Namespace: System.Collections.


Ereignis


private void Button_Click() {...}
private void RadioButton_CheckedChanged() {...}
private void CheckBox_CheckedChanged() {...}
private void TextBox_TextChanged() {...}

Durch das benutzerseitige Auslösen eines Ereignisses werden die jeweiligen Anweisungen in den geschweiften Klammern {...} ausgeführt: eine Befehlsabfolge wird in Gang gesetzt.

Ein Ereignis wird ausgelöst durch:

  • Klicken eines Buttons
  • Auswählen eines RadioButtons
  • Auswählen einer CheckBox
  • Schreiben in eine TextBox
  • usw.

Datum und Zeit


DateTime ZEIT = new DateTime();
ZEIT = DateTime.Now;


txtBox.Text =
"Datum kurz: " + ZEIT.ToShortDateString() +
"Datum lang: " + ZEIT.ToLongDateString()  +
"Zeit kurz:  " + ZEIT.ToShortTimeString() +
"Zeit lang:  " + ZEIT.ToLongTimeString()  +
"Tag des Jahres: " + ZEIT.DayOfYear +
"Tag der Woche:  " + ZEIT.DayOfWeek +
"Tage akt. Mon.: " +
DateTime.DaysInMonth(ZEIT.Year, ZEIT.Month);


if (DateTime.IsLeapYear(ZEIT.Year))
    txtBox.Text += "Schaltjahr: Ja";
else
    txtBox.Text += "Schaltjahr: Nein";


Digital-Uhr


private Timer Z = new Timer();


public Digital_Uhr()
{
  InitializeComponent();
  InitializeTimer();
  Z.Start();
}


private void timer1_Tick(...)
{
  Label.Text = string.Format
    (
    "{0:00}:{1:00}:{2:00}",
    DateTime.Now.Hour,
    DateTime.Now.Minute,
    DateTime.Now.Second
    );
}


public void InitializeTimer()
{
  Z.Interval = 1000;
  Z.Tick += new EventHandler(timer1_Tick);
}

Ist noch in Arbeit!

Ein Timer 'timer1' muss der Form hinzugefügt werden.
private void timer1_Tick() durch Doppelklick auf 'timer1' erzeugen.


Radio Button


if (rad_19.Checked == true)
  mwst = 19;
else
  mwst = 7;

Abfrage der Auswahl mittels if(...):

Ausgewählt?
Checked == true
Nicht ausgewählt?
Checked == false

radiobutton.Checked = true;
radiobutton.Checked = false;

Zuweisung einer Auswahl.


private void RadioButton_CheckedChanged(...)
{
  if (RadioButton.Checked == true)
  ...
}

Das Auswählen des RadioButtons kann ein Ereignis auslösen.
Code durch Doppelklicken in der Form auf RadioButton erzeugen.

Falls das Auswählen des RadioButtons zwei Ereignisse auslöst:
RadioButton.Checked == true > Event Fires Twice <


NumericUpDown (Schaltfläche)


int VariableA;
VariableA = (int)NumericUpDown.Value;

VariableA wird der Wert aus NumericUpDown zugewiesen.
(int) ändert den Datentyp von NumericUpDown von 'decimal' nach 'int'.

Increment
Schrittweite
Minimum
Minimalwert
Maximum
Höchstwert

Sichtbarkeit: Visible


this.TextBox.Visible = false;
this.RadioButton.Visible = true;

this.Label1.Visible =
this.Label2.Visible = true;

Jedes Element der Form kann aus- oder eingeblendet werden.
Das vorangestellte 'this.' kann weggelassen werden?

Sichtbarkeit: AUS
Name.Visible = false
Sichtbarkeit: EIN
Name.Visible = true

Umrechnen
von ~ bis ~ NumericUpDown ~ DataGridView (DGV)


von = Convert.ToDouble(txtVON.Text);
bis = Convert.ToDouble(txtBIS.Text);
Schrittweite = (int)NumericUpDown.Value;

Benutzereingaben: Startwert von, Endwert bis, Schrittweite.
DataGridView (DGV) benötigt für dieses Beispiel 5 Spalten.
Schrittweite kann über NumericUpDown-Schaltfläche eingegeben werden.


while (von <= bis)
{
  kelvin = von + 273.15;
  fahrenheit = von * 1.8 + 32;
  rankine = kelvin * 1.8;
  reaumur = von * 0.8;
  DGV.Rows.Add(von, kelvin, fahrenheit, rankine, reaumur);
  von = von + Schrittweite;
}

Möglichkeit 1 mit der While-Schleife.


for (double i = von; i <= bis; i += Schrittweite)
{
  kelvin = i + 273.15;
  fahrenheit = i * 1.8 + 32;
  rankine = kelvin * 1.8;
  reaumur = i * 0.8;
  DGV.Rows.Add(i, kelvin, fahrenheit, rankine, reaumur);
}

Möglichkeit 2 mit der For-Schleife.

Mögliche Fehlerquellen:
bis < von, Schrittweite == 0, ...


Automatisch scrollen


private void txt_Ausgabe_TextChanged(...)
{
  txt_Ausgabe.SelectionStart = txt_Ausgabe.Text.Length;
  txt_Ausgabe.ScrollToCaret();
}

Wenn die TextBox verändert wird, immer zum Ende des Textes scrollen.


Drucken (Umweg über Bitmap)


private void printDocument1_PrintPage
(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
  Bitmap BM = new Bitmap(DGV.Width, DGV.Height);
  DGV.DrawToBitmap(BM, new Rectangle(5, 5, DGV.Width, DGV.Height));
  e.Graphics.DrawImageUnscaled(BM, 5, 5);
}


private void cmd_Drucken_Click(object sender, EventArgs e)
{
  printPreviewDialog1.Document = printDocument1;

  if(printPreviewDialog1.ShowDialog() == DialogResult.Cancel)
  { printDialog1.Document = printDocument1; }

  if(printDialog1.ShowDialog() == DialogResult.OK)
  { printDocument1.Print(); }
}

Aus der Toolbox müssen folgende Elemente der Form per Doppelklick hinzugefügt werden:

  • printDialog
  • printDocument
    • per Doppelklick dem Quelltext hinzufügen
  • printPreviewDialog

Druckinhalt (hier eine DGV) wird als ein Bitmap gespeichert und danach ausgedruckt.


Arrays: 1D


string[] Array1D = new string[3]
  {"Text1", "Text2", "Text3"};


int[] Array1D = new int[5]
  {0, 1, 2, 3, 4};

Initialisieren von Arrays.


 for (int i = 0; i < 10; i++)
   txtBox.Text += Array1D[i].ToString();


 for (int i = 0; i < Array1D.Length; i++)
   txtBox.Text += Array1D[i].ToString();


 foreach (int i in Array1D)
   txtBox.Text += Array1D[i].ToString();

1D-Array, Ausgabe.


Arrays: 2D


int[,] Array2D = new int[3, 4]
{
{ 0, 0, 0, 0 }, /* 0 , 0123 */
{ 0, 0, 0, 0 }, /* 1 , 0123 */
{ 0, 0, 0, 0 }  /* 2 , 0123 */
};


int[,] Array2D = new int[3, 4];


Array2D[0,0] = 5;
Array2D[2,3] = 5;

Initialisierung eines zweidimensionalen Arrays. Mit und ohne initialen Werten.
Dann: Zuweisung der ersten und letzten Stelle des Arrays mit '5'.


for (int Zeile = 0; Zeile < 5; Zeile++)
{
  DGV.Rows.Add(
    Array2D[Zeile, 0],
    Array2D[Zeile, 1],
    Array2D[Zeile, 2]);
}

Ein 2D-Array wird zeilenweise in eine DGV ausgegeben.
Im Beispiel hat das Array 3 Spalten (012) und 5 Zeilen (01234).


for (int Zeile = 0; Zeile < 4; Zeile++)
{
  for (int Stelle = 0; Stelle < 4; Stelle++)
  {
    txtBox.Text += Array2D[Zeile, Stelle].ToString() + " ";
  }
}

Ein 2D-Array wird mit einer verschachtelten Schleife ausgegeben.
Beispiel: 4 Zeilen (0123), 4 Stellen (0123).


Arrays: 3D


int[,,] Array3D = new int[2, 3, 4]
{

{
{0,0,0,0}, /* 0 , 0 , 0123 */
{0,0,0,0}, /* 0 , 1 , 0123 */
{0,0,0,0}  /* 0 , 2 , 0123 */
},

{
{0,0,0,0}, /* 1 , 0 , 0123 */
{0,0,0,0}, /* 1 , 1 , 0123 */
{0,0,0,0}  /* 1 , 2 , 0123 */
}

};


int[,,] Array3D = new int[2, 3, 4];


Array3D[0,0,0] = 5;
Array3D[1,2,3] = 5;

Initialisierung eines dreidimensionalen Arrays. Mit und ohne initialen Werten.
Dann: Zuweisung der ersten und letzten Stelle des Arrays mit '5'.


for(int x = 0; x < 2; x++)
{
  for (int y = 0; y < 3; y++)
  {
    for (int z = 0; z < 4; z++)
    {
      txt_Arrays.Text += Array3D[x, y, z].ToString();
    }
  }
}

Ein 3D-Array wird mit einer verschachtelten Schleife ausgegeben.
Beispiel:...


Arrays: Verarbeitung


for(int i = 0; i < AArray.Lenght; i++)
{ CArray[i] = BArray[i] * AArray[i]; }

Mit der Variablen [i] jede Stelle der Arrays erreichen.


for (int i = 0; i < DasArray.Length; i++)
{ Summe += DasArray[i]; }

Alle Werte eines Arrays addieren.


 int[] ArrayInt = new int[10];
 Random Zufall = new Random();

 for (int i = 0; i < 10; i++)
   ArrayInt[i] = Zufall.Next(1, 100);

Ein Array mit 10 Zufallszahlen von 1-99 füllen.


Array: Koordinatensystem 2D


int[,] Tabelle = new int[3, 4];
Tabelle[Zeitraum, Betrag]++;



A r r a y ~~~~ 0 ~~~ 1 ~~~ 2 ~~~ 3
r              |     |     |     |
r              V     V     V     V
a    . Tage . E u r o b e t r ä g e .
y    |------|-----|-----|-----|-----|
:    |      | <25 |25-50|51-75|76-99|
:    |------|-----|-----|-----|-----|
0 -> |<10   |  0  |  0  |  0  |  0  |
1 -> |10-19 |  0  |  0  |  0  |  0  |
2 -> |20+   |  0  |  0  |  0  |  0  |
     °------+-----+-----+-----+-----°

Das 2D-Array hat den Aufbau eines Koordinatensystems. 'Zeitraum' und 'Betrag' werden in einer Schleife zeilenweise aus dem Datensatz gelesen und auf die Indexe des Arrays (beginnend mit 0) heruntergebrochen, damit diese paarweise [0,0] Koordinaten im System sein können. Jede erfasste Position wird aufsummiert: Anzahl der Kunden.


Array: Koordinatensystem 3D


int[,,] Tabelle = new int[3, 2, 4];
Tabelle[Bereich, Geschlecht, Alter]++;


ARRAY ~~.~~~~~~ 0 ~~~ 1 ~~~ 2 ~~~ 3
 |      |       |     |     |     |
 V      V       V     V     V     V
 .----.------.-----------------------.
 |Ber |Gesch | A l t e r s g r uppen |
 |eich|lecht | -20 |20-29|30-39| 40+ |
 |----|------|-----|-----|-----|-----|
 0 A  | 0 m  |  0  |  0  |  0  |  0  |
 |    | 1 w  |  0  |  0  |  0  |  0  |
 |----|------|-----|-----|-----|-----|
 1 B  | 0 m  |  0  |  0  |  0  |  0  |
 |    | 1 w  |  0  |  0  |  0  |  0  |
 |----|------|-----|-----|-----|-----|
 2 C  | 0 m  |  0  |  0  |  0  |  0  |
 |    | 1 w  |  0  |  0  |  0  |  0  |
 °----°------°-----°-----°-----°-----°

Das 3D-Array...


Beispiel: 2D-Array


string Datensatz;
int Alpha, Delta;
int[,] Array2D = new int[5,3];


string[] CW = new string[5]
{
  "Col1Row1",
  "Col1Row2",
  "Col1Row3",
  "Col1Row4",
  "Col1Row5"
};

Variablen: Datensatz, usw.
Mit dem Hilfsstring kann zB in der ersten Spalte der DGV ein zugehöriger Text pro Zeile ausgegeben werden.

Alpha = Convert.ToInt32(Datensatz.Substring(5, 2));
Delta = Convert.ToInt32(Datensatz.Substring(10, 4));

/* Zahlen-Beispiel: */

/* x-9: Wert wird 0 */
if (Alpha < 10)
   { Alpha = 0; }
/* 10-49: Wert wird 1 */
if (Alpha >= 10 && Alpha < 50)
   { Alpha = 1; }
/* 50-x: Wert wird 2 */
if (Alpha >= 50)
   { Alpha = 2; }

Array2D[Alpha, Delta]++;

Beispiel:
Der ursprüngliche Wert der Variablen 'Alpha' wird in einen passenderen Wert (Array: 0,1,2, usw.) überführt. Mit 'Delta' muss es ebenso geschehen.

Danach bestimmen diese beiden Werte zusammen einen Punkt im Koordinatensystem (= 2dimensionales Array). Dieser Punkt wird aufsummiert (++) und gibt die Anzahl der Vorgänge wieder.


for (int i = 0; i < 5; i++)
{
  DGV.Rows.Add
  (
  CW[i],
  Array2D[i, 0],
  Array2D[i, 1],
  Array2D[i, 2]
  );
  DGV.Rows.Add();
}

Die for-Schleife gibt pro Durchgang eine komplette Zeile und eine leere Zeile in der DGV aus.


FileStream

using System.IO
FileStream fs = null;

try
{
  fs = new FileStream
  (@"C:\Datei.dat", FileMode.Open, FileAccess.Read);
}
catch
{
  MessageBox.Show("Die Datei kann nicht gelesen werden.");
  Application.Exit();
}

if(fs.Length == 0)
{
  MessageBox.Show("Die Datei ist leer.");
  fs.Close();
  Application.Exit();
}


/* Hier steht der StreamReader. */


sr.Close();
fs.Close();

  • FileMode
    • Append
    • Create
    • CreateNew
    • Open
    • OpenOrCreate
    • Truncate: Datei wird geöffnet und Inhalt gelöscht.
  • FileAccess
    • Read
    • Write
    • ReadWrite
fs.Length == 0
Länge ist 0.

FileStream: Dateipfad als String


FileStream fs = null;
string Pfad = "C:\Data\datei.dat";
fs = new FileStream(@Pfad, FileMode.Open, FileAccess.Read);


StreamReader

using System.IO
StreamReader sr = new StreamReader(fs);

string Datensatz;

while(sr.Peek() != -1)
{
  Datensatz = sr.ReadLine();
}

sr.Close();
sr.Peek() != -1
Das Einlesen der Datei ist noch nicht vorbei.
sr.ReadLine()
Eine Zeile wird eingelesen.

StreamReader: Substring


int Wert;

while(sr.Peek() != -1)
{
  Datensatz = sr.ReadLine();
  Wert = Convert.ToInt32(Datensatz.Substring(4, 2));
}

Substring(4, 2)
Zeichenkette: (Start, Länge)
Substring(0, 1)
Das erste Zeichen.

StreamReader: Split mit einem Array


string[] ArrayA;

while(sr.Peek() != -1)
{
  Datensatz = sr.ReadLine();
  ArrayA = Datensatz.Split(';');
}
DGV.Rows.Add(
  ArrayA[0],
  ArrayA[1],
  ArrayA[2]
  );

Split(';')
Datensatz wird beim Trennzeichen (hier: Semikolon) aufgeteilt.
Das Trennzeichen fällt weg.

StreamReader: DateTime


string[] ArrayA;
DateTime Datum;

while(sr.Peek() != -1)
{
  Datensatz = sr.ReadLine();
  ArrayA = Datensatz.Split(';');
  ArrayA[0] = ArrayA[0].Insert(2, ".");
  ArrayA[0] = ArrayA[0].Insert(5, ".");
  Datum = Convert.ToDateTime(ArrayA[0]);
}
DGV.Rows.Add(
Datum.ToString("dd. MMMM yyyy"),
ArrayA[1],
ArrayA[2]
);

Insert(2, ".")
01012000 = 01.012000
Insert(5, ".")
01.012000 = 01.01.2000
Convert.ToDateTime(Variable)
Eine Zeichenkette, z.B.: 01.01.2000,
wird explizit in ein Datum konvertiert.
("dd. MMMM yyyy")
Spezielle Formatierung des Datums.

StreamReader: Zeichenkette codieren


string Alphanumerisch = "ABCD F123";
string Wert;
int[] Codierung = new int[9];

while (sr.Peek() != -1)
{
  Alphanumerisch = sr.ReadLine();
  /*Alle Stellen durchlaufen*/
  for(int i = 0; i < 9; i++)
  {
    Wert = Alphanumerisch.Substring(i, 1);
    switch (Wert)
    {
    case "A":
    case "B": Codierung[i] = 3;
    break;
    case "C":
    case "DEFG, usw..": Codierung[i] = 5;
    break;
    /*Leerstelle*/
    case " ": Codierung[i] = 0;
    break;
    /*Nichts trifft zu: Es ist eine Zahl*/
    default: Codierung[i] = Convert.ToInt32(Wert);
    break;
    }
  }
}

Verarbeitung eines alphanumerischen Strings:
Buchstaben werden in Zahlen codiert. Zahlen
bleiben Zahlen. Leerstellen werden zu "0".


Datei speichern

using System.IO

string Datensatz;
Datensatz = txt_Eingabe.Text;

if (Datensatz.Length == 0)
{ MessageBox.Show("Datensatz ist leer."); }
else
{
  FileStream fs = null;
  fs = new FileStream(@"C:\BitteLoeschen.dat", FileMode.CreateNew);
  StreamWriter sr = new StreamWriter(fs);
  sr.Write(Datensatz);
  sr.Close();
  fs.Close();
}

Datensatz.Length == 0
ist dasselbe wie
String.IsNullOrEmpty(Datensatz)


Strings: Verarbeitung


string Datensatz;

Datensatz = Datensatz.Insert(2, ".");
Datensatz = Datensatz.Replace(" ", IntVariable.ToString());
Datensatz = Datensatz.Replace("A", "B");
IntegerVa = Convert.ToInt32(Datensatz.Substring(4, 2));
StringVar = Datensatz.Substring(4, 2);
Datensatz = Datensatz.Remove(3, 6);

Insert(2, ".")
Nach der 2ten Stelle einen Punkt einfügen.
Replace("A", "B")
Alle A's mit B's ersetzen.
Replace("A", Zahl.ToString())
Alle A's mit 'Zahl' ersetzen.
Substring(4, 2)
Eine Zeichenfolge von 2 Zeichen ab der Stelle 4 entnehmen.
Remove(3, 6)
Entfernt Zeichenfolge 3 bis 6.

Differenz zwischen zwei Zeiträumen

/* A = Start, B = Ende */
int AJahr, BJahr, AMonat, BMonat, ATag, Btag;

Benötigte Variablen.


Zeitraum =
(BJahr - AJahr) * 360 +
(BMonat - AMonat) * 30 +
(BTag - ATag)

Einfache Berechnung.


if (AJahr == BJahr)
{
  if (AMonat == BMonat)
  { Zeitraum = BTag - ATag; }
  else
  {
    Zeitraum = (30 - ATag) +
    ((BMonat - AMonat - 1) * 30) + BTag;
  }
}
else
{
  if (AMonat <= 11)
  {
    Zeitraum = (30 - ATag) + ((12 - AMonat - 1) * 30) +
    (BJahr - AJahr - 1) + BTag + (BMonat * 30);
  }
  else
  {
    Zeitraum = ((BJahr - AJahr - 1) * 360) +
    (30 - ATag) + BTag + ((BMonat - 1) * 30);
  }
}

Umständliche Berechnung.


DataGridView: DGV


DGV.Rows.Add
(
Variable_Spalte_1, /* a */
Variable_Spalte_2, /* b */
Variable_Spalte_3  /* c */
);

DGV.Rows.Add();

DGV.Rows.Clear();

Mit DGV.Rows.Add(a, b, c); wird eine Zeile ausgegeben.
In jeder Spalte wird die dazugehörige Variable geschrieben.

DGV.Rows.Add(); gibt eine leere Zeile aus.

DGV.Rows.Clear(); löscht die DGV.


DGV.Rows[rowIndex].Cells[columnIndex].Value = value;

Einer bestimmten Zelle einen Wert zuweisen.
How to insert value into datagridview cell?

  • Spalten hinzufügen:
    • Name: Name des Elements
    • Headertext: angezeigter Name
  • Spalten bearbeiten:
    • Darstellung
      • DefaultCellStyle (Zellen):
        Farben, Schrift, Ausrichtung
      • Headertext: angezeigter Name
    • Entwurf
      • Name: Name des Elements
    • Layout
      • AutoSizeMode:
        • AllCells: Spaltenbreite automatisch
        • ColumnHeader: ...
        • Fill: Spaltenbreite bis zum Rand ?
  • Eigenschaften:
    • ColumnHeaderDefaultCellStyle (Spaltenkopf)
      • Farben, Schrift, Ausrichtung
    • DefaultCellStyle (Zellen)
      • Farben, Schrift, Ausrichtung

Datei verschlüsseln


{...}

Ist noch in Arbeit!


De/Komprimieren


using System.IO;
using System.IO.Compression;


private byte[] filebytes = null;
private FileStream fs = null;


private void cmd_Einlesen_Click(...)
{
  try
  {
    fs = new FileStream
    (@"C:\Datei.txt", FileMode.Open, FileAccess.Read);
  }

  catch
  {
    MessageBox.Show("Dateifehler!");
    Application.Exit();
  }

  if (fs.Length == 0)
  {
    MessageBox.Show("Datei ist leer!");
    Application.Exit();
  }

  filebytes = new byte[fs.Length];
  fs.Read(filebytes, 0, filebytes.Length);
  fs.Close();

  MessageBox.Show("Datei eingelesen!");
}


private void cmd_Komprimieren_Click(...)
{
  fs = new FileStream
  (@"C:\Datei.gzip", FileMode.Create);

  GZipStream gzs = new GZipStream
  (fs,CompressionMode.Compress);

  gzs.Write(filebytes, 0, filebytes.Length);
  gzs.Close();
  fs.Close();

  MessageBox.Show("Datei komprimiert!");
}


private void cmd_Dekomprimieren_Click(...)
{
  fs = new FileStream(@"C:\Datei.gzip", FileMode.Open);

  GZipStream gzs = new GZipStream
  (fs, CompressionMode.Decompress);

  StreamReader sr = new StreamReader((Stream)gzs);
  File.WriteAllText(@"C:\Datei.txt", sr.ReadToEnd());

  sr.Close();
  gzs.Close();
  fs.Close();

  MessageBox.Show("Datei dekomprimiert!");
}

...


Gruppenwechsel: Vorlage


                   Anzahl
  KdID  ArtID Einzel |
    |      |      |  |
   K00091;100076;240;2
   K00091;100076;240;3__5 Stück
Kd_K00091;500123;1500;1_1 Stück
   K01234;200234;2000;1
   K01234;200234;2000;1_2 Stück
Kd_K01234;200356;1500;1_1 Stück
   K04711;300567;0350;2
   K04711;300567;0350;4
Kd_K04711;300567;0350;3_9 Stück

Kunden-ID, Artikel-ID, Einzelpreise, Anzahl (Stück).


Gruppenwechsel: Ausgabe


KdID:
K00091    |Bezei-|An- |
Pos|ArtID |chnung|zahl|Einzel|Gesamt
 1 |500123| Soft | 5  | 2,40 | 12,00
 2 |200234| Buch | 1  |15,00 | 15,00
                         Netto:27,00

KdID:
K01234    |Bezei-|An- |
Pos|ArtID |chnung|zahl|Einzel|Gesamt
 1 |200356| Kraft| 2  |20,00 | 40,00
 2 |300567| Sauna| 1  |15,00 | 15,00
                         Netto:55,00

KdID:
K04711    |Bezei-|An- |
Pos|ArtID |chnung|zahl|Einzel|Gesamt
 1 |300567| Drink| 9  | 3,50 | 31,50
                         Netto:31,50

...


Gruppenwechsel: Grundgerüst


string Datensatz, Bezeichnung,
       ArtID_Vgl, ArtID,
        KdID_Vgl,  KdID;
double Einzel = 0,
       Gesamt = 0, Netto = 0;
int Anzahl = 0, Pos = 0;

/* FileStream */
/* StreamReader */

while (sr.Peek() != -1)
{
KdID_Vgl = KdID;

  while (sr.Peek() != -1 &&
  KdID == KdID_Vgl)
  {
  ArtID_Vgl = ArtID;

    while (sr.Peek() != -1 &&
     KdID == KdID_Vgl &&
    ArtID == ArtID_Vgl)
    {
    /* ... */
    }
  }
/* ... */
}

...



Access: Allgemein

using System.Data.OleDb;

Microsoft Access Database Engine (2010) wird benötigt.
https://www.microsoft.com/de-DE/download/details.aspx?id=13255

Access-DB zum C#-Projekt hinzufügen
Projekt, Neue Datenquelle hinzufügen, Datenbank, DataSet, Neue Verbindung, Microsoft Access-Datenbankdatei, Durchsuchen, '.accdb' auswählen, Öffnen, OK, usw.


/* ### OleDB ### */
/* Command, Connection, Data Source */

OleDbCommand cmd = new OleDbCommand();
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString =
"Provider = Microsoft.ACE.OLEDB.12.0;" + @"Data Source = C:\DB.accdb;";

Steht immer am Anfang.


/* ### ExecuteNonQuery ### */
/* Open, Execute, MBox, Close */

cmd.Connection = conn;
conn.Open();
int i = cmd.ExecuteNonQuery();
MessageBox.Show(i.ToString() + " BlaBla");
conn.Close();

Jede Veränderung an der Datenbank (ändern, löschen, einfügen) wird erst mit ExecuteNonQuery tatsächlich ausgeführt und abgeschlossen.


Access: Tabelle auslesen


OleDbDataReader reader;


/* ### OleDB ### */
/* Command, Connection, Data Source */


cmd.CommandText = "SELECT * FROM TBL ORDER BY ID;";
cmd.Connection = conn;


try
{
  conn.Open();
  reader = cmd.ExecuteReader();
  while(reader.Read())
  {
    ListBox.Items.Add(
    reader[0] + ";" +
    reader[1] + ";" +
    reader[2]);
  }
  reader.Close();
  conn.Close();
}


catch (Exception ex)
{
  MessageBox.Show(ex.Message);
  Application.Exit();
}

TBL = Tabelle, ID = Feld mit ID-Nr.
Soviele reader[x] nehmen, wie es Felder in der Tabelle gibt.

 

 


Access: Parameter-Abfrage


OleDbDataReader reader;


/* ### OleDB ### */
/* Command, Connection, Data Source */


cmd.CommandText = "SELECT * FROM TBL WHERE Name Like ?;";
/* Name, wahlweise mit +"%" */
cmd.Parameters.Add
("Name", OleDbType.Char, 255).Value = txt_Suche.Text + "%";
cmd.Connection = conn;


try
{
  conn.Open();
  reader = cmd.ExecuteReader();
  while(reader.Read())
  {
    ListBox.Items.Add(
    reader[0] + ";" +
    reader[1] + ";" +
    reader[2]);
  }
  reader.Close();
  conn.Close();
}


catch (Exception ex)
{
  MessageBox.Show(ex.Message);
  Application.Exit();
}

Sternchen *
Prozent: %
Joker für ein Zeichen
Unterstrich: _
Joker Parameter
Fragez: ?

Access: Datensatz einfügen


/* ### OleDB ### */
/* Command, Connection, Data Source */


cmd.CommandText = "INSERT INTO TBL VALUES (?,?,?)";
/* ?,, = ID */
cmd.Parameters.Add
("ID", OleDbType.Integer).Value = ID;
/* ,?, = Name */
cmd.Parameters.Add
("Name", OleDbType.Char,50).Value = txt_Nam.Text;
/* ,,? = Typ */
cmd.Parameters.Add
("Typ", OleDbType.Char,50).Value = txt_Typ.Text;


/* ### ExecuteNonQuery ### */
/* Open, Execute, MBox, Close */

Beispiel: TBL hat 3 Datenfelder (?,?,?): ID, Name, Typ.
Gewählte ID muss verfügbar sein.

ExecuteNonQuery:
Das tatsächliche Ausführen vom CommandText.

("Name", OleDbType.Char, 50)
(Datenfeld, OleDbType.Datentyp, Maximalgröße)

  • OleDbType:
    • Char
    • Integer
    • Double
    • String gibt es nicht!

Access: Datensatz löschen

/* Zeilen_Nr ist Id */
if(Zeilen_Nr != 0) {

/* ### OleDB ### */
/* Command, Connection, Data Source */


cmd.CommandText =
"DELETE FROM TBL WHERE ID = ?";
cmd.Parameters.Add
("ID", OleDbType.Integer).Value = Zeilen_Nr;


/* ### ExecuteNonQuery ### */
/* Open, Execute, MBox, Close */

}

else
{
 MessageBox.Show("Kein Datensatz ausgewählt");
}

...


Access: Datensatz ändern

/* Zeilen_Nr ist Id */
if(Zeilen_Nr != 0) {

/* ### OleDB ### */
/* Command, Connection, Data Source */


cmd.CommandText =
"UPDATE TBL SET Feld1 = ?, Feld2 = ? WHERE ID LIKE ?";
/* Feld1 wird aus der TextBox */
/* gelesen und hinzugefügt    */
cmd.Parameters.Add
("Feld1", OleDbType.Char, 50).Value = txt_Feld1.Text;
/* Feld2 ... */
cmd.Parameters.Add
("Feld2", OleDbType.Char, 50).Value = txt_Feld2.Text;
/* ID ... */
cmd.Parameters.Add
("ID", OleDbType.Integer).Value = Zeilen_Nr;


/* ### ExecuteNonQuery ### */
/* Open, Execute, MBox, Close */

}

else
{
 MessageBox.Show("Kein Datensatz ausgewählt");
}

Beispiel: TBL hat 3 Datenfelder: Feld1, Feld2, ID.


Access: Formular-Abfrage


/* Pfad */
private string Verbindung =
"Provider = Microsoft.ACE.OLEDB.12.0;" +
@"Data Source = C:\db.accdb";

Da rein schreiben:
public partial class [name] : Form

private void cmd_X_Click(...)
{

/* Pfad */
OleDbConnection conn = new OleDbConnection(Verbindung);
/* FormularAbfrage */
OleDbCommand cmd = new OleDbCommand("FormularAbfrage", conn);
cmd.CommandType = CommandType.TableDirect;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();


try
{
conn.Open();
/* Name des Datenfelds wählen */
da.Fill(ds, "Datenfeld");
conn.Close();
/* In DGV ausgeben */
DGV.DataSource = ds;
DGV.DataMember = "Datenfeld";
}


catch (Exception ex)
{
MessageBox.Show(ex.Message);
Application.Exit();
}

}

...


Access: Statische Abfrage


....

....

...?


Verfügbare ID finden (A)


int ID_A = 1;


while(reader.Read())
{
  ListBox.Items.Add(
  reader[0] + ";" +
  reader[1]);

  if (ID_A == Convert.ToInt32(reader[0]))
  {
    ID_A++;
  }
  
}

Wenn es die ID gleichen Wertes schon gibt, dann zähle 1 zur ID.


Mustervorlage



{...Code...}

Hervorhebung

/* Kommentar */

//  .-***°°***-.      .-****°°~~.~~°°****-.         .-*-.
// (    Info    )o--o(     ~Kommentar~     )o-----o(  ~  )
//  °-~~~++~~~-°      °-~~~~++**°**++~~~~-°         °-~-°

/* Tooltipps */
/* &Hotkeys */
/* Tabulator (außer cmd_Ende) */
/* txt_Ausgabe: ReadOnly */


HeadLine

Subline

Erklärtext
strong
emphasize


Maskierung:
< > ----- &lt; &gt;
& ------- &amp;
" ------- &quot;
⁄ ------ &#47; --- &sol; --- &frasl; --- Slash
\ ----- &#92; --- &bsol; --- Backslash
Masking Characters


DataTerm
DataDefinition
DataTerm
DataDefinition

Einfache Liste:

  • Erstens
  • Zweitens
  • Drittens

Verschachtelte Liste:

  • Liste_11
    • Liste_111
    • Liste_112
  • Liste_12
    • Liste_121
    • Liste_122

Komplexe Liste:

  • 1_Eins
    • 1.1
    • 1.2
  • 2_Zwei
    • 2.1
      • 2.1.1
      • 2.1.2
    • 2.2
      • 2.2.1
    • 2.3
      • 2.3.1
        • 2.3.1.1
        • 2.3.1.2
  • 3_Drei
    • 3.1
      • 3.1.1
    • 3.2
      • 3.2.1

Caption
TabularHeaders TabularHeaders
TabularFooter
TabularData TabularData
TabularData TabularData

Caption
TabularHeaders TabularHeaders
TabularFooter
TabularData TabularData
TabularData TabularData