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

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



Выпуск # 276


http://www.kbyte.ru/

 

Новый выпуск!

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

 

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

Система ЭКСПЕРТ

    Вопрос #000807: Проблемы с закачкой файлов из Интернета на Ginz...

    Вопрос #000804: Проблемы с загрузкой файлов на Ginza MS100

    Вопрос #000799: Новый вопрос без темы

    Вопрос #000791: Проблема_в_VB_.NET_с_использованием_функции_из_...

    Вопрос #000764: Програмное определение позиции меню в vb6

Последнее на форумах

    Денвер и пара мелкий вопросов...

    Потоки

    Узнать номер строки

    Тестирование

    Помогите пожалуйста найти ошибку

Последние статьи

    Как узнать размер базы данных MySQL через php

    Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse)

    Работа с SQL – Запросы

    Использование XML.Serialization

    Выбор языка программирования для научных работ (2-я редакция)

Интересные коды и решения

Юмор на Kbyte.Ru

 

Система ЭКСПЕРТ

 

Система «Эксперт» - уникальная система, которая поможет решить, если не все, то многие Ваши проблемы с программированием и разработкой! Если у Вас есть какой-либо вопрос по программированию или разработке, то Вы всегда можете задать его нашим Экспертам! При этом каких-либо особых действий от Вас не потребуется! Просто отправьте Ваш вопрос на адрес mailto:expert@kbyte.ru, в теме письма укажите тему вопроса, в тексте – сам вопрос, и все! Эксперты дадут Вам ответ в течение 12-24 часов, на тот адрес, с которого Вы отправите вопрос. Все проще простого! Никакой регистрации и заполнение бесконечных форм, просто спросите и получите ответ ;-)


Вопрос #000807: Проблемы с закачкой файлов из Интернета на Ginz...

Автор вопроса: Koshpaev Valery // 03.03.2008 / 18:36

Здравствуйте,уважаемые эксперты!Может вся проблема заключается в том,что я не установил на Джинзу ActiveSync 4.5 с установочного диска,который прилагается к коммуникатору?Только я не знаю где,в каком клубе в Москве я могу закачать эту программу на компьютер,а потом перекачать ее с компьютера на свой коммуникатор,т.к.я пытался обращаться в одно интернет-кафе,другое,но нигде мне не разрешали закачивать ActiveSync на компьютер с установочного диска для Джинзы.У моего коммуникатора есть GPRS,но нет EDGE-какую лучше скорость подключения к
Интернету мне подключить,и почему всегда прерывается связь при закачке файлов 3.gp,всегда выдавая мне сообщение об однои и той же ошибке,про которую я Вам уже писал?Валерий ________________________________________________________ Вы уже с Yahoo!? Испытайте обновленную и улучшенную. Yahoo! Почту! http://ru.mail.yahoo.com

Отвечает: Алексей Немиро // 04.03.2008 / 05:48

Здравствуйте, Валерий.

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

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

Рекомендую найти какого-нибудь друга в Москве, и воспользоваться для
этих целей его компьютером.

--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #000804: Проблемы с загрузкой файлов на Ginza MS100

Автор вопроса: Koshpaev Valery // 02.03.2008 / 13:30

Здравствуйте,эксперты!У меня есть коммуникатор Ginza MS100(CPU:ARM 926TI OMAP 750@200MHz;128MB ROM+64MB RAM;OC:Microsoft Windows Mobile 5.0),но у меня нет компьютера или ноутбука.Мой коммуникатор Джинза имеет встроенный браузер для выхода в Интернет.Я хочу закачивать небольшие фильмы и видеоролики напрямую из Интернет,а также различные программы-тоже из Интернета.Но всегда при попытках скачивания файлов из Интернет появляются сообщения об ошибках:1)"Данный файл не читается(не отображается)на устройстве"2)"Неизвестная ошибка при скачивании файлов
0X80004005"(что это за код и из-за чего он появляется,что он означает?)3)"Искомую страницу не удается найти из-за неизвестной ошибки 0x80072f78"(что это за код и из-за чего он появляется,что он означает?)4)Какую программу,видеоконвертер мне надо установить на Ginza MS100,чтобы я мог скачивать различные медиафайлы из Интернета своей Джинзой и откуда я могу эту программу скачать(лучше-бесплатно!)?Пожалуйста,вышлите ответы на этот адрес моей почты!-Заранее большое Вам спасибо и очень надеюсь на Вашу помощь!Валерий ________________________________________________________ Вы уже с Yahoo!? Испытайте обновленную и улучшенную. Yahoo! Почту! http://ru.mail.yahoo.com

Отвечает: Алексей Немиро // 04.03.2008 / 05:37

Здравствуйте, Валерий.

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

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

В качестве плеера могу порекомендовать Core Player, а как альтернативу
IE, можно использовать Opera.
Все это дело можно найти на сайте 4pda.ru.

Что касается файлов других форматов, то обычно, эти файлы в Интернет размещены в
архивах zip или rar, WM такие файлы не понимает,
нужно устанавливать дополнительные программы, чтобы работать с файлами
архивов, например файловый обозреватель Resco Explorer 2007
может читать zip-архивы. Файлы установок обычно идут в формате
cab, они вполне нормально должны запускаться.
Некоторые программы могут быть размещены как обычные
Windows-инсталеры, т.е. чтобы их установить потребуется компьютер и
подключить устройство к нему.

--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #000799: Новый вопрос без темы

Автор вопроса: Максим // 01.03.2008 / 18:57

При попытке открыть дизайнер формы в Visual Studio 2008 возникает ошибка
"The service Microsoft.VisualStudio.Shell.Interop.ISelectionContainer
already exists in service container/ Parameter name: serviceType". Данная
ошибка возникает на всех языках программирования.

Отвечает: EROS // 01.03.2008 / 22:10

 

Вопрос #000791: Проблема_в_VB_.NET_с_использованием_функции_из_...

Автор вопроса: Mikhail Belov // 29.02.2008 / 18:28

Отлаживаю программу в среде разработки Microsoft Visual Basic.NET, возникает проблема:
В ходе исполнения в Отладчике при вызове функции из DLL-библиотеки получаю диагностику
в окне Microsoft Development Environment:

-------------------------------
Необработанное исключение типа "System.NullReferenceException" произошло в Modul.exe.

Дополнительные сведения: в экземпляре объекта не задана ссылка на объект.
-------------------------------

Моdul - имя отлаживаемой программы.

Отладчик "подсвечивает" строку с вызовом функции из библиотеки:
res = ReadIEEE32(8, 0, "rEAd", val, tm, 0)

Переменные объявлены выше в модуле:
Dim res As Long
Dim val As Single

Функция из DLL-библиотеки объявлена в модуле:
Private Declare Function ReadIEEE32 Lib "owen_io" _
(ByVal adr As Long, ByVal adr_type As Long, _
ByVal command As String, ByRef res As Single, _
ByRef time As Long, ByVal Index As Integer) As Long



В Help'e на библиотеку функция описана следующим образом:
для C++
int ReadIEEE32(DWORD adr,DWORD adr_type,char *command,float &value,int &time,int index);

для VB
Function ReadIEEE32(ByVal adr As Long, ByVal adr_type As Long, ByVal command As String, res As Single, time As Long, ByVal Index As Integer) As Long

Подскажите, что делать ?

Отвечает: EROS // 01.03.2008 / 08:27

По всей видимости дело в неправильном объявлении функции. Попробуйте
Long заменить Integer.

 

Вопрос #000764: Програмное определение позиции меню в vb6

Автор вопроса: Иван Денишев // 16.02.2008 / 23:24

Здравствуйте уважаемые эксперты!
Говорят, что вы можете ответить на любой вопрос.
Как программно в vb6 узнать, на каком пункте меню находится курсор.
Для примера, возьмём меню "файл".
Caption | Name
Файл | MnuFile
Создать | MnuFileNew
Открыть | MnuFileOpen
Ну, и пожалуй, хватит. И так будет понятно.
Запускаем программу и жмём: либо f10, либо alt.
Затем стрелку вниз.
Меню "Создать", выделится другим цветом.
Так вот, как программно получить, где находится курсор?
Ведь, в vb нету свойства GotFocus у менюшек.
Очень надеюсь на вашу помощь!
---
С уважением: Иван Денишев.

Отвечает: Алексей Немиро // 17.02.2008 / 10:12

Здравствуйте, Иван.

ВНИМАНИЕ: Данный пример довольно опасный, и может привести к зависанию Visual Basic!

Скачать готовый пример можно тут: http://kbyte.ru/Code/Samples/form1.zip

Создайте новый EXE-проект, на форме разместите Timer и вставьте следующий код:

Код формы:
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
Option Explicit

Private Sub Form_Load()
 gHW = Me.hwnd
 Hook
End Sub

Private Sub Form_Unload(Cancel As Integer)
 Unhook
End Sub

Private Sub Timer1_Timer()
 Me.Caption = SelectedMenuString
End Sub


Также добавьте несколько элементов меню.
Дополнительно создайте новый модуль и вставьте следующий код:

Код модуля:
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
065:
066:
067:
068:
069:
070:
071:
072:
073:
074:
075:
076:
077:
078:
079:
080:
081:
082:
083:
084:
085:
086:
087:
088:
089:
090:
091:
092:
093:
094:
095:
096:
097:
098:
099:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
Option Explicit

Public SelectedMenuString As String 'здесь будет заголовок выбранного элемента меню

Private Declare Function CallWindowProc Lib "user32" _
  Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
  ByVal hwnd As Long, ByVal Msg As Long, _
  ByVal wParam As Long, ByVal lParam As Long) As Long

Private Declare Function SetWindowLong Lib "user32" _
  Alias "SetWindowLongA" (ByVal hwnd As Long, _
  ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function GetMenu Lib "user32" _
 (ByVal hwnd As Long) As Long

Private Declare Function GetSubMenu Lib "user32" _
 (ByVal hMenu As Long, ByVal nPos As Long) As Long

Private Declare Function GetMenuItemCount Lib "user32" _
 (ByVal hMenu As Long) As Long

Private Declare Function GetMenuState Lib "user32" _
 (ByVal hMenu As Long, ByVal wID As Long, _
  ByVal wFlags As Long) As Long

Private Declare Function GetMenuString Lib "user32" _
  Alias "GetMenuStringA" (ByVal hMenu As Long, _
  ByVal wIDItem As Long, ByVal lpString As String, _
  ByVal nMaxCount As Long, ByVal wFlag As Long) As Long

Private Const MF_BYPOSITION = &H400&
Private Const MF_HILITE = &H80&
Private Const WM_MENUSELECT = &H11F
Private Const GWL_WNDPROC = -4

Public lpPrevWndProc As Long
Public gHW As Long

Public Sub Hook()
  'Begin hooking into messages.
  lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, _
  AddressOf WindowProc)
End Sub

Public Sub Unhook()
  'Cease hooking into messages.
  SetWindowLong gHW, GWL_WNDPROC, lpPrevWndProc
End Sub

Function AnyLit(hSubSubMenu As Long) As Long
  Dim i As Long
  Dim MenuCount As Long

  'Get the number of items in the menu.
  MenuCount = GetMenuItemCount(hSubSubMenu)

  'Loop through the menu items.
  For i = 0 To MenuCount - 1
    'Check whether this item is highlighted.
    If GetMenuState(hSubSubMenu, i, MF_BYPOSITION) And _
        MF_HILITE Then
      AnyLit = True
      Exit Function
    End If
  Next i

  'Return FALSE, no items highlighted.
  AnyLit = False
End Function

Private Sub WalkSubMenu(hSubMenu As Long)
  Dim i As Long
  Dim MenuItems As Long
  Dim hSubSubMenu As Long
  Dim buffer As String
  Dim result As Long

  'Get the count of menu items in this menu.
  MenuItems = GetMenuItemCount(hSubMenu)

  'Loop through all the items on the menu.
  For i = 0 To MenuItems - 1
    'Determine whether this item is highlighted.
    If GetMenuState(hSubMenu, i, MF_BYPOSITION) And _
        MF_HILITE Then
      'Attempt to get a submenu for each menu item.
      hSubSubMenu = GetSubMenu(hSubMenu, i)

      'Check for a submenu with something selected on it.
      If hSubSubMenu And AnyLit(hSubSubMenu) Then
        'There is a submenu with a selection so walk it.
        WalkSubMenu hSubSubMenu
      Else
        buffer = Space(255)
        result = GetMenuString(hSubMenu, i, buffer, Len(buffer), MF_BYPOSITION)
        buffer = Left$(buffer, result)
        SelectedMenuString = GetDescription(buffer)
        Exit Sub
      End If
    End If
  Next i
End Sub

Public Sub FindHilite(TheForm As Form)
  Dim hMenu As Long
  Dim hSubMenu As Long
  Dim i As Long
  Dim MenuCount As Long

  'Clear any previous description.
  SelectedMenuString = ""

  'Get the menu handle.
  hMenu = GetMenu(TheForm.hwnd)

  'Check to see if there is no menu.
  If hMenu <> 0 Then
    'Get the number of top-level menus.
    MenuCount = GetMenuItemCount(hMenu)

    'Enumerate through all top-level menus.
    For i = 0 To MenuCount - 1
      'Ignore top-level menus not currently selected.
      If GetMenuState(hMenu, i, MF_BYPOSITION) And _
          MF_HILITE Then
        'Get a handle to the submenu.
        hSubMenu = GetSubMenu(hMenu, i)

        'Walk the submenu.
        WalkSubMenu hSubMenu
      End If
    Next i
  End If
End Sub

Private Function GetDescription(MenuCaption As String) As String
 GetDescription = MenuCaption
End Function

Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 If uMsg = WM_MENUSELECT Then
  FindHilite Form1
 End If
 WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End Function


При выборе элемента меню в переменной SelectedMenuString будет текст заголовка выбранного элемента меню.

 


Чтобы задать Ваш вопрос, отправьте его на адрес expert@kbyte.ru

Раздел Эксперт на сайте Kbyte.Ru

Наверх

 

 

Последнее на форумах

Денвер и пара мелкий вопросов... | Автор: Kolya007
Добавлено: 29.02.2008 / 09:02 | ответов: 2 | просмотров: 99

Есть ли возможность сделать так, чтобы Apache входящий в состав Денвера, читал asp, а не только php... Если да, то как это можно сделать...))
А теперь к мелочам...))
1) Непомню спрашивал или нет... Как сделать переадресацию в php?..
2) Сессии и куки в php... Как их создавать, проверять их наличие и т.д.?..
3) Какие есть возможности для создания авторизации в php?..
4) И вопрос по верстке...)) Как сделать, чтобы div разпологались относительно объекта (другого div и т.п.) и имели размер в зависимости от экраннго разрешения?..
5) Где хранится информация о системе пользователя?..

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Алексей
Добавлено:29.02.2008 / 10:48
1. Помню, что уже отвечал :)
header("Location: Путь_Редиеркта");

2.
001:
002:
003:
004:
005:
006:
if(!isset($_SESSION)) { // нет сессии
session_cache_expire(60); // создаем
session_start();
}

Colorized by: Eros.CodeSyntaxColor Engine

001:
002:
003:
004:
005:
006:
if (!isset($_SESSION["Abrakadabra"])) // нету параметра Abrakadabra
{
 $_SESSION["Abrakadabra"] = "Kbyte.Ru откройся!"; // создаем
}

Colorized by: Eros.CodeSyntaxColor Engine

001:
002:
003:
echo $_SESSION["Abrakadabra"];

Colorized by: Eros.CodeSyntaxColor Engine

про кукисы уже не помню ничего :)

3. Есть замечательная возможность изобрести такую возможность самому :)

4. Размер относительно разрешения экрана ставь процентами, либо ставь отступы от краев, также процентами, либо пикселями.
для выравнивания используй
001:
position: relative; float: left

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

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

6. Жаль что я забыл написать правило, которое запрещало бы задавать кучу вопросов одним топиком :), но ничего, как изганю дух лени из своего компутера, обязательно напишу такое правило, а пока радуйтесь, что его нет :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: Kolya007
Добавлено:29.02.2008 / 19:33
Спс...))
PS:
Если ты имеешь ввиду большого полосатого муха, которого юзает клиент, то эту инфу можно получить только JavaScript-ом, на стороне клиента.

Его самого...))
Жаль что я забыл написать правило, которое запрещало бы задавать кучу вопросов одним топиком :), но ничего, как изганю дух лени из своего компутера, обязательно напишу такое правило, а пока радуйтесь, что его нет :)

Зато так удобнее...))

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Потоки | Автор: Inf
Добавлено: 29.02.2008 / 00:40 | ответов: 8 | просмотров: 212

Вопрос, как можно запустить поток и при этом передать значение в переменную? т.е

001:
002:
003:
004:
005:
Public Sub main_thread(ByVal value As String)
'тут код который нужно запустить в поток и который очень часто использует значение из value
End Sub

Colorized by: Eros.CodeSyntaxColor Engine


При запуске потока обычным способом:
001:
002:
003:
Thread1 = New Thread(AddressOf main_thread("передаём данные"))

Colorized by: Eros.CodeSyntaxColor Engine

не чего не выходит, читал в MSDN вот тут всё про потоки:
http://msdn.microsoft.com/library/rus/default.asp?url=/library/RUS/vbcn7/html/vaconfreethreading.asp
но к сожелению нет ни слова возможно ли реализовать то что мне нужно :(
И ещё вопросик, в место AddressOf Visual Studio предлагает на выбор, сам AdressOf и Function, вот что это за Function? экспериментировал, не чего не вышло, спасибо


Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Алексей
Добавлено:29.02.2008 / 04:41
Вопрос, как можно запустить поток и при этом передать значение в переменную?

Нужно использовать делегаты

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: EROS
Добавлено:29.02.2008 / 08:00
1. Параметр должен быть типа Object (Public Sub main_thread(ByVal arg As Object))
2. В конструкторе Thread1 никаких паметров передавать не надо (Thread1 = New Thread(AddressOf main_thread))
3. Параметр передается в методе Start ( Thread1.Start(arg) )
4. Внутри потока параметр из типа Object приводишь к нужному тебе типу(в твоем случае приведение к String) и спокойно с ним работаешь.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Inf
Добавлено:01.03.2008 / 16:45
Ребят, спасибо большое, выручили! Всё прекрасно работает, многопоточность просто класс, давно искал решение и нашел его в потоках :)
EROS
отдельное спасибо за объяснение простым и подробным языком :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 4 | Автор: Inf
Добавлено:01.03.2008 / 22:16
Возник ещё вопрос, странно как то, у меня есть 2 примера, один простенький где есть 1 поток в котором производятся арифметические действия и вывод на TextBox во время запуска у меня есть возможность полностью двигать форму сворачивать разворачивать, все кнопки активны, собственно говоря для этого я и использую многопоточность, а вот в моём приложении в котром идёт работа с массой файлов и большими размерами всё работает но не могу двигать ни форму не нажимать кнопки вообще не чего, хотя прогресс бары работают, всё нормально, скажите пожалуйста, какие могут быть проблемы? я понимаю без кода трудно, но вообще если предположить, из-за чего может случиться такая ситуация? ведь точно такая же реализация потока в другом примере работает на ура

P.S Использую Control.CheckForIllegalCrossThreadCalls = False
т.к с делегатами тоже не работает в моём коде и точно такой же код использования делегатов отлично работает в другом :) приложение просто виснит, не реагирует и не чего не делает, я думаю всё же что то у меня с кодом, но всё же хочеться услышать мнение опытных людей, спасибо за внимание

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 5 | Автор: EROS
Добавлено:01.03.2008 / 22:30
я думаю всё же что то у меня с кодом

Логично )))
Использую Control.CheckForIllegalCrossThreadCalls = False

НИКОГДА ТАК НЕ ДЕЛАЙ! По всей видимости у тебя из за этого все и висит.. Когда отключают эту проверку в итоге получают взаимоблокировку в лучшем случае , а в худшем - deadlock.
Потоки должны разруливаться ТОЛЬКО через делегаты.. и по другому никак.
с делегатами тоже не работает в моём коде

Чудес на свете не бывает. Делегаты по определению не могу не работать. Ищи косяк в коде.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 6 | Автор: Inf
Добавлено:02.03.2008 / 21:34
Ищи косяк в коде.

Вы правы :) ошибка в коде, нашел и исправил, теперь делегаты работают, форма отвечает всем запросам, и
001:
002:
003:
Control.CheckForIllegalCrossThreadCalls = False

Colorized by: Eros.CodeSyntaxColor Engine

убрана, вообщем всё то что я хотел, теперь осталось только как то покрасившее написать код, а именно при работе с делегатами, я не разу с ними не сталкивался, вот это первые дни работы с ними, нашел в сети пару примеров, все они почти одинаковы, я юзаю делегаты так:
001:
002:
003:
004:
005:
006:
007:
008:
009:
‘Объявляем делегат
Delegate Sub text1_value(ByVal value As String)
Dim Set_value As text1_value = AddressOf Change_value

Private Sub Change_value(ByVal value As String)
  TextBox1.Text = value
End Sub

Colorized by: Eros.CodeSyntaxColor Engine

А вот так его применяю:
001:
002:
003:
TextBox1.invoke(change_value,”Наш текст”)

Colorized by: Eros.CodeSyntaxColor Engine

Всё работает но такое ощущение что написано как то криво :) дело в том что из потока происходит очень много обращений к разным контролам, если для каждого писать то что выше то получиться мягко говоря глупо, собственно вопрос, существует ли универсальное решение? Которое позволит получать доступы к разным контролам при минимуме коде и усилий.

P.S Подскажите куда можно вставить MsgBox который вызовется после завершения потока, собственно из-за этого у меня и была ошибка, я побывал различные функции, и в различные места вставлял код, но безрезультатно, спасибо

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 7 | Автор: EROS
Добавлено:02.03.2008 / 23:12
такое ощущение что написано как то криво :)

Ощущениям надо доверять! :-)
существует ли универсальное решение? Которое позволит получать доступы к разным контролам при минимуме коде и усилий

Универсального кода, как такового, нет. Но есть некоторые общепринятые правила и шаблоны разработки и каждая конкретная задача требует своего решения, которое наиболее подходит в данной ситуации. Вариантов решения твоей проблемы - масса! Вот один из простейших вариантов: (к сожалению не использую VB, поэтому код набросал на C#, но общая идея, я думаю, будет ясна)
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
065:
066:
067:
068:
069:
070:
071:
072:
073:
074:
/// <summary>
  /// Thread example
  /// </summary>
  /// <remarks>
  /// Add Label(Name=Label1) to form
  /// </remarks>
  public partial class frmMain : Form
  {

    delegate void SetPropertyHandler(Control ctrl, ControlProperty prop, object arg);
    enum ControlProperty { Text, BackColor, ForeColor };

    public frmMain()
    {
      InitializeComponent();
    }

    protected override void OnShown(EventArgs e)
    {
      base.OnShown(e);

      /** Create new thread */
      Thread thread = new Thread(DoWork);
      thread.IsBackground = true;
      thread.Start();
    }

    private void DoWork()
    {
      for (int i = 0; i < 10000; i++)
      {
        SetProperty(label1, ControlProperty.Text, i);
      }

      SetProperty(label1, ControlProperty.Text, "Done ...");
      SetProperty(label1, ControlProperty.ForeColor, Color.Green);
    }

    private void SetProperty(Control ctrl, ControlProperty prop, Object arg)
    {
      /** Check input parameters */
      if (ctrl == null || arg == null) throw new ArgumentNullException();

      /** Check thread state */
      if (InvokeRequired)
      {
        SetPropertyHandler d = new SetPropertyHandler(SetProperty);
        Invoke(d, new Object[] { ctrl, prop, arg });
      }
      else
      {
        /** Set control property */
        switch (prop)
        {
          case ControlProperty.Text:
            ctrl.Text = arg.ToString();
            break;
          case ControlProperty.BackColor:
            ctrl.BackColor = (Color)arg;
            break;
          case ControlProperty.ForeColor:
            ctrl.ForeColor = (Color)arg;
            break;
          default:
            throw new NotImplementedException();
        }

        /** Update control */

        Application.DoEvents();
      }
    }
  }

Colorized by: Eros.CodeSyntaxColor Engine

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 8 | Автор: Inf
Добавлено:04.03.2008 / 18:49
Спасибо :) посмотрел ещё на форумах да в интернете про делегаты и написал универсальное средство в котором не требуется писать для каждого контрола процедуру, мой проект движется к завершению :) это не может не радовать, теперь ещё одна проблема, проект работает с файлами большого размера (бывают >200mb) сначало идёт считывание файла в массив, и после в уже в цикле For each работа с ним, так вот, после запуска программы, проходит вся обработка, всё работает как нужно, НО в диспетчере задач моя программа потребляет 500мб памяти, я не удивляюсь :( ведь идёт считывание в память, но когда работа завершается, вроде бы не происходит ни каких действий, но в памяти программа до сих пор кушает это же количество ресурсов, дело не в потоке, смотрел во время отладки Debug>Window>Thread после обработки поток нормально закрывается, но всё равно что то висит в памяти, смотрел переменные, все пустые, я с таким не сталкивался и даже не знаю с чего начать искать информацию, может быть есть какие-нибудь предположения? Читал что то о сборщике мусора, а так же думаю моё решение задачи не верное :( читал что можно как то читать из файла построчно, обрабатывать, и тут же выводить в файл результат, но этот способ мне не много не подходит (идёт работа со строками, именно со строками а не строкой, при некотором условии в переменную пишется определенная строка)...но и считывание в память тоже как то не очень т.к требование ресурсов очень огромное, вот в замешательстве, есть мысли по этому поводу?

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Узнать номер строки | Автор: Inf
Добавлено: 28.02.2008 / 20:17 | ответов: 3 | просмотров: 110

Здравствуйте
Подскажите пожалуйста как мне поступить в этой ситуации:
имеется код который работает с содержимым массива, а именно со строками
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
Dim lines() As String = System.IO.File.ReadAllLines("test.txt")

    For Each value As String In lines
      If value.Contains("test_dannie") Then
        Dim result As String = value.ToString
        'а вот тут нужен код который запишит в переменную номер строки где содержиться "test_dannie", подробнее написано чуть ниже
      End If
    Next

Colorized by: Eros.CodeSyntaxColor Engine

Как видно код работает со строками, а именно проверяет содержимое каждой, и ищет строку которая содержит в нашем случае "test_dannie" так вот, меня всё устраивает всё работает, но проблема, мне нужно получить номер строки где будет найдено это совпадение, вроде просто, а сообразить не могу, подскажите пожалуйста возможно ли это реализовать в моём случае? Спасибо
Visual Studio 2008

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Алексей
Добавлено:29.02.2008 / 04:24
001:
002:
003:
004:
005:
006:
Dim row As Integer = 1
..
row += 1
..

Colorized by: Eros.CodeSyntaxColor Engine

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: EROS
Добавлено:29.02.2008 / 08:03
В данном случае проще всего вместо цикла вида ForEach надо использовать For .. To В этом случае в этой перменной и будет номер строки

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Inf
Добавлено:01.03.2008 / 16:45
Как я сам не додумался, оказывается всё просто, спасибо!

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Тестирование | Автор: Алексей
Добавлено: 26.02.2008 / 06:55 | ответов: 0 | просмотров: 70

Все за сертификатами в систему тестирования! :) Может даже кто-то нормальный тест сможет написать ;-)

Сертификат #000001

Сертификат #000010

http://kbyte.ru/UserServices/MyTests.aspx
http://kbyte.ru/Service/Tests.aspx

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Помогите пожалуйста найти ошибку | Автор: agakamran
Добавлено: 25.02.2008 / 23:41 | ответов: 2 | просмотров: 131

private void addToolStripMenuItem_Click(object sender, EventArgs e)
{
//Dialog d = new Dialog();
Form2 d=new Form2();
if (d.ShowDialog() == DialogResult.OK)
{
//yeni yaradilani massive daxil edek
arTheCars.Add(d.theCar);
UpdateGrid();
}

SaveFileDialog mySav = new SaveFileDialog();
mySav.InitialDirectory = ".";
mySav.Filter = "xidmet files(*.ham)|*.ham|All files(*.*)|*.*";
mySav.FilterIndex = 1;
mySav.RestoreDirectory = true;
mySav.FileName = "xidmet.ham";
//if (mySav.ShowDialog() == DialogResult.OK)
// {
// Stream myStream = null;
FileStream myStream = new FileStream("xidmet.ham", FileMode.Create);
// if ((myStream = mySav.OpenFile()) != null)
// {
BinaryFormatter myBin = new BinaryFormatter();
myBin.Serialize(myStream, arTheCars);
myStream.Close();
// }
// }
}

Помогите пожалуйста найти ошибку немого сохранить новое добавленное запись по отладкам посмотрю arTheCars получает добавленное количества строк но выдается такое ошибка заранее благодарен
Type 'Car.Form1' in Assembly 'Car, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Алексей
Добавлено:26.02.2008 / 04:50
Общий форум (ASP .NET)

Form2 d=new Form2();

SaveFileDialog mySav = new SaveFileDialog();

все верно? :)

И что такое arTheCars? ArrayList? или какой-то другой массив, или коллекция?

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: Edlin
Добавлено:26.02.2008 / 09:02
Я так понял Form2.theCar возвращает объект типа Car.Form1 (?). Похоже этот тип не помечен аттрибутом Serializable. По крайней мере один из типов объектов, хранящихся в arTheCars не имеет такого аттрибута.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Наверх

 

Последние статьи

Как узнать размер базы данных MySQL через php
Автор: Николай Рудченко | добавлено: 14.02.2008 / 13:01 | просмотров: 136

В этой небольшой статье вы узнаете, как получить размер вашей базы данных (БД) MySQL используя язык программирования PHP.

Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse)
Автор: Немиро Алексей | добавлено: 27.07.2007 / 14:01 | просмотров: 3094

В данной статье речь пойдет о том, как можно программно заполнить и отправить Web-форму, а также получить результат с использованием довольно простых классов - HttpWebRequest и HttpWebResponse.

Работа с SQL – Запросы
Автор: Хабибулин А. (aka Bille Gates) | добавлено: 22.07.2007 / 04:43 | просмотров: 5780

В данной статье рассмотрены часто используемые SQL-запросы и приведены примеры их использования.

Использование XML.Serialization
Автор: Немиро Алексей | добавлено: 19.07.2007 / 15:38 | просмотров: 1588

В данном обзоре речь пойдет об использование XML.Serialization в .NET и ее применении на примере сохранения и считывания настроек программы с использованием синтаксиса языка Visual Basic .NET.

Выбор языка программирования для научных работ (2-я редакция)
Автор: Юдин С. Ю. | добавлено: 15.03.2007 / 02:49 | просмотров: 4283

Идея написания этой статьи возникла после того, как на одном из сайтов по физике http://physics.nad.ru/aniboard/messages/291.html я обнаружил интересный алгоритм моделирования движения тела в поле постоянной напряженности по различным направляющим. Вернее, меня заинтересовал не весь алгоритм, т.к. основа их всех одна (принцип Даламбера, если не считать квазиалгоритма с применением уравнений Лагранжа 2-го рода) и различаются они только способом определения реакций в месте соприкосновения тел. ...

 

Статьи на Kbyte.Ru

Наверх

 

Интересные коды и решения

Как удалить лишние пробелы из текста?
Дата добавления: 16.08.2006 / 19:05 | просмотров: 1628 | платформа: VB

Как сделать часы?
Дата добавления: 16.08.2006 / 23:30 | просмотров: 2033 | платформа: VB

Преобразование числа в Украинскую валюту
Дата добавления: 16.08.2006 / 19:30 | просмотров: 1000 | платформа: VB

Проверить корректность E-Mail (стандартный способ)
Дата добавления: 21.08.2006 / 20:23 | просмотров: 1374 | платформа: ASP .NET (VB)

Запуск программы
Дата добавления: 21.08.2006 / 20:19 | просмотров: 2173 | платформа: VB

Проверка существования файла
Дата добавления: 31.07.2006 / 12:40 | просмотров: 2143 | платформа: VB

Как создать новую папку (каталог) с использованием API?
Дата добавления: 31.07.2006 / 12:37 | просмотров: 1340 | платформа: VB

Как изменить раскладку клавиатуры (Ru-En-Du ...)?
Дата добавления: 16.08.2006 / 19:44 | просмотров: 1333 | платформа: VB

Как преобразовать десятичное число в бинарное?
Дата добавления: 16.08.2006 / 20:32 | просмотров: 1364 | платформа: VB

Работа с группами ListView
Дата добавления: 23.08.2006 / 22:09 | просмотров: 2085 | платформа: VB .NET

 

Универсальные коды на Kbyte.Ru

Наверх

 

Юмор на Kbyte.Ru

Как в комнате уничтожить клопов ?
- Hадо их загнать под шкаф, а у шкафа подпилить ножки.

 

Рейтинг: 164
Всего голосов: 311
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Склероз – это Read Only статус человеческой памяти.

 

Рейтинг: 1068
Всего голосов: 1535
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

- Правда ли, что если проиграть назад диск с Windows'NT, то можно услышать сатанинское послание?
- Это пустяки, вот если проиграть его вперед, он установит вам Windows'NT!

 

Рейтинг: 243
Всего голосов: 369
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

- Михал Ефремович, а как вы намерены бороться с этими, как их там, зарплатами в конвертах?
- Да нет ничего проще, Владимир Владимирович, запретим конверты!

 

Рейтинг: 1303
Всего голосов: 1893
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

- Ррр-е-бббб-ята, ввввв-оз-ммите ммм-еня в вв-а-а-аш аан-самбль!
- А ты кто?
- Йййййй-я рррр-ээээ-ппппп-ер!

 

Рейтинг: 263
Всего голосов: 407
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

- Как вы поняли, что это лев - людоед?
- Да взгляд у него, как у моей жены.

 

Рейтинг: 90
Всего голосов: 164
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

У одной провайдерской фирмы спросили:
- Почему Вы так активно создаете сервисы бесплатного e-mail?
- Ну, как Вам сказать...
А Вы читали когда-нибудь чужую почту?

 

Рейтинг: 222
Всего голосов: 340
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

- Чем же объяснить, что ты не умер, когда тебе прострелили грудь?
- Тем, что у меня в эту минуту сердце ушло в пятку.

 

Рейтинг: 247
Всего голосов: 330
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Недавно начал работу в фирме коммерческой недвижимости. Сделал им сеть пару недель назад, а до этого, несколько дней бухгалтера данными между компьютерами при помощи флэшки обменивались (фирма экономит на всём, дисководов нет). К одному из компьютеров по USB были подключены принтер и мышь. USB портов в том компьютере всего два, оба и заняли. Подключили, пока меня не было, флэшку, а для этого отключили принтер. Перекинули нужные данные и снова подключили принтер.
Прошло время, звонят мне по телефону и жалуются, мол, принтер не работает, работа стоит, приезжай скорее! Приехал, как только смог, посмотрел настройки принтера - все в норме. Стал подключение принтера к компьютеру смотреть. Каково же было моё изумление, когда я увидел USB коннектор аккуратненько насаженный на штырьки COM порта! До этого, мне даже не представлялось, что такое возможно! Судя по всему, не зря у женщины, осуществившей такое подключение, на рабочем столе изображение девушки, едущей в автомобиле из которого она забыла вынуть пистолет бензозаправки...

 

Рейтинг: 905
Всего голосов: 1344
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Стал программист блины печь - первый блин вышел, как полагается комом, ну а второй, как водится, - экзешником.

 

Рейтинг: 208
Всего голосов: 356
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Весь юмор на Kbyte.Ru

Наверх


Выпуск подготовил: R-KDR-19826

Редактор: Немиро Алексей

Copyright (c) Nemiro AS, 2005-2007


В избранное