Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / CommonDialog и папка. Баг или нет? / 16 сообщений из 16, страница 1 из 1
30.03.2010, 17:38
    #36551189
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
Есть у меня программка для работы с файлами. Пользователь выбирает нужный ему файл, нажимает сохранить и файл переносится на сервер,
а в БД сохраняется новый путь к файлу и т.д. Затем из программы можно открыть это файл, переименовать или удалить.

Так вот использую я в своей программе CommonDialog и заметил такой баг:
Юзер в проге нажимает кнопку добавить файл открывается CommonDialog
Допустим на рабочем столе есть папка с именем «Папка 1» в этой папке есть файлик с именем «Файл 1»
он выбирает этот файл нажимает сохранить дальше происходит то,
что я описал выше.
Допустим, дальше я захочу переименовать папку, которая осталась на рабочем столе с
«Папка 1» в «Папка 2» или вообще удалить её.
Если я буду делать это через винду, то увижу сообщение «Объект используется другим пользователем или программой ……»
У меня такое впечатление что CommonDialog не закрывается, а просто делается невидимым и из за него невозможно
работать с последней папкой в которой он брал файл.
Да чуть не забыл по умолчанию CommonDialog1.InitDir – не прописан.
Может, кто знает, что нужно установить в настройках CommonDialog чтобы такой ситуации не было?
А может это и не CommonDialog виноват, но вроде кроме его больше некому
Работаю с файлами через FSO и есть еще Shell
...
Рейтинг: 0 / 0
30.03.2010, 17:58
    #36551242
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
Если форма, на которой коммондиалог не закрыта, то, видимо, он продолжает держать текущий путь.
Так что после его закрытия очистите ему свойства типа Filename, Initdir и т.п., а перед следующим использованием вновь инициализируйте.
...
Рейтинг: 0 / 0
30.03.2010, 18:16
    #36551290
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
Shocker.ProЕсли форма, на которой коммондиалог не закрыта, то, видимо, он продолжает держать текущий путь.
Так что после его закрытия очистите ему свойства типа Filename, Initdir и т.п., а перед следующим использованием вновь инициализируйте.
Я как раз этим сейчас и занимаюсь, но прикол в том, что если хоть раз использовать CommonDialog
а затем закрыть все формы перейти в режим программирования проекта то он всё равно зараза не хочет отпускать папку.
...
Рейтинг: 0 / 0
30.03.2010, 18:25
    #36551316
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
TpaBkaЯ как раз этим сейчас и занимаюсь, но прикол в том, что если хоть раз использовать CommonDialog
а затем закрыть все формы перейти в режим программирования проекта то он всё равно зараза не хочет отпускать папку.

А если закрыть среду - отпускает?

Можно попробовать перевести его на какую-нить нейтральную папку (на корень, например), только неясно, получится ли это без запуска диалога....
...
Рейтинг: 0 / 0
30.03.2010, 18:39
    #36551345
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
Shocker.ProА если закрыть среду - отпускает?.
Да

На счет нейтральной папки тоже вариант,
но я сейчас задумался над тем, а можно ли его добавлять динамически,
а затем уничтожать
Случайно не знаете, как его добавить?
Все-таки не совсем приятно знать, что у тебя в программе висит без надобности окно и закроется оно тогда когда закроется проект
...
Рейтинг: 0 / 0
30.03.2010, 18:39
    #36551347
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
TpaBkaСлучайно не знаете, как его добавить?
Все-таки не совсем приятно знать, что у тебя в программе висит без надобности окно и закроется оно тогда когда закроется проект

Попробуйте через Controls.Add
...
Рейтинг: 0 / 0
30.03.2010, 18:40
    #36551352
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
Shocker.ProTpaBkaСлучайно не знаете, как его добавить?
Все-таки не совсем приятно знать, что у тебя в программе висит без надобности окно и закроется оно тогда когда закроется проект

Попробуйте через Controls.Add

Только вы же говорите, что при закрытии ФОРМЫ на которой он находится, папку не отпускает. То есть динамическое добавление может не помочь.
...
Рейтинг: 0 / 0
30.03.2010, 18:44
    #36551362
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
Код: plaintext
1.
2.
3.
4.
Dim WithEvents ctlCommandDialog As CommonDialog

Private Sub Command1_Click()
Set ctlCommandDialog = Controls.Add("CommonDialog", "ctlCommandDialog1", Me)
End Sub

Ошибка Недопустимій ряд Class

короче неможет найти "CommonDialog"
...
Рейтинг: 0 / 0
30.03.2010, 18:46
    #36551369
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
Надо полностью специфицировать путь:

MSComDlg.CommonDialog
...
Рейтинг: 0 / 0
30.03.2010, 18:53
    #36551392
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
Спасибо добавить получилось, значит получится и уничтожить
но времени уже нет уборщица гонит домой
с дома отпишусь получилось или нет
...
Рейтинг: 0 / 0
30.03.2010, 18:55
    #36551394
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
TpaBkaно времени уже нет уборщица гонит домой

Controls.Remove("Уборщица")
...
Рейтинг: 0 / 0
30.03.2010, 21:31
    #36551617
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
Shocker.ProControls.Remove("Уборщица")


Не динамика ничего не дала
Думаю нужно покопаться в API ответ наверняка где-то там
...
Рейтинг: 0 / 0
31.03.2010, 01:21
    #36551813
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
Я думаю, что у среды выполнения есть понятие "текущий путь" и соммондиалог его меняет. И этот текущий путь используется если вы не задали InitDir. То есть надо найти способ узнать текущий путь.

Кстати, а не пробовали скомпилить exe-шник и проверить оттуда?
...
Рейтинг: 0 / 0
31.03.2010, 05:07
    #36551860
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
Проблема возникает из-за того, что диалог устанавливает текущий путь для приложения.
Аналогичную ситуацию можно получить если в Word-е или в Excel-е воспользоваться любым файловым диалогом (открыть/сохранить и т.п.), выбрать папку, закрыть диалог и не закрывать офисное приложение. Пока это приложение не будет закрыто, его текущий каталог будет залочен от переименования и переноса. Чтобы избавиться от проблемы достаточно сменить текущий каталог, напримре, на корневой.
Пример кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub Main()
  With CreateObject("MSComDlg.CommonDialog")  ' или  New CommonDialog - если есть ссылка на Comdlg32.ocx
    .DialogTitle = "Open File Dialog"
    .Filter = "All files (*.*) | *.*"
    .ShowOpen
    If Len(.FileName) Then MsgBox .FileName
  End With
  'Вот это изменит текущий путь к папке на корневой
  ChDir "\"
End Sub
...
Рейтинг: 0 / 0
31.03.2010, 09:27
    #36551968
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
Shocker.ProТо есть надо найти способ узнать текущий путь.

Разумеется, я имел ввиду не "узнать", а "изменить"

ZVI
Код: plaintext
ChDir "\"


точно, как я мог забыть про эту команду... спасибо
...
Рейтинг: 0 / 0
31.03.2010, 10:41
    #36552156
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CommonDialog и папка. Баг или нет?
Всем спасибо действительно работает: ChDir "\"
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / CommonDialog и папка. Баг или нет? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]