Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst TextBox mit eingabe Maske

Mitglied: Darkprodukt

Darkprodukt (Level 1) - Jetzt verbinden

24.02.2014, aktualisiert 23:47 Uhr, 1760 Aufrufe, 3 Kommentare

Guten Abend,

ich versuche gerade meiner Textbox eine "Maske" zu verpassen. Ich weis es gibt auch MaskedTextBox aber diese ist leider ungeeignet.
Ich möchte das nur kleinbuchstaben ( hab ich schon mit "CharacterCasing = Lower" gemacht ), Zahlen, Komma und "Leerzeichen" akzeptiert werden.

Ich Arbeite mit Windows Forms (VS Express C++ 2010)

Hab versucht von diesem sehr gut beschriebenen Beitrag die TextBox in C++/CLI zu übertragen.
http://www.mycsharp.de/wbb2/thread.php?threadid=17535

Zwischendurch hatte ich auch andere ideen wie z.b. TextBox->Undo();... den erfolg kann man hier bewundern ;)
https://www.administrator.de/contentid/230860

Der Fehler:
...\forms_tests2\Eigenschaften.h(17 im code): error C2664: 'System::Windows::Forms::TextBoxBase::SelectionStart::set': Konvertierung des Parameters 1 von 'System::Int32 ^' in 'int' nicht möglich
Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
...\Eigenschaften.h(18 im code): error C2664: 'System::Windows::Forms::TextBoxBase::SelectionLength::set': Konvertierung des Parameters 1 von 'System::Int32 ^' in 'int' nicht möglich
Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
Es gibt keinen Kontext, in dem diese Konvertierung möglich ist

Handle:
01.
private: System::Void TextBox_VideoDataExtensions_TextChanged(System::Object^  sender, System::EventArgs^  e)  
02.
03.
    String^ VDEx_allowedChars = L"abcdefghijklmnopqrstuvwxyz0123456789, "; 
04.
 
05.
    if( VDEx_validating ) 
06.
        return; 
07.
 
08.
    try 
09.
10.
        VDEx_validating = true; 
11.
 
12.
        for(int i = 0; i < TextBox_VideoDataExtensions->Text->Length; i++) 
13.
14.
            if( !VDEx_allowedChars->Contains(TextBox_VideoDataExtensions->Text->ToCharArray()[i].ToString())) 
15.
16.
                TextBox_VideoDataExtensions->Text = VDEx_lastValidText; 
17.
                TextBox_VideoDataExtensions->SelectionStart = VDEx_lastValidSelectionStart; 
18.
                TextBox_VideoDataExtensions->SelectionLength = VDEx_lastValidSelectionLength; 
19.
                return; 
20.
21.
22.
        VDEx_lastValidText = TextBox_VideoDataExtensions->Text; 
23.
        VDEx_lastValidSelectionStart = TextBox_VideoDataExtensions->SelectionStart; 
24.
        VDEx_lastValidSelectionLength = TextBox_VideoDataExtensions->SelectionLength; 
25.
26.
    finally 
27.
28.
        VDEx_validating = false; 
29.
30.
}
Definiert...
01.
private: String^ VDEx_lastValidText; 
02.
pivate: Int32^ VDEx_lastValidSelectionStart; 
03.
private: Int32^ VDEx_lastValidSelectionLength; 
04.
private: bool^ VDEx_validating;
Im Form Load Handle
01.
VDEx_lastValidText = TextBox_VideoDataExtensions->Text; 
02.
VDEx_lastValidSelectionStart = nullptr; 
03.
VDEx_lastValidSelectionLength = nullptr; 
04.
VDEx_validating = false;
Hat einer vieleicht noch Idee oder eine andere portable Lösung?

Vielen denk für alle Antworten!

Mit freundlichen Grüßen,

Darkprodukt

[Edit1]: Achja was vieleichtnoch wichtig ist, ist das dies ein untergeordnetes Fenster ist.
Und die TextBox_VideoDataExtensions meist schon beim aufruf von einem String gefüllt wird.

Jetzt bin ich mir nicht ganz sicher, ob dan zuerst das Form_Load event kommt oder das TextBox_VDEx_TextChange event...
Form_Load müsste aber das erste sein...

[Edit2]: Achja vieleicht noch etwas zum Endergebnis...
Ich möchte dem User eine schnittstelle geben in der dieser festlegen kann welche datein mein programm als Videodatein identifizieren soll.
Die Textbos soll dieses format haben als Eingabe: "mkv, mp4, avi" etc.
mit dieser funktion:
01.
private: List<String^>^ StringToList(String^ imput) 
02.
03.
    List<String^>^ Extensions = gcnew List<String^>; 
04.
 
05.
    imput = L"." + imput->Replace(L", ", L", ."); 
06.
 
07.
    while( String::IsNullOrWhiteSpace(imput) == false ) 
08.
09.
        if( imput->IndexOf(L",") <= 0 ) 
10.
11.
            Extensions->Add(imput->Trim()); 
12.
            imput = imput->Remove(0, imput->Trim()->Length); 
13.
14.
        else 
15.
16.
            Extensions->Add(imput->Remove(imput->IndexOf(L","))->Trim()); 
17.
            imput = imput->Remove(0, imput->Remove(imput->IndexOf(L","))->Length + 2); 
18.
19.
20.
 
21.
    return Extensions; 
22.
}
Wird das ganze dann in eine Liste von Dateiendungen verwandelt.
Mitglied: colinardo
25.02.2014, aktualisiert um 11:55 Uhr
Hallo Darkprodukt,
also die Eingabe von ungültigen Zeichen lässt sich so in der Textbox abfangen :
Beispiel: (im Beispiel ist txt1 eine Textbox)
01.
private: bool notValidChar; 
02.
	 
03.
	private: System::Void txt1_KeyDown(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) { 
04.
				 notValidChar = false; 
05.
	                         if ((e->KeyValue > 64 && e->KeyValue < 91) || (e->KeyValue > 47 && e->KeyValue < 58) || e->KeyCode == Keys::Oemcomma || e->KeyCode == Keys::Space ){ 
06.
						 notValidChar = false; 
07.
				 }else{ 
08.
					 notValidChar = true; 
09.
10.
				 if (Control::ModifierKeys == Keys::Shift){ 
11.
					 notValidChar = true; 
12.
13.
14.
	private: System::Void txt1_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) { 
15.
				if (notValidChar == true){ 
16.
					e->Handled = true; 
17.
18.
			 }
Eine Prüfung auf das richtige Eingabe-Format für deine Extensions würde ich mit Regex machen:
Beispiel (im Beispiel ist txt1 eine Textbox und btnCheck ein Button)
01.
#include <regex> 
02.
#include <string> 
03.
#include <iostream> 
04.
using namespace std; 
05.
using namespace System; 
06.
 
07.
       void MarshalString ( String ^ s, string& os ) { 
08.
		using namespace Runtime::InteropServices; 
09.
		const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer(); 
10.
		os = chars; 
11.
		Marshal::FreeHGlobal(IntPtr((void*)chars)); 
12.
13.
 
14.
	private: System::Void btnCheck_Click(System::Object^  sender, System::EventArgs^  e) { 
15.
				regex reg("([a-z0-9]{2,4}),? ?"); 
16.
				String^ txtBox = txt1->Text; 
17.
				std::string txtBox_Std; 
18.
				MarshalString(txtBox,txtBox_Std); 
19.
				std::smatch result; 
20.
				if(std::regex_search(txtBox_Std,reg)){ 
21.
					while(std::regex_search(txtBox_Std, result, reg)) 
22.
23.
						String^ submatch = gcnew System::String(result[1].str().c_str()); 
24.
						MessageBox::Show(submatch); 
25.
						txtBox_Std = result.suffix().str(); 
26.
27.
				}else{ 
28.
					MessageBox::Show("No Match"); 
29.
30.
		 }
Grüße Uwe
Bitte warten ..
Mitglied: Darkprodukt
25.02.2014 um 22:11 Uhr
Guten Abend colinardo,

danke für die Antwort. Die erste Lösung ist leider nicht ganz was ich mir vorgestellt habe, da es, wie auch in dem Artikel den ich gepostet habe beschrieben, ein Kampf gegen windmühlen ist. Es gibt einfach zu viele Möglichkeiten Windows zu einer eingabe zu bringen. (Kopieren, über die ASCII Tabbel [ALT] + Nummer, windows Sprachsteuerung, etc.) Es gibt einfach zu viele möglichkeiten und wenn ich diese alle Deaktivieren würde, macht dies uner umständen die bedienung meines Programms unmöglich. z.b. Kopieren...

Die zweite Lösung finde ich um einiges Interessanter, da man so z.B. das verlassen der TextBox verhinder kann, bis der user seine Eingabe korregiert hat.

Ich werd es, wenn ich heute noch Zeit finde, ausprobieren und sobald wie möglich rückmeldung geben.


Mit freundlichen Grüßen

Darkprodukt
Bitte warten ..
Mitglied: Darkprodukt
29.03.2014 um 14:02 Uhr
Guten Tag,

tut mir leid das ich mich nicht schon früher gemeldet habe... leider hatte ich nicht besonders viel Zeit an meinem Privatprojekt weiter zu basteln

Ich habe mit der Lösung etwas rumgespielt und bin zu dem schluss gekommen, dass es einfach zu viele ausnahmen gibt.
Ich werde mir einfach eine Liste mit den 30 gängigsten Videodateiendungen erstellen in der der User auswählen kann, welche er möchte...


Vielen Dank für die Arbeit

Darkprodukt
Bitte warten ..
Ähnliche Inhalte
Microsoft Office

Excel VBA In Userform Maske Text nach Eingabe löschen

gelöst Frage von kluthi69Microsoft Office1 Kommentar

Hallo, suche die Möglichkeit nach Eingabe aus der Maske die Textboxen zu löschen um gleich weiter neue Eingaben zu ...

Microsoft

Maske für Passwort ändern erscheint nicht

Frage von steftsMicrosoft6 Kommentare

Morgen, wir haben in unserer SBS 2011 / Windows 7 Umgebung über die Gruppenrichtlinien eine Passwortänderung alle 40 Tage ...

Netzwerkgrundlagen

Suche Subnetz Maske

gelöst Frage von Herbrich19Netzwerkgrundlagen16 Kommentare

Hallo, Ich hätte gerne das Subnetz 10.140.0.0 - 10.149.255.255 Welche Subnetz Maske / CDIR währe dass dann? Gruß an ...

Visual Studio

Anbindung von Textboxen an Datenbank

gelöst Frage von ForgottenRealmVisual Studio8 Kommentare

Hallo Ich stehe vor einem, wahrscheinlich sehr schnell zu lösendem, Problem mit ein paar TextBoxen, einer Combobox und dem ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 1 StundeErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 3 StundenWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgborn vor 3 StundenMicrosoft3 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 2 TagenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Heiß diskutierte Inhalte
Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1025 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall15 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)15 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...

Server-Hardware
Server für Exchange 2016, Kaufberatung
Frage von MazenauerServer-Hardware10 Kommentare

Guten Tag werte Gemeinde, Vorab: Ich dachte es gab mal einen separaten Bereich für solche Anfragen, habe ich leider ...