قم بتبديل جميع الضوابط للقراءة فقط على زر انقر في WinForm

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

سؤال

أريد أن أكون قادرا على ضبط مجموعة من عناصر التحكم في نموذج للقراءة فقط والخلف باستخدام زر زر. هل هناك طريقة للحلقة من خلالها؟ this.Controls يمكن......

شكرا!

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

المحلول

إذا كنت ترغب في تعيين جميع عناصر التحكم لقراءة فقط، فيمكنك القيام بشيء مثل:

foreach(Control currentControl in this.Controls)
{
    currentControl.Enabled = false;
}

إذا كان ما تريد فعله حقا هو تعيين بعض عناصر التحكم لقراءة فقط، أود أن أقترح إبقاء قائمة بالضوابط ذات الصلة، ثم القيام بتوجيه هذه القائمة، بدلا من كلها.

نصائح أخرى

إعدادها ممكن / تعطيل سهل، راجع إجابة Gwliosa'a.

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

foreach (Control c in this.Controls)
{
  if (c is TextBox)
    (c as TextBox).Readonly = newValue;
  else if (c is ListBox)
    (c as ListBox).Readonly = newValue;
  // etc
}

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

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

        foreach (Control ctrl in this.Controls)
        {
            Type t = ctrl.GetType();

            PropertyInfo propInfo = t.GetProperty("ReadOnly");

            if (propInfo != null)
                propInfo.SetValue(ctrl, true, null);
        }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top