Как создать прозрачное управление, которое работает когда сверх других средств управления?

Вам нужно связать d для каждой созданной функции. Один из способов сделать это - передать его как параметр со значением по умолчанию:

lambda d=d: self.root.change_directory(d)

Теперь функция внутри функции использует этот параметр, хотя он имеет то же имя, и значение по умолчанию для который вычисляется при создании функции. Чтобы помочь вам увидеть это:

lambda bound_d=d: self.root.change_directory(bound_d)

Помните, как работают значения по умолчанию, например, для изменяемых объектов, таких как списки и dicts, потому что вы привязываете объект.

Эта идиома параметров с значениями по умолчанию достаточно распространены, но может быть неудачным, если вы исследуете параметры функции и определяете, что делать в зависимости от их присутствия. Вы можете избежать параметра с другим закрытием:

(lambda d=d: lambda: self.root.change_directory(d))()
# or
(lambda d: lambda: self.root.change_directory(d))(d)

. Еще лучше, редизайн того, как вы обрабатываете «команды», поможет здесь и должен помочь в другом месте.

19
задан Ed S. 27 February 2009 в 00:50
поделиться

3 ответа

Я решил просто нарисовать родителя под своими дочерними элементами управления вручную. Вот хорошая статья.

3
ответ дан 30 November 2019 в 04:21
поделиться

Некоторые предложения (извинения за код VB).

Стараются не красить фон:

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    If m.Msg = &H14 Then
        Return
    End If
    MyBase.WndProc(m)
End Sub

Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs)
    Return
End Sub

не называют метод краски основы средств управления:

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    'MyBase.OnPaint(e) - comment out - do not call
End Sub
2
ответ дан 30 November 2019 в 04:21
поделиться

Прозрачные средства управления в DotNet реализованы при наличии прозрачного управления , контейнер тянет себя в окне прозрачного управления, и затем иметь прозрачный контроль тянут себя. Этот процесс не принимает во внимание возможность наложения средств управления. Таким образом, необходимо будет использовать своего рода обходное решение, чтобы заставить его работать.

В некоторых случаях я имел успех со сложным вложением, но это главным образом только хорошо для быстрого-и-грязного разделения на уровни битовых массивов, и это не решает проблем с неравнодушным наложением средств управления.

6
ответ дан 30 November 2019 в 04:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: