none
請問怎麼才能像VS的功能一樣 自動列出可用的關鍵字 RRS feed

  • 問題

  • 因為我還無法貼圖 不然貼圖大家一看就明白我想表達什麼

    請問我們在寫程式時

    只要打一個字  他就會在下面跳出一個應該是LISBOX的東西

    讓我們可以選擇

    我知道Textbox combobox有autocomplete 但她非得有要一個字如A 才會出現A所有的關鍵字

    刪除就什麼都沒有

    但我希望能跟編譯的程式一樣 當我刪除時  

    他會列出所有的   

    請問我該怎麼做   

    要選擇哪個元件來使用呢

    謝謝

    2017年9月28日 上午 08:10

解答

  • 你如果是要在點擊其它以外的地方都要關閉,那只要在主體Form上加上
    
    this.MouseClick += your_clickevent;
    
    但有一點要注意的是當這樣只通過事件是必須還要做一點變化,如果你點擊的區域,
    沒有發生Focus的跳轉,Leave事件是不會觸發的。
    可以給你的Form掛一個Hook和滑鼠事件,
    當收到鼠標消息的時候,判斷鼠標點擊的位置是不是在ListBox的區域內,
    如果不是,就隱藏ListBox。
    
    這是我提供的邏輯概念。

























    2017年9月30日 上午 09:31
  • https://www.codeproject.com/Tips/737799/IntelliSense-TextBox-in-Csharp

    https://www.codeproject.com/Articles/5839/DIY-Intellisense

    看看合不合用。


    理直氣和,切記。

    個人

    • 已標示為解答 eesprmg 2017年10月6日 下午 12:24
    2017年10月2日 上午 08:02

所有回覆

  • 您可以改用ComboBox控制項(同樣具備AutoComplete功能), 然後在ComboBox獲得焦點時傳送 CB_SHOWDROPDOWN訊息給ComboBox, 像這樣:

    [DllImport("user32.dll", CharSetCharSet = CharSet.Auto, SetLastError = false)]   
        static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam);   
        private const int CB_SHOWDROPDOWN = 0x014F;   
      
        private void comboBox1_Enter(object sender, EventArgs e)   
        {   
            SendMessage(comboBox1.Handle, CB_SHOWDROPDOWN, (IntPtr)1, (IntPtr)0);   
        }   

    2017年9月28日 上午 08:43
  • 您好

    我是的結果只是會下拉一個空白欄位 

    我還是得先打字才會出現

    如打a只會出現a一系列的

    打b也只會出現b一系列的

    2017年9月29日 上午 12:31
  • 個人淺見,提供給你參考:
    
    其實要做這個方式的概念不會太困難,基本上只要幾個簡單的元件跟程式的判斷就可以達成,
    例如下列我是以網頁的方式呈現我要找尋的學校(當然軟體的製作大同小異),
    我只需要一個Layer,在要輸入的元件上寫一個點選和鍵盤事件,
    然後透過字串的搜尋比對出相似或精確的結果,
    然後再把結果取回來後,產生元件,將元件顯示在Layer上面:





    2017年9月29日 上午 10:48
  • 您好  我自己也寫了一個

    我用Public Sub Obj_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)

    去偵測combobox有沒有改變字串  去觸發事件開啟listbox

    用 Private Sub ListBox1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs)

    去點擊listbox將我選擇的字給combobox

    但我現在卡在   點擊其他地方  他就要把listbox關閉  

    <<<請問我要怎麼去偵測滑鼠點擊的事件   我不可能每一個元件都寫一個click的事件吧

    我想了另一個方法是 Public Sub Obj_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs)

    就是在Combobox失去focus時去關閉

    但這又發生當我去點擊listbox時  他先觸發了lostfocus 結果把listbox關掉了

    我該用哪些事件才能達到我要的效果呢 

    請問我要怎麼去讀取 所有事件被觸發

    如在一個group 加入了 combobox 和 listbox

    當他們兩個  有任何事件觸發  我都能知道

    • 已編輯 eesprmg 2017年9月30日 上午 03:13
    2017年9月30日 上午 12:40
  • 這是我用WinForm的簡單的呈現:

    2017年9月30日 上午 09:26
  • 你如果是要在點擊其它以外的地方都要關閉,那只要在主體Form上加上
    
    this.MouseClick += your_clickevent;
    
    但有一點要注意的是當這樣只通過事件是必須還要做一點變化,如果你點擊的區域,
    沒有發生Focus的跳轉,Leave事件是不會觸發的。
    可以給你的Form掛一個Hook和滑鼠事件,
    當收到鼠標消息的時候,判斷鼠標點擊的位置是不是在ListBox的區域內,
    如果不是,就隱藏ListBox。
    
    這是我提供的邏輯概念。

























    2017年9月30日 上午 09:31
  • https://www.codeproject.com/Tips/737799/IntelliSense-TextBox-in-Csharp

    https://www.codeproject.com/Articles/5839/DIY-Intellisense

    看看合不合用。


    理直氣和,切記。

    個人

    • 已標示為解答 eesprmg 2017年10月6日 下午 12:24
    2017年10月2日 上午 08:02
  • 我最後用一個多線程跑計時器達到延後判斷的效果

    當lost_focus觸發時,就啟動多線程跑0.1秒

    這時如果點擊到listbox   上面那個就不會觸發關閉

    當然還加了一些程式去輔助  

    目前我少了"Hook和滑鼠事件"

    因為我要讓listbox消失得觸發lost_focus  

    所以我點空白的地方就沒法讓listbox消失掉

    2017年10月6日 下午 12:32
  • 請問一下

    Hook和滑鼠事件的範例程式嗎

    我人在中國無法上google

    下載的不是沒效

    就是得要錢才能下載

    2017年10月7日 上午 01:10