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

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


Выпуск # 728

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


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

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

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

Форумы Kbyte.Ru

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

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

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

Здравствуйте, прошу помощи у "понимающих людей", суть проблемы вот в чём: не могу найти, на сайте файлы с контентом, в файлах default.aspx и med.aspx записаны только стили... на сайте всё нормально показывает, а вот код, с контентом, найти не могу. Хостинг здесь - http://www.lpwebhosting.com
Помогите пожалуйста.

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

Среда Visual Basic STUDIO’2010 Professional
MyDLL.dll создано как проект в среде VB NET STUDIO'2010
MyDLL.dll поместил несколько функций, в частности функцию Add(),
Которую хочу вызвать:
Public Class Class1
    Public Function ADD(ByVal first As Integer, ByVal sec As Integer) As Integer
        Dim abc As Integer
        abc = first + sec
        Return abc
    End Function
End Class
Вызываю функцию в событии щелчка на кнопке:
Dim Result As Integer
Result = Add(1, 2)
' Не удается найти точку входа "Add" в DLL "MyDLL.dll".
' при написании вышестоящей строки имя функции Add появляется после знака равенства,
'показывает где находится

MyDLL.dll находится в папке E:\CD_MY_new\DATA\MyDLL\MyDLL\bin\Release
1. Этот же путь выбран при создании ссылки в меню среды STUDIO'2010
Проект\Добавить во вкладке Обзор

2. Вначале класса другого проекта ставлю
Public Class Form4
Public Declare Function Add Lib "MyDLL.dll" _
(ByVal first As Integer, ByVal sec As Integer) As Integer
End Class
3.
В окне окно "Обозреватель решений" в папке "Ссылки" находится имя MyDLL
СПАСИБО.

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

Ответ #1 @Алексей Немиро 16.05.2013 17:16
' Не удается найти точку входа "Add" в DLL "MyDLL.dll".
Вероятней всего проблема в регистре.
ADD и Add - это разные точки.
Public Declare Function Add Lib "MyDLL.dll" _
(ByVal first As Integer, ByVal sec As Integer) As Integer
Зачем так извращаться, это же не Visual Basic 6.0 :)

Проект -> Добавить ссылку -> ...
если dll-ка с приложением в одно решении - вкладка "Проекты",
если dll-ка в другом решении - вкладка "Обзор".

Вот тут немного показано в картинках.

Всё! Можно пользоваться.

У сборки должно быть какое-нибудь пространство имен, через него можно получить доступ к публичным классам и методам сборки.
Public Class Class1
  Public Function ADD(ByVal first As Integer, ByVal sec As Integer) As Integer
  ...
Т.к. функция Add не Shared, для доступа к ней нужно создавать экземпляр класса Class1:
Dim c As New MyDLL.Class1() 'вместо MyDLL - имя пространства имен сборки (раз имя сборки MyDLL, то вероятно и пространство имен такое же)
Dim Result As Integer = c.Add(1, 2)
Если сделать Shared:
Public Class Class1
    Public Shared Function ADD(ByVal first As Integer, ByVal sec As Integer) As Integer
        Return first + sec
    End Function
End Class
то доступ к методу Add можно получить без создания экземпляра класса:
Dim result As Integer = MyDLL.Class1.Add(1, 2)

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

Добавить свой ответ в эту тему
Можно как то поместить вкладки у TabControl вниз?
Как программно создать вкладку с RichTextBoxв ней?

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

Ответ #1 @Алексей Немиро 16.05.2013 11:54
Можно как то поместить вкладки у TabControl вниз?
Свойство Alignment (Bottom).
Как программно создать вкладку с RichTextBoxв ней?
  Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    'удаляем все вкладки (только для данного примера, в других случаях это делать не обязательно)
    TabControl1.TabPages.Clear()
    'заполняем TabControl-ом контейнер, в котором он находится (только для данного примера, в других случаях это делать не обязательно)
    TabControl1.Dock = DockStyle.Fill

    'добавляем, для примера, десять новых вкладок
    For i As Integer = 1 To 10
      'создаем новую вкладку
      Dim tab As New TabPage(String.Format("Новая вкладка {0}", i))
      'создаем новый RichTextBox
      Dim rtb As New RichTextBox()
      rtb.Dock = DockStyle.Fill 'автозаполнение 
      'можно добавить обработчики событий (если нужно)
      AddHandler rtb.TextChanged, AddressOf rtb_TextChanged 'аналогично и для других событий
      'rtb.TextChanged - событие изменения текста (TextChanged) элемента rtb, 
      'rtb_TextChanged - метод обработки события

      'добавляем RichTextBox на вкладку
      tab.Controls.Add(rtb)
      'добавляем вкладку в TabControl
      TabControl1.TabPages.Add(tab)
    Next
  End Sub

  'обработчик события изменения текста в добавленных RichTextBox
  Private Sub rtb_TextChanged(sender As System.Object, e As System.EventArgs)
    'получаем ссылку на элемент, который вызвал событие
    Dim rtb As RichTextBox = CType(sender, RichTextBox)
    'родитель в данном случае всегда будет - TabPage, получаем ссылку на него (если нужно)
    Dim tab As TabPage = CType(rtb.Parent, TabPage)
    'меняем заголовок tabPage на введенный текст (просто для примера)
    tab.Text = rtb.Text
  End Sub

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

Ответ #2 @Crash666 16.05.2013 15:42
А как сохранить вкладки при следующем запуске?

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

Ответ #3 @Алексей Немиро 16.05.2013 17:19
А как сохранить вкладки при следующем запуске?
Записывать надо!

Можно записывать в настройки приложения имена файлов и при следующем запуске формировать для них вкладки. Сами данные (текст) из RichTextBox в настройки лучше не записывать, настройки для больших объемов плохо пригодны.

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

Ответ #4 @Crash666 16.05.2013 17:44
В .txt фалы сохранять?

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

Ответ #5 @Алексей Немиро 16.05.2013 17:57
Если без форматирования, то можно текстовые. А если нужно с форматированием, то .rtf. Получит rtf-данные можно из свойства TextRtf.

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

Добавить свой ответ в эту тему · В теме есть еще 7 ответов. Смотреть все ответы.
DLL @capetownn 15.05.2013 17:07
Среда Visual Basic STUDIO’2010 Professional
Как вывести имена функций "kernel32.dll", допустим в
RTB (Rich Text Box)
СПАСИБО.

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

Всем привет.

Как всем известно, во время написания проекта, используется локальная БД при этом используются формат даты/времени локального компьютера(у меня dd.MM.yyyy). После публикации проекта на Windows Server 2003 IIS6.0 (свой сервак в корпоративке) появились проблемы когда надо записать/изменить дату в БД. Вот кусок кода из приложения.

модель представления

public int ProcessingId { set; get; }
[Display(Name = "Дата1")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd.MM.yyyy}")]
public DateTime? ProcessDateTo1 { set; get; }
 
[Display(Name = "Дата2")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd.MM.yyyy}")]
public DateTime? ProcessDateTo2{ set; get; }
 
[Display(Name = "Дата3")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd.MM.yyyy}")]
public DateTime? ProcessDateTo3 { set; get; }
записываю в бд
processing proc = new processing()
 {
lsid = obj.Id,
date1= obj.ProcessDateTo1 != null
        ? Convert.ToDateTime(obj.ProcessDateTo1)
        : (DateTime?) null,
 
date2 =  obj.ProcessDateTo2 != null
        ? Convert.ToDateTime(obj.ProcessDateTo2)
        : (DateTime?) null,
 
date3 = obj.ProcessDateTo3 != null
        ? Convert.ToDateTime(obj.ProcessDateTo3)
        : (DateTime?) null,
userid = ((HttpContext.Current.User.Identity as UserIdentity).UserID),
userdate = DateTime.Now
 };
 
db.AddToprocessing(proc);
db.SaveChanges();

Подскажите пожалуйста как осуществить добавление даты в БД не смотря на региональные настройки, то есть что бы и на локальном компе работал код и на серваке.

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

Ответ #1 @Алексей Немиро 14.05.2013 17:18
Какие именно проблемы? Если даты передаются через SqlCommand с точным указанием типа данных и на сервере даты хранятся в поле типа date(time...), то проблем с форматом быть не должно, по крайней мере между приложением и базой.

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

Ответ #2 @roma_rio 14.05.2013 18:35
Какие именно проблемы?
с помощью DatePicker от Jquery, ввожу дату в поле форматом dd.MM.yyyy. Если формат прохавает, то сохранит дату и отображает в формате MM/dd/yyyy. Тоесть если я ввожу дату, например, 01.05.2013, её сохраняет как 5 февраля 2013 и отображает 9/5/2013 12:00:00 AM, но а если ввожу 20.05.2013, то дату не сохраняет потому что получается 20-й месяц.
Если даты передаются через SqlCommand с точным указанием типа данных
Данные записываются с использованием Entity Framework, через модель представления. Поля типа DateTime?

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

Ответ #3 @Алексей Немиро 14.05.2013 18:57
Можно попробовать добавить указание типа полям через атрибут:
[DataType(DataType.Date)]

obj - это что?
Convert.ToDateTime(obj.ProcessDateTo1) - возможно проблема в этом, нужно явно указывать формат даты, если он отличается от обычного:
System.Globalization.CultureInfo f = new System.Globalization.CultureInfo(Threading.Thread.CurrentThread.CurrentCulture.Name, true);
f.DateTimeFormat.FullDateTimePattern = "dd.MM.yyyy HH:mm:ss";
f.DateTimeFormat.ShortDatePattern = "dd.MM.yyyy";
f.DateTimeFormat.DateSeparator = ".";

DateTime result;
System.DateTime.TryParse("01.05.2013", f, Globalization.DateTimeStyles.NoCurrentDateDefault, ref result);

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

Ответ #4 @roma_rio 14.05.2013 19:05
obj - это что?
модель которая передается со страницы методом Post.

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

Ответ #5 @Алексей Немиро 14.05.2013 19:34
модель которая передается со страницы методом Post.
Если дата передается в виде строки, то проблема формата в этом.
Нужно передавать дату в виде даты, тогда вручную ничего форматировать не придется. А если передавать строку, то придется делать явное преобразование строки в дату с нужным форматом.

Entity Framework не пользуюсь. Он разве не умеет работать с Nullable? (DateTime?). Думаю должен уметь.
Если юзеру отдавать дату в поле EditorFor:
<%=Html.EditorFor(m => m.ProcessDateTo1, new { autocomplete = "off", maxlength
= 10, size = 12 })%>
и если поле будет отправлено пустым, то его значение будет null, и в базу должно будет записаться значение DBNull.Value.

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

Добавить свой ответ в эту тему · В теме есть еще 6 ответов. Смотреть все ответы.
Необходимо ссылки вида:
<а href="/papka/stranica.aspx" title="Текст...
">Бла Бла Бла </а>
заменить на ссылки вида:
<a href="javascript://" onclick="$('#Kont').load('papka/stranica.aspx');return false;" title="text">Бла Бла Бла </a>
Пытаюсь выполнить при помощи данного Jquery кода:
$('#XXX').click(function () {
    var links = $("a[href^='/']");
    // перебор результатов
    for (var i = 0; i < links.length; i++) {
        links[i].href = 'javascript://'+'\"'+'click="$(\'#Kont\').load(\'' + links[i].href + '\');return false;'
    }
Получаю:
<a href="javascript://&quot;click=&quot;$('#Kont').load('papka/stranica.aspx');return false;" title="text">Бла Бла Бла</a>
вся проблема в том что с &quot; ссылка не работает а избавится от них не получается.

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

Ответ #1 @Алексей Немиро 14.05.2013 14:52
Лучше onclick назначить ссылкам, примерно так (не проверял):
$(links[i]).click(function(){
  $('#Kont').load($(this).attr('href'));
  return false;
});

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

Ответ #2 @omap 15.05.2013 08:50
Проблема не в Onload или load а в том что двойные кавычки заменяются на &quot;

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

Ответ #3 @omap 15.05.2013 09:19
Спасибо за помощь Алексей.

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

Добавить свой ответ в эту тему
Open File Dialog @BSHM 13.05.2013 14:50
Уважаемые коллеги!
Почему диалоговое окно OpenFileDialog
не закрывается пока не будет прочитан выбранный
файл? Файл грузится долго и вместо окна хотел
вывести сообщение "Please wait..". Но это
сообщение лепится поверх диалога!
(Visual Basic 2005)
Спасибо

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

Ответ #1 @Алексей Немиро 13.05.2013 19:16
Нужно потоки использовать. Передавать в поток имя открываемого файла.
 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    If Not OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then Return
    Dim t As New Threading.Thread(AddressOf ThreadReadFile)
    t.IsBackground = True
    t.Start(OpenFileDialog1.FileName)
  End Sub

  Private Sub ThreadReadFile(fileName As Object)
    SetLabel("Чтение файла...")
    Using fs As New System.IO.FileStream(fileName.ToString(), IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.ReadWrite)
      Using br As New System.IO.BinaryReader(fs, System.Text.Encoding.UTF8)

        SetProgress(0, fs.Length, 0)

        Dim readed As Integer = 0
        Dim buffer(255) As Byte
        Dim rb As Integer = br.Read(buffer, 0, buffer.Length)
        While rb > 0
          'читам в пустую
          'если нужно обрабатывать данные, то они будут в переменной buffer
          'отсчет от нуля до rb (кол-во прочитанных байт)
          'For i As Integer = 0 To rb
          'buffer(i) '<- байт прочитанных данных
          'Next
          readed += rb 'увеличиваем счетчик прочитанных байт
          SetProgress(0, fs.Length, readed) 'меняем progress
          System.Threading.Thread.Sleep(10) 'пауза 10 мс, для наглядности работы кода
          rb = br.Read(buffer, 0, buffer.Length) 'следующая пачка данных
        End While

        SetProgress(0, fs.Length, fs.Length)
      End Using
    End Using
    SetLabel("Файл прочитан!")
  End Sub

  Private Delegate Sub SetLabelDelegate(msg As String)
  Private Sub SetLabel(msg As String)
    If Me.InvokeRequired Then 'если вызов не из родного потока
      'перенаправляем вызов в родной поток
      Me.Invoke(New SetLabelDelegate(AddressOf SetLabel), msg) 'нужно не забывать передавать параметры
      Return 'выходим, чтобы не случилось ничего плохого
    End If
    'устанавливаем сообщение
    Label1.Text = msg
  End Sub

  Private Delegate Sub SetProgressDelegate(min As Integer, max As Integer, value As Integer)
  Private Sub SetProgress(min As Integer, max As Integer, value As Integer)
    If Me.InvokeRequired Then 'если вызов не из родного потока
      'перенаправляем вызов в родной поток
      Me.Invoke(New SetProgressDelegate(AddressOf SetProgress), min, max, value) 'нужно не забывать передавать параметры
      Return 'выходим, чтобы не случилось ничего плохого
    End If
    'меняем значение ProgressBar
    ProgressBar1.Maximum = max
    ProgressBar1.Minimum = min
    ProgressBar1.Value = value
  End Sub

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

Ответ #2 @BSHM 14.05.2013 00:39
Уважаемый Алексей!
Премного Вам благодарен, за такое профессиональное
и грамотное решение проблемы. Я прыгнул
недавно из C++ в VB.NET, поэтому сложности
иногда возникают.
Большое спасибо, и успехов!

Вениамин

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

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

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

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

Animation of the burning candle

Visual Basic .NET: Графика @Shark1 12.05.2013 03:03
Пример создания и анимации горящей свечи в Expression Blend.

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

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

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

Вакансии в IT

Программист-разаботчик

Россия, Чебоксары | Работа в офисе | 15 000,00 KBP

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

Россия, Чебоксары | Работа в офисе | 20 000,00 KBP

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

Россия, Казань | Работа в офисе | 15 000,00 KBP

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

Россия, Казань | Работа в офисе | 70 000,00 KBP

Программист-разработчик

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

Инженер программист

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

Программист

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

Программист-внедренец 1С (аналитик)

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

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

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

ПРОГРАММИСТ 1С

Россия, Екатеринбург | Работа в офисе

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

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

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

AMD показала "самую быструю в мире" графическую карту для ноутбуков

Advanced Micro Devices сегодня анонсировала "самую быструю в мире" графическую карту для ноутбуков - Radeon HD 8970M. Новый GPU предназначен для той категории ноутбуков, которые рассматриваются пользователями, как замена настольного компьютера. Первым ноутбуком с данным GPU станет MSI GX70 стоимость 1100 долларов.

Radeon HD 8970M основан на аппаратной архитектуре AMD Graphics Core Next (GCN) и построен на 28-нанометровой технологической норме. Здесь же реализована поддержка технологии экономии потребления электроэнергии AMD Enduro, продлевающая работу аккумулятора у ноутбука. При этом, графический чип поддерживает работу с новомодным видеоформатом 4K, а также вывод картинки сразу на шесть традиционных дисплеев.

Внутри чипа объединены 1280 потоковых процессора на частоте 850 МГц или на 900 МГц в режиме ускорения. Производительность GPU составляет 2,3 Тфлоп/сек, тактовая частота памяти GPU составляет 1,2 ГГц. Технически, все эти показатели практически идентичны Radeon 8790M, но в последнем нет turbo-режима.

Как заявляют в AMD, их новый чип 8970М в играх почти на 50% быстрее мобильного решения Nvidia GeForce 680M (по крайней мере в играх, оптимизированных для 8970M).

16.05.2013 11:00 · Категория: Железо · Источник: CyberSecurity.ru

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

Hewlett-Packard выпустит ноутбук на Android

HP представила SlateBook x2 — ноутбук на Android, который можно превратить в планшет, отстегнув клавиатуру с дополнительной батареей. У устройства 10-дюймовый экран с разрешением 1920 на 1080 точек и процессор Nvidia Tegra 4. Устройство поступит в продажу в августе и будет стоить 480 долларов США.

16.05.2013 10:59 · Категория: Железо · Источник: Lenta.ru

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

Google представил интернет-радио

Корпорация Google представила музыкальный сервис Google Play Music All Access, работающий по подписной модели. Для того, чтобы получить доступ к многомиллионной музыкальной коллекции Google, пользователь должен будет платить 9,99 доллара ежемесячно. Сервис в первое время будет доступен только в США.

16.05.2013 10:59 · Категория: Бизнес в IT · Источник: 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 если иное не указано отдельно.


В избранное