Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Календарь


Автор: DenWPF 17.11.2009, 22:46
Нужно вывести календарь, как это сделать?
есть готовые классы? или решения??
или надо самому?

если самому то помогите с форматированием.

Автор: KuMa1104 17.11.2009, 23:07
DenWPF а стандартный  MonthCalendar не подходит?

Автор: DenWPF 17.11.2009, 23:12
ээээ не понимаю как он работает.
это Формс?

Автор: KuMa1104 17.11.2009, 23:15
DenWPF на форму перетащи из tool box элемент  MonthCalendar  и вуаля!!!

Автор: DenWPF 17.11.2009, 23:26
Все бы не чего но в место него у меня тупо белый лист и работает контекстное меню.
и не хочу так, вообщем по порядку.

вывожу с верху 
string.Format("{0:m} {0:yyyy}", d_now)
а потом не додумался ещё.
надо:
1. вывести строку с названиями ПН ВТ СР ЧТ ПТ Сб, но это сделать через формат так как я хочу что бы если что то англ тоже выводилось.(по настройкам компа)
Так это решено
Код

for (int i = 1; i <= 7; i++)
            {
                DateTime date = new DateTime(1,1,i);
                e.Graphics.DrawString(String.Format("{0:ddd}", date), new Font("Tahoma", 15), brush, new PointF(SystemInformation.PrimaryMonitorSize.Width - 250 + i * 30, 30));
            }


2. вывести все дни в нужном порядке. - почти решил
Код

            for(int i=1;i<= DateTime.DaysInMonth(d_now.Year,d_now.Month);i++)
            {
                DateTime date = new DateTime(d_now.Year, d_now.Month, i);
                for (int y = 1; y <= 7;y++ )
                {
                    string str = String.Format("{0:ddd}", date);
                    if(str == _calc[y-1])
                    {
                        e.Graphics.DrawString(date.Day.ToString(), new Font("Tahoma", 15), brush, new PointF(SystemInformation.PrimaryMonitorSize.Width - 250 + y * 30,30+ 30*[B]i));
                    }
                }
                       
            }

теперь надо просто узнать какая неделя по введеному дню и задать на место И в выделеном коде

Автор: KuMa1104 18.11.2009, 11:28
Цитата(DenWPF @  17.11.2009,  23:26 Найти цитируемый пост)
Все бы не чего но в место него у меня тупо белый лист и работает контекстное меню.и не хочу так
 

Эээ так он у тебя не работает, и он к томуже тебе не нравиться. Я правильно понял.

Хм.. а может стоит попробовать поискать в нете уже готовый контрол, может он подойдёт лучше.

Я так понял что ты в качестве альтернативы, решил собственное подобие на форме нарисовать.

Цитата(DenWPF @  17.11.2009,  23:26 Найти цитируемый пост)
теперь надо просто узнать какая неделя по введеному дню и задать на место И в выделеном коде


Т.ё. надо выделить нужный день другим цветом? Если ты просто ресуеш на форме то ИМХО тогда уж лучше задать иасив обектов DayMas []  дни 
Код

class DayMas
{
// .....
}


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

Код

в перересовке

if(дни[i].Select )
{
рисуем одним цветом
}
else
{
другим
}


Автор: DenWPF 18.11.2009, 12:02
нет, вы не поняли, мне надо просто рисунок я рисую graphics.DrawSting.
формы не использую

Как узнать по году, неделе и дню, какая это неделя?

Автор: KuMa1104 18.11.2009, 19:05
Цитата(DenWPF @  18.11.2009,  12:02 Найти цитируемый пост)
нет, вы не поняли, мне надо просто рисунок я рисую graphics.DrawSting.формы не использую

 А, просто интересно на чём вы рисуете?

Цитата(DenWPF @  18.11.2009,  12:02 Найти цитируемый пост)
Как узнать по году, неделе и дню, какая это неделя?

Т.ё. по неделе узнать какая это неделя? smile 

Может вы имели в виду....
12.07.2009 - что за номер недели вам нужно узнать?
 Какой она по счёту идёт 1ой 2ой 3ей или 4ой в месяце?
Или вообще её номер в году к примеру 23?

Автор: DenWPF 18.11.2009, 20:50
номер недели в месяце. 1 2 3 4

Автор: KuMa1104 18.11.2009, 21:28
ИМХО получи день с которого начинался месяц.
Например воскресенье это 1ое число. 1-ая неделя значит 18 число это 4 ая неделя  (0 + (2 + 7)) + 4

Максимум может быть до 6 недель.

Автор: DenWPF 18.11.2009, 22:05
аррр, сори расчет не понял.

Автор: KuMa1104 18.11.2009, 22:49
Зы ну это очень образно.

Предположим что 1ое число месяца это субота, значит 1ая неделя состоит из 2х дней суб. и воскресенье. предположим что сегодня 10е число, посчитаем дни


1 ая неделя         2 день (суб + воскресенье)
2 ая неделя         7 день
3 ая неделя         1 день

значит 10 число это понедельник. 

Аналогично с 
Цитата(KuMa1104 @  18.11.2009,  21:28 Найти цитируемый пост)
Например воскресенье это 1ое число. 1-ая неделя значит 18 число это 4 ая неделя  (0 + (2 + 7)) + 4


А чёрт я там имел в виду (1 + (2 * 7)) + 3 (среда) это я виноват sory...

Автор: DenWPF 19.11.2009, 00:37
не понял, ты предлагаешь для каждого высчитывать???
нету единой формулы?

Автор: KuMa1104 19.11.2009, 12:17

Цитата(DenWPF @  19.11.2009,  00:37 Найти цитируемый пост)
не понял, ты предлагаешь для каждого высчитывать???

Я вообще предлогал использовать календарь, какой нибудь.

Цитата(DenWPF @  19.11.2009,  00:37 Найти цитируемый пост)
нету единой формулы?

Почему нет? Есть.
Я предложил идею а не алгоритм, его уж сам составиш, конкретно под свою задачу.
а идея в том, что сначало досчитываеш до конца 1ой недели.
Т.е.  если 1ое число месяца воскресенье, то думаю понятно что до конца недели 1 день.

значит n_week = 1

Потом X  это твоя дата например 30 число в месяце. значит делаем так.

int n_week + = (Х-1)/7 = (30 - 1)/7 = 4 
значит это уже как минимум 5 ая неделя а потом проверяем остаток

if((Х-1)%7 != 0)
week++;

Таким образом 6 неделя. открой календарь убедись, это для нынешнего месяца



Автор: tol05 19.11.2009, 13:28
http://msdn.microsoft.com/en-us/library/system.globalization.calendar.getweekofyear.aspx

не оно?

Автор: DenWPF 19.11.2009, 18:11
оно. спасибо. всё календарь сделал. буду тестить культуры

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)