2011-08-04 33 views
8

有沒有一種簡單的方法可以使其發揮作用?接受換行的簡單文本輸入字段

text = ""; 
DialogInput[{TextCell["Try to type a text with linebreaks :-)"], 
    InputField[Dynamic[text], String], 
    Button["Ok", DialogReturn[text]]}] 

問題是輸入Return後InputField終止。我只想要一個簡單的文本輸入字段。

+5

Chris Degnen在這裏發佈了他對此問題的解決方案:http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread/thread/3a2b1cfa8efa6df9(請參閱他最後一篇文章) –

+0

@Leonid :你應該把它寫成一個答案(或者邀請Chris來)。 – Simon

+0

@Simon好吧,謝謝你的建議,這是有道理的。我發佈了它,雖然如果克里斯自己做了它會更好 - 他花了很大的精力來實現它,這是一個不平凡的問題。我只能爲自己說話,但我在某個時候放棄了,直到我看到他的帖子。 –

回答

11

謝謝你提醒Leonid。代碼如下:

text = ""; 
DialogInput[{TextCell["Try to type a text with linebreaks :-)"], 
    InputField[Dynamic[text], String, FieldSize -> {30, 6}], 
    DefaultButton[DialogReturn[text]]}, 
NotebookEventActions -> {"ReturnKeyDown" :> 
    FrontEndExecute[NotebookWrite[InputNotebook[], "\n"]]}] 

FrontEndExecute語句在這個版本中有點簡單。

順便提一句,要清除NotebookEventActions的默認Return鍵操作,您可以使用NotebookEventActions->{}。這可以有效地阻止對話在輸入過程中消失。

+2

太棒了!我刪除了我的帖子。我希望那些投了贊成票的人會爲你的答覆花費一些額外的票數,因爲這是選票所屬的地方。 –

+0

謝謝,作品完美! – phantomas1234