У меня просто была подобная потребность, и я решил ее как это:
public override IList SnapLines
{
get
{
IList snapLines = base.SnapLines;
MyControl control = Control as MyControl;
if (control == null) { return snapLines; }
IDesigner designer = TypeDescriptor.CreateDesigner(
control.textBoxValue, typeof(IDesigner));
if (designer == null) { return snapLines; }
designer.Initialize(control.textBoxValue);
using (designer)
{
ControlDesigner boxDesigner = designer as ControlDesigner;
if (boxDesigner == null) { return snapLines; }
foreach (SnapLine line in boxDesigner.SnapLines)
{
if (line.SnapLineType == SnapLineType.Baseline)
{
snapLines.Add(new SnapLine(SnapLineType.Baseline,
line.Offset + control.textBoxValue.Top,
line.Filter, line.Priority));
break;
}
}
}
return snapLines;
}
}
Этот способ, которым это на самом деле создает временного подразработчика для подуправления для обнаружения, где "реальная" базовая линия snapline.
Это казалось довольно производительным в тестировании, но если перфект становится беспокойством (и если внутреннее текстовое поле не перемещается), тогда, большая часть этого кода может быть извлечена к Инициализировать методу.
Это также предполагает, что текстовое поле является прямым ребенком UserControl. Если существуют другие влияющие на расположение средства управления в пути тогда, вычисление смещения становится немного более сложным.
Да, в Python есть список аргументов распаковки . Попробуйте так:
some_class(*os.path.split(somefile))