hallo zusammen
ich habe mir eine TextBox gebaut die Eingaben überprüft, und wenn die Eingaben vom Typ "Char" sind, dann erscheint eine Fehlermeldung.
das problem was ich jetzt habe ist das ich eigentlich nur alle zeichen ausschließen will die nicht als Ordnername fungieren können wie (, ), /... und so weiter
ich hab schon versucht mir ein array zu bauen und dann verglichen ob die zeichen in dem array liegen, hat aber alles nicht so gefunzt.
hat da also jemand eine kluge idee wie ich Ordner-"illegale" zeichen blocke?
mfg
der_Brain
ich habe mir eine TextBox gebaut die Eingaben überprüft, und wenn die Eingaben vom Typ "Char" sind, dann erscheint eine Fehlermeldung.
Code:
public class LetterAndDigitTextBox: TextBox
{
// Aufzählung und Eigenschaft, die den Eingabetyp festlegen
public enum InputTypeEnum
{
Integer,
Char
}
private InputTypeEnum inputType = InputTypeEnum.Integer;
// definiert, welche Eingaben die TextBox zulässt
public InputTypeEnum InputType
{
get {return this.inputType;}
set {this.inputType = value;}
}
// Ereignis für Eingabefehlermeldungen
// wird aufgerufen, wenn eine Eingabe nicht dem Schema entspricht
public delegate void InvalidInputHandler(string invalidText);
public event InvalidInputHandler InvalidInput;
// Methode zum Überprüfen, ob die Eingabe in Ordnung ist
private bool inputValid(string input)
{
switch (this.inputType)
{
case InputTypeEnum.Integer:
try
{
Convert.ToInt64(input);
return true;
}
catch
{
if (InvalidInput != null) InvalidInput(input);
return false;
}
default: // InputTypeEnum.Char
try
{
// Convert.ToChar(input);
return true;
}
catch
{
if(InvalidInput != null) InvalidInput(input);
return false;
}
}
}
// Überschreiben der Text-Eigenschaft
public override string Text
{
get {return base.Text;}
set
{
if (this.inputValid(value))
base.Text = value;
}
}
// Überschreiben der OnKeyPress-Methode zum Überprüfen von Tastatureingaben
protected override void OnKeyPress(KeyPressEventArgs kpea)
{
if (Char.IsControl(kpea.KeyChar) == false)
{
// Den potenziell neuen Text zusammensetzen
string newText = base.Text.Substring(0, base.SelectionStart)
+ kpea.KeyChar.ToString() + base.Text.Substring(
base.SelectionStart + base.SelectionLength);
if (this.inputValid(newText) == false)
// Die Eingabe führt zu einem ungültigen Ergebnis,
// also verwerfen
kpea.Handled = true;
}
base.OnKeyPress(kpea);
}
protected override void WndProc(ref Message m)
{
int msg = m.Msg;
base.WndProc(ref m);
}
// Überschreiben der ProcessCmdKey-Methode zum Abfangen der
// Tastenkombinationen für das Einfügen von Daten
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys)Shortcut.CtrlV ||
keyData == (Keys)Shortcut.ShiftIns)
{
// Daten aus der Zwischenablage auslesen
IDataObject iData = Clipboard.GetDataObject();
// Die neuen Daten mit dem Text außerhalb der aktuellen Auswahl
// verknüpfen um den neuen Text zu erhalten
string newText = base.Text.Substring(0, base.SelectionStart) +
(string)iData.GetData(DataFormats.Text) +
base.Text.Substring(base.SelectionStart +
base.SelectionLength);
// Den potenziell neuen Text überprüfen
if (this.inputValid(newText) == false)
// Beenden und true zurückgeben, um die Verarbeitung
// abzuschließen
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
das problem was ich jetzt habe ist das ich eigentlich nur alle zeichen ausschließen will die nicht als Ordnername fungieren können wie (, ), /... und so weiter
ich hab schon versucht mir ein array zu bauen und dann verglichen ob die zeichen in dem array liegen, hat aber alles nicht so gefunzt.
hat da also jemand eine kluge idee wie ich Ordner-"illegale" zeichen blocke?
mfg
der_Brain