Re: [問題] 如何判斷輸入的文字訊息中的"ENTER"或갠…
不知道有沒有回答你的問題
我看你的情況應該是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
01/30 15:30, 2F