Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458

.NET Compact Framework и поворот формы

04.10.2009, 23:51. Показов 3974. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникли некоторые трудности при разработке приложения под Windows Mobile 6. По плану, при повороте экрана на 90 градусов, форма должна перерисовываться по новой, чтобы все элементы управления находились так как прежне и не возникал скролл. То есть, приложение то поворачивается, но не перерисовывается...
Знаю, что это можно сделать, но вот уже 2 недели ищу инфу, и все никак не могу найти. Кто знает - подскажите! Заранее благодарен!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.10.2009, 23:51
Ответы с готовыми решениями:

Замена WebClient в .NET Compact Framework
Я использую WebClient для авторизации при помощи куки на веб-сервисе, но в Compact Framework WebClient не поддерживается. class...

[Compact Framework] Ошибка при использовании OpenNETCF.Net.Ftp.FTPWebResponse(): NullReferenceException
Доброго времени суток господа! Вопрос следующий. Использую Compact Framework и для работы с FTP соответственно библиотеку...

В списке Target Framework не выбирается .NET Framework 4 только .NET Framework 4 Client Profile
Свойства проекта (Project -> Properties) -> вкладка Compile -> Advenced complie options -> в списке Target Framework не выбирается .NET...

18
5 / 5 / 1
Регистрация: 23.09.2009
Сообщений: 13
05.10.2009, 03:08
а как насчет просто вызвать обновление Invalidate() ???
тогда все что в обработчике события Paint, и собственно сама перерисовка объектов выполнится...
0
sleepy
 Аватар для sleepwalker
78 / 53 / 6
Регистрация: 29.07.2009
Сообщений: 179
05.10.2009, 03:12
patriot2008, есть класс SystemEvents, который находится в пространстве Microsoft.Win32. Там есть нужное тебе событие. Называется DisplaySettingsChanged.
C#
1
SystemEvents.DisplaySettingsChanged +=new System.EventHandler(displaySettingsChanged);//В функции displaySettingsChanged выполняй свои действия
0
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
05.10.2009, 22:56  [ТС]
Сори, конечно, но я что-то не могу найти такого события, пересмотрел уже все пространства имен... не смог найти ни SystemEvents, ни DisplaySettingsChanged. Это точно все в пространстве Microsoft.Win32 для .NET Compact Framework ?

Добавлено через 1 час 1 минуту
Цитата Сообщение от xXxVano Посмотреть сообщение
а как насчет просто вызвать обновление Invalidate() ???
тогда все что в обработчике события Paint, и собственно сама перерисовка объектов выполнится...
Перерисовывать то толком ничего не нужно... Нужно просто по новой разместить элементы управления...
0
sleepy
 Аватар для sleepwalker
78 / 53 / 6
Регистрация: 29.07.2009
Сообщений: 179
05.10.2009, 23:58
patriot2008, хм, да. Проглядел я. Сорри.

Добавлено через 56 минут
В общем, подумал я тут немного по этому вопросу. Как вариант, можно обрабатывать событие Resize у формы. И использоваться класс SystemSettings, в котором есть ScreenOrientation. В зависимости от угла, на который повернут экран - менять позиции элементов.
Например, так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System;
using Microsoft.WindowsCE.Forms;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
namespace SmartDeviceProject1
{
    public partial class Form1 : Form
    {
        bool orientationChanged = false;
        public Form1()
        {
            InitializeComponent();
            this.Resize += new EventHandler(Form1_Resize);
        }
 
        void Form1_Resize(object sender, EventArgs e)
        {
            if (SystemSettings.ScreenOrientation != ScreenOrientation.Angle0)
            {
                //Тут меняем позиции элементов
                switch (SystemSettings.ScreenOrientation)
                {
                    case ScreenOrientation.Angle180:
                        button1.Location = new Point(18, 18);
                        break;
                    case ScreenOrientation.Angle270:
                        button1.Location = new Point(27, 27);
                        break;
                    case ScreenOrientation.Angle90:
                        button1.Location = new Point(9, 9);
                        break;
                }
                orientationChanged = true;
                return;
            }
            else if (orientationChanged == true)
            {
                button1.Location = new Point(0, 0);
                orientationChanged = false;
            }
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }
    }
}
З.Ы. Необходимо подключить сборку Microsoft.WindowsCE.Forms и пространство using Microsoft.WindowsCE.Forms;.
1
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
06.10.2009, 00:33  [ТС]
хм... Вот это вариант... На днях попробую так сделать, может поможет...
Как сделаю все - отпишусь! Спасибо!
0
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
17.10.2009, 01:12  [ТС]
Вообщем, sleepwalker, спасибо тебе, помогло, элементы формы перерисовывает, все, вроде бы норм...

Но вот проблема теперь еще в другом: тестил я свою прогу на девайсе с разрешением экрана 640х480. И при перерисовке задавал координаты именно для этого разрешение. Вопрос: а будет ли прога также нормально перерисовывать для девайсов с разрешением 320х240? (то есть также само перерисовывать, но для таких экранов? )
0
sleepy
 Аватар для sleepwalker
78 / 53 / 6
Регистрация: 29.07.2009
Сообщений: 179
17.10.2009, 02:25
Думаю, что нужно просчитывать координаты в зависимости от разрешения экрана.
Можно потестить на виртуальном Pocket PC)
1
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
17.10.2009, 12:41  [ТС]
Цитата Сообщение от sleepwalker Посмотреть сообщение
Думаю, что нужно просчитывать координаты в зависимости от разрешения экрана.
Вот, а как именно? Как получать разрешение экрана?
Там есть еще одно свойство формы AutoScaleMode. Оно отвечает как будут перерисованы контролы на форме. Я постаил Dpi (то есть в зависимости от количества точек на дюйм). Может это оно?

Что касается эмуляторов, то у меня на компе они почему-то на работают. Может подскажите где их можно скачать?
0
sleepy
 Аватар для sleepwalker
78 / 53 / 6
Регистрация: 29.07.2009
Сообщений: 179
17.10.2009, 16:35
patriot2008, эмулятор должен идти с windows mobile sdk, если не ошибаюсь.
0
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
17.10.2009, 16:45  [ТС]
У меня ни один из эмуляторов не работает... Может переустановить студию полностью?
0
sleepy
 Аватар для sleepwalker
78 / 53 / 6
Регистрация: 29.07.2009
Сообщений: 179
20.10.2009, 10:19
patriot2008, по поводу размеров экрана - можно использоваться класс Screen. В нем есть статический метод, который возвращает Rectangle с размерами. В зависимости от полученного уже нужно играться.
А по поводу эмуляторов - попробуй качнуть отдельно Windows Mobile SDK. Там в комплекте идет эмулятор.
1
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
07.11.2009, 21:50  [ТС]
Стоп! немного непонятно... Метод Rectangle в каком формате будет возвращать размер? И еще, размеров бывает то оч. много (240х240, 320х240, 480х480 и т.д.). И если отдельно все прописывать для каждого, то очень много получится... Должны быть средства попроще. Кто-то знает ?
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
08.11.2009, 09:44
Посчитайте приблизительно в процентном сотношении координаты элемента от края окна по отношению ко всей его ширине. Или сделайте обычным делением.
0
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
08.11.2009, 12:27  [ТС]
Цитата Сообщение от body90 Посмотреть сообщение
Посчитайте приблизительно в процентном сотношении координаты элемента от края окна по отношению ко всей его ширине.
Я посчитал, а дальше как? как задать это процентное соотношение?

Добавлено через 44 минуты
Может кто-то знает, как програмно получить разрешение экрана девайса?
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
08.11.2009, 15:42
1)Кажется, в классе screen есть метод, который возвращает разрешение экрана.
2) К примеру, у вас на тестовом устройстве ширина экрана 640, координата элемента 32, отсюда 640/32 = 20. Значит узнаем ширину любого экрана делим на 20 и получаем координату на новом экране. Присваиваем это значение соответствующему свойству объекта. И так для каждого элемента по ширине и высоте.
1
sleepy
 Аватар для sleepwalker
78 / 53 / 6
Регистрация: 29.07.2009
Сообщений: 179
08.11.2009, 16:57
В таком случае может случиться наложение одного контрола на другой, мне кажется.
0
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
08.11.2009, 17:57
Именно это и будет происходить если не просчитывать и размеры элементов. Понимаю, что работы много, но на много меньше, чем писать под каждый экран отдельно и на много универсальнее
1
 Аватар для patriot2008
73 / 73 / 10
Регистрация: 04.12.2008
Сообщений: 458
08.11.2009, 18:31  [ТС]
Спасибо, я попробую... а есть ли еще какие-то способы? Просто, вдруг такой способ забракуют... Знаю, что сейчас большинство приложений поддерживает разные разрешения. Может там используется какой-то метод попроще?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.11.2009, 18:31
Помогаю со студенческими работами здесь

Как изменить ширину столбца DataGrid при импорте с БД в .NET Compact Framework
имеется вот такой вот код импорта таблицы из БД в DataGrid private string ConnectString() { string connectionString; ...

Ошибка компляции после смены платформы с Windows CE (Compact Framework) на Windows (NET Framework)
Здравствуйте! Переделываю проект работавший под управлением WinCE чтобы он работал под WinXP. Сменил платформу в настройках...

Listbox горизонтальный scroll (.NET Compact Framework)
Можно ли как то сделать горизонтальный скрол?

Рисование в .Net Compact Framework c дробными числами
Объясните пожалуйста как рисовать линии в .Net Compact Framework с дробными числами типа float. Проблема в том, что в в .Net CF не...

Как изменить ширину самой первой колонки выбора строки в DataGrid (.NET Compact Framework)?
Имеется заполненная DataGrid, которая чуточку не влезает на экран! Вопрос: Как можно уменьшить ширину неиспользуемой колонки выбора строки?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru