Никак не могу разобраться, что обозначает второй параметр в этом методе? При его значении 'false' - метод работает как мне надо, т.е. пропускает практически только буквы и цифры. При 'true' - пропускает очень сомнительные строки. Например, при 'true' вот такие строки получаются валидными:
@##%RGFDGDHW
&%#$^%@@^%#^#
А вот такая - уже не валидная:
$#^%#$*&%^*&^%(%^(
На мой взгляд, они все три невалидные для символьного имени. В чём тут логика?
Код для проверки:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
namespace AcadTest
{
public class ValidateSymbolNameTest
{
[CommandMethod("ValidateSymbolNameTest")]
public void RunCmd()
{
Document adoc = Application.DocumentManager.MdiActiveDocument;
Editor ed = adoc.Editor;
Database db = adoc.Database;
PromptResult stringRes = ed.GetString("\nEnter symbol name: ");
if (stringRes.Status != PromptStatus.OK) return;
string value = stringRes.StringResult;
PromptKeywordOptions kWordOpts = new PromptKeywordOptions("\nAllow vertical bar?: ");
kWordOpts.Keywords.Add("Yes");
kWordOpts.Keywords.Add("No");
kWordOpts.Message += kWordOpts.Keywords.GetDisplayString(true);
PromptResult res = ed.GetKeywords(kWordOpts);
if (res.Status != PromptStatus.OK)
return;
bool allowVerticalBar = res.StringResult == "Yes";
try
{
SymbolUtilityServices.ValidateSymbolName(value, allowVerticalBar);
ed.WriteMessage("\nSymbol name '{0}' is valid!", value);
}
catch
{
ed.WriteMessage("\nSymbol name '{0}' is not valid!", value);
}
}
}
}