c # ViewView Tiles view всегда отображается как вид Largeicons [duplicate]

Строка ошибки «Ссылка на объект, не установленная на экземпляр объекта.» указывает, что вы не назначили экземпляр объекта объектной ссылке, и все же вы получаете доступ к свойствам / методам этого объекта.

например: скажем, у вас есть класс под названием myClass и он содержит одно свойство prop1.

public Class myClass
{
   public int prop1 {get;set;}
}

Теперь вы получаете доступ к этому prop1 в каком-то другом классе, как показано ниже:

public class Demo
{
     public void testMethod()
     {
        myClass ref = null;
        ref.prop1 = 1;  //This line throws error
     }
}

выше строки выдает ошибку, потому что ссылка класса myClass объявлена, но не создана, или экземпляр объекта не назначается referecne этого класса.

Чтобы исправить это, вам нужно создать экземпляр (присвоить объект ссылке на этот класс).

public class Demo
{
     public void testMethod()
     {
        myClass ref = null;
        ref = new myClass();
        ref.prop1 = 1;  
     }
}
1
задан Run CMD 21 May 2010 в 21:04
поделиться

1 ответ

ОК, мы это нашли. Магическое заклинание:

Application.EnableVisualStyles();

Мы пропустили эту строку кода, чтобы проверить нашу форму. Если вы не вызываете этот метод, прежде чем создавать свою форму в своем списке, представление TILE будет нарисовано как LARGEICON.

Кажется вполне логичным ... :-(

http://blogs.msdn.com/rprabhu/archive/2003/09/28/56540.aspx

Q Что действительно делает Application.EnableVisualStyles?

Windows XP поставляется с двумя версиями библиотеки Common Controls (comctl32.dll) - версий 5.8 и 6.0. V5.8 отображает элементы управления в стиле «классика», которые вы получаете в Windows NT / 2000 и Windows 9x. используя внешний вид визуальных стилей XP. Поскольку большинство элементов управления Windows Forms основаны на comctl32, то, как они отображаются, зависит от того, какая версия comctl32 используется для рендеринга. По умолчанию v5.8 используется для визуализации клиентской области приложение и v6.0 используются для рендеринга неклиентской области. Именно поэтому вы видите, что строка заголовка и границы окна автоматически отображают «тематические», в то время как элементы управления (такие как Button, TextBox, ListView, ComboBox и т. д.) имеют классический туалет k по умолчанию.

В версии 1.0 Framework способ получить визуальные стили в приложении Windows Forms состоял в том, чтобы отправить файл манифеста с приложением, в котором есть информация, указывающая, что v6.0 comctl32 должен для рендеринга. Хотя это прекрасно работает, многие разработчики считают, что это громоздко для автора, поддерживать и развертывать файлы манифеста. Они почувствовали необходимость уметь делать это программно. Теперь Platform SDK предоставляет API для этого. В принципе, вам нужно создать и активировать контекст активации, в котором в качестве файла манифеста имеется почти такая же информация о перенаправлении DLL. API-интерфейс Activation Context можно использовать, чтобы сделать это подходящим для вашего приложения способом.

Если вы посмотрите на эти API, вы, вероятно, заметите, что они не очень удобны в использовании. В то время как продвинутые разработчики могут обойтись с контекстами активации, это, вероятно, не тот разработчик, который хочет, чтобы какой-то «быстрый и грязный» код получал визуальные стили. Поэтому команда Windows Forms решила обернуть эти API и разоблачить простой метод, который могли бы назвать разработчики, которые изолировали бы их от этих сложностей. Таким образом, по сути, когда вы вызываете Application.EnableVisualStyles, мы настраиваем контекст активации вокруг цикла сообщений приложения, так что вызовы функций comctl32 могут быть правильно перенаправлены на comctl32 v6.0. Таким образом, вам не нужно включать манифест с вашим приложением.

3
ответ дан Run CMD 26 August 2018 в 17:23
поделиться
Другие вопросы по тегам:

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