Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры


Выпуск # 749

Очередной выпуск рассылки! За последнее время на сайте произошло столько всего, столько всего, что все просто не уместилось в этот выпуск! Но ничего, ведь вы всегда можете ознакомиться со всеми обновлениями непосредственно посетив сайт. Кстати, помимо изменения в содержании Kbyte.Ru, появлении новых интересных материалов, проект постоянно совершенствуется технически, и вы можете принять в этом непосредственное участие, присылая свои идеи и предложения.
Надеюсь, этот выпуск будет интересен для вас. Если вы хотите увидеть в следующих выпусках что-то конкретное, напишите мне об этом на ящик subscribe@kbyte.ru.


Содержание выпуска

Читайте в этом выпуске:

Если у вас есть вопросы по программированию или работе с компьютером, не стесняйтесь, спрашивайте.

Форумы Kbyte.Ru

На форумах Kbyte.Ru постоянно появляются новые интересные темы и обсуждения. В этом выпуске представлены лишь новые темы, с момента прошлой рассылки.

Кстати, любой желающий может на форумах Kbyte.Ru совершенно свободно получить помощь грамотных специалистов в области программирования, да и в целом информационных технологий.

Задать свой вопрос прямо сейчас

Такой вопрос: на всей форме растянут textbox кидаю на него в событии paint рисую вертикальный градиент
черный
Transparent
После компиляции вторая половина всё равно не прозрачная как это исправить?

[- к содержанию -]

Ответ #1 @Shark1 06.11.2013 16:37
WinForms ... загадка программиста ...

[- к содержанию -]

Ответ #2 @Crash666 06.11.2013 16:56
Ответ #3 @Алексей Немиро 06.11.2013 17:37
Непонятно, что имеется ввиду.
У обычного TextBox нет события Paint. Или ты делаешь свой?

Если ты хочешь нанести градиент на форму, то прозрачный цвет будет прозрачным на форме, т.е. вместо него будет цвет фона формы.

В общем, код в студию!

[- к содержанию -]

Ответ #4 @Crash666 06.11.2013 17:45
Код паинта на picturebox
Dim lgb2 As New Drawing2D.LinearGradientBrush(New Rectangle(0, 0, PictureBox1.Width, PictureBox1.Height), Color.Transparent, Color.black, 90)
    g.FillRectangle(lgb2, 0, 0, PictureBox1.Width, PictureBox1.Height)

[- к содержанию -]

Ответ #5 @Алексей Немиро 06.11.2013 18:10
И что именно не работает?

Прозрачный цвет - прозрачный? Сам отвечу, да, прозрачный.
Или ты ожидал, что он прожжет PictureBox, форму и все что между ними насквозь?
Нет, это невозможно. По крайней мере таким образом. Можно сказать, что PictureBox для градиента - это слой. А форма - еще слой для PictureBox.
Если слои будут прозрачными, то и Color.Transparent будет полностью прозрачным. Это как стекло - оно прозрачное, но это не значит, что все что в него попадает, становится прозрачным.

Если ты хочешь сделать полупрозрачный PictureBox, за которым будут видны другие элементы - в этом нет смысла, т.к. элементы не будут доступны. Но как вариант, можно сделать полупрозрачную форму (свойство Opacity).

Еще вариант - использовать PNG с прочными цветами. Но это будет то же, что и при рисовании градинаета кодом.

[- к содержанию -]

Добавить свой ответ в эту тему · В теме есть еще 22 ответов. Смотреть все ответы.
XML @capetownn 05.11.2013 14:50
Среда Visual Basic STUDIO’2010 Professional
Можно ли в документе XML, созданном с помощью
XSD-языка, записать комментарий в нескольких строках?
Например:
<!—строка_1 комментария
строка_2 комментария
строка_3 комментария --> 
Спасибо.

[- к содержанию -]

Ответ #1 @Алексей Немиро 05.11.2013 19:33
Через XmlTextWriter, у него есть метод WriteRaw, который позволяет записывать данные, как есть, без изменений:
    Using w As New MemoryStream()
      Using x As New Xml.XmlTextWriter(w, System.Text.Encoding.UTF8)
        x.WriteStartDocument()'открываем документ
        x.WriteStartElement("kbyte")'создаем элемент
        x.WriteRaw("<!--строка_1 комментария" & vbCrLf & "строка_2 комментария" & vbCrLf & "строка_3 комментария-->")'пишем комментарий
        x.WriteEndElement()'закрываем элемент
        x.WriteEndDocument()'закрываем документ
        x.Flush()'важно, иначе в поток ничего не запишется
        MessageBox.Show(System.Text.Encoding.UTF8.GetString(w.ToArray()))
      End Using
    End Using
Вместо MemoryStream может быть любой Stream, например поток записи в файл.

[- к содержанию -]

Добавить свой ответ в эту тему
Как "красиво" , удобочитаемо, наглядно показать приведенный
Листинг 3.1. Схема XSD записной книжки?
Имею ввиду с отступами слева

<?xml version="l.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="notebook" type="notebookType" /> 
<xsd:complexType name="notebookType">
<xsd:element name="person" type="personType" 
minOccurs="0" maxOccurs="unbounded" />
</xsd:complexType>
<xsd:complexType name="personType"> 
<xsd:sequence>
<xsd:element name="name">
<xsd:complexType>
<xsd:attribute name="first"  type="xsd:string"
use="optional" /> <xsd:attribute name="second" type="xsd:string"
use="optional" /> <xsd:attribute name="surname" type="xsd:string"
use="required" /> </xsd:complexType>
</xsd:element>
<xsd:element name="birthday" type="ruDate" minOccurs="0" />
<xsd:element name="address" type="addressType" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="phone-list" type="phone-listType" minOccurs="0" />
</xsd:sequence> </xsd:complexType>
<xsd:complexType name="addressType" > <xsd:sequence>
<xsd:element name="street" type="xsd:string" />
<xsd:element name="city"  type="cityType" />
<xsd:element name="zip"   type="xsd:positivelnteger" />
</xsd:sequence> </xsd:complexType>
<xsd:complexType name='cityType'>
<xsd:simpleContent>
<xsd:extension base='xsd:string' >
<xsd:attribute name='type' type='placeType'
default='город' /> </xsd:extension> </xsd:simpleContent>
</xsd:complexType> <xsd:simpleType name="placeType">
<xsd:restriction base = "xsd:string">
<xsd:enumeration value="ropofl" />
<xsd:enumeration value="nocenoK" />
<xsd:enumeration value="flepeBHH" /> </xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="phone-listType">
<xsd:element name="work-phone" type="xsd:string"
minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="home-phone" type="xsd:string"
minOccurs="0" maxOccurs="unbounded" />
</xsd:complexType> <xsd:simpleType name="ruDate">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]{2}.[0-9]{2}.[0-9]{4}" /> </xsd:restriction>
</xsd:simpleType> </xsd:schema>
Спасибо.

[- к содержанию -]

Ответ #1 @Алексей Немиро 05.11.2013 19:03
Как "красиво" , удобочитаемо, наглядно показать приведенный
Где показать? :)

Браузеры показывают структуру xml в удобном виде.

[- к содержанию -]

Ответ #2 @capetownn 06.11.2013 14:55
Алексей, здравствуйте.
Приведенный вчера текст XML-document я скопировал из книги Ильдара Забиббуллина
"Самоучитель XML.PDF" (потом преобразовал в WinWord-document), вставил в Notepad++,
затем на Ваш сайт, выбрал код в ComboBox HTML,XML, но на выходе
текст не отформатировался.
Как отформатировать? Например, несколько вложенных операторов if
if
  if
    if
     ................
    endif
  endif
endif
допускаю, FineREader не распознал.
СПАСИБО.

[- к содержанию -]

Ответ #3 @Алексей Немиро 06.11.2013 15:26
В тексте xml есть ошибки, например: <?xml version="l.0"?>, буква L вместо единицы.

На сайте нет функции форматирования, только подсветка синтаксиса.

А в Visual Studio форматирование можно выполнить через меню Правка -> Форматировать документ

[- к содержанию -]

Ответ #4 @capetownn 06.11.2013 17:26
Алексей,
ИСКПЕННЕ БЛАГОДАРЮ.

[- к содержанию -]

Добавить свой ответ в эту тему
Привет всем! Народ подскажите можно ли в VB.net замутить вращение стандартной кнопки (Button) и если можно то как
это реализовать ну или где про это можно почитать.

Заранее благодарю !!

[- к содержанию -]

Ответ #1 @Dest 04.11.2013 21:43
Если тебя интересует вращение типо как сматреть на рулетку сверху, то тут уж лучше капать в сторону WPF, стандартными средствами GDI мне кажется это не получится

[- к содержанию -]

Ответ #2 @Алексей Немиро 05.11.2013 14:20
Можно нарисовать и при помощи GDI. Примера перевертывания именно кнопки наверняка не удастся найти, но наклонить изображение на определенный угол достаточно легко, например, при помощи Graphics.RotateTransform.

Нарисовать кнопку можно методом ControlPaint.DrawButton

Настоящую кнопку в процессе вращения придется прятать. Это самый простой вариант.

Вращать "живую" кнопку будет сложнее. Главным образом сложность в размере, т.к. при вращении, размер кнопки должен увеличиться. Копать нужно в сторону создания своей кнопки на основе стандартной и заменить метод прорисовки своим кодом.

[- к содержанию -]

Ответ #3 @Shark1 05.11.2013 20:47
Можно добавить в ваш проэкт пользовательский элемент управления WPF





В этот элемент вставляете кнопку ...



Потом на форму добавляете этот UserControl



Результат будет выглядеть примерно так :



См. прикрепленный файл примера. Удачи.

[- к содержанию -]

Добавить свой ответ в эту тему
Пишу веб приложение(технология mvc3 с использованием entity framework 4.0)
в процессе написания возникла потребность в логировании дейсвий пользователей, а именно создание, редактирование и удаление записей в БД.

Основное требавание к логу:
1. вести лог изменений только конкретных таблиц
2. в режиме редактирования вести лог только тех полей которые изменились.

Немного побродив по просторах интернета нарыл вот что

штука №1 источник Логирование .Net MVC 3 за 30 минут
нужно иметь таблицу Log, модель представления и репозиторий этой таблицы, обработчик события PreRequestHandlerExecute в Global.asax
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            if (Request.RequestContext.RouteData.Values["controller"] == null)
                return;            
            LogRepository logRepo = new LogRepository(new DataContext(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString));
            string Controller = (Request.RequestContext.RouteData.Values["controller"]!=null?Request.RequestContext.RouteData.Values["controller"].ToString():"PanelSpecifications");
            string Action = (Request.RequestContext.RouteData.Values["action"]!=null?Request.RequestContext.RouteData.Values["action"].ToString():"Index");
            int counter = 0;
            string IP = Request.UserHostAddress;
            string UserName = User.Identity.Name;
string GUID = Guid.NewGuid().ToString();
            // start mark
            logRepo.Add(new Log()
                {
                    Controller = Controller,
                    Action = Action,
                    IP = IP,
                    UserName = UserName,
                    Number = counter,
                    Field = "StartLog",
                    Value = "StartLog",
            GUID = GUID
                }
            );
            counter++;
            // full route data
            foreach (var item in Request.RequestContext.RouteData.Values)
            {
                if(item.Key.Trim().ToLower() != "controller"
                    && item.Key.Trim().ToLower() != "action")
                {
                    logRepo.Add(new Log()
                            {
                                Controller = Controller,
                                Action = Action,
                                IP = IP,
                                UserName = UserName,
                                Number = counter,
                                Field = item.Key??"",
                                Value = Convert.ToString(item.Value)??"" ,
             	        GUID = GUID
                            }
                    );
                    counter++;
                }
            }
            // Request Query String
            foreach (string key in Request.QueryString.Keys)
            {
                string Value = Convert.ToString(Request.QueryString[key]);
                logRepo.Add(new Log()
                    {
                        Controller = Controller,
                        Action = Action,
                        IP = IP,
                        UserName = UserName,
                        Number = counter,
                        Field = key??"",
                        Value = Value??"" ,
                GUID = GUID
                    }
                );
                counter++;
            }
            // Request Form Values
            foreach (string key in Request.Form.Keys)
            {
                string Value = Convert.ToString(Request.Form[key]);
                logRepo.Add(new Log()
                {
                    Controller = Controller,
                    Action = Action,
                    IP = IP,
                    UserName = UserName,
                    Number = counter,
                    Field = key??"",
                    Value = Value??"" ,
            GUID = GUID
                }
                );
                counter++;
            }
            // save changes
            logRepo.SubmitChanges();
        }
В лог пишет "мох и болото"... Не только добавление и редактирование записей, но и простое лазание по сайту. В принципе чуть подправить код, изменить структуру таблицы... можно использовать.

штука №2 источник MVC3 как узнать какие поля изменились после редактирования

этот способ очень понравился
во время записи/редактирования ведется лог. То есть ведется лог только тех данных, которые ты сам и определил.
public void SavePay(PayModel newPay)
        {
            var old = db.pay.FirstOrDefault(x => x.id == newPay.Id);
            if (old != null)
            {
                Dictionary<string, object> oldFields = old.GetType().GetProperties()
                                           .ToDictionary(x => x.Name, x => x.GetValue(old, null));

                old.field1 = newPay.field1 ;
                old.field2= newPay.field2;
                old.field3= newPay.field3;
                .....
                old.field21= newPay.field21;
                old.field22= newPay.field22;
                old.field23= newPay.field23;

                Dictionary<string, object> newFields = old.GetType().GetProperties()
                                           .ToDictionary(x => x.Name, x => x.GetValue(old, null));
                db.SaveChanges();
    
                foreach (var oldField in oldFields)
                {
                    if (newFields.Keys.Contains(oldField.Key))
                    {
                        if (oldField.Value != null)
                        {
                            if (oldField.Value.ToString() != newFields[oldField.Key].ToString())
                            {
                               //нашли поля которые изменены. Можно записать вот такой подробный лог
                               // поле oldField.Key изменили c oldField.Value на newFields[oldField.Key].ToString()
                            }
                        }
                    }
                }

            }
        }

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

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

[- к содержанию -]

Ответ #1 @Алексей Немиро 01.11.2013 12:23
Я использую свою ORM, отслеживание изменений полей реализовано внутри (в базовом классе). Чтобы включить отслеживанием изменений, достаточно добавить полю соответствующий атрибут.

А общую идею я описал в статье Ведение журнала изменений объектов в .NET Framework. Там не готовое решение, статью я специально для себя написал, чтобы не забыть. А в своей библиотеке реализацию логирования сделал несколько позже и немного по-другому.

По коду проверки изменений, у меня он с годами стал выглядеть так:
Public Function DataIsChanged(ByVal p As PropertyInfo) As Boolean
    If _OriginalValues Is Nothing Then Return False
    'если в памяти нет значения для указанного свойства, возвращаем False - данные не менялись
    If Not _OriginalValues.ContainsKey(p.Name) Then Return False
    Dim v As Object = p.GetValue(Me, Nothing)
    If _OriginalValues(p.Name) Is DBNull.Value AndAlso (v IsNot DBNull.Value AndAlso v IsNot Nothing) Then Return True
    If p.PropertyType Is GetType(String) AndAlso (String.IsNullOrEmpty(v) AndAlso (_OriginalValues(p.Name) Is DBNull.Value OrElse String.IsNullOrEmpty(_OriginalValues(p.Name)))) Then Return False
    If v Is Nothing AndAlso (_OriginalValues(p.Name) IsNot Nothing AndAlso _OriginalValues(p.Name) IsNot DBNull.Value) Then Return True
    If v Is Nothing AndAlso _OriginalValues(p.Name) Is Nothing Then Return False
    If v Is Nothing Then Return False
    'некоторые типы данных нельзя сравнивать оператором =, используем оператор Is - инвертно IsNot
    If v.GetType().BaseType() IsNot Nothing AndAlso v.GetType().BaseType() Is GetType(Array) Then Return v IsNot _OriginalValues(p.Name)
    If v.GetType() Is GetType(Guid) Then Return v IsNot _OriginalValues(p.Name)
    If v.GetType() Is GetType(Nullable(Of )) Then Return v IsNot _OriginalValues(p.Name)
    'остальные можно сравнивать оператором =
    Return Not _OriginalValues(p.Name) = v
End Function
поделитесь инфой вообще зачем так делают: несколько проектов в одном солюшене..
Это удобно. Например, если модель будет в отдельном проекте, ее легко можно будет использовать и в других проектах.
У меня сайты обычно состоят из трех-четырех отдельных проектов. В последующем некоторые отдельные части сайтов используются, как есть, в других сайтах. Не нужно писать или копировать код туда-сюда.

Например, foxtools.ru. Состоит из:
1. foxtools.ru
2. api.foxtools.ru
3. qr.foxtools.ru
4. scr.foxtools.ru
5. FoxTools.Lib.dll
6. FoxTools.Models.dll
7. FoxTools.WebShoter.exe

1, 2, 3, 4 -ый - независимые сайты, они используют общий 6-ой проект.
1-ый использует 5-ый.

Если бы FoxTools.Models.dll была у каждого сайта своя, то в каждом проекте был бы одинаковый код. Если в нем обнаружится ошибка, или потребуется модернизация, мне пришлось бы менять его как минимум в четырех проектах, в которых, со временем, одинаковый код может начать немного отличаться от первоначально, что еще сильнее усложнит работу с ним.

Еще есть Хитрый стрелок экранов, он в отдельном решении (solution), но это из-за того, что он с открытым исходным кодом (Open Source). Так та мне было бы удобней его держать в основном решении, под номером восемь (и девять - там два проекта, сам Хитрый стрелок и установщик).

При командной работе, удобно разделять проект на отдельные части.

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

Что касается хранения данных в коллекции, это зависит от объема данных. Если там тексты статей, файлы, то естественно, это сильно отразится на расходовании оперативной памяти, да и процесс сравнения может затянуться. А если там обычные данные, небольшие поля, числа, то расход памяти будет несущественным, процесс сравнения и логирования будет быстрым, так что можно сказать, что это вообще будет незаметно.

Что касается записи журнала. Лучше всего сделать DataTable и наполнять его изменениями. Затем, после сохранения основных данных, перенести DataTable в базу. Либо через INSERT INTO (но не кучей запросов, а сделать один), но лучше через SqlBulkCopy - это позволит перенести данные из DataTable в базу, без дополнительных заморочек, и скорость будет раз в сто выше, чем через INSERT INTO.

[- к содержанию -]

Ответ #2 @roma_rio 01.11.2013 16:49
Что касается хранения данных в коллекции, это зависит от объема данных. Если там тексты статей, файлы, то естественно, это сильно отразится на расходовании оперативной памяти, да и процесс сравнения может затянуться. А если там обычные данные, небольшие поля, числа, то расход памяти будет несущественным, процесс сравнения и логирования будет быстрым, так что можно сказать, что это вообще будет незаметно.

самое длинное поля это будут ФИО или примечание на 255 символов, а всё остальное даты, суммы, № каки-ето. Таблици с большими полями логировать не дубу

[- к содержанию -]

Добавить свой ответ в эту тему
Как получить признак времени окончания выполнения команды shell(mypath, 1) при её использовании в visual basic 6.0
mypath - это запуск файла *.bat
У меня складывается мнение,что я возвращаюсь в visual basic 6.0
не закончив выполняв файл *.bat
Т.е приходится создавать времменную задержку

[- к содержанию -]

Ответ #1 @Алексей Немиро 31.10.2013 21:15
Shell просто запускает программу и не ждет завершения её выполнения.
Shell возвращает идентификатор запущенного процесса. Можно сделать таймер и в обработчике тика проверять существование идентификатор процесса.

Для поиска процесса придется использовать API, что именно сейчас не вспомню.

[- к содержанию -]

Добавить свой ответ в эту тему

Все темы и обсуждения

Исходные коды

Часы на FillPia-x

Visual Basic .NET: Графика @Akiva 07.11.2013 01:05
Интересный пример реализации круглых часов.

К данном исходному коду прилагаются файлы примеров. Скачать.

[- к содержанию -]

Немного из математики

Visual Basic .NET: Числа, математика, финансы @Akiva 06.11.2013 20:43
Пример реализации программы для выполнения различных математических операций.

К данном исходному коду прилагаются файлы примеров. Скачать.

[- к содержанию -]

Преобразование UNICODE

Visual Basic .NET: Строки @Akiva 06.11.2013 20:20
Пример программы для конвертирования кодов UNICODE в символы.

К данном исходному коду прилагаются файлы примеров. Скачать.

[- к содержанию -]

Конвертер систем счисления

Visual Basic .NET: Числа, математика, финансы @Akiva 26.10.2013 17:24
Пример программы, которая переводит числа из одной системы счисления в другую. (Dec -> Bin/Hex-32 и обратно).

К данном исходному коду прилагаются файлы примеров. Скачать.

[- к содержанию -]

Все исходные коды

Вакансии в IT

Web-дизайнер

Россия, Новосибирск | Работа в офисе | 30 000,00 KBP

Контент-менеджер

Россия, Новосибирск | Работа в офисе | 35 000,00 KBP

Программист 1С (БП 8)

Россия, Ростов-на-Дону | Работа в офисе

Программист 1С (без опыта)

Россия, Ростов-на-Дону | Работа в офисе

Программист 1С

Россия, Ростов-на-Дону | Работа в офисе | 30 000,00 KBP

WEB-Designer (Дизайнер интерфейсов)

Россия, Новосибирск | Работа в офисе

SEO-специалист

Россия, Новосибирск | Работа в офисе | 30 000,00 KBP

SEO-оптимизатор

Россия, Новосибирск | Работа в офисе | 70 000,00 KBP

Программист 1С

Россия, Ростов-на-Дону | Работа в офисе | 50 000,00 KBP

Программист 1С

Россия, Ростов-на-Дону | Работа в офисе

Все вакансии в IT · Создать резюме

[- к содержанию -]

Новости мира IT

Изогнутый смартфон LG оказался гибким

Смартфон G Flex, выпущенный компанией LG, способен прогибаться под воздействием силы. Это следует из видеоролика, опубликованного в интернете. Ранее о такой возможности известно не было — LG лишь заявила, что в устройстве используется гибкий экран на органических светодиодах.

06.11.2013 12:18 · Категория: Железо · Источник: Lenta.ru

[- к содержанию -]

Компьютер за 25 долларов обзаведется монитором

На Kickstarter стартовал сбор средств на HDMIPi — монитор для мини-компьютера Raspberry Pi. Дисплей при диагонали 9 дюймов имеет разрешение 1280 на 800 точек и подключается к компьютеру через HDMI. Поставки монитора начнутся в феврале 2014 года. На Kickstarter устройство стоит 75 фунтов.

06.11.2013 12:17 · Категория: Железо · Источник: Lenta.ru

[- к содержанию -]

Представлен наполненный гелием «винчестер»

Компания HGST представила жесткий диск Ultrastar He6 емкостью шесть терабайт. Гермозона диска заполнена гелием. Гелий имеет меньшую, чем у воздуха, плотность, за счет чего минимизируется трение и снижается рабочая температура диска. Форм-фактор «винчестера» — 3,5 дюйма; в состав накопителя входят семь магнитных пластин.

06.11.2013 12:17 · Категория: Железо · Источник: Lenta.ru

[- к содержанию -]

Все новости


Подпишитесь на тематические RSS-ленты Kbyte.Ru, чтобы быть в курсе последних новостей:

Основная лента · Форумы (темы и сообщения) · Visual Basic 5.0/6.0 · Visual Basic .NET · C# (Си шарп) · Delphi · JavaScript · ActionScript · ASP .NET · ASP .NET MVC

Ищите Kbyte.Ru в социальных сетях FaceBook, ВКонтакте, Twitter.

Если вы занимаетесь программированием, то наверняка вам пригодятся хитрые инструменты.


Международный портал для программистов и разработчиков Kbyte.Ru основан в 2006 году. Целью портала является объединение программистов и специалистов IT-бизнеса, студентов и преподавателей для обмена опытом и знаниями, оказания помощи во всех делах и начинаниях в области IT.
Kbyte.Ru является парнёром компаний Mail.Ru Group, WebMoney Transfer, Ozon.Ru и др.
Выпуск рассылки подготовлен автоматически. Все права на материалы выпуска принадлежат Kbyte.Ru если иное не указано отдельно.


В избранное