diff --git a/AA-Forms/CustomMessageBox.Designer.cs b/AA-Forms/CustomMessageBox.Designer.cs
index f7b7c51..5b5cc98 100644
--- a/AA-Forms/CustomMessageBox.Designer.cs
+++ b/AA-Forms/CustomMessageBox.Designer.cs
@@ -28,12 +28,114 @@
///
private void InitializeComponent()
{
- this.components = new System.ComponentModel.Container();
+ this.textBoxText = new System.Windows.Forms.TextBox();
+ this.labelFrage = new System.Windows.Forms.Label();
+ this.labelEingabe = new System.Windows.Forms.Label();
+ this.buttonAbbrechen = new System.Windows.Forms.Button();
+ this.buttonOK = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // textBoxText
+ //
+ this.textBoxText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.textBoxText.Font = new System.Drawing.Font("Microsoft Sans Serif", 16.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.textBoxText.Location = new System.Drawing.Point(29, 105);
+ this.textBoxText.Margin = new System.Windows.Forms.Padding(20);
+ this.textBoxText.Name = "textBoxText";
+ this.textBoxText.Size = new System.Drawing.Size(409, 38);
+ this.textBoxText.TabIndex = 1;
+ this.textBoxText.Click += new System.EventHandler(this.TextBoxText_Click);
+ this.textBoxText.Enter += new System.EventHandler(this.TextBoxText_Enter);
+ this.textBoxText.Validating += new System.ComponentModel.CancelEventHandler(this.TextBoxText_Validating);
+ //
+ // labelFrage
+ //
+ this.labelFrage.AutoSize = true;
+ this.labelFrage.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.labelFrage.Location = new System.Drawing.Point(29, 19);
+ this.labelFrage.Margin = new System.Windows.Forms.Padding(20, 10, 20, 20);
+ this.labelFrage.Name = "labelFrage";
+ this.labelFrage.Size = new System.Drawing.Size(134, 20);
+ this.labelFrage.TabIndex = 4;
+ this.labelFrage.Text = "Deine Frage hier";
+ //
+ // labelEingabe
+ //
+ this.labelEingabe.AutoSize = true;
+ this.labelEingabe.Font = new System.Drawing.Font("Microsoft Sans Serif", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.labelEingabe.Location = new System.Drawing.Point(29, 79);
+ this.labelEingabe.Margin = new System.Windows.Forms.Padding(20, 20, 20, 0);
+ this.labelEingabe.Name = "labelEingabe";
+ this.labelEingabe.Size = new System.Drawing.Size(65, 20);
+ this.labelEingabe.TabIndex = 5;
+ this.labelEingabe.Text = "Anzahl:";
+ //
+ // buttonAbbrechen
+ //
+ this.buttonAbbrechen.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.buttonAbbrechen.BackColor = System.Drawing.Color.Red;
+ this.buttonAbbrechen.CausesValidation = false;
+ this.buttonAbbrechen.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.buttonAbbrechen.FlatAppearance.BorderColor = System.Drawing.Color.Red;
+ this.buttonAbbrechen.FlatAppearance.BorderSize = 0;
+ this.buttonAbbrechen.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.buttonAbbrechen.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.buttonAbbrechen.ForeColor = System.Drawing.Color.White;
+ this.buttonAbbrechen.Location = new System.Drawing.Point(238, 167);
+ this.buttonAbbrechen.Margin = new System.Windows.Forms.Padding(4, 4, 20, 4);
+ this.buttonAbbrechen.Name = "buttonAbbrechen";
+ this.buttonAbbrechen.Size = new System.Drawing.Size(200, 50);
+ this.buttonAbbrechen.TabIndex = 3;
+ this.buttonAbbrechen.Text = "Abbrechen";
+ this.buttonAbbrechen.UseVisualStyleBackColor = false;
+ this.buttonAbbrechen.Click += new System.EventHandler(this.ButtonAbbrechen_Click);
+ //
+ // buttonOK
+ //
+ this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.buttonOK.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0)))));
+ this.buttonOK.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0)))));
+ this.buttonOK.FlatAppearance.BorderSize = 0;
+ this.buttonOK.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.buttonOK.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.buttonOK.ForeColor = System.Drawing.Color.White;
+ this.buttonOK.Location = new System.Drawing.Point(30, 167);
+ this.buttonOK.Margin = new System.Windows.Forms.Padding(20, 4, 4, 4);
+ this.buttonOK.Name = "buttonOK";
+ this.buttonOK.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
+ this.buttonOK.Size = new System.Drawing.Size(200, 50);
+ this.buttonOK.TabIndex = 2;
+ this.buttonOK.Text = "OK";
+ this.buttonOK.UseVisualStyleBackColor = false;
+ this.buttonOK.Click += new System.EventHandler(this.ButtonOK_Click);
+ //
+ // CustomMessageBox
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(800, 450);
+ this.AutoSize = true;
+ this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.ClientSize = new System.Drawing.Size(467, 230);
+ this.Controls.Add(this.buttonAbbrechen);
+ this.Controls.Add(this.buttonOK);
+ this.Controls.Add(this.labelEingabe);
+ this.Controls.Add(this.labelFrage);
+ this.Controls.Add(this.textBoxText);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.Name = "CustomMessageBox";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "CustomMessageBox";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
}
#endregion
+ private System.Windows.Forms.TextBox textBoxText;
+ private System.Windows.Forms.Label labelFrage;
+ private System.Windows.Forms.Label labelEingabe;
+ private System.Windows.Forms.Button buttonAbbrechen;
+ private System.Windows.Forms.Button buttonOK;
}
}
\ No newline at end of file
diff --git a/AA-Forms/CustomMessageBox.cs b/AA-Forms/CustomMessageBox.cs
index 688abb3..282863f 100644
--- a/AA-Forms/CustomMessageBox.cs
+++ b/AA-Forms/CustomMessageBox.cs
@@ -7,14 +7,98 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
+using VirtualKeyboard;
namespace Deckungsbeitrag.AA_Forms
{
public partial class CustomMessageBox : Form
{
+ private QwertzKeyboard keyboard;
+ private readonly bool isNumeric;
+ private readonly string frage;
+ private readonly string title;
+ private readonly string eingabe;
+ public string text;
public CustomMessageBox()
{
InitializeComponent();
}
+ public CustomMessageBox(string Frage, string Title, string Eingabe, string numeric) : this()
+ {
+ if (numeric == "isNumeric") this.isNumeric = true;
+ this.labelFrage.Text = Frage;
+ this.labelEingabe.Text = Eingabe + ":";
+ this.Text = Title;
+ if (isNumeric) this.textBoxText.Text = "1";
+ else this.textBoxText.Text = string.Empty;
+ }
+
+ private void TextBoxText_Click(object sender, EventArgs e)
+ {
+ this.textBoxText.Clear();
+ if (TouchHelper.IsTouchDeviceReady())
+ {
+ if (keyboard == null || keyboard.IsDisposed)
+ {
+ keyboard = new QwertzKeyboard(textBoxText, "isNumeric");
+ keyboard.Show();
+ }
+ else
+ {
+ keyboard.Close();
+ keyboard = new QwertzKeyboard(textBoxText, "isNumeric");
+ keyboard.Show();
+ }
+ }
+ }
+ private void TextBoxText_Enter(object sender, EventArgs e)
+ {
+ this.textBoxText.SelectAll();
+ //if (TouchHelper.IsTouchDeviceReady())
+ //{
+ // if (keyboard == null || keyboard.IsDisposed)
+ // {
+ // keyboard = new QwertzKeyboard(textBoxText, "isNumeric");
+ // keyboard.Show();
+ // }
+ // else
+ // {
+ // keyboard.Close();
+ // keyboard = new QwertzKeyboard(textBoxText, "isNumeric");
+ // keyboard.Show();
+ // }
+ //}
+ }
+
+ private void ButtonAbbrechen_Click(object sender, EventArgs e)
+ {
+ if (keyboard != null) keyboard.Close();
+ this.DialogResult = DialogResult.Cancel;
+ this.Close();
+ }
+
+ private void ButtonOK_Click(object sender, EventArgs e)
+ {
+ if (keyboard != null) keyboard.Close();
+ this.DialogResult = DialogResult.OK;
+ this.Close();
+ }
+
+ private void TextBoxText_Validating(object sender, CancelEventArgs e)
+ {
+ if (buttonAbbrechen.Focused)
+ return;
+
+ if (isNumeric)
+ {
+ if (int.TryParse(textBoxText.Text, out int value)) this.text = textBoxText.Text;
+ else
+ {
+ MessageBox.Show("Bitte nur ganze Zahlen eingeben.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ e.Cancel = true;
+ this.textBoxText.SelectAll();
+ }
+ }
+ }
}
}
diff --git a/AA-Forms/CustomMessageBox.resx b/AA-Forms/CustomMessageBox.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/AA-Forms/CustomMessageBox.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/AA-Forms/FormExpedit.cs b/AA-Forms/FormExpedit.cs
index 5a1aeae..7ded418 100644
--- a/AA-Forms/FormExpedit.cs
+++ b/AA-Forms/FormExpedit.cs
@@ -1103,7 +1103,7 @@ namespace Deckungsbeitrag
if (liste == null || liste == ListenArt.Auftragliste) listAuftragToday = await View_Auftrag_Expedit.GetAuftragExpeditAsync(statusFilter: AuftragStatus.Vorbereitet, minStatusFilter: AuftragStatus.Gewaschen);
if (liste == null || liste == ListenArt.Geschäftliste) listAuftragGeschaeft = await View_Auftrag_Expedit.GetAuftragExpeditAsync(statusFilter: AuftragStatus.Fertig, minStatusFilter: AuftragStatus.Abgeholt, typFilter: AuftragTyp.Geschäft);
if (liste == null || liste == ListenArt.Vorbereitetliste) listVorbereitet = await View_Auftrag_Expedit.GetAuftragExpeditAsync(statusFilter: AuftragStatus.Vorbereitet, minTypFilter: AuftragTyp.Geschäft);
- if (liste == null || liste == ListenArt.Sonderliste) listSonderAuftrag = await View_Auftrag_Expedit.GetAuftragExpeditAsync(statusFilter: AuftragStatus.Fertig, minStatusFilter: AuftragStatus.Herrichten, typFilter: AuftragTyp.Laufzettel, minTypFilter: AuftragTyp.Inventur);
+ if (liste == null || liste == ListenArt.Sonderliste) listSonderAuftrag = await View_Auftrag_Expedit.GetAuftragExpeditAsync(statusFilter: AuftragStatus.Fertig, minStatusFilter: AuftragStatus.Herrichten, minTypFilter: AuftragTyp.Inventur);
if (liste == null || liste == ListenArt.Rampenliste) listRampe = await View_Auftrag_Expedit.GetAuftragExpeditAsync(statusFilter: AuftragStatus.Abgeholt, typFilter: AuftragTyp.Standart);
}
else
diff --git a/AA-Forms/FormFehlmengeCount.cs b/AA-Forms/FormFehlmengeCount.cs
index 60e5116..4be0aeb 100644
--- a/AA-Forms/FormFehlmengeCount.cs
+++ b/AA-Forms/FormFehlmengeCount.cs
@@ -537,7 +537,7 @@ namespace Deckungsbeitrag
};
}
- if ((userid != null && userid.Contains("reklamation")) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Expedit)) { kndart.Reklamation++; artnw.Reklamation++; }
+ if ((userid != null && userid.Contains("reklamation")) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Expedit) || (this.benutzer != null && this.benutzer.Rolle == BenutzerRolle.Frottee)) { kndart.Reklamation++; artnw.Reklamation++; }
else { kndart.Fehlmenge++; artnw.Nachwaesche++; }
// Wenn speichern nicht möglich, wird darauf hingewiesen.
diff --git a/AA-Forms/FormLogin.cs b/AA-Forms/FormLogin.cs
index 5de992b..0dac421 100644
--- a/AA-Forms/FormLogin.cs
+++ b/AA-Forms/FormLogin.cs
@@ -1,4 +1,5 @@
using DatenDB;
+using Deckungsbeitrag.AA_Forms;
using Microsoft.VisualBasic;
using System;
using System.Collections.Generic;
@@ -13,13 +14,14 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
+using VirtualKeyboard;
namespace Deckungsbeitrag
{
public partial class FormLogin : Form
{
string progFiles = @"C:\Program Files\Common Files\Microsoft Shared\ink";
- string keyboardPath;
+ QwertzKeyboard keyboard;
private OnboardingSchritt onBoardingArt;
public Benutzer Person { get; set; }
@@ -83,6 +85,7 @@ namespace Deckungsbeitrag
}
}
+
private void buttonAbbrechen_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
@@ -109,12 +112,12 @@ namespace Deckungsbeitrag
this.textBoxPwdWh.Visible = false;
this.buttonRegistrieren.Visible = false;
this.textBoxPasswort.Text = this.textBoxPwdWh.Text = string.Empty;
- if (MessageBox.Show($"Benutzer {this.textBoxBenutzer.Text} wurde erfolgreich angelegt.\n\nMöchtest du einen eigenen Benutzername angeben?\n\n[JA] -> Neuen Benutzername anlegen\n[NEIN] -> Alten Benutzername behalten", "Hinweis", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
- {
- string eingabe = Interaction.InputBox("Welchen Benutzername möchtest du verwenden?\n\nBenutzername:", "Neuer Benutzername", "");
- if (!string.IsNullOrWhiteSpace(eingabe)) person.BenutzerName = eingabe;
- if (person.Save() != 1) MessageBox.Show("Benutzername konnte nicht gespeichert werden. Melde dich bei deinem Vorgesetzten.", "SPEICHERFEHLER", MessageBoxButtons.OK, MessageBoxIcon.Information);
- }
+ //if (MessageBox.Show($"Benutzer {this.textBoxBenutzer.Text} wurde erfolgreich angelegt.\n\nMöchtest du einen eigenen Benutzername angeben?\n\n[JA] -> Neuen Benutzername anlegen\n[NEIN] -> Alten Benutzername behalten", "Hinweis", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
+ //{
+ // string eingabe = Interaction.InputBox("Welchen Benutzername möchtest du verwenden?\n\nBenutzername:", "Neuer Benutzername", "");
+ // if (!string.IsNullOrWhiteSpace(eingabe)) person.BenutzerName = eingabe;
+ // if (person.Save() != 1) MessageBox.Show("Benutzername konnte nicht gespeichert werden. Melde dich bei deinem Vorgesetzten.", "SPEICHERFEHLER", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ //}
this.textBoxBenutzer.Focus();
this.buttonAnmelden.Enabled = true;
}
@@ -129,8 +132,6 @@ namespace Deckungsbeitrag
this.textBoxBenutzer.Text = this.textBoxBenutzer.Text.Substring(0, this.textBoxBenutzer.Text.IndexOf(";"));
}
}
-
-
private void FormLogin_Load(object sender, EventArgs e)
{
this.groupBox1.Height = 110;
@@ -138,8 +139,6 @@ namespace Deckungsbeitrag
this.textBoxPwdWh.Visible = false;
this.buttonRegistrieren.Visible = false;
- this.textBoxBenutzer.Focus();
-
WindowState = FormWindowState.Normal;
StartPosition = FormStartPosition.CenterScreen;
}
@@ -153,22 +152,42 @@ namespace Deckungsbeitrag
{
this.textBoxBenutzer.SelectAll();
- //// Pfad zur Touch-Tastatur
- //keyboardPath = System.IO.Path.Combine(progFiles, "TabTip.exe");
+ if (TouchHelper.IsTouchDeviceReady())
+ {
+ if (keyboard == null || keyboard.IsDisposed)
+ {
+ keyboard = new QwertzKeyboard(textBoxBenutzer, "isAlpha");
+ if (keyboard.ShowDialog() == DialogResult.OK) this.ActiveControl.Focus();
+ }
+ else
+ {
+ keyboard.Close();
+ keyboard = new QwertzKeyboard(textBoxBenutzer, "isAlpha");
+ if (keyboard.ShowDialog() == DialogResult.OK) this.ActiveControl.Focus();
+ }
+ }
- //// Bildschirmtastatur starten
- //Process.Start(keyboardPath);
}
private void textBoxPasswort_Enter(object sender, EventArgs e)
{
- //// Pfad zur Touch-Tastatur
- //keyboardPath = System.IO.Path.Combine(progFiles, "TabTip.exe");
+ if (TouchHelper.IsTouchDeviceReady())
+ {
+ if (keyboard == null || keyboard.IsDisposed)
+ {
+ keyboard = new QwertzKeyboard(textBoxPasswort, "isNumeric");
+ keyboard.Show();
+ }
+ else
+ {
+ keyboard.Close();
+ keyboard = new QwertzKeyboard(textBoxPasswort, "isNumeric");
+ keyboard.Show();
+ }
+ }
- //// Bildschirmtastatur starten
- //Process.Start(keyboardPath);
}
- private void textBox_Leave(object sender, EventArgs e)
+ private void textBox_Leave(object sender, EventArgs e)
{
this.buttonAnmelden.Focus();
}
diff --git a/AA-Forms/FormMain.cs b/AA-Forms/FormMain.cs
index 468d263..0e830fa 100644
--- a/AA-Forms/FormMain.cs
+++ b/AA-Forms/FormMain.cs
@@ -61,7 +61,6 @@ namespace Deckungsbeitrag
{
InitializeComponent();
this.panelMain.AllowDrop = true;
-
this.toolStripMenu.Size = new Size(toolStripButton1.Size.Width + 20, this.Height);
_fixedSize = screen.WorkingArea.Size;
}
@@ -84,7 +83,7 @@ namespace Deckungsbeitrag
{
this.SuspendLayout();
this.Cursor = Cursors.WaitCursor;
-
+ this.ActiveControl = this.panelMain;
formloading = true;
_settings.Load();
@@ -312,20 +311,8 @@ namespace Deckungsbeitrag
}
private void TSBScannTest_Click(object sender, EventArgs e)
{
- if (open)
- {
- this.groupBoxScannTest.Visible = false;
- this.textBoxScannTest.Visible = this.labelScannTest.Visible = this.buttonScannTest.Visible = this.pictureBoxScannTest.Visible = false;
- open = false;
- }
- else
- {
- this.groupBoxScannTest.Visible = true;
- this.textBoxScannTest.Visible = this.labelScannTest.Visible = this.buttonScannTest.Visible = this.pictureBoxScannTest.Visible = true;
- this.pictureBoxScannTest.Image = Image.FromFile("C:\\Users\\KilianWirl\\OneDrive - gehgassi GmbH\\Wäscherei Wirl\\Programme\\Deckungsbeitrag\\static-qr-code-ca1aa53ab47cd115bc1ad29afb0e5f22.png");
- this.textBoxScannTest.Focus();
- open = true;
- }
+ CustomMessageBox messageBox = new CustomMessageBox("Nenne mir eine Zahl und tippe sie unten ein", "TEST", "Anzahl", "isNumeric");
+ messageBox.Show();
}
private void TSBArtikelVW_Click(object sender, EventArgs e)
{
@@ -1057,22 +1044,22 @@ namespace Deckungsbeitrag
#endregion
private void GetNeueInventur()
{
- onBoardingArt = OnboardingSchritt.NeueInventur;
- ZeigeOnboarding();
-
- Kunde kunde = null;
- FormListe liste = new FormListe(null, (int)Listentyp.Reklamationliste, "Miete");
- if (liste.ShowDialog() == DialogResult.OK)
+ if (this.kunde == null)
{
- kunde = liste.kunde;
- uCInventur = new UCInventur(kunde, this.benutzer);
- uCInventur.UCInventur_Update += () => { this.GetInventuren(); };
- uCInventur.UCInventur_Delete += Do_UCInventur_Delete;
- this.panelMain.Controls.Add(uCInventur);
- uCInventur.Location = new Point(100, 100);
- uCInventur.BringToFront();
- RegisterDragEvents(uCInventur);
+ FormListe liste = new FormListe(null, (int)Listentyp.Reklamationliste, "Miete");
+ if (liste.ShowDialog() == DialogResult.OK)
+ {
+ this.kunde = liste.kunde;
+ }
}
+ uCInventur = new UCInventur(this.kunde, this.benutzer);
+ uCInventur.UCInventur_Update += () => { this.GetInventuren(); };
+ uCInventur.UCInventur_Delete += Do_UCInventur_Delete;
+ this.panelMain.Controls.Add(uCInventur);
+ uCInventur.Location = new Point(100, 100);
+ uCInventur.BringToFront();
+ RegisterDragEvents(uCInventur);
+
}
private async void GetInventuren()
{
@@ -1236,7 +1223,7 @@ namespace Deckungsbeitrag
btn.Enabled = btn.Name.Contains("Hilfe");
break;
case BenutzerRolle.Master:
- btn.Enabled = true;
+ btn.Enabled = btn.Visible = true;
break;
case BenutzerRolle.Expedit:
btn.Enabled = btn.Name.Contains("Hilfe");
diff --git a/AA-Forms/FormNeuerAuftrag.cs b/AA-Forms/FormNeuerAuftrag.cs
index 5436a13..0f28e49 100644
--- a/AA-Forms/FormNeuerAuftrag.cs
+++ b/AA-Forms/FormNeuerAuftrag.cs
@@ -112,7 +112,11 @@ namespace Deckungsbeitrag
if (!GetKunde(kndService)) { CloseForm(DialogResult.Cancel); return; }
// Containeranzahl laden
- if (int.TryParse(Interaction.InputBox($"Wieviel Container hast du beim Kunde {kundeName} abgeholt?", "CONTAINERANZAHL", "1"), out int i)) this.textBoxCont.Text = i.ToString();
+ CustomMessageBox messageBox = new CustomMessageBox($"Wieviel Container hast du beim Kunde {kundeName} abgeholt?", "CONTAINERANZAHL", "Containeranzahl", "isNumeric");
+ if (messageBox.ShowDialog() == DialogResult.OK)
+ {
+ this.textBoxCont.Text = messageBox.text.ToString();
+ }
else { CloseForm(DialogResult.Cancel); return; }
// NextLiefertag laden
@@ -351,7 +355,7 @@ namespace Deckungsbeitrag
{
ComboBox cb = sender as ComboBox;
if (cb.SelectedIndex == -1) return;
- if (cb.SelectedItem is Tour selected && selected.TourID == tour.TourID) return;
+ if (tour != null && (cb.SelectedItem is Tour selected && selected.TourID == tour.TourID)) return;
if (this.benutzer.Rolle == BenutzerRolle.Verwaltung || this.benutzer.Rolle == BenutzerRolle.Admin || this.benutzer.Rolle == BenutzerRolle.Expedit) return;
if (meldung.GetFrage(this, "Möchtest du den Auftrag wirklich einer anderen Tour zuteilen?", false) == DialogResult.No) { ((ComboBox)sender).SelectedIndex = -1; e.Cancel = true; }
else
diff --git a/AA-Forms/FormShowUserControl.Designer.cs b/AA-Forms/FormShowUserControl.Designer.cs
index 2e65984..6725dea 100644
--- a/AA-Forms/FormShowUserControl.Designer.cs
+++ b/AA-Forms/FormShowUserControl.Designer.cs
@@ -49,7 +49,6 @@
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormShowUserControl_FormClosing);
this.Load += new System.EventHandler(this.FormShowUserControl_Load);
this.Shown += new System.EventHandler(this.FormShowUserControl_Shown);
- this.ChangeUICues += new System.Windows.Forms.UICuesEventHandler(this.FormShowUserControl_ChangeUICues);
this.ResumeLayout(false);
}
diff --git a/AA-Forms/FormShowUserControl.cs b/AA-Forms/FormShowUserControl.cs
index 75214c3..1847a7b 100644
--- a/AA-Forms/FormShowUserControl.cs
+++ b/AA-Forms/FormShowUserControl.cs
@@ -21,6 +21,7 @@ namespace Deckungsbeitrag.AA_Forms
private string gb;
private bool toclose = false;
public (DateTime datum, string text, string[] touren) lieferDaten;
+ private Screen screen = Screen.PrimaryScreen;
public bool _toclose
{
@@ -101,6 +102,7 @@ namespace Deckungsbeitrag.AA_Forms
{
this.ClientSize = new Size(uc.Width, uc.Height);
this.CenterToScreen();
+ this.Location = new Point((screen.WorkingArea.Width - this.Width) / 2, (screen.WorkingArea.Height - this.Height) / 2);
}
private void FormShowUserControl_FormClosing(object sender, FormClosingEventArgs e)
@@ -114,9 +116,5 @@ namespace Deckungsbeitrag.AA_Forms
}
- private void FormShowUserControl_ChangeUICues(object sender, UICuesEventArgs e)
- {
- if (e.ShowKeyboard == false) this.CenterToScreen();
- }
}
}
diff --git a/AA-Klassen/Funktionen.cs b/AA-Klassen/Funktionen.cs
index 586863d..a329a0a 100644
--- a/AA-Klassen/Funktionen.cs
+++ b/AA-Klassen/Funktionen.cs
@@ -1094,7 +1094,7 @@ namespace Deckungsbeitrag
Graphics g = Graphics.FromImage(bitmap);
Font font1 = new Font("Arial", 15, FontStyle.Bold);
Font font2 = new Font("Arial", 30, FontStyle.Bold);
- Font font3 = new Font("Arial", 30, FontStyle.Regular);
+ Font font3 = new Font("Arial", 20, FontStyle.Regular);
Font font4 = new Font("Arial", 150, FontStyle.Bold);
float height_font1 = g.MeasureString($"{kunde.Suchtext}", font1).Height;
float height_font2 = g.MeasureString($"{kunde.PLZ} {kunde.Ort})", font2).Height;
@@ -1113,8 +1113,10 @@ namespace Deckungsbeitrag
nextposition += (int)height_font2;
g.DrawString($"{auftrag.Liefertag.Date.ToString("dd.MM.yyyy")}", font2, Brushes.Black, einzug, nextposition);
nextposition += (int)height_font2;
- g.DrawString("Artikel Rekl/NW/Stand/Inv", font1, Brushes.Black, einzug, nextposition + 20);
+ g.DrawString("Artikel", font2, Brushes.Black, einzug, nextposition + 20);
nextposition += 20 + (int)height_font1;
+ g.DrawString("Rekl/NW/Stand/Inv", font3, Brushes.Black, bitmap.Width - g.MeasureString("Rekl/NW/Stand/Inv", font3).Width, nextposition + 10);
+ nextposition += (int)height_font2;
foreach (var kvp in dictionary)
{
@@ -1123,10 +1125,10 @@ namespace Deckungsbeitrag
string artikelKey = _artikel.Bezeichnung; // z.B. "ART1"
int[] artbestand = kvp.Value; // z.B. [3, 0, 5]
string shortName = _artikel.Short;
- float bestandWidth = g.MeasureString($"{artbestand[0].ToString()}/{artbestand[1].ToString()}/({artbestand[2].ToString()})/{artbestand[3].ToString()}", font1).Width;
- g.DrawString($"{shortName}", font1, Brushes.Black, einzug, nextposition);
- if (artbestand[2] < 0) g.DrawString($"{artbestand[0].ToString()}/{artbestand[1].ToString()}/({artbestand[2].ToString()})/{artbestand[3].ToString()}", font1, Brushes.Black, bitmap.Width - bestandWidth - 10, nextposition);
- else g.DrawString($"{artbestand[0].ToString()}/{artbestand[1].ToString()}/{artbestand[2].ToString()}/{artbestand[3].ToString()}", font1, Brushes.Black, bitmap.Width - bestandWidth - 10, nextposition);
+ float bestandWidth = g.MeasureString($"{artbestand[0].ToString()}/{artbestand[1].ToString()}/({artbestand[2].ToString()})/{artbestand[3].ToString()}", font3).Width;
+ g.DrawString($"{shortName}", font3, Brushes.Black, einzug, nextposition);
+ if (artbestand[2] < 0) g.DrawString($"{artbestand[0].ToString()}/{artbestand[1].ToString()}/({artbestand[2].ToString()})/{artbestand[3].ToString()}", font3, Brushes.Black, bitmap.Width - bestandWidth - 10, nextposition);
+ else g.DrawString($"{artbestand[0].ToString()}/{artbestand[1].ToString()}/{artbestand[2].ToString()}/{artbestand[3].ToString()}", font3, Brushes.Black, bitmap.Width - bestandWidth - 10, nextposition);
nextposition += (int)height_font1;
}
diff --git a/App.config b/App.config
index a3ca776..6484ec4 100644
--- a/App.config
+++ b/App.config
@@ -6,7 +6,7 @@
-
+
diff --git a/Program.cs b/Program.cs
index ad05ced..cfcf8ef 100644
--- a/Program.cs
+++ b/Program.cs
@@ -36,7 +36,79 @@ namespace Deckungsbeitrag
Fourth = 4,
Fifth = 5
}
+ // Globale Touch-Info (static für alle Forms)
+ public static class TouchHelper
+ {
+ [DllImport("user32.dll")]
+ private static extern int GetSystemMetrics(int nIndex);
+ private const int SM_DIGITIZER = 94;
+ private const int SM_MAXIMUMTOUCHES = 95;
+ private const int SM_CONVERTIBLESLATEMODE = 125;
+
+ public static readonly bool HasTouchHardware = (GetSystemMetrics(SM_DIGITIZER) & 0x80) != 0;
+ public static readonly int TouchPoints = GetSystemMetrics(SM_MAXIMUMTOUCHES);
+ public static readonly bool IsTabletMode = GetSystemMetrics(SM_CONVERTIBLESLATEMODE) == 1;
+
+ ///
+ /// **Hauptmethode**: Touch FUNKTIONIERT (Hardware + aktiviert)
+ ///
+ public static bool IsTouchActive()
+ {
+ // 1. Registry: TouchGate = 0 → deaktiviert
+ if (IsRegistryDisabled()) return false;
+
+ // 2. TouchPoints > 0 UND System sagt "Touch ready"
+ if (TouchPoints <= 0) return false;
+
+ // 3. Windows Touch-Session aktiv? (SM_DIGITIZER bits)
+ int digitizer = GetSystemMetrics(SM_DIGITIZER);
+ bool touchReady = (digitizer & 0x00000001) != 0; // Integrated touch?
+ bool penReady = (digitizer & 0x00000002) != 0;
+
+ return touchReady || penReady;
+ }
+
+ ///
+ /// Vollständig einsatzbereit
+ ///
+ public static bool IsTouchDeviceReady() => HasTouchHardware && IsTouchActive();
+
+ ///
+ /// Registry-Status
+ ///
+ private static bool IsRegistryDisabled()
+ {
+ RegistryKey key = null;
+ try
+ {
+ key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Wisp\TouchGate");
+ if (key != null)
+ {
+ object value = key.GetValue("TouchGate");
+ if (value != null && Convert.ToInt32(value) == 0)
+ return true;
+ }
+ return false;
+ }
+ catch
+ {
+ return false;
+ }
+ finally
+ {
+ if (key != null) key.Close();
+ }
+ }
+ ///
+ /// Debug-Status
+ ///
+ public static string GetStatus()
+ {
+ int digitizer = GetSystemMetrics(SM_DIGITIZER);
+ return $"Hardware: {HasTouchHardware}, Active: {IsTouchActive()}, Points: {TouchPoints}, RegistryDisabled: {IsRegistryDisabled()}, Digitizer: 0x{digitizer:X}";
+ }
+ }
static class Program
{
public static Color Wirlblau = Settings.Default.Wirlblau;
@@ -70,8 +142,8 @@ namespace Deckungsbeitrag
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Screen[] screens = Screen.AllScreens;
-
Cursor.Current = Cursors.WaitCursor;
+
// Check, Install und Update wenn Update vorhanden.
if (CheckAndInstallUpdate())
{
@@ -190,6 +262,11 @@ namespace Deckungsbeitrag
}
#region private-Funktionen
+ private static void TouchAppConfig()
+ {
+ // Globale Touch-Optimierungen
+ // z.B. größere Buttons, Auto-Tastatur, etc.
+ }
private static void Open_ReadMe()
{
string readmePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Verwaltung_ReadMe.txt");
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
index c5e4dae..fd5d31e 100644
--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
//
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
-[assembly: AssemblyVersion("1.0.9.9")]
-[assembly: AssemblyFileVersion("1.0.9.9")]
+[assembly: AssemblyVersion("1.1.0.7")]
+[assembly: AssemblyFileVersion("1.1.0.7")]
diff --git a/SetupVerwaltung/SetupVerwaltung.vdproj b/SetupVerwaltung/SetupVerwaltung.vdproj
index 9516384..598e8e6 100644
--- a/SetupVerwaltung/SetupVerwaltung.vdproj
+++ b/SetupVerwaltung/SetupVerwaltung.vdproj
@@ -255,6 +255,12 @@
}
"Entry"
{
+ "MsmKey" = "8:_848FCB2438E4DBC274C4D124CEB9562C"
+ "OwnerKey" = "8:_AD2C2F4AADC342899908C708EB4F4A72"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
"MsmKey" = "8:_8A953E0634B8757038749C9F77062056"
"OwnerKey" = "8:_C2D67A4770D262B66069252CF1E903CF"
"MsmSig" = "8:_UNDEFINED"
@@ -460,6 +466,12 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_848FCB2438E4DBC274C4D124CEB9562C"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_16723AF5DFDEF26FC6A07BEB7D389737"
"MsmSig" = "8:_UNDEFINED"
}
@@ -1219,6 +1231,37 @@
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_848FCB2438E4DBC274C4D124CEB9562C"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:VirtualKeyboard, Version=1.0.1.0, Culture=neutral, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_848FCB2438E4DBC274C4D124CEB9562C"
+ {
+ "Name" = "8:VirtualKeyboard.exe"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:VirtualKeyboard.exe"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_C848DFB5E4D140A7A7F5E1F129613626"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_8A953E0634B8757038749C9F77062056"
{
"AssemblyRegister" = "3:1"
@@ -1647,15 +1690,15 @@
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:SetupVerwaltung"
- "ProductCode" = "8:{EAA37164-29A8-4196-8D42-9F687DA3442F}"
- "PackageCode" = "8:{5F45C29D-025D-47D5-A4F4-8DDE65C8B7D2}"
+ "ProductCode" = "8:{6D13C83E-FAD0-4B29-BBEC-E1ABCEAAFB03}"
+ "PackageCode" = "8:{32CA7B7D-CFC8-41EA-A986-11D890FE499A}"
"UpgradeCode" = "8:{2DC7CE56-8D1C-42EB-B326-2E887EBB7F5A}"
"AspNetVersion" = "8:"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:FALSE"
- "ProductVersion" = "8:1.0.99"
+ "ProductVersion" = "8:1.1.07"
"Manufacturer" = "8:Kilian Wirl GmbH"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:"
diff --git a/UserControls/UCInventur.cs b/UserControls/UCInventur.cs
index cee0696..f170cb6 100644
--- a/UserControls/UCInventur.cs
+++ b/UserControls/UCInventur.cs
@@ -261,7 +261,6 @@ namespace Deckungsbeitrag.UserControls
///
private void GetInventurCSV(object sender, int? auftragID)
{
- Button btn = (Button)sender;
Kunde _knd = this.kunde;
Benutzer _user = this.user;
List _artikelliste = this.artikelListe;
@@ -271,7 +270,7 @@ namespace Deckungsbeitrag.UserControls
// Inventur Status Warten wenn noch Zahlen fehlen und Herrichten wenn alle vorhanden.
- if (btn.Text.ToString() == "Speichern") status = "Warten";
+ if (sender.ToString() == "Speichern") status = "Warten";
else
{
status = "Herrichten";
diff --git a/Verwaltung.csproj b/Verwaltung.csproj
index 663f3a7..d2b762d 100644
--- a/Verwaltung.csproj
+++ b/Verwaltung.csproj
@@ -434,6 +434,9 @@
UCTourenplan.cs
+
+ CustomMessageBox.cs
+
FehlmengeChart.cs
@@ -617,6 +620,12 @@
+
+
+ {d5d68e54-f738-45e5-82fd-da987f2e0589}
+ VirtualKeyboard
+
+
diff --git a/Verwaltung.sln b/Verwaltung.sln
index 69b76b1..7b97951 100644
--- a/Verwaltung.sln
+++ b/Verwaltung.sln
@@ -1,12 +1,14 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.3.32922.545
+# Visual Studio Version 18
+VisualStudioVersion = 18.4.11626.88 stable
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Verwaltung", "Verwaltung.csproj", "{1CDFBC6A-240A-4D59-9F9E-35041D9ACCC6}"
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "SetupVerwaltung", "SetupVerwaltung\SetupVerwaltung.vdproj", "{B95F7799-8515-9D54-0B5E-9F12DF88B85D}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VirtualKeyboard", "VirtualKeyboard\VirtualKeyboard.csproj", "{D5D68E54-F738-45E5-82FD-DA987F2E0589}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -19,6 +21,10 @@ Global
{1CDFBC6A-240A-4D59-9F9E-35041D9ACCC6}.Release|Any CPU.Build.0 = Release|Any CPU
{B95F7799-8515-9D54-0B5E-9F12DF88B85D}.Debug|Any CPU.ActiveCfg = Debug
{B95F7799-8515-9D54-0B5E-9F12DF88B85D}.Release|Any CPU.ActiveCfg = Release
+ {D5D68E54-F738-45E5-82FD-DA987F2E0589}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D5D68E54-F738-45E5-82FD-DA987F2E0589}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D5D68E54-F738-45E5-82FD-DA987F2E0589}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D5D68E54-F738-45E5-82FD-DA987F2E0589}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Verwaltung_ReadMe.txt b/Verwaltung_ReadMe.txt
index c820d92..26a28b7 100644
--- a/Verwaltung_ReadMe.txt
+++ b/Verwaltung_ReadMe.txt
@@ -1,5 +1,5 @@
=====================================
-NEUIGKEITEN - Version 1.0.9.9
+NEUIGKEITEN - Version 1.1.0.7
=====================================
Build-Info:
@@ -7,9 +7,9 @@ Build-Info:
- Erledigte TODOs: 6
- Offene TODOs: 24
- Install-Reminders: 1
-- Changes: 28
+- Changes: 29
-=== ✨ CHANGES (28) ===
+=== ✨ CHANGES (29) ===
## ArtikelVW.cs ##
- ✨ Reklamation als Spalte hinzugefügt und Anzeigen implementiert. Sowohl bei KundeArtikel als auch bei NW_Artikel.
@@ -43,6 +43,10 @@ Build-Info:
- ✨ DropDownWidth wird an das größte Item angepasst.
- ✨ Es kann ab jetzt Morgen als Liefertag gewählt werden.
+## Settings.Designer.cs ##
+
+- ✨ to this file may cause incorrect behavior and will be lost if
+
## Tourenplanung.cs ##
- ✨ Es kann nach der Kontrolle der Lieferrhythmus geändert werden. Dazu muss auch die Anzahl der Liefertage gewählt werden.
@@ -66,5 +70,5 @@ Build-Info:
=== ⚙️ INSTALL-REMINDER (1) ===
- ⚙️ DB anpassen. (Priority in Auftrag etc.) [Auftrag.cs]
-Installation: 28.04.2026 09:16
+Installation: 29.04.2026 17:06
=====================================
diff --git a/VirtualKeyboard/App.config b/VirtualKeyboard/App.config
new file mode 100644
index 0000000..193aecc
--- /dev/null
+++ b/VirtualKeyboard/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/VirtualKeyboard/Program.cs b/VirtualKeyboard/Program.cs
new file mode 100644
index 0000000..3d3291e
--- /dev/null
+++ b/VirtualKeyboard/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace VirtualKeyboard
+{
+ internal static class Program
+ {
+ ///
+ /// Der Haupteinstiegspunkt für die Anwendung.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ //Application.Run(new QwertzKeyboard());
+ }
+ }
+}
diff --git a/VirtualKeyboard/Properties/AssemblyInfo.cs b/VirtualKeyboard/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..d5c5b07
--- /dev/null
+++ b/VirtualKeyboard/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Allgemeine Informationen über eine Assembly werden über die folgenden
+// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+// die einer Assembly zugeordnet sind.
+[assembly: AssemblyTitle("VirtualKeyboard")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("VirtualKeyboard")]
+[assembly: AssemblyCopyright("Copyright © 2026")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
+// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
+// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
+[assembly: ComVisible(false)]
+
+// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
+[assembly: Guid("d5d68e54-f738-45e5-82fd-da987f2e0589")]
+
+// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+//
+// Hauptversion
+// Nebenversion
+// Buildnummer
+// Revision
+//
+[assembly: AssemblyVersion("1.0.1.2")]
+[assembly: AssemblyFileVersion("1.0.1.2")]
diff --git a/VirtualKeyboard/Properties/Resources.Designer.cs b/VirtualKeyboard/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..165d519
--- /dev/null
+++ b/VirtualKeyboard/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// Dieser Code wurde von einem Tool generiert.
+// Laufzeitversion: 4.0.30319.42000
+//
+// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn
+// der Code neu generiert wird.
+//
+//------------------------------------------------------------------------------
+
+namespace VirtualKeyboard.Properties
+{
+
+
+ ///
+ /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
+ ///
+ // Diese Klasse wurde von der StronglyTypedResourceBuilder-Klasse
+ // über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+ // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
+ // mit der Option /str erneut aus, oder erstellen Sie Ihr VS-Projekt neu.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("VirtualKeyboard.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
+ /// Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/VirtualKeyboard/Properties/Resources.resx b/VirtualKeyboard/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/VirtualKeyboard/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/VirtualKeyboard/Properties/Settings.Designer.cs b/VirtualKeyboard/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..24c2854
--- /dev/null
+++ b/VirtualKeyboard/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace VirtualKeyboard.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/VirtualKeyboard/Properties/Settings.settings b/VirtualKeyboard/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/VirtualKeyboard/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/VirtualKeyboard/QwertzKeyboard.Designer.cs b/VirtualKeyboard/QwertzKeyboard.Designer.cs
new file mode 100644
index 0000000..a141040
--- /dev/null
+++ b/VirtualKeyboard/QwertzKeyboard.Designer.cs
@@ -0,0 +1,40 @@
+namespace VirtualKeyboard
+{
+ partial class QwertzKeyboard
+ {
+ ///
+ /// Erforderliche Designervariable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Verwendete Ressourcen bereinigen.
+ ///
+ /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Vom Windows Form-Designer generierter Code
+
+ ///
+ /// Erforderliche Methode für die Designerunterstützung.
+ /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Text = "Form1";
+ }
+
+ #endregion
+ }
+}
+
diff --git a/VirtualKeyboard/QwertzKeyboard.cs b/VirtualKeyboard/QwertzKeyboard.cs
new file mode 100644
index 0000000..90932a9
--- /dev/null
+++ b/VirtualKeyboard/QwertzKeyboard.cs
@@ -0,0 +1,310 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Diagnostics;
+
+namespace VirtualKeyboard
+{
+ public partial class QwertzKeyboard : Form
+ {
+ private TextBox targetTextBox;
+ private Button okBtn;
+ private bool isNumeric = false;
+ private bool isCalc = false;
+ private bool isShift = false;
+ private Screen screen = Screen.PrimaryScreen;
+ // Erweiterte keys auf mehr Buttons (z.B. 14 pro Reihe)
+ private Button[][] keys = new Button[5][] {
+ new Button[14], new Button[14], new Button[14], new Button[14], new Button[8]};
+ // **Echtes QWERTZ-Layout** (5 Reihen + Funktion/Steuerung)
+ private string[] qwertzRows = {
+ " 1234567890ß⌫↵", // Ziffernreihe
+ "↔qwertzuiopü+", // Hauptbuchstaben 1 (versetzt)
+ " asdfghjklöä#", // Hauptbuchstaben 2 (versetzt)
+ "⇧ 0)
+ targetTextBox.Text = targetTextBox.Text.Substring(0, targetTextBox.Text.Length - 1);
+ break;
+ default: targetTextBox.Text += btn.Text;
+ break;
+ }
+ if (isShift && char.IsLetter(ch)) ch = char.ToUpper(ch);
+
+ targetTextBox.Focus();
+ targetTextBox.SelectionStart = targetTextBox.Text.Length;
+ }
+
+ private void ToggleMode_Click()
+ {
+ isNumeric = !isNumeric;
+ UpdateLayout();
+ }
+
+ private void Shift_Click(object sender, EventArgs e)
+ {
+ Button shiftBtn = (Button)sender;
+ isShift = !isShift;
+ shiftBtn.BackColor = isShift ? Color.Yellow : Color.FromArgb(240, 240, 240);
+ UpdateLayout();
+ }
+
+ private void UpdateLayout()
+ {
+
+ if (!isNumeric)
+ {
+ // Zeige ALLE QWERTZ-Buttons
+ for (int row = 0; row < qwertzRows.Length; row++)
+ {
+ string rowText = qwertzRows[row];
+ for (int col = 0; col < keys[row].Length && col < rowText.Length; col++)
+ {
+ char ch = rowText[col];
+ if (keys[row][col].Text.Length > 1) continue;
+ keys[row][col].Text = isShift && char.IsLetter(ch) ? char.ToUpper(ch).ToString() : ch.ToString();
+ keys[row][col].Tag = ch;
+ keys[row][col].Visible = true; // QWERTZ sichtbar
+ }
+ }
+ }
+ else
+ {
+ // **VERSTECKE ALLE QWERTZ-Buttons** und zeige nur NumPad
+ HideAllQwertzButtons();
+ SetupRealNumPad();
+ }
+ this.Refresh();
+ }
+ private void HideAllQwertzButtons()
+ {
+ // Blende ALLE Keys aus (QWERTZ komplett weg)
+ foreach (var row in keys)
+ {
+ foreach (var btn in row.Where(b => b != null))
+ {
+ btn.Visible = false;
+ }
+ }
+ }
+ private void SetupRealNumPad()
+ {
+
+
+ int y = 10, xBase = 10, btnWidth = 70, btnHeight = 55, spacing = 8;
+ if (isCalc) this.Size = new Size((btnWidth + spacing) * 4 + xBase, (btnHeight + spacing) * 5 + xBase);
+ if (isNumeric) this.Size = new Size((btnWidth + spacing) * 3 + xBase, (btnHeight + spacing) * 4 + xBase);
+ // NumPad-Grids füllen (erste 4 Reihen)
+ for (int row = 0; row < numpadLayout.Length; row++)
+ {
+ string rowText = numpadLayout[row];
+
+ btnHeight = 55;
+ xBase = 10;
+ for (int col = 0; col < rowText.Length; col++)
+ {
+ char ch = rowText[col];
+ if (ch == ' ') { xBase += btnWidth + spacing; continue; } // Leerspace für breiten 0
+ if (ch == '↵')
+ {
+ Button okBtn = keys[row][col];
+ // OK-Button rechts unten (NumPad-Enter-Stil)
+ okBtn.Text = "OK";
+ okBtn.Size = (isCalc) ? new Size(btnWidth, btnHeight * 2 + spacing) : new Size(btnWidth, btnHeight);
+ okBtn.Location = new Point(xBase, y);
+ okBtn.BackColor = Color.FromArgb(0, 192, 0);
+ okBtn.ForeColor = Color.White;
+ okBtn.Font = new Font("Arial", 14, FontStyle.Bold);
+ okBtn.FlatStyle = FlatStyle.Flat;
+ okBtn.FlatAppearance.BorderSize = 1;
+ okBtn.FlatAppearance.BorderColor = Color.Green;
+ okBtn.Visible = true;
+ okBtn.Click += OK_Click;
+ continue;
+ }
+ if (ch == '+') { btnHeight = btnHeight * 2 + spacing; }
+ Button btn = keys[row][col];
+ btn.Text = ch.ToString();
+ btn.Tag = ch;
+ btn.Size = (row == 4 && col == 0) ? new Size(btnWidth * 2 + spacing, btnHeight) : new Size(btnWidth, btnHeight); // Breiter 0
+ btn.Location = new Point(xBase, y);
+ btn.Font = new Font("Arial", 18, FontStyle.Bold);
+ btn.BackColor = Color.FromArgb(240, 240, 240); // NumPad-Look
+ btn.FlatStyle = FlatStyle.Flat;
+ btn.FlatAppearance.BorderSize = 1;
+ btn.Visible = true;
+ btn.Enabled = true;
+
+ xBase += btn.Width + spacing;
+ }
+ y += (btnHeight > 55) ? (btnHeight / 2) + (spacing / 2) : btnHeight + spacing;
+ }
+
+
+ // Verstecke ungenutzte Keys (Reihen 4+)
+ for (int row = 5; row < keys.Length; row++)
+ for (int col = 0; col < keys[row].Length; col++)
+ keys[row][col].Visible = false;
+ }
+
+ protected override void OnShown(EventArgs e)
+ {
+ base.OnShown(e);
+ this.Location = new Point((screen.WorkingArea.Width - this.Width) / 2, screen.WorkingArea.Height - this.Height);
+ }
+ }
+}
diff --git a/VirtualKeyboard/VirtualKeyboard.csproj b/VirtualKeyboard/VirtualKeyboard.csproj
new file mode 100644
index 0000000..518f823
--- /dev/null
+++ b/VirtualKeyboard/VirtualKeyboard.csproj
@@ -0,0 +1,83 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {D5D68E54-F738-45E5-82FD-DA987F2E0589}
+ WinExe
+ VirtualKeyboard
+ VirtualKeyboard
+ v4.8
+ 512
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ QwertzKeyboard.cs
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file