سؤال

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

ولكن هل هناك تحكم أو إعداد فعلي للقيام بذلك؟وماذا تسمى السيطرة الفعلية؟

Internet Options property dialog

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

المحلول

جاسوس ++ يخبرنا أن هذين في الواقع منفصلان STATIC ضوابط (على غرار أ Label في وينفورمز).

  • الأول هو ببساطة عنصر تحكم نص ثابت عادي يقول "الصفحة الرئيسية".

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

كما أشرت في السؤال، هناك بعض الاختراقات/الحلول البديلة التي تتيح لنا تحقيق مظهر مشابه، مثل الضغط عموديًا على GroupBox السيطرة أو التجاوز OnPaint طريقة أ Label التحكم واستخدام ControlPaint فئة لرسم الحدود 3D.إنهم يعملون، لكني لم أحبهم أبدًا.

لكنك يستطيع في الواقع تعيين SS_ETCHEDHORZ صمم نفسك بحيث يمكنك تكرار واجهة المستخدم الأصلية تمامًا.إليك فصل صغير يفعل ذلك بالضبط.أضفه إلى مشروعك، وقم بتجميعه، وسترى عنصر تحكم جديدًا يظهر في صندوق الأدوات الخاص بك يسمى "HorizontalRule".استخدامه تماما كما تفعل مع أي عنصر تحكم آخر!

public class HorizontalRule : Control
{
    private const int FixedHeight   = 2;

    private const int WS_CHILD      = 0x40000000;
    private const int WS_VISIBLE    = 0x10000000;
    private const int SS_ETCHEDHORZ = 0x00000010;
    private const int SS_ETCHEDVERT = 0x00000011;

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ClassName = "STATIC";
            cp.Style = WS_CHILD | SS_ETCHEDHORZ;
            if (this.Visible)
            {
                cp.Style |= WS_VISIBLE;
            }
            return cp;
        }
    }

    protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
    {
        height = FixedHeight;
        base.SetBoundsCore(x, y, width, height, specified);
    }
}

يمكنك أيضًا العثور على مزيد من المعلومات التفصيلية ونموذج التعليمات البرمجية الإضافي هنا على CodeProject.

نصائح أخرى

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

في الواقع ، لقد استخدمت صورة خط ثابت بعرض طويل بدرجة كافية بحيث يمكن استخدامها في جميع الحالات من خلال إظهار الجزء المطلوب (العرض) من الصورة.

يعمل هذا الحل جيدًا بالنسبة لي منذ ذلك الحين.

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