2015-04-21 65 views
1

我想在WinForms表單上創建一個文本框,用戶無法直接輸入文本。相反,文本框的內容應該只是「氣泡」(帶有「刪除」按鈕),並顯示文本值。WinForms中的標籤TextBox

我很努力地找到這種控制/行爲的正確術語。在創建新問題時,它應該看起來有點像StackOverflow上的「標籤」字段。

是否有任何現有的控件/設置允許這種行爲? (我的DevExpress是否有幫助)

很抱歉的含糊不清的問題,如果我知道更好的條件什麼我要找的,我可能會找到的東西......

+0

爲什麼downvote? :( –

+1

我從頭開始創建類似這樣的東西,通過大量擴展現有的'TextBox'控件,自定義繪畫,各種基於Key的事件的大量截取以及大量註釋的各種欺騙,我無法發佈代碼,只是想讓你知道,如果你有足夠的決心,這是可能的。 – Anthony

+0

好吧,我會記住,如果我想擴大「文本框」:-) –

回答

2

而不是一個文本框時,你的泡沫容器應該很可能是一個Panel。 您可以根據需要設置它的樣式,設置邊框,背景顏色等。 如果您不想手動定位其中的「氣泡」,請使用FlowLayoutPanel。它會自動將它的子控件放入流中。 查看控件的屬性以指定控件的佈局方式。

單個氣泡也可以是面板或其他容器控制器,以便您可以爲每個氣泡添加標籤和按鈕(或圖像作爲按鈕)。 您甚至可以擴展面板類以自動爲每個面板添加標籤和刪除按鈕。

像這樣(請注意,這更像是僞代碼。我寫了我的頭頂位置,可能需要一些調整)

Public Bubble : Panel { 

    Public Bubble(string text) { 
    Label title = new Label { Text = text }; 
    Controls.Add(title); 

    Button delete = new Button { Text = "Delete" }; 
    Controls.Add(delete); 

    //also hook up events here, ie delete.click+= whatever 

    } 

} 

可以進一步擴展自定義類您的特定需求。 根據需要在按鈕和標籤上設置樣式以達到所需的外觀。 不要忘記掛鉤事件,如鼠標,點擊按鈕等

然後,只需填寫FlowLayoutPanel的這些自定義控件,你應該是好去

+0

非常感謝您的回答。有時大腦如此堵塞,最簡單的答案就不會想起來了。一個FlowLayoutPanel +一些微小的氣泡控制完美地工作;-) –

+0

沒問題!很高興有幫助。考慮將答案標記爲正確的解決方案。 – irreal

+0

當然;-)我正在構建一個原型,並沒有到處去標記它 –