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, 1706 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
gelöst Excel VBA In Userform Maske Text nach Eingabe löschen (1)

Frage von kluthi69 zum Thema Microsoft Office ...

Netzwerkgrundlagen
gelöst Suche Subnetz Maske (16)

Frage von Herbrich19 zum Thema Netzwerkgrundlagen ...

VB for Applications
gelöst VBA Textbox fokussieren und Daten über Button eintragen (1)

Frage von Aximand zum Thema VB for Applications ...

Visual Studio
gelöst VB bestimmte Stelle im Bild highlighten wenn MouseOver Textbox? (9)

Frage von PixL86 zum Thema Visual Studio ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Vmware
VMware ESX - Start einer VM verhindern (19)

Frage von emeriks zum Thema Vmware ...

Rechtliche Fragen
gelöst Geschäftsführer Email gefaked (18)

Frage von xbast1x zum Thema Rechtliche Fragen ...

iOS
IPhone wird ferngesteuert Hacker? (17)

Frage von Akcent zum Thema iOS ...