Re: [問題] 如何判斷輸入的文字訊息中的"ENTER"或갠…

看板Flash作者 (魔物を討つ者)時間13年前 (2011/01/27 23:49), 編輯推噓2(200)
留言2則, 1人參與, 最新討論串1/1
不知道有沒有回答你的問題 我看你的情況應該是AS3.0的TextField 依照我做過聊天室的經驗來說 真的很怪 首先 我預設Enter送出 而Ctrl+Enter換行 Flash的讀取用換行字元不是想像中的""或是chr(13) 而是"\r" 但是的寫入用換行字元卻是"\n" if(key.keyCode==13 && key.ctrlKey==false){ 按下Enter發送,這沒問題 if(ctrl_text.text !== "" && ctrl_text.text.substring(ctrl_text.caretIndex-1,ctrl_text.caretIndex) == "\r") { 這個很詭異 當目標text不是空時才會發送 但是按下Enter瞬間其實他是會先換行才執行你送出的function 換句話說,Flash程式本身換行優先,而你的function次要 因此送出的時候偵測text時,會是"文字訊息\r" if(ctrl_text.text == "\r") { ctrl_text.text = "" //如果送出時只有換行字元,表示原先是空的,強制把換行字元弄掉(不換行) }else{ //發送訊息 } } } if(key.keyCode==13 && key.ctrlKey==true){ // Ctrl+Enter ctrl_text.text=ctrl_text.text.substring(0,ctrl_text.caretIndex) //游標所在之處 +"\n" //加上換行 +ctrl_text.text.substring(ctrl_text.caretIndex,ctrl_text.length) //接上結尾 ctrl_text.setSelection(ctrl_text.caretIndex+1,ctrl_text.caretIndex+1) //將游標移到你換行的地方,因為\n算一個,因此要+1 //我記得這個情況+"\r"會沒反應 這是使用Ctrl+Enter避開普通Enter會產生基本換行動作的funcion http://www.mediafire.com/?p8ub48j2y3ig5cj 這是funcion區段 呼叫方法是test的鍵盤偵測 上面的方法聽說稱為dirty hack www 也就是只是查出Flash預設會怎樣,強制反解而已 ※ 引述《yhn0tgb60 (呦厚厚)》之銘言: : 下面這段程式碼  只有兩個物件 : 一個是 inputTxt 是使用者用來輸入文字  : 另一個 msgTxt 用來顯示使用者輸入的文字 : 當使用者在 inputTxt中輸入完文字後按"ENTER" : 就會將 inputTxt貼到 msgTxt 然後將 inputTxt清空 : 當 inputTxt 中沒有輸入文字時 按下"ENTER" 也不能送出訊息 : 我是用 KeyboardEvent.KEY_DOWN 來判斷 是否按下 "ENTER" : 在訊息確定不是"" 送到 msgTxt後 就將訊息清空 : 但出現一個問題 : 就是 "ENTER"會在 KeyboardEvent.KEY_DOWN 訊息結束後 才塞給inputTxt : 所以等於 inputTxt.text='' 並沒有完全把訊息清空 : 所以我又加了一個 addEventListener( KeyboardEvent.KEY_UP,KeyUpEnter ); : 在 "ENTER" 放開後 再清一次 inputTxt.text='' : 這樣就可以把訊息完全清空了 : 但是 當要輸入中文時 就會失敗 因為中文輸入法選完字後要按"ENTER" : 結果"ENTER" 按下後 中文訊息還來不及送給 msgTxt 就已經被 inputTxt.text='' : 就變成不能打中文 = = : 而當我一直按著 "ENTER" 不放時 "ENTER"的訊息最後還是會不對的被送出 完全檔不掉 : 想請問大家的意見 謝謝了 : package : { : import flash.display.MovieClip; : import flash.events.KeyboardEvent; : import flash.ui.Keyboard; : public class test extends MovieClip : { : public function test():void : { : inputTxt.text=''; : msgTxt.text=''; : addEventListener( KeyboardEvent.KEY_DOWN,KeyDownEnter ); : addEventListener( KeyboardEvent.KEY_UP,KeyUpEnter ); : } : private function KeyDownEnter( evt:KeyboardEvent ):void : { : if( evt.keyCode == Keyboard.ENTER ) : { : if( inputTxt.text!='' ) : { : msgTxt.appendText('AAA:'+inputTxt.text+'\n'); : inputTxt.text=''; : } : } : } : private function KeyUpEnter( evt:KeyboardEvent ):void : { : if( evt.keyCode == Keyboard.ENTER ) : { : inputTxt.text=''; : } : } : } : } -- 「杏、どうしたんだ?」 「どっ、どうもしてないわよ。あんたこそ、椋とデートじゃなかったの?」 「ずぶ濡れじゃねぇかよ、ふっふっ」 「来ないで!!!!!!!!!!!!!!……                      来ないで…お願いだから…」       京都アニメ クラナド~AfterStory~第25話 「もうひとつの世界─杏編」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.110.175 ※ 編輯: KawasumiMai 來自: 61.62.110.175 (01/27 23:54)

01/28 00:47, , 1F
非常謝謝妳 我再研究看看
01/28 00:47, 1F

01/30 15:30, , 2F
謝謝 關鍵在 ENTER='\r' 把'\r'判斷掉 問題就解決了
01/30 15:30, 2F
文章代碼(AID): #1DGPGGcn (Flash)