...
App.DocumentCollection docMng = cad.DocumentManager;
docMng.DocumentLockModeChanged += new App.DocumentLockModeChangedEventHandler(docMng_DocumentLockModeChanged);
...
static void docMng_DocumentLockModeChanged(object sender, App.DocumentLockModeChangedEventArgs e) {
// Можно переопределить команду OPEN, подсовывая вместо "родного" диалогового окна открытия
// файлов своё. Такой подход предоставит возможность выполнять предварительную проверку содержимого
// каталога открываемого файла и, в случае необходимости, блокировать открытие чертежа: например, если в каталоге
// находится доступный только для чтения файл acad*.lsp, или acad*.fas:
if (settings.DisableDrawingOpeningFromDangerDir && string.Compare(e.GlobalCommandName, "OPEN", true) == 0) {
e.Veto();
//ShowOpenFileDialog(); // Так нельзя, иначе после моего диалогового окна почему-то
// будет открываться "родное" окно выбора файлов AutoCAD.
// Поэтому делаю так:
cad.DocumentManager.MdiActiveDocument.SendStringToExecute("bush-open ", true, false, false);
}
// В случае необходимости, можно отключить автоматическую загрузку файлов acad*.lsp, или acad*.fas:
if (settings.DisableAcadLispAutoloading && e.GlobalCommandName.Contains("s::startup"))
e.Veto();
}
[Rtm.CommandMethod("bush-open", Rtm.CommandFlags.Modal)]
public static void ShowOpenFileDialog() {
CadWin.OpenFileDialog dialog = new CadWin.OpenFileDialog(
String.Format("[{0}] {1}", Resource.startTitle, Resource.docOpenTitle),
"", "dwg;dwt;dws;dxf", "", CadWin.OpenFileDialog.OpenFileDialogFlags.SearchPath);
WinForms.DialogResult result = dialog.ShowDialog();
if (result != Win.Forms.DialogResult.OK)
return;
if (!dialog.Filename.ToLower().StartsWith(CadSettings.Variables["ac-app"].Value)) {
DirectoryInfo dir = new DirectoryInfo(Path.GetDirectoryName(dialog.Filename));
if (!dir.Exists)
return;
FileInfo[] files = dir.GetFiles("acad*.lsp", SearchOption.TopDirectoryOnly);
FileInfo[] files2 = dir.GetFiles("acad*.fas", SearchOption.TopDirectoryOnly);
FileInfo[] files3 = dir.GetFiles("acad*.mnl", SearchOption.TopDirectoryOnly);
String fileName = String.Empty;
try {
foreach (FileInfo[] collection in new FileInfo[][] { files, files2, files3 }) {
foreach (FileInfo item in collection) {
fileName = item.FullName;
item.Delete();
cad.DocumentManager.MdiActiveDocument.Editor.WriteMessage(Resource.fileDeleted, fileName);
}
}
}
catch (Exception ex) {
Win.MessageBox.Show(String.Format(Resource.disableFileOpen, fileName, ex.Message),
Resource.warning, Win.MessageBoxButton.OK, Win.MessageBoxImage.Stop);
return;
}
}
App.Document doc = cad.DocumentManager.Open(dialog.Filename);
if (doc != null)
cad.DocumentManager.MdiActiveDocument = doc;
}