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

Frage Entwicklung Visual Studio

Mitglied: Darkprodukt

Darkprodukt (Level 1) - Jetzt verbinden

24.02.2014, aktualisiert 23:47 Uhr, 1731 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 ;)
http://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
MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 7 StundenMikroTik RouterOS4 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 8 StundenSicherheit

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Administrator.de Feedback

Entwicklertagebuch: Die Startseite wurde überarbeitet

Information von admtech vor 10 StundenAdministrator.de Feedback9 Kommentare

Hallo Administrator User, mit dem Release 5.7 haben wir unsere Startseite überarbeitet und die Beiträge und Fragen voneinander getrennt. ...

Vmware

VMware Desktopprodukte sind verwundbar

Information von Penny.Cilin vor 15 StundenVmware

Die VMware-Anwendungen zum Umgang mit virtuellen Maschinen Fusion, Horizon Client und Workstation sowie die Plattform NSX sind verwundbar. Davon ...

Heiß diskutierte Inhalte
Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail
Frage von ahstaxVisual Studio24 Kommentare

Hallo, ich möchte gerne ein vb.net-Tool schreiben, das am Ende eine Outlook-E-Mail erzeugt. Grundsätzlich ist mir klar, wie das ...

Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server16 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows Netzwerk
Netzwerk Neustrukturierung
Frage von IT-DreamerWindows Netzwerk16 Kommentare

Hallo verehrte Community und Admins, bei uns im Haus steht eine Neustrukturierung an. Dafür benötige ich von euch ein ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...