Обработка различных разрешений в Visual Studio 2008 для.NET CF

Хорошо, либо вынудите вашу команду использовать правильные типы, например, с помощью resharper , который может показать предупреждение или ошибку, если вы используете var, или скажите им, что они должны по крайней мере указать типы аргументов:

var data = new[] {
    new Dictionary (){
        {"Name" , "ITWeiHan" }
    }
};

// calls wrong overload
data.Execute(); //calls IEnumerable
// calls corrrect
data.Execute(); //calls IEnumerable>>

public static void Execute(this IEnumerable>> enums)
{
    Console.WriteLine("IEnumerable>>");
}

public static void Execute(this IEnumerable enums)
{
    Console.WriteLine("IEnumerable");
}

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

public static void Execute(this IEnumerable> dictionaries)
{
    var enums = (IEnumerable>>) dictionaries;
    enums.Execute();
}

[ 118] Теперь члены вашей команды могут использовать var и не нужно указывать аргументы типа.

5
задан Azlam 18 November 2008 в 05:54
поделиться

5 ответов

Не слушайте того идиота MusiGenesis. Намного лучший способ обработать различные разрешения экранов для устройств Windows Mobile состоит в том, чтобы использовать наследование форм, которое может быть прикреплено на существующее приложение CF с минимальным усилием.

В основном Вы разрабатываете каждую форму для стандарта 240x320 экран. Когда необходимо перестроить форму для нового разрешения (скажем, 240x240), Вы добавляете новую форму к своему проекту и имеете его, наследовались Вашей исходной 240x320 форме:

public partial class frmDialog240x240: frmDialog

вместо просто Формы:

public partial class frmDialog240x240: Form

как обычный. На Вашей исходной форме необходимо установить свойство Modifiers каждого управления к Защищенному (вместо Частного значения по умолчанию). В разработчике для Вашей новой формы Вы будете видеть все средства управления на форме, которой Вы наследовались, и можно переместить их и изменить размер их, поскольку Вы считаете целесообразным размещать новые экранные размеры (это не будет влиять на расположение исходной формы).

Когда Ваша программа работает, для него легко проверить разрешение экрана устройства, на котором это работает, и создайте соответствующую форму (метод фабрики хорош для этого). Ваша новая форма наследовала все от старой формы, но использует Ваш новый пользовательский макет.

Этот подход позволяет Вам избегать дублирования кода, потому что нет никого.

6
ответ дан 18 December 2019 в 12:02
поделиться

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

int screenWidth = Screen.PrimaryScreen.Bounds.Width;
int workingHeight = Screen.PrimaryScreen.WorkingArea.Height;
5
ответ дан 18 December 2019 в 12:02
поделиться

Этот код работал на меня в определении разрешения экрана динамично:

[DllImport("coredll.dll", EntryPoint = ("GetSystemMetrics"))]
public static extern int GetSystemMetrics(int nIndex);

private const int SM_CXSCREEN = 0;
private const int SM_CYSCREEN = 1;

private int width = GetSystemMetrics(SM_CXSCREEN);
private int height = GetSystemMetrics(SM_CYSCREEN);

Я не помню это из вершины моей головы, но существует также способ получить Экранную Ориентацию. Они помогли бы объединить некоторый код в едином классе.

Я настоятельно рекомендовал бы создать единое решение для всех разрешений. У Вас могло быть столько проектов, сколько Вы хотите под ними решение. Этими проектами могли быть Приложения Windows Forms, проекты Библиотеки Dll или Настроенные Проекты.

Я стремился бы создавать единственный Проект Приложения Windows Forms. Я использовал бы вышеупомянутую технику и прочитал бы статические изображения из Файловой системы. Если это не работает на Вас, и/или Вы предпочитаете читать свои изображения как ресурсы, затем создавать 'механизм' dll проект, содержа весь код, который характерен для всех разрешений. Добавьте затем вывод этого проекта как ссылка на столько проектов Приложений Windows Forms, сколько Вам нужно.

2
ответ дан 18 December 2019 в 12:02
поделиться

Нет никакого простого ответа на этот вопрос. Разработку форм для обработки различных разрешений экранов легко сделать в Windows, где даже самый маленький размер экрана обычно - 600 x 800. В мире CF экран может быть всего 240 x 240 (или меньший для смартфонов) или столь же большой как 640 x 480 (или больше). Привязка и Прикрепление имеют тенденцию работать очень плохо по этим диапазонам размера.

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

Другая опция состоит в том, чтобы разработать каждую форму для разрешения. Например, если у Вас есть форма, которая отображает данные в сетке и поле комбинированного списка фильтра выше ее, можно написать код в событии Resize формы, которое корректирует размеры сетки для заполнения независимо от того, что место является свободным.

Альтернативная опция к осведомленному о разрешении коду состоит в том, чтобы создать отдельную форму для каждого разрешения для конкретной функции UI. Это - больше работы и ведет для кодирования дублирования, конечно, но для некоторых конкретных функций это - просто что-то, что необходимо сделать. Пока Вы абстрагируете общую логику, Вы будете в порядке.

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

2
ответ дан 18 December 2019 в 12:02
поделиться

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

Для каждой формы я создаю 'повторно создавать' метод, который запущен каждый раз, когда форму показывают или изменяют. В том методе я обычно устанавливал местоположение, размер и, при необходимости, размер шрифта для каждого управления на форме. При размещении управления мой мыслительный процесс:

  1. Хорошо для обычного устройства портрета?
  2. Хорошо для обычного альбомного устройства?
  3. Хорошо для квадратного устройства?
  4. Хорошо для VGA (640x480) (высокий DPI) устройство?

Для размеров шрифта и контакта с высоким DPI (Точки на дюйм) устройства VGA, я использую свойство-:

CurrentAutoScaleDimensions. Высота / 96

... произвести масштабный коэффициент шрифта. (Стандартными устройствами являются 96 DPI),

Как последнее прибежище можно использовать условное выражение (если) операторы в Вашем повторно создавать код для тестирования на различные экранные размеры/формы.

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

0
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

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