2011年8月5日 星期五

#VB 滑鼠右鍵功能 ver.2011.08.08

基本上是出來了
但是當某個textbox被選取(selectionLength > 0)得到焦點時
貼上另外的textbox的時候並不會限制長度


感覺是跟我leave事件去修改格式的問題有關
先放著


================================================
鍵盤複製貼上可以,
變成判斷資料直也要寫在 KeyDown


到時候要想想怎麼寫成 sub or Function
用呼叫的


'應該去做到貼上只能做到textbox限制長度
1.未滿+貼上 = 超過
2.已滿+貼上 = 超過
3.未滿+貼上 = 未超過(已滿or未滿)


基本上訂好一個常數 6,為字串MAX的長度
然後去檢查ss,ssEnd,要複製的字串是否超過 MAX
一開始貼上就要檢查
複製動作也要檢查


(這邊有點邏輯上的問題)


再來剩下右鍵選單的貼上會超過MAX




'需要去找說 選取範圍的開頭到結尾
因為已經知道是在哪個TextBox去做字元處理
所以直接呼叫textbox.selectstart 去處理就好
不需要另外一個clicktmp
(看看以前的是否也可以替換掉,就拿掉clicktmp)
(或是說這本來就是for別的用途)


'判斷式向前選取,或是向後選取

If TextBox1.SelectionStart + TextBox1.SelectionLength > TextBox1.TextLength Then
                ssEnd = TextBox1.Text.Substring(TextBox1.SelectionStart - TextBox1.SelectionLength)
            Else
                ssEnd = TextBox1.Text.Substring(TextBox1.SelectionStart + TextBox1.SelectionLength)
            End If

===============================================
應該把KeyPress捨去
替換KeyDown去做資料輸入限制

VB.NET中textbox捕捉组合键

当你按下CONTROL的时候,会处发一次keydown事件,这时e.keycode=keys.control 
而再当你按下C的时候,又会触发一次keydown事件,这时的e.keycode=keys.c 
所以说在keydown事件里,不能通过e.keycode来判断是否按下了两个按钮, 
但是KeyEventArgs,提供了CONTROL,ALT,SHIFT属性来让你判断是否按住的功能键

     If e.Control And e.KeyCode = Keys.C Then e.SuppressKeyPress = False '允许Ctrl+C
        If e.Control And e.KeyCode = Keys.V Then e.SuppressKeyPress = False '允许Ctrl+V


e.SuppressKeyPress = False
似乎可以不讓他走KeyPress
又好像不行一 一


VB.NET 鍵盤事件介紹 (KeyPress、KeyDown 和 KeyUp 事件)



=================================================
目前可以複製貼上,
但是有問題是說
貼上永遠是把textbox重新清除貼上

'應該要能夠抓選取範圍,
游標位置,
去插入貼上

'每次貼上以後需要重新設定游標位置為 0

'因為是透過滑鼠右鍵點選TextBox,所以右鍵並不會建立滑鼠游標位置
 需要透過滑鼠移動到TextBox,讓該TextBox得到Focus
 但是目前會自動選取全部
 而且不能在mousemove裡面指定游標位置,一移動就指定
 要再想辦法說讓他游標位置放在最後
(暫時還沒做)
透過GetCharFromPosition 得到說滑鼠右鍵能夠取得游標位置

目前作法是判斷是否當前selectedStart < clicktmp
true 就把selectedStart 位置重新指定給 clicktmp

'讓使用者可以鍵盤複製貼上
因為目前透過KeyPress去檢查輸入
所以似乎不接受組合鍵輸入

'檢查有無選取 TextBox 字串,
決定何時反白複製,反白貼上
(可能會有一些預期外的問題,目前還沒發縣)
============================================

TextBox限制輸入長度 (中文字算2碼)

如果user是用複製貼上的方式 
因為貼上的資料不會經過OnKeyPress事件檢核 
所以我們必須把複製的資料攔截下來後 
再拆解成一個字元一個字元的傳遞給OnKeyPress去檢核

感覺不能直接丟給寫好的keypress去處理
要另外寫一個做的事跟keypress一樣
再丟給sourcecontrol

'要注意的是
string 接了一個空白字元的char的話
似乎就會等於String的結束字元
整個字串就停止,不會再接續串下去,有點怪
可能還不是很理解吧

'複製貼上以後,記得把互斥控制項clear

=================================================
目前滑鼠右鍵選單可以
與控制項繫結選單也可以

選單複製 gridview cell 的資料值也可以
(還沒測 textbox 複製會出什麼問題,可能會需要不同的 選單)

貼上還不知道怎麼找 是哪個控制項呼叫的選單 
然後把複製下來的東西貼上

要再查一查

=========================================================

如何在 dataGridView 上抓取mouse右鍵的事件 
http://www.programmer-club.com.tw/showSameTitleN/csharp/8929.html

===============================================================

winform中dataGridView右键Menu


==========================================================
MSDN DataGridView 複製相關屬性

===========================================================

沒有留言:

張貼留言