Значение по умолчанию изменения значок Winform через целое приложение

Википедия даст всю информацию, в которой Вы нуждаетесь здесь. Заключение в кавычки от http://en.wikipedia.org/wiki/URI :

URL А является URI, который, в дополнение к идентификации ресурса, обеспечивает средства реакции или получения представления ресурса путем описания его основного механизма доступа или сетевого "местоположения".

13
задан Kyle Gagnet 28 September 2009 в 13:30
поделиться

5 ответов

Значок по умолчанию встроен в dll winforms - глядя на отражатель ( DefaultIcon ), это:

defaultIcon = new Icon(typeof(Form), "wfc.ico");

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

Вы всегда можете охватить силы тьмы с помощью отражения на основе поля? Примечание: это хакерский и хрупкий. На свою голову! Но это работает:

[STAThread]
static void Main() {
    // pure evil
    typeof(Form).GetField("defaultIcon",
            BindingFlags.NonPublic | BindingFlags.Static)
        .SetValue(null, SystemIcons.Shield);

    // all forms now default to a shield
    using (Form form = new Form()) {
        Application.Run(form);
    }
}

Чтобы сделать это правильно; два общих варианта;

  • базовый класс Form , в котором установлен значок
  • фабричный метод Form - возможно, что-то вроде:

код:

public static T CreateForm<T>() where T : Form, new() {
    T frm = new T();
    frm.Icon = ...
    // any other common code
    return frm;
}

Тогда вместо of:

using(var frm = new MySpecificForm()) {
    // common init code
}

Примерно так:

using(var frm = Utils.CreateForm<MySpecificForm>()) {

}

Конечно, это ненамного красивее! Другим вариантом может быть метод расширения C # 3.0, возможно, в виде свободного API:

public static T CommonInit<T>(this T form) where T : Form {
    if(form != null) {
        form.Icon = ...
        //etc
    }
    return form;
}

и

using(var frm = new MySpecificForm().CommonInit()) {
    // ready to use
}

Тогда это просто .

25
ответ дан 1 December 2019 в 20:01
поделиться

Если вы хотите обновить все значки другим значком, вы может создать небольшое приложение, которое редактирует все файлы * .Designer.vb (в vb.net) и добавляет следующую строку в InitializeComponent:

Me.Icon = New System.Drawing.Icon("C:\PathTo\icon.ico")

Надеюсь, это поможет.

1
ответ дан 1 December 2019 в 20:01
поделиться

Если все ваши формы находятся в одном проекте, вы можете взять dll проекта и использовать отражение для получения каждого типа в dll. Если тип является производным от Form, вы можете установить для свойства Icon все, что захотите. Я не уверен, каковы будут накладные расходы на производительность, если проект будет очень большим.

0
ответ дан 1 December 2019 в 20:01
поделиться

Опция базового класса - это тот, который мы используем.

Если вы ищете альтернативу (не обязательно хорошую), вы можете: 1. Используйте IOC для создания экземпляров всех ваших форм и измените контейнер IOC, чтобы установить значок приложения. 2. Используйте АОП для вставки кода во все формы, которые устанавливают значок приложения.

Лично я бы просто использовал базовый класс ...

4
ответ дан 1 December 2019 в 20:01
поделиться

Мой полезный ответ:

Нет

Было бы неплохо реализовать Microsoft однако, поскольку большинство приложений используют один и тот же значок во всем приложении.

2
ответ дан 1 December 2019 в 20:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: