Choroid Ответов: 3

Vb.net добавить значок в строку заголовка формы


Я использую Visual Studio 2019 v 16.6.2 с Frame Work 4.7.2 на 64 битной машине Windows 7

Я кодирования в Visual Basic не с#
Иконка 32X32 с 32 битной глубиной создана с помощью GreenFish icon maker
Я знаю, как установить значок для формы, используя настройки свойств. Меня беспокоит то, что этот процесс не найдет значок, когда я создам EXE-файл. Который я еще не тестировал делая EXE файл


Итак, я нашел этот процесс щелкните правой кнопкой мыши проект > Свойства > приложение > значок ComboBox > Обзор выберите значок, который находится на моем рабочем столе

Когда я это сделал, VS добавил иконку в свой проект как q.ico, возможно, здорово

Но когда я запускаю проект все что я вижу это значок по умолчанию не очень большой

Поэтому чтобы проверить еще немного я попытался добавить значок к кнопке этот маневр привел к созданию папки с именем Resources со значком внутри папки

При запуске проекта да кнопка имела значок на кнопке


Имейте в виду, что моя настоящая цель здесь-иметь автономное приложение, которое будет работать на любом компьютере с Windows

Вопросы таковы

Почему в заголовке не отображается новый значок в проекте?

Будет ли созданная папка "ресурсы" включена в EXE-файл?


Что я уже пробовал:

Public Class frmOne
    Private Sub frmOne_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        tbLoad.Text = "I Loaded"
    End Sub

    Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
        Application.Exit()
    End Sub

3 Ответов

Рейтинг:
24

Luc Pattyn

Привет,

форма имеет свойство Icon, определяющее, какой значок может отображаться в левой части строки заголовка формы.

приложение имеет свой собственный значок, который можно указать на странице свойств проекта; щелкните правой кнопкой мыши проект в обозревателе решений, выберите вкладку приложение и найдите файл, в котором написано значок:...

Довольно часто вы хотите, чтобы ваша основная форма (или даже все формы) приложения отображала тот же значок, что и само приложение (например, на панели задач), что требует двух отдельных операций.

:)


Choroid

Люк я сделал это Правой Кнопкой Мыши проект > Свойства > приложение > Обзор теперь у меня есть значок в плохо названной папке ресурсы выбрали его и все что я вижу это значок по умолчанию

Luc Pattyn

Значки всегда были немного хитрыми. Они эволюционировали от одного изображения к набору различных размеров и глубины цвета. Тот, который используется кнопкой панели задач, будет отличаться от того, который используется проводником рабочего стола (который сам зависит от некоторых вариантов выбора размеров значков на рабочем столе) и т. д.

Я обычно предоставляю файл значков, который содержит только значок 32*32 пикселя, и я использую его как для форм (в WinForms), так и для приложений, обычно это хорошо работает для меня. Если вы чувствуете необходимость наполнить несколько размеров/глубин в одном ico, убедитесь, что все они выглядят примерно одинаково, иначе вас ждут сюрпризы. Чего вам определенно не следует делать, так это брать существующий ico и заменять один из его образов, но не все из них.

AFAIK папка, в которой находится файл ico, на самом деле не имеет значения; что может быть релевантным, так это свойства, которые вы даете этому файлу ico в обозревателе решений; я склонен использовать либо "контент", либо "встроенный ресурс" (не уверен, что все это означает для значков), а также "не копировать".

Предложение: попробуйте несколько вещей, если все остальное не удается, попробуйте еще раз с файлом значков из другого источника.

:)

Choroid

Люк Паттин у меня также есть окно максимизации, установленное в True, поскольку мне сказали, что это не может быть ложным, почему так невозможно управлять заголовком? У меня есть поиск в течение 2 дней ища название элементов в заголовке

Luc Pattyn

Не спрашивайте меня, почему Microsoft сделала то, что они сделали, я не знаю, я тоже не уверен, что они это делают. :)

Я делаю это следующим образом: использую Visual Studio, открываю форму в конструкторе представлений, затем выбираю свойства и один за другим переключаю все логические значения и наблюдаю, что происходит.

Одна из самых странных вещей в Windows land заключается в том, что они предоставляют много документации в текстовой форме, но чаще всего отказываются предоставлять изображения, которые сделали бы вещи намного яснее. Ну, в конце концов, вы научитесь жить с тем, как оно есть...

:)

Choroid

Люк я действительно пробовал встроенный ресурс не повезло он всегда был настроен на контент я даже попробовал 16X16 с 8-битной глубиной не повезло можно ли отправить мне одну из ваших иконок я думаю, мне нужно разместить адрес электронной почты в комментариях, а затем удалить, как только он у вас есть

Luc Pattyn

Значок, который я использую сегодня, в настоящее время можно найти на моем веб-сайте:
https://lucpattyn.com/stationmaster.ico

Вы можете скачать его с помощью "Сохранить изображение" или как там это называется в вашем браузере.

Luc Pattyn

У меня такое чувство, что поведение Windows изменилось, вероятно, с Win10 (но может быть и раньше, я никогда этого не замечал, потому что всегда использую один и тот же значок везде в приложении).

Теперь кажется, что панель задач покажет значок, который она найдет в активной форме (основная форма или открытый модальный диалог), что, безусловно, имеет смысл, поскольку это будет зависеть от того, какая форма/диалог открыта.

Значок приложения остается актуальным, например, когда вы создаете ярлык на рабочем столе для вашего EXE-файла.


ПОДТВЕРЖДЕННЫЙ

Я создал небольшое тестовое приложение с основной формой и диалогом; приложение, основная форма и диалог-все они используют разные значки. На Win7 рабочий стол и панель задач всегда показывают значок приложения. На Win10 рабочий стол показывает значок приложения, панель задач показывает значок активной формы, то есть сначала mainform, а затем, когда я открываю диалоговое окно, панель задач показывает значок диалога.

:)

Choroid

Люк Итак, устанавливая значок в поле свойств до тех пор, пока значок находится в какой-то папке проекта, и я использую путь к этой папке, чтобы установить значок в поле свойств?

Luc Pattyn

Я так думаю; раньше я хранил свои иконки и тому подобное в верхней папке проекта; несколько лет назад я перешел на размещение таких вещей в папке ресурсов, даже когда я не всегда использую их как реальные ресурсы, в смысле

Сборка сборка=сборка.GetEntryAssembly();
использование (Stream myStream=assembly.GetManifestResourceStream(имя ресурса)) {
...
}

Maciej Los

5ed!

Рейтинг:
13

Richard MacCutchan

Я только что попробовал то же самое, и это не удалось, как вы говорите. Однако затем я дважды щелкнул форму и изменил значок в свойствах формы, и он показал правильный значок.

Что касается вашего второго вопроса, то все ресурсы, которые используются при создании приложения, встроены в конечный исполняемый файл. Таким образом, ресурсы всегда идут вместе с приложением.


Choroid

Ричард, возможно, я не был ясен, что папка, о которой я говорю, - это та, которую я создаю с именем Resources, это был плохой выбор для имени, так как я не говорю ни о какой папке в разделе Resources.resx, я должен был назвать папку Images

Richard MacCutchan

Откройте страницу свойств проекта, перейдите на вкладку ресурсы и добавьте туда значок. Это гарантирует, что он является частью окончательного исполняемого файла.

Maciej Los

5ed!

Рейтинг:
0

Choroid

Ну что ж это пинок под зад

Пост 7-летней давности на SO

[^ Ссылка ] чтобы так


Код, который я использовал

Public Sub SetIcon()
    InitializeComponent()
    Icon = Icon.ExtractAssociatedIcon(System.Reflection.Assembly.GetExecutingAssembly().Location)
End Sub


Он использует набор значков в разделе Обзор приложений
Да Microsoft нужно несколько новичков чтобы написать серию How to
Единственный выпуск-это каждые 3 месяца серия будет устаревать


Choroid

Люк
Для любого кто видит решение 3 я работаю только над проектом с одной формой
Если у вас есть несколько форм код запрещает переход к другим формам
Не решение если кто то хочет объяснить эту неудачу пожалуйста не стесняйтесь

Luc Pattyn

Это будет работать для любой формы, если вы поместите одну строку в ее конструктор (или обработчик загрузки):

Значок = Значок.ExtractAssociatedIcon(Система.Отражение.Собрание.GetExecutingAssembly().Местоположение)

что в основном говорит: установите значок этой формы на значок, связанный с файлом, путь к которому я вам даю, который на самом деле является вашим собственным EXE-путем. Извлечение значка таким образом довольно дорого.

Два способа улучшения:

1. более простая линия была бы

Значок = Значок.ExtractAssociatedIcon(Приложение.ExecutablePath)

что позволяет избежать отражения, но все же внимательно изучает файл в поисках значка приложения.

2. Если вы установите как значок приложения, так и значок основной формы на нужный значок, то легко и недорого скопировать этот значок из основной формы в любую другую форму внутри приложения.

И это то, что я обычно делаю, определяя "базовую форму", которая содержит все мои предпочтения формы (поведение размера, значок, стили...), от которых я наследую все другие формы.

:)

PS: Я надеюсь, что вы нашли в одном из старых ответов мое подтверждение на старых версиях Windows, всегда показывающее значок приложения на панели задач.

Choroid

Люк только что протестировал и это работает я не могу отредактировать свое решение которое меня расстраивает
Мое решение пока оно работало было кодом которого я не понимал о радость обучения
VB.Net имеет свою собственную очень полезную идею путей исходящих из NetBeans это было легко так долго
поскольку объект был в проекте вы могли бы найти его угадайте это то же самое для
VB.Net просто узнав, что делает "мой", я открыл ему глаза.