سؤال

وأود أن تكون قادرة على تجاوز السلوك الافتراضي من أجل وضع الإقحام في المقنع مربع نص.

الافتراضي هو وضع علامة الإقحام حيث الماوس تم النقر ، ملثمين مربع نص يحتوي بالفعل على الشخصيات بسبب القناع.

وأنا أعلم أنه يمكنك إخفاء الإقحام كما ذكر في هذا بعد, هل هناك شيء مماثل لوضع المؤشر في بداية النص عندما تحكم يحصل على التركيز.

هل كانت مفيدة؟

المحلول

هذا ينبغي أن تفعل خدعة:

    private void maskedTextBox1_Enter(object sender, EventArgs e)
    {
        this.BeginInvoke((MethodInvoker)delegate()
        {
            maskedTextBox1.Select(0, 0);
        });         
    }

نصائح أخرى

إلى تحسين عباس العامل الحل جرب هذا:

private void ueTxtAny_Enter(object sender, EventArgs e)
{
    //This method will prevent the cursor from being positioned in the middle 
    //of a textbox when the user clicks in it.
    MaskedTextBox textBox = sender as MaskedTextBox;

    if (textBox != null)
    {
        this.BeginInvoke((MethodInvoker)delegate()
        {
            int pos = textBox.SelectionStart;

            if (pos > textBox.Text.Length)
                pos = textBox.Text.Length;

            textBox.Select(pos, 0);
        });
    }
}

هذا معالج الحدث يمكن إعادة استخدامها مع صناديق متعددة, و هذا لا يسلب قدرة المستخدم على وضع المؤشر في منتصف البيانات المدخلة (أنا.ه لا قوة المؤشر في zeroeth الموقف عندما لم تكن خانة فارغة).

أجد أن هذا أوثق محاكاة القياسية مربع النص.فقط خلل المتبقية (أرى) أنه بعد "Enter" الحدث المستخدم لا يزال قادرا على تحديد بقية (فارغة) قناع موجه إذا xe يحمل أسفل الماوس و تستمر إلى النهاية.

هذا هو تحسن كبير على السلوك الافتراضي من MaskedTextBoxes.وذلك بفضل!

أنا جعلت بعض التغييرات Ishmaeel هو حلا ممتازا.أنا أفضل أن أسميها BeginInvoke إلا إذا كان المؤشر يحتاج إلى نقل.أنا أيضا استدعاء الأسلوب من مختلف معالجات الأحداث ، لذلك معلمة الإدخال النشطة MaskedTextBox.

private void    maskedTextBoxGPS_Click( object sender, EventArgs e )
{
    PositionCursorInMaskedTextBox( maskedTextBoxGPS );
}


private void    PositionCursorInMaskedTextBox( MaskedTextBox mtb )
{
  if (mtb == null)    return;

  int pos = mtb.SelectionStart;

  if (pos > mtb.Text.Length)
    this.BeginInvoke( (MethodInvoker)delegate()  { mtb.Select( mtb.Text.Length, 0 ); });
}

الإجابة الجزئية:يمكنك وضع علامة الإقحام بتعيين 0-طول التحديد إلى التحكم في MouseClick حدث ، على سبيل المثال:

MaskedTextBox1.Select(5, 0)

...سيتم تعيين الإقحام في 5 موضع الحرف في مربع النص.

والسبب في هذا الجواب هو جزئي فقط, لأنني لا أستطيع التفكير عموما طريقة يمكن الاعتماد عليها لتحديد الموقف حيث الإقحام يجب أن وضعه على نقرة.قد يكون هذا ممكنا في بعض أقنعة, ولكن في بعض الحالات (مثلا ، الولايات المتحدة رقم الهاتف قناع), أنا حقا لا يمكن التفكير في طريقة سهلة لفصل قناع موجه شخصيات من الفعلية إدخال المستخدم...

//not the prettiest, but it gets to the first non-masked area when a user mounse-clicks into the control
private void txtAccount_MouseUp(object sender, MouseEventArgs e)
{
  if (txtAccount.SelectionStart > txtAccount.Text.Length)
    txtAccount.Select(txtAccount.Text.Length, 0);
}

هذا الحل يعمل بالنسبة لي.محاولة إعطائها الرجاء.

private void maskedTextBox1_Click(object sender, EventArgs e)
{

 maskedTextBox1.Select(maskedTextBox1.Text.Length, 0);
}

حصلت الألغام إلى العمل باستخدام انقر فوق الحدث....لا تحتج كان هناك حاجة.

 private void maskedTextBox1_Click(object sender, EventArgs e)
{
     maskedTextBox1.Select(0, 0);              
}

هذا الحل يستخدم انقر فوق طريقة MaskedTextBox مثل Gman الرقيقة المستخدمة ؛ إلا أنني وجدت أنه من الضروري أن تسمح للمستخدم انقر داخل MaskedTextBox بمجرد الواردة بيانات المؤشر البقاء حيث هو.

المثال أدناه إيقاف المطالبات و حرفية و يقيم طول البيانات في MaskedTextBox وإذا يساوي 0 فإنه يضع المؤشر في الانطلاق.وإلا فإنه فقط يتجاوز القانون الذي يضع المؤشر في نقطة الانطلاق.

يتم كتابة التعليمات البرمجية في VB.NET 2017.ويساعد هذا الأمل!

Private Sub MaskedTextBox1_Click(sender As Object, e As EventArgs) Handles MaskedTextBox1.Click
    Me.MaskedTextBox1.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals
    If Me.MaskedTextBox1.Text.Length = 0 Then
        MaskedTextBox1.Select(0, 0)
    End If
    Me.MaskedTextBox1.TextMaskFormat = MaskFormat.IncludePromptAndLiterals
End Sub
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top