[c#] كيفية إزالة التركيز من مربع نص في WinForms؟



Answers

لم يعمل التركيز على العلامة لي ، فعل شيء مثل label1.Focus() أليس كذلك؟ لا يزال التركيز على مربع النص عند تحميل النموذج ، ومع ذلك يحاول Velociraptors الإجابة ، عملت بالنسبة لي ، وضع عنصر التحكم النشط للنموذج إلى التسمية مثل هذا:

private void Form1_Load(object sender, EventArgs e)  
{ 
  this.ActiveControl = label1;       
}
Question

أحتاج لإزالة التركيز من عدة مربعات. لقد حاولت استخدام:

textBox1.Focused = false;

قيمة الخاصية ReadOnly الخاصة به true .

ثم حاولت إعداد التركيز على النموذج ، لإزالته من جميع مربعات النص ، ولكن هذا أيضًا فشل في العمل:

this.Focus();

وتقوم الدالة بإرجاع false عند تحديد مربع نص.

لذا ، كيف يمكنني إزالة التركيز من مربع نص؟




سيكون الحل البسيط لقتل التركيز ، فقط قم بإنشاء صفك الخاص:

public class ViewOnlyTextBox : System.Windows.Forms.TextBox {
    // constants for the message sending
    const int WM_SETFOCUS = 0x0007;
    const int WM_KILLFOCUS = 0x0008;

    protected override void WndProc(ref Message m) {
        if(m.Msg == WM_SETFOCUS) m.Msg = WM_KILLFOCUS;

        base.WndProc (ref m);
    }
}



Focus على الإدخال ، لذلك لن يعمل تعيينه على النموذج لأن النماذج لا تقبل الإدخال. حاول إعداد الخاصية ActiveControl النموذج إلى عنصر تحكم آخر. يمكنك أيضًا استخدام Select لتحديد عنصر تحكم محدد أو SelectNextControl لتحديد عنصر التحكم التالي في ترتيب الجدولة.




إذا كان كل ما تريده هو التأثير البصري على أن مربع النص لا يحتوي على تحديد أزرق في جميع محتوياته ، ما عليك سوى اختيار أي نص:

textBox_Log.SelectionStart = 0;
textBox_Log.SelectionLength = 0;
textBox_Log.Select();

بعد ذلك ، عند إضافة محتوى باستخدام .Text += "..." ، لن يتم عرض أي تحديد أزرق.




في منشئ النموذج أو UserControl الضغط على كتابة TextBox

SetStyle(ControlStyles.Selectable, false);

بعد InitializeComponent ()؛ المصدر: https://.com/a/4811938/5750078

مثال:

public partial class Main : UserControl
{

    public Main()
    {
        InitializeComponent();
        SetStyle(ControlStyles.Selectable, false);
    }



أنا جعلت هذا على التحكم المخصص الخاص بي ، فعلت هذا onFocus ()

this.Parent.Focus();

لذا إذا ركز texbox - فهو يركز على الفور على حقل النص الأساسي (نموذج ، أو لوحة ...) وهذا خيار جيد إذا كنت تريد إجراء ذلك على التحكم المخصص.




هذه المشاركة تقودني للقيام بذلك:

ActiveControl = null;

هذا يتيح لي التقاط جميع مدخلات لوحة المفاتيح في المستوى العلوي دون غيرها من الضوابط الذهاب المكسرات.




يمكنك اضافة الكود التالي:

this.ActiveControl = null;  //this = form



الطريقة التي أتغلب عليها هي وضع جميع عناصر التحكم في winform. أقوم بإجراء جميع التسميات وعدم تحديد عناصر تحكم winform كأمر جدولة 0 ، ثم عنصر التحكم الأول الخاص بي كطلب جدولة 2 ثم زيادة كل طلب تحكم قابل للتحديد بنسبة 1 ، لذلك 3 ، 4 ، 5 الخ ...

بهذه الطريقة ، عند بدء تشغيل Winforms الخاص بي ، لا يكون التركيز الأول على TextBox!




Related