Установить значок для всего приложения winform? - PullRequest
0 голосов
/ 13 июля 2020

У меня есть приложение Winform, которое содержит сотни форм, в большинстве из них отсутствует значок формы, который время от времени показывает общий c значок на панели инструментов.

У меня есть код, заставляющий значок вот так:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam);

private const uint WM_SETICON = 0x80u;
private const int ICON_SMALL = 0;
private const int ICON_BIG = 1;

Icon = (Icon)Icon.FromHandle(MyApp.Resources.GUI2.Logo_32x32_MyAppIcon.GetHicon());

SendMessage(this.Handle, WM_SETICON, ICON_SMALL, this.Icon.Handle);
SendMessage(this.Handle, WM_SETICON, ICON_BIG, this.Icon.Handle); 

Нет лучшего способа решить эту проблему?

1 Ответ

0 голосов
/ 13 июля 2020

Вы можете просто использовать свойство Icon формы.

Например, для основной формы:

Program.cs

static void Main()
{
  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  Application.Run(MainForm.Instance);
}

MainForm.cs

// Singleton instance
static public MainForm Instance { get; } 
  = new MainForm();

// Private constructor
private MainForm()
{
  InitializeComponent();
  try 
  { 
    Icon = (Icon)Icon.FromHandle(MyApp.Resources.GUI2.Logo_32x32_MyAppIcon.GetHicon());
    // Icon = Icon.ExtractAssociatedIcon(Globals.ApplicationIconFilename);
  }
  catch (Exception ex)
  {
    // MessageBox.Show(ex.Message);
  }
}

Затем вы можете сделать это для любой другой формы:

puyblic AboutBox()
{
  InitializeComponent();
  Icon = MainForm.Instance.Icon;
}

Вы также можете применить значок для всех открытых форм, когда вы нужно:

static public void ApplyApplicationIconToAllForms()
{
  foreach ( Form form in Application.OpenForms )
    if ( form.GetType != typeof(MainForm) )
      form.Icon = MainForm.Instance.Icon;
}

Или сделайте то, что вы можете найти лучше и адаптировано к вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...