Warum wird Text in MaskedTextBox bei "Enter" nicht markiert?
-
Bei den Eigenschaften im Designer habe ich dem Ereignis "Enter" meine Unterfunktion zugeordnet, die wird definitiv ausgeführt!
Wenn ich mir da zum Beispiel eine MessageBox reinsetze, wird die angezeigt.
Aber das Markieren des Texts in der Textbox, nur das was ich will, geht natürlich nicht...
-
warum rufst du den sender ab? nimm doch einfach die if-abfrage weg
achso eh ichs vergess habs nämlich auch grad bei mir getestet
der markiert natürlich auch nur dann wenn auch tatsächlich ein Inhalt in der Textbox iss. die Platzhalter werden NICHT als Inhalt angesehen
-
Weil ich denke es ist übersichtlicher den Code in eine Funktion zu packen, und bei mehreren Textboxen wo ich das haben will einfach immer die selbe Funktion aufzurufen.
private: System::Void test(System::Object^ sender, System::EventArgs^ e) { if(sender == this->MaskedTextBox1) this->MaskedTextBox1->SelectAll(); if(sender == this->MaskedTextBox2 this->MaskedTextBox2->SelectAll(); if(sender == this->MaskedTextBox3 this->MaskedTextBox3->SelectAll(); }
-
ist die funktion test denn auch mit dem jedem event der textboxen verbunden? denn es ist so das die funktion nur dann aufgerufen wird wenn das entsprechende ereignis der verbundenen textbox auch eintritt
-
Der event heißt "Enter":
MSDN:
Control.Enter-Ereignis Tritt beim Eintreten in den Bereich des Steuerelements ein.
Ich denke mal, dass der Aufruf ok ist.
Anderer Code da drin geht ja, nur das markieren nicht - selbst wenn was drinsteht... (maskierte Box, dürfen nur Zahlen rein)
-
ja, aber NUR bei dem zugeordneten element. wenn enter nur einem der textboxen zugeordnet ist, tritt das ereignis auch nur bei dem betreten der einen zugeordneten textbox ein, es sei denn das ereignis ist jeder der textboxen zugeordnet
-
Klar ist das jeder Textbox zugeordnet, sonst hätte es ja auch keinen Sinn die aufrufende Textbox mit "sender" abzufragen...
Deswegen habe ich das doch so gelöst.Mein Problem ist wie gesagt aber nicht der Aufruf, sondern der Befehl funktioniert einfach nicht:
this->MaskedTextBox3->SelectAll();
-
Google hilft:
MaskedTextBox SelectAll :
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=194478&SiteID=1
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void maskedTextBox1_Enter(object sender, EventArgs e) { MaskedTextBox box = (MaskedTextBox)sender; BeginInvoke((MethodInvoker)delegate() { box.SelectAll(); }); } }
Ich hab ehrlich gesagt keine Ahnung wie man nun in C++ den anonymen Delegaten umsetzt, daher etwas umständlicher:
private: delegate void SelAllDelegate(MaskedTextBox ^ box); private: void SelectAllA(MaskedTextBox ^ box) { box->SelectAll(); } private: System::Void maskedTextBox1_Enter(System::Object^ sender, System::EventArgs^ e) { MaskedTextBox ^ box = safe_cast<MaskedTextBox^>(sender); BeginInvoke(gcnew SelAllDelegate(this,&Form1::SelectAllA),gcnew cli::array<Object^>(1){box}); }
Beispiel:
http://www.diskussionspunkt.de/help/cpp/MaskedTextBox_Enter.zip
-
Vielen Dank Knuddlbaer, der Code funktioniert!
Allerdings verstehe ich nicht was da steht...
Ist "Delegat" das Stichwort, nach dem ich suchen und wo ich mich einlesen muss?Gruß
-
Naja, im gefundenen Beitrag schreib MS:
The MaskedTextBox performs a select of its own in the focused event, so it overrides your set. You'll need to post your select after the MaskedTextBox performs its select. You can do this by using the BeginInvoke method
-mark
Program Manager
Microsoft
This post is provided "as-is"
Welche Auswirkungen das nun im Detail hat kann ich Dir nicht sagen, ich habe mich mit den Events der Controls noch nicht so intensiev auseinander gesetzt um erklären zu können warum das BeginInvole abhilfe schafft.