Темная тема на WinForms - C#

Узнай цену своей работы

Формулировка задачи:

Народ! Есть у кого-нибудь опыт построение GUI на WinForms с тёмной темой? Интересует GUI на WinForms со следующими контролами:
  • Form
  • GroupBox
  • Label
  • TextBox
  • PropertyGrid
  • MainMenu
  • Button
  • LinkLabel
  • ComboBox
  • CheckBox
Если с этими:
  • Label
  • TextBox
  • LinkLabel
В принципе все ясно - меняй цвет и все, то с остальными сложнее. Интересуют следующие вещи:
  • Бордюры окна и заголовок окна - можно ли поменять это малой кровью без сторонних тяжеловесных, тормознутых и кривых библиотек?
  • Поменять цветовое оформление PropertyGrid так, что бы он не смотрелся чужеродно?
Есть у кого-нибудь примеры\скриншоты\гайдлайны построения гармоничного интерфейса в темном цветовом оформлении без чужеродности указанных выше стандартных контролов?

Решение задачи: «Темная тема на WinForms»

textual
Листинг программы
/// <summary>
        /// Метод возвращения курсора в исходное состояние
        /// </summary>
        /// <param name="CursorOwner">форма, для которой изменяется курсор</param>
        public static void CreateNormalCursor(Form CursorOwner)
        {
            try
            {
                if (CursorOwner.InvokeRequired)
                    CursorOwner.BeginInvoke(new MethodInvoker(() => CursorOwner.Cursor = Cursors.Arrow));
                else
                    CursorOwner.Cursor = Cursors.Arrow;
            }
            catch { }
        }
 
        /// <summary>
        /// Метод преобразования курсора в силуэт формы
        /// </summary>
        /// <param name="CursorOwner">форма, для которой изменяется курсор</param>
        public static void CreateDragCursor(Form CursorOwner)
        {
            try
            {
                Bitmap bitmap = null;
                bitmap = new Bitmap(CursorOwner.Width, CursorOwner.Height);
 
                for (int x = 0; x < CursorOwner.Width; x++)
                {
                    bitmap.SetPixel(x, 0, Color.Black);
                    bitmap.SetPixel(x, CursorOwner.Height - 1, Color.Black);
                }
                for (int y = 0; y < CursorOwner.Height; y++)
                {
                    bitmap.SetPixel(0, y, Color.Black);
                    bitmap.SetPixel(CursorOwner.Width - 1, y, Color.Black);
 
                }
 
                System.Windows.Forms.Cursor nowCur = CreateCursor(bitmap, 3, 3);
 
                if (CursorOwner.InvokeRequired)
                    CursorOwner.BeginInvoke(new MethodInvoker(() => CursorOwner.Cursor = nowCur));
                else
                    CursorOwner.Cursor = nowCur;
 
                bitmap.Dispose();
            }
            catch { }
        }
 
 
        // API структура для изменения курсора
        private struct IconInfo
        {
            public bool fIcon;
            public int xHotspot;
            public int yHotspot;
            public IntPtr hbmMask;
            public IntPtr hbmColor;
        }
 
        // API метод для изменения курсора
        [DllImport("user32.dll")]
        private static extern IntPtr CreateIconIndirect(ref IconInfo icon);
 
        // API метод для изменения курсора
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool GetIconInfo(IntPtr hIcon, ref IconInfo pIconInfo);
 
        // API метод для изменения курсора
        private static System.Windows.Forms.Cursor CreateCursor(Bitmap bmp, int xHotSpot, int yHotSpot)
        {
            IconInfo tmp = new IconInfo();
            GetIconInfo(bmp.GetHicon(), ref tmp);
            tmp.xHotspot = xHotSpot;
            tmp.yHotspot = yHotSpot;
            tmp.fIcon = false;
            return new System.Windows.Forms.Cursor(CreateIconIndirect(ref tmp));
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5