![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| omankit |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
Что я уже накопал:
!!!!!!!!!!!!!!!!!!!!!!?????????????????? А теперь самое интересное если на форме добавить какой нибудь контейнер (tabconteiner,panel,tablelayout и т.п.) то ничего не работает этот код видит только данный контейнер и чтобы выловить контрол надо перебирать все его содержимое. а если контейнеры вложены друг в друга надо перебирать сначало один потом вложеный и т.д и т.п. Вопрос как это обойти! не хочется писать оброботчик в каждой форме ------------------------------------------------------------------------------------------------------------------------------------------------------------------ ИТОГОВЫЙ КОД ОТВЕТ!!!!!!!!!!!
Это сообщение отредактировал(а) omankit - 29.10.2008, 12:13 |
||||
|
|||||
| omankit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
Очень жалко что ни кто не может ответить
|
|||
|
||||
| MasterOfCode |
|
|||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Windows должна по стандарту копировать текст на Ctrl + C
-------------------- ![]() |
|||
|
||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
На самом деле вопрос не вполне ясен. Для начала неплохо было бы выяснить для чего нужно перебирать все открытые формы. Дело в том, что о событии KeyUp написано буквально следующее
Учитывая, что событие возникает не само по себе, а для конкретного объекта, то если вызван обработчик события, то и так ясно, что активна именно та форма для которой он сработал. Таким образом для начала надо урезать код хотябы до такого
Хотя, кто знает, возможно я чего-то не понял. Теперь к проблеме Замечание в данном случае довольно уместно, правда немного с другого боку. Обрати внимание на то, как копирование производит система. При нажатии Ctrl + C копируется не абы какой текст, а конкретно выделенный текст активного текстбокса. Ты, как я понимаю хочешь скопировать весь текст из текстбокса. Это можно, только надо определиться с какого именно. Что происходит у тебя в коде? перебираются контролы на заданной панели и если это текстбокс, его содержимое копируется в буфер. Проблема только в том сколько текстбоксов на этой панели. Если их больше одного, то принахождении первого его текст будет скопирован, но цикл при этом не остановится, далее будет найден следующий текстбокс, и его текст тоже будет скопирован(полагаю излишне объяснять, что текст, скопированный перед этим будет удалён) и конце концов в буфере останется только текст из последнего текстбокса. Так что сначала определись, что именно ты хочешь копировать. Хотя... возможно я чего-то не понял. Это сообщение отредактировал(а) diadiavova - 16.10.2008, 14:30 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
omankit, я был был раздосадован, если на ctrl-c в буфер бы скопировался не так старательно мною выделенный текст, а текст целиком, причём из какого-то левого текст-бокса
есть общеупотребительные приёмы работы, и когда некая программа на стандартные действия реагирует совсем нестандартно - это всегда плохо и раздражает не только меня одного |
|||
|
||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Ну, коль скоро разъяснений по поводу того, что должен делать этот код не последовало прийдётся описывать задачу, исходя из того, что я понял.
Насколько я понял задача заключается в том, чтобы "лёгким движением руки" можно было скопировать текст изо всех текстбоксов и так же легко его вставить, к тому же, что бы он правильно распределился, да ещё и реализовать это всё в базовом классе и ктому же, чтобы всё работало одинаково хорошо для всех производных классов. Если это так - попытаюсь объяснить почему это невозможно в общем случае. Допустим ты производишь от данного класса ещё два к примеру A и B. В классе А три текстбокса, в классе В - два (или четыре - всё равно). Скопировали данные из экземпляра класса А и пытаемся вставить в экземпляр класса В. И что куда вставлять? Поэтому 1.Не нужно использовать буфер обмена. Вместо этого нужно реализовать такой механизм в котором обмен данными будет осуществляться только внутри одного класса. Если в системный буфер нужно заносить данные - делать это отдельно. 2.Часть работы прийдётся выполнять в каждом классе, но в базовом можно реализовать несколько инструментов, которые помогут сделать это быстро. Ещё момент. Вот это замечание не догма. В некоторых случаях переопределять системную логику нужно, но для этого нужны серьёзные основания и к тому же нужно учитывать все последствия. Так что если логика программы позволяет сохранить общепринятые правила - лучше так и поступить. Горячие клавиши являются способом быстрого вызова команд, но для каждой команды должен быть определён стандартный вызов, то есть какое-нибудь меню. Так вот: горячие клавиши лучше назначать для элементов меню для этого у класса System.Windows.Forms.ToolStripMenuItem есть свойство ShortcutKeys, которому можно присвоить значение прямо в дизайнере, вместо того, чтобы обрабатывать события клавиатуры. Вместо того, чтобы каждый раз обходить все контролы некоторого контейнера для сбора данных нужно создать коллекцию текстбоксов, с которых будет осуществляться чтение данных, а потом обходить эту коллекцию. Так же в базовой форме можно предусмотреть методы копирования и вставки данных. Я тут примерно набросал что можно сделать, код не проверял, но если нигде не ошибся - должен работать.
Метод FillTextBoxList следует вызвать создания списка текстбоксов. Сделать это можно в обработчике события Load базовой формы или в конструкторе производной формы, но после инициализации компонентов(последний вариант может создать небольшие проблемы в сучае если от той формы будет ещё что-то производится, хотя и это не страшно). Для копирования внутри класса лучше всего создать статическое поле. Вот примерный шаблон того, что можно сделать в производном классе.
Ну а что до способов вызова методов копирования и вставки - здесь всё ограничивается только твоей фантазией. Кроме того очень рекомендую при вставке предусмотреть возможность отмены вставки(Undo) хотябы на один ход. Для этого просто нужно создать ещё одно поле - строковый массив(не статический) и копировать в него данные перед вставкой. Потомучто если что-то случайно вставишь не туда - данные будут потеряны. ЗЫ Код не проверял, так что если будут глюки и сам не разберёшься - пиши. Это сообщение отредактировал(а) diadiavova - 19.10.2008, 22:33 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
| omankit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
Ну да форма то известна сразу. Проблема в основном в том что я не могу получить контрол активный. По значению activecontrol мне выдается контейнер!!! А что дальше то делать как контрол получить из которого послали KeyUp? Переберать все контейнеры ища активный контрол через EditingControl? Да и в коллекции контролов видно только контейнер! Приходится выбирать его брать сплитпанел2 например и перебирать коллекцию контролов этой панели! Самое плохое что эти контейнеры различаются от формы к форме!
|
|||
|
||||
| MasterOfCode |
|
|||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Почему бы не подписаться на событие KeyUp у textBox'a тогда не надо определять что за контрол и задача определение активности так же отпадет -------------------- ![]() |
|||
|
||||
| diadiavova |
|
||||||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Ну здесь как раз всё просто. У обработчика события два параматра. Первый(sender) - как раз ссылка на объект инициировавший событие. Так что, если ты подписан на событие киап самого контрола - то и городушки городить не стоит. А для того, чтобы на него подписаться при обходе текстбоксов надо сделать примерно так
Я тут переделал функцию заполнения коллекции из предыдущего примера, но если тебе это не понадобится просто можешь не добавлять ткстбоксы в коллекцию а только определить обработчик события.
Метод FillTextBoxList обходит все контролы некоторого контейнера и вложенных в него контейнеров. В этом вся фишка. Ты просто передаёшь ей контейне как аргумент а она его обходит. Можно сделать что-то в таком роде
Можно при желании оформить всё в виде функции, которая будет выдавать линейный список контролов, но делать это в обработчике события не советую. Операция затратная и лишний раз её лучше не выполнять. Лучше всего обойти список по необходимости и всё что нужно добавить в коллекцию и потом пользоваться. Они может и различаются, но имеют общего предка. Я это учёл.
Ты хоть проверь работает или нет. Это такая штука, что независимо от того, сколько раз ты это делал - всегда лучше испытать код, а я этого не сделал. Это сообщение отредактировал(а) diadiavova - 20.10.2008, 11:59 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||||||||
|
|||||||||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Я извиняюсь в этом коде допустил ошибку
Скопировал его с предыдущего примера, поменял имя метода, а внутри самого метода этого не сделал Я имел в виду это
Обход осуществляется рекурсивно, так что метод вызывает сам себя, и второго параметра у него естественно нет. Это сообщение отредактировал(а) diadiavova - 23.10.2008, 19:45 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
| omankit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
Хм а SplitterPanel не ловит а она в самом начале
--------------------------- Немного подумав вот что накатал:
diadiavova ОГРОМНОЕ СПАСИБО ЗА ИНТЕРЕСНЫЕ МЫСЛИ И ПОДСКАЗКИ!!!!!!!! Это сообщение отредактировал(а) omankit - 20.10.2008, 15:17 |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Я просто не посмотрел на иерархию, положился на память. SplitterPanel действительно не происходит от ContainerControl, вместо него в коде следует использовать System.Windows.Forms.ScrollableControl или вообще можно ограничиться Control, потомучто свойство Controls наследуетса именно от него. В таком виде всё будет ловиться.
Если ты назначаешь обработчик в коде, то инструкция Handles не нужна. Всё сделал не так как я писал. Если всё работает - это не значит, что код хороший. В таком виде как у тебя всё будет тормозить. Я ведь уже писал, что не следует обходить все контролы при копировании, потомучто рекурсия - дорогое удовольствие. Создай список и обходи его если нужно. Но лучше обрабатывать события самих текстбоксов. Обходишь рекурсивно форму один раз подписываешься не события нужных контролов, а после этого в обработчике идентифицируешь отправителя события по параметру sender. Сделаешь ещё несколько таких тормозных кодов - с прогой вообще невозможно будет работать. И ещё раз повторю, что обработка событий клавиатуры для создания шоткатов - плохая идея. Старайся максимально использовать стандартные приёмы. Хотя, если есть желание наступить на эти грабли самому - твоё дело. Это сообщение отредактировал(а) diadiavova - 23.10.2008, 19:44 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| omankit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
а стандартно то как??? как стандартно сделать все это дело? и о каком списке речь? всмысле мне на каждом текстбоксе в каждой форме все делать? как обойти и подписаться?
Добавлено через 1 минуту и 30 секунд я не понимаю потому что не копирует в буфер по умолчанию да и мышью не выделяет |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Да я ведь несколько сообщений назад привёл пример. Там я как раз обхожу контролы, и если это текст бокс подписываюсь на ег событие(конструкция AddHandler - просмотри тему). Обработчик один для всех текстбоксов. Но в нём проводится обработка сендера(первого параметра).
Вот привожу цитату, клацни по изображению лупы в ней, чтобы прокрутить страницу в нужное место
ЗЫ Судя по всему произошло то о чём я написал. Начались тормоза и прочие непредсказуемые явления. Самое хреновое в этом всём, что поначалу таккие проблемы можно и не заметить, а потом всё равно скажутся. Добавлено через 7 минут и 54 секунды Не копирует потомучто надо обрабатывать событие того объекта, который тебя интересует()в твоём случае текстбокса. А ты обрабатываешь событие формы. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| omankit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
Ну этот глюк с копированием (то что выделить мышью нельзя и буфер сам не работает) уже давно к сожалению не я писал приложение с начала даже не могу представить где это дело слетает. А на счет хендлера попробую в понедельник до меня смысл дошел я и не знал что так можно спасибки.
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
На самом деле это стандартная операция, WithEvents - штука очень удобная, особенно если в дизайнере используется, только я думаю, что это наследие старого васика. Кроме AddHandler ещё прочитай про RemoveHandler - обратная операция. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Кстати: я тут одну штуку обнаружил, оказывается у формы по-умолчанию свойство KeyPreview имеет значение False. Поэтому она у тебя и не ловит события клавиатуры. Поменяй значение - будет ловить(хотя ИМХО - лучше этого не делать).
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| omankit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
ИТОГОВЫЙ КОД!!!!!!!!!!!
Код Public Sub FillKeyUpSubToControls(ByVal ctl As Control) For Each con As Control In ctl.Controls If TypeOf con Is TextBox Then Dim tb As TextBox = CType(con, TextBox) AddHandler tb.KeyUp, AddressOf ControlKeyApp ElseIf TypeOf con Is ContainerControl Then FillKeyUpSubToControls(con) ElseIf TypeOf con Is SplitterPanel Then FillKeyUpSubToControls(con) End If Next End Sub Public Sub ControlKeyApp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) If TypeOf sender Is TextBox Then Dim ActiveTextBox As TextBox = CType(sender, TextBox) If e.KeyCode = Keys.C AndAlso e.Control Then My.Computer.Clipboard.SetText(ActiveTextBox.SelectedText) End If If e.KeyCode = Keys.V AndAlso e.Control Then ActiveTextBox.SelectedText = My.Computer.Clipboard.GetText End If End If End Sub |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Я же написал насчёт ConteinerControl, что зря его использовал, и привёл исправленный вариант кода, в котором всё учтено.
Перечитай -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| omankit |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
в смысле так?
Добавлено через 5 минут и 4 секунды я конечно понимаю что это временное решение почему может все это дело не работать на автомате????? и выделение и копирование??? где можно такой касяк сделать чтобы это все сдохло?? |
||||
|
|||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
В смысле так, я же ссылку оставил
Про автоматы поясни, ничего не понял. Это сообщение отредактировал(а) diadiavova - 29.10.2008, 12:33 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| omankit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
вот создаю я проект и все в нем работает копируется выделяется мышкой и без дополничельных эвантов. А здесь это ничего не работает. И как понять где глюк я не знаю. может есть какой нибудь способ определить где блокируется
Добавлено @ 13:47 Я так понимаю что глюк гдето здесь!! Из того что я понял тут происходит получение кода стороки где прописано название формы и свойства и контрол который будет контейнером для нее. Может определяется что не правильно? Потому что если запустить форму в обход кода этого начинает работать все. Вот с этим сейчас и копаюсь.
вообщем фишка как я понимаю в чем. надо показать форму привязанную к сплит панели2 главной формы, а в спилт панели1 этого же сплитконтейнера главной формы находится меню для выбора форм вот так. И при этом коде слитают функции системы вот где не разобрался толи при toplevel толи при parent Это сообщение отредактировал(а) omankit - 29.10.2008, 15:06 |
|||
|
||||
| diadiavova |
|
||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
А ет чиво, я извиняюсь, тако есть? При такой логике ошибиться не мудрено. Кроме того ты предлагаешь мне проанализировать фрагмент чужой проги, при том, что я не вижу целого и не знаю твоих замыслов. Сохранять типы объектов в виде строки надо не так.
У тебя сохранится информация и о сборке, и о типе. Восстановить тоже не проблема(напишу по памяти, если не сработает пиши - иправлю)
Далее переменную obj конвертить куда надо Тут направление правильное, где-то мог напутать в деталях - студию только закрыл, открывать неохота. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||||
|
|||||||
| omankit |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
вообщем фиха как раз в toplevel а если не ставить то не прикручивается форма к контролу ххх чего же делать. Нужно подцепить на нее все функции системы. Интересный вопрос? Это сообщение отредактировал(а) omankit - 29.10.2008, 16:59 |
||||
|
|||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
А что мешает хранить в базе полное имя класса? Зачем эти сложности с именем сборки и прочее? CreateInstance принимает полное имя класса - вот и храни его, если имя класса завязано на имени сборки это только усложнит жизнь. Код надо делать проще, тогда и баги искать легче. А зачем форму к контролу привязывать? Привяжи к форме на которой контрол находится (свойство Owner) , да и потом, если подписаться на событие контрола, то не важно какой у него парент или левел. Я уже писал(и не только я), что если тебя интересует контрол - подписывайся на его события. А если я чего-то не понял, то ты плохо объяснил. Да, ещё... Эт щто? Если количество строк 1 - код выполняется. А если 2? А как ты формы ищешь? Как чего привязываешь, что слетает? Ничего не ясно. Какой помощи ты ждёшь я тоже не понял. Постарайся изложить проблему с учётом того, что я твоего проккта не видел, и не знаю, твоей задумки. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| ProgrammingLife |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 19.1.2008 Где: ЧИРЧИКАГО (UZ) Репутация: нет Всего: нет |
а на С# есть код!?
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Какой именно? Это сообщение отредактировал(а) diadiavova - 3.11.2008, 20:18 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| omankit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.10.2008 Репутация: нет Всего: нет |
Вообщем переделал интерфейс так чтобы можно было использовать MDI формы. Теперь все работает. За копирование/всавку через ctrl+с ctrl+v. diadiavova отдельное спасибо что объяснил как это работает. А привязку формы к контролу разбирать не буду. все равно где нить через год на WPF перейду полностью.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |