我假设您以与your previous question相同的方式运行此代码。在这方面,你用你的阶级是这样的:
(define f (new frame% [label "blog post GUI"] [min-width 400] [min-height 500]))
(define tib (new blogPost%
[parent f]))
(send f show #t)
现在既然你定义blogPost%
为horizontal-panel%
一个子类,它也继承了所有的horizontal-panel%
的初始化参数,包括alignment
说法。所以,你可以通过[alignment '(left top)]
初始化参数传送给blogPost%
类:
(define f (new frame% [label "blog post GUI"] [min-width 400] [min-height 500]))
(define tib (new blogPost%
[parent f]
[alignment '(left top)]))
(send f show #t)
如果你想建立此默认为您blogPost%
类,你可以把它添加到(super-new)
的形式:
(define blogPost%
(class horizontal-panel%
(super-new [alignment '(left top)])
...))
然而,如果你碰巧在其他地方有(new blogPost% ... [alignment '(left top)] ...)
,我相信这会破坏该代码。
因此,为了避免这种情况,很可能是最好使blogPost%
类它自己的类,以便不用为一个horizontal-panel%
,那就有一个horizontal-panel%
,以同样的方式,它已经有两个文本字段和一个按钮。如果你改变你传递给horizontal-panel%
(这是在super-new
隐含以前)的初始化参数使用blogPost%
这是因为在此之后的变化是长期的更好,代码不会打破。
(define blogPost%
(class object% ; object% instead of horizontal-panel%
; This argument is explicit now.
; If other code relies on other arguments, specify them here.
(init parent)
(super-new)
(define panel
(new horizontal-panel% ; this new call is explicit now
[parent parent] ; you can later add more arguments
[alignment '(left top)])) ; and it won't break things
(define titleoutput
(new text-field%
[label " title"]
[min-height 20]
[min-width 200]
[vert-margin 20]
[horiz-margin 10]
[parent panel])) ; panel instead of this
(define output
(new text-field%
[label "blog"]
[style '(multiple)]
[min-height 20]
[vert-margin 20]
[min-width 400]
[parent panel])) ; panel instead of this
(define (callback button event)
(define title-new-value (send titleoutput get-value))
(define new-value (send output get-value))
(save title-new-value new-value)
(send output set-value "")
(send titleoutput set-value "")
(send howisit show #t))
(define button
(new button%
[label "Submit"]
[vert-margin 0]
[horiz-margin 10]
[parent panel] ; panel instead of this
[callback callback]))
))
(define f (new frame% [label "blog post GUI"] [min-width 400] [min-height 500]))
(define tib (new blogPost%
[parent f]))
(send f show #t)
当然,用这种方法,你将无法使用您blogPost%
类的实例为horizontal-panel%
定义的方法,但是从长远来看,这是一件好事,因为好。如果你将来想要改变实现来使用horizontal-panel%
以外的东西,你可以。
什么是'save'和'howisit'?我收到未绑定的标识符错误。最少使虚拟实现像'(define(save title body)(printf“save〜v as:\ n〜v \ n”title body))'这样可以作为一个完整的例子编译。 –