Information

  • Sonstiges
  • 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...



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));

/* X-9: Wert wird 0 */
if (Alpha < 10)
   { Alpha = 0; }
/* 10-49: Wert wird 1 */
if (Alpha >= 10 && Variable < 50)
   { Alpha = 1; }
/* 50-XX: 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.


1.0 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.

1.1 FileStream: Dateipfad als String

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


2.0 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.

2.1 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.

2.2 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.

2.3 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.

2.4 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