كيف يمكنني إخفاء علامة الإقحام في System.Windows.Forms.TextBox؟

StackOverflow https://stackoverflow.com/questions/44131

  •  09-06-2019
  •  | 
  •  

سؤال

أحتاج إلى عرض رسالة ذات طول متغير والسماح باختيار النص.لقد قمت بإنشاء TextBox للقراءة فقط والذي لا يسمح بتحرير النص، ولكن لا تزال علامة إقحام الإدخال معروضة.

علامة الإقحام الوامضة مربكة.كيف أخفيه؟

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

المحلول

يمكنك القيام بذلك من خلال مكالمة win32

[DllImport("user32.dll")]
static extern bool HideCaret(IntPtr hWnd);
public void HideCaret()
{
    HideCaret(someTextBox.Handle);
}

نصائح أخرى

عند استخدام استدعاء win32، لا تنس إخفاء المؤشر في حدث GotFocus الخاص بمربع النص.

فقط من أجل الاكتمال، كنت بحاجة إلى مثل هذه الوظيفة لاستخدامها مع ملف ديف اكسبريس WinForms TextEdit يتحكم.

إنهم يقدمون بالفعل أ ShowCaret و أ HideCaret الطريقة، للأسف أنها محمية.لذلك قمت بإنشاء فئة مشتقة توفر الوظيفة.هنا هو الرمز الكامل:

public class MyTextEdit : TextEdit
{
    private bool _wantHideCaret;

    public void DoHideCaret()
    {
        HideCaret();

        _wantHideCaret = true;
    }

    public void DoShowCaret()
    {
        ShowCaret();

        _wantHideCaret = false;
    }

    protected override void OnGotFocus(EventArgs e)
    {
        base.OnGotFocus(e);

        if (_wantHideCaret)
        {
            HideCaret();
        }
    }
}

لاستخدام الكود، ما عليك سوى استخدام الفئة المشتقة بدلاً من الفئة الأصلية TextEdit فئة في الرمز الخاص بك والاتصال DoHideCaret() في أي مكان، على سبيل المثال.في مُنشئ النموذج الخاص بك الذي يحتوي على عنصر التحكم في تحرير النص.

ربما يكون هذا مفيدًا لشخص ما في المستقبل.

إذا قمت بتعطيل مربع النص (set Enable=false)، لا يزال النص الموجود فيه قابلاً للتمرير والاختيار.إذا لم يعجبك العرض المرئي لمربع نص معطل (خلفية رمادية عادةً) فيمكنك تجاوز الألوان يدويًا.

كن حذرًا، فتجاوز الألوان يدويًا سيجعل النموذج/التحكم الخاص بك يبدو غريبًا على الأنظمة التي لا تستخدم إعدادات اللون/السمة الافتراضية.لا تفترض أنه نظرًا لأن عنصر التحكم لديك أبيض اللون، فإن عنصر تحكم الجميع سيكون أبيضًا.لهذا السبب يجب عليك دائمًا استخدام ألوان النظام كلما أمكن ذلك (المحددة في ملف System.Drawing.SystemColors التعداد) مثل SystemColors.ControlLight.

أفيك، هذا لا تستطيع تتم.يعد عنصر التحكم TextBox عنصر تحكم مضحكًا لأنه يحتوي بالفعل على كثير من السلوك الذي لا يمكن تعديله نظرًا للطريقة التي ينتقل بها إلى نظام التشغيل.هذا هو السبب وراء كتابة العديد من مربعات النص المخصصة الرائعة من البداية.

أخشى أنك قد لا تكون قادرًا على فعل ما تريد فعله :(

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top