using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Eugen.ESystem.Windows.Forms
{
public partial class ExtendedInfoBox : Form
{
public ExtendedInfoBox(string windowTitle, Icons icon, string title, string headerRow1, string headerRow2, string headerRow3, string text, bool export)
{
InitializeComponent();
checkBoxCaseSensitive.Checked = false;
SetContent(windowTitle, icon, title, headerRow1, headerRow2, headerRow3, text, export); //Fensterinhalt setzen
}
///
/// Available Icons
///
public enum Icons
{
Construction,
Email,
Error,
Information,
Instruction,
Question,
Telephon,
Tips,
Warning
}
string findText = "";
string replaceText = "";
List index = new List();
int tempIndex = -1;
private void buttonClose1_Click(object sender, EventArgs e)
{
this.Close();
}
private void buttonClose2_Click(object sender, EventArgs e)
{
this.Close();
}
private void buttonExport_Click(object sender, EventArgs e)
{
//Speichert den Inhalt der TextBox oder den selektierten Bereich daraus
saveFileDialog.Filter = Language.dialog001;
saveFileDialog.ShowDialog();
}
private void saveFileDialog_FileOk(object sender, CancelEventArgs e)
{
string fileName = saveFileDialog.FileName;
string text = ExportText();
try
{
File.WriteAllText(fileName, text); //Schreibt den Text in eine Datei
}
catch (Exception)
{
MessageBox.Show(Language.message001,
Language.messageHead001,
MessageBoxButtons.OK,
MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1);
}
}
private void textBoxFind_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{
//Wenn 'Return' gedrückt wird die Anzahl der Vorkommen ermitteln
if (checkBoxCaseSensitive.Checked)
{
index = FindPositionsOfText(findText, textBox.Text);
}
else
{
index = FindPositionsOfText(findText.ToLower(), textBox.Text.ToLower());
}
textBox.Focus(); //Den Focus auf die Textbox setzen
textBox.Select(index[0], findText.Length); //Das erste Vorkommen selektieren
}
}
private void textBoxFind_TextChanged(object sender, EventArgs e)
{
findText = textBoxFind.Text; //Dieser Text soll gesucht werden
//Nur ausführen wenn 'findText' nicht "" ist, weil das Programm sonst in einer Endlosschleife hängt
if (findText != "")
{
if (checkBoxCaseSensitive.Checked)
{
index = FindPositionsOfText(findText, textBox.Text);
}
else
{
index = FindPositionsOfText(findText.ToLower(), textBox.Text.ToLower());
}
}
tempIndex = 0; //Wird gesetzt weil 'Return' gedrückt wurde
try
{
//Fenster zur selektierten Position scrollen
textBox.SelectionStart = index[0];
textBox.ScrollToCaret();
}
catch
{
textBoxFind.Text = findText.Remove(findText.Length - 1);
textBoxFind.Refresh();
}
}
private void buttonPrevious_Click(object sender, EventArgs e)
{
if (tempIndex == -1)
{
//Wenn bei der nicht 'Return' sondern gleich 'Nächster' gedrückt wurde
tempIndex = index.Count - 1;
}
else
{
if (tempIndex > 0)
{
tempIndex--;
//Fenster zur selektierten Position scrollen
textBox.SelectionStart = index[tempIndex];
textBox.ScrollToCaret();
}
else
{
tempIndex = index.Count - 1;
}
}
textBox.Focus();
textBox.DeselectAll();
if (tempIndex > 0)
{
textBox.Select(index[tempIndex], findText.Length);
}
}
private void buttonNext_Click(object sender, EventArgs e)
{
if (tempIndex == -1)
{
//Wenn bei der Eingabe nicht 'Return' sondern gleich 'Nächster' gedrückt wurde
tempIndex = 0;
}
else
{
if (tempIndex < index.Count - 1)
{
tempIndex++;
//Fenster zur selektierten Position scrollen
textBox.SelectionStart = index[tempIndex];
textBox.ScrollToCaret();
}
else
{
tempIndex = 0;
}
}
textBox.Focus();
textBox.DeselectAll();
if (tempIndex > 0)
{
textBox.Select(index[tempIndex], findText.Length);
}
}
private void checkBoxCaseSensitive_CheckedChanged(object sender, EventArgs e)
{
//Die Anzahl der Vorkommen ermitteln
if (checkBoxCaseSensitive.Checked)
{
index = FindPositionsOfText(findText, textBox.Text);
}
else
{
index = FindPositionsOfText(findText.ToLower(), textBox.Text.ToLower());
}
tempIndex = 0; //Zurücksetzen, weil in diesem Fall nicht 'Return' gedrückt wurde
}
private void textBoxReplace_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{
//Wenn 'Return' gedrückt wird die Anzahl der Vorkommen ermitteln
if (checkBoxCaseSensitive.Checked)
{
index = FindPositionsOfText(findText, textBox.Text);
}
else
{
index = FindPositionsOfText(findText.ToLower(), textBox.Text.ToLower());
}
textBox.Focus(); //Den Focus auf die Textbox setzen
textBox.Select(index[0], findText.Length); //Das erste Vorkommen selektieren
}
}
private void textBoxReplace_TextChanged(object sender, EventArgs e)
{
findText = textBoxFind.Text; //Dieser Text soll gesucht werden
replaceText = textBoxReplace.Text; //Durch diesen soll ersetzt werden
if (checkBoxCaseSensitive.Checked)
{
index = FindPositionsOfText(findText, textBox.Text);
}
else
{
index = FindPositionsOfText(findText.ToLower(), textBox.Text.ToLower());
}
tempIndex = 0; //Wird gesetzt weil 'Return' gedrückt wurde
}
private void buttonReplace_Click(object sender, EventArgs e)
{
if (index.Count > 0)
{
//Nur abarbeiten wenn ein Suchtext gefunden wurde
textBox.Focus();
textBox.DeselectAll();
textBox.Select(index[tempIndex], findText.Length);
textBox.SelectedText = replaceText;
if (checkBoxCaseSensitive.Checked)
{
index = FindPositionsOfText(findText, textBox.Text);
}
else
{
index = FindPositionsOfText(findText.ToLower(), textBox.Text.ToLower());
}
tempIndex = 0;
textBox.Focus();
textBox.DeselectAll();
if (index.Count > 0)
{
//Selektieren nur möglich wenn es noch einen Suchtext gibt
textBox.Select(index[tempIndex], findText.Length);
}
}
}
private void buttonReplaceAll_Click(object sender, EventArgs e)
{
while (index.Count > 0)
{
//Nur abarbeiten wenn ein Suchtext gefunden wurde
textBox.Focus();
textBox.DeselectAll();
textBox.Select(index[tempIndex], findText.Length);
textBox.SelectedText = replaceText;
if (checkBoxCaseSensitive.Checked)
{
index = FindPositionsOfText(findText, textBox.Text);
}
else
{
index = FindPositionsOfText(findText.ToLower(), textBox.Text.ToLower());
}
tempIndex = 0;
textBox.Focus();
textBox.DeselectAll();
if (index.Count > 0)
{
//Selektieren nur möglich wenn es noch einen Suchtext gibt
textBox.Select(index[tempIndex], findText.Length);
}
}
}
private void SetContent(string windowTitle, Icons icon, string title, string headerRow1, string headerRow2, string headerRow3, string text, bool export)
{
//Export Button freischalten oder nicht
if (export)
{
buttonExport.Visible = true;
buttonClose1.Visible = true;
buttonClose2.Visible = false;
}
else
{
buttonExport.Visible = false;
buttonClose1.Visible = false;
buttonClose2.Visible = true;
}
//Icon setzen
switch (icon)
{
case Icons.Construction:
this.pictureBox.Image = global::Eugen.ESystem.Windows.Forms.Pictures.Construction;
break;
case Icons.Email:
this.pictureBox.Image = global::Eugen.ESystem.Windows.Forms.Pictures.Email;
break;
case Icons.Error:
this.pictureBox.Image = global::Eugen.ESystem.Windows.Forms.Pictures.Error;
break;
case Icons.Information:
this.pictureBox.Image = global::Eugen.ESystem.Windows.Forms.Pictures.Information;
break;
case Icons.Instruction:
this.pictureBox.Image = global::Eugen.ESystem.Windows.Forms.Pictures.Instruction;
break;
case Icons.Question:
this.pictureBox.Image = global::Eugen.ESystem.Windows.Forms.Pictures.Question;
break;
case Icons.Telephon:
this.pictureBox.Image = global::Eugen.ESystem.Windows.Forms.Pictures.Telephone;
break;
case Icons.Tips:
this.pictureBox.Image = global::Eugen.ESystem.Windows.Forms.Pictures.Tips;
break;
case Icons.Warning:
this.pictureBox.Image = global::Eugen.ESystem.Windows.Forms.Pictures.Warning;
break;
default:
this.pictureBox.Image = global::Eugen.ESystem.Windows.Forms.Pictures.Information;
break;
}
this.Text = windowTitle; //Fenster Titel
labelTitle.Text = title; //Titel schreiben
labelHeaderRow1.Text = headerRow1; //Header Zeile 1 schreiben
labelHeaderRow2.Text = headerRow2; //Header Zeile 2 schreiben
labelHeaderRow3.Text = headerRow3; //Header Zeile 3 schreiben
textBox.Text = text; //Text schreiben
}
private string ExportText()
{
if (textBox.SelectionLength > 0)
{
return textBox.SelectedText; //Gibt den selektierten Text zurück
}
else
{
return FixLineLenght.Format(textBox.Text, 80); //Gibt den ganzen Text formatiert zurück
}
}
///
/// Sets a user specific window size.
///
/// A value greater than 400.
/// A value greater than 300.
public void SetSize(int width, int height)
{
this.ClientSize = new System.Drawing.Size(width - 8, height - 31);
}
private List FindPositionsOfText(string textToFind, string textToSearch)
{
//Wenn der Suchstring noch leer ist, dann die Methode verlassen, weil sonst endlos gesucht wird
if (String.IsNullOrEmpty(textToFind))
{
return null;
}
List result = new List();
int lastIndex = 0;
while (textToSearch.IndexOf(textToFind, lastIndex) > -1)
{
result.Add(textToSearch.IndexOf(textToFind, lastIndex));
lastIndex = result[result.Count - 1] + textToFind.Length;
}
return result;
}
}
}