Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 1650 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Netzwerkgrundlagen
gelöst Suche Subnetz Maske (16)

Frage von Herbrich19 zum Thema Netzwerkgrundlagen ...

Windows 7
gelöst Nervige Eingabeaufforderung für Benutzername und Kennwort Eingabe (7)

Frage von Freddy0013 zum Thema Windows 7 ...

Visual Studio
C-Sharp WPF Binding TextBox.Text und Property MVVM (die 2.) (4)

Frage von mayho33 zum Thema Visual Studio ...

Google Android
gelöst Android: PIN-Eingabe ohne Bestätigung (7)

Frage von honeybee zum Thema Google Android ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...