كيف يمكنك تغيير لون الخلفية الافتراضي لشرائط القوائم والقوائم في .NET؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

في هذه الأيام مع Visual C# (Visual C# 2008 على وجه التحديد) يبدو أن اللون الافتراضي لشرائط القوائم والقوائم هو اللون الأزرق، وهو ما يبدو غريبًا بالنسبة لي وهو أمر أود حقًا تجاوزه.أعتقد أن Visual Studio يلتقط هذا اللون الأزرق من سمة النظام المحددة أو شيء من هذا القبيل، ولكن لا يوجد تطبيق Windows آخر يعمل على نظامي يحتوي على هذا اللون الأزرق لذا لا أعرف لماذا يجب أن تحتوي تطبيقات .NET الخاصة بي على هذا اللون .;)

على أية حال، لاحظت أنه إذا قمت بإنشاء تطبيق باستخدام إصدار أقدم من Visual Studio (Visual Studio.NET)، فإن لون الخلفية الافتراضي لشرائط القوائم والقوائم هو اللون الرمادي القياسي الذي تتوقع رؤيته.أفترض أن هذا أحد الحلول للمشكلة، لكنه يبدو حلًا غبيًا وأود حقًا العثور على طريقة لتجاوزه في الإصدار الحالي من Visual C#.

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

المحلول

لم

وDOTNET 1.X يكن لديك MenuStrip، واستخدام القائمة ويندوز القياسية.

والإصدارات DOTNET 2.0 وما فوق لديهم MenuStrip، وVS 7 وحتى يزيل القائمة الأساسية من الأدوات ويستبدلها مع MenuStrip، والذي يستخدم مكتب <ديل> إكس بي 2003 موضوع، وبالتالي نظام الألوان الأزرق لMenuStrip وToolStrip.

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

نصائح أخرى

تعيين "وضع العرض" خيار MenuStrip إلى "نظام" بدلاً من "managerRenderMode"

:)

هل حاولت تحديد لون الخلفية من menuStrip الخاصة بك؟ يجب أن تكون قادرة على فعل شيء مثل:

this.menuStrip1.BackColor = Color.FromKnownColor(KnownColor.Control);

ويمكنك جعل العارض الخاص

    public class BrowserMenuRenderer : ToolStripProfessionalRenderer
{
    public BrowserMenuRenderer() : base(new BrowserColors()) {}
}
public class BrowserColors : ProfessionalColorTable
{
    public override Color MenuItemSelected
    {
        get { return Color.FromArgb(30, 30, 30); }
    }
    public override Color MenuItemBorder
    {
        get { return Color.FromArgb(30, 30, 30); }
    }
    public override Color MenuItemSelectedGradientBegin
    {
        get { return Color.FromArgb(30, 30, 30); }
    }
    public override Color MenuItemSelectedGradientEnd
    {
        get { return Color.FromArgb(30, 30, 30); }
    }
}

وبعد ذلك كنت مجرد مجموعة العارض menustrip الخاص بك كما YourRenderer

ويمكنك استخدام طريقة تجعل لكن الذي يحدد فقط موضوع النظام الافتراضي. صافي يسمح لك بتغيير ون_الخلفية وللون ولكن عندما كنت تحوم فوق ذلك فإنه لا يزال يظهر الألوان الافتراضية. هيريس سيلة للالتفاف حول ذلك ...

وله بسيط جدا لإنجاز باستخدام "DropDownOpening"، "DropDownClosed"، و "MouseEnter" الأحداث.

private void fileToolStripMenuItem_DropDownOpening(object sender, EventArgs e){

    // When the user clicks on "File" it will change to red.
    fileToolStripMenuItem.ForeColor = Color.Red;
}

و

private void testToolStripMenuItem_MouseEnter(object sender, EventArgs e){

    // When the user hovers over a child of "file" called "test", "file" turns orange.
    fileToolStripMenuItem.ForeColor = Color.Orange;
}

و

private void test2ToolStripMenuItem_MouseEnter(object sender, EventArgs e){

    // When the user hovers on a child of "file" called "test2", "file" turns blue.
    fileToolStripMenuItem.ForeColor = Color.Blue;
}

و

private void fileToolStripMenuItem_DropDownClosed(object sender, EventArgs e){

    // When the user leaves the "file" menu, it gets restored back to black.
    fileToolStripMenuItem.ForeColor = Color.Black;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top