我假設您以與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))'這樣可以作爲一個完整的例子編譯。 –