台灣最大程式設計社群網站
線上人數
1131
 
會員總數:246134
討論主題:189713
歡迎您免費加入會員
討論區列表 >> VB.NET >> 想要讓ListBox Item 用DrawString 畫成2行 然後這兩行的顏色和大小不同
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
想要讓ListBox Item 用DrawString 畫成2行 然後這兩行的顏色和大小不同
價值 : 160 QP  點閱數:407 回應數:12
樓主

何葦凡
門外漢
0 3
289 13
發送站內信


小弟在網路上找到能夠一次draw兩行的程式碼

他能做到的是畫出多行文字的item 選取時會視為一個項目 (見圖一)

(圖一)


希望能做出這樣的效果:




附上目前的程式碼



在此跪求各路大神幫忙OTZ

搜尋相關Tags的文章: [ vb.net ] , [ DrawString ] , [ Graphics ] ,
本篇文章發表於2019-09-30 17:27
1樓
作者回應

何葦凡
檢舉此回應
解決了



現在我想知道怎麼判斷他正在被選取中
我把它改成這樣 結果完全沒有反應OTZ

本篇文章回覆於2019-10-01 12:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

何葦凡
檢舉此回應
好 我解決了
判斷選取方式要用

不然沒有用
真的搞不懂判斷式為什麼要這樣寫e.State And DrawItemState.Selected
本篇文章回覆於2019-10-01 13:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

Ader Chen
檢舉此回應

因為 e.State 是多個旗標的複合值:


例如 Selected + Focus + NoFocusRect = 529.
要單獨辨識單一旗標:
e.State(529) AND Selected(1) = Selected(1)
直接 e.State(529) = Selected(1) 就不符合了.


本篇文章回覆於2019-10-01 13:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

Ader Chen
檢舉此回應

另, 您1樓程式可以簡化如下:

供參考.
本篇文章回覆於2019-10-01 14:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

何葦凡
檢舉此回應
感謝4樓大大

然後我又遇到另一個問題

他如果輸出的item寬度 超過了ListBox

就會沒有卷軸

所以我把

寫到我的DrawItem事件裡
HorizontalExtent = Width * 2
HorizontalScrollbar = true

Debug時沒問題

輸出出去的執行黨會出現GDI+錯誤 目前對這個問題完全沒有頭緒@@
本篇文章回覆於2019-10-01 16:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
最有價值解答

Ader Chen
檢舉此回應

如果您是希望文字超過 Listbox 寬度時顯示水平捲軸:

1. 先在設計階段或是執行階段設定 HorizontalScrollbar = True
例如


2. 在 MeasureItem 事件中決定是否調整 HorizontalExtent
例如

本篇文章回覆於2019-10-01 17:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

何葦凡
檢舉此回應
6樓的程式碼 感謝

我明天試試看
本篇文章回覆於2019-10-01 22:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

Ader Chen
檢舉此回應

可能不能將更改 HorizontalExtent 的程式寫在 DrawItem 事件中, 有機率會引發 GDI+ 錯誤, 有網友遇過案例:
https://social.msdn.microsoft.com/Forums/windows/en-US/050204e4-39cb-4244-b0e9-5fe5dfce2161/listbox-and-drawmode-event-scrollbar-problem-in-changing-items-properties
"...So, I guess it's not safe to set HorizontalExtent during DrawItem..."

我是寫在 MeasureItem 事件內, 沒遇過問題.
搜尋了一下, 如果是動態加入 Item 的情況, 大部分網友文章也是在 MeasureItem 事件內才計算調整 HorizontalExtent,
所以應該是安全的,
您再試試看.
本篇文章回覆於2019-10-02 00:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

何葦凡
檢舉此回應
原來要寫在 MeasureItem 事件裡阿

可能Listbox在DrawItem的時候還在計算長度 所以才會出錯吧



再次感謝大神 小弟受益良多

不知大神有沒有FB之類的 希望能用更方便的方式請教(小舖上傳圖片需要用到圖床 相較下比較不方便@@
本篇文章回覆於2019-10-02 11:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

Ader Chen
檢舉此回應

我是有 FB 帳號, 也是叫 Ader Chen, 不過幾乎沒在使用, 只拿來作為申請其他帳號之用(例如藍色小舖、導航王).
一堆從 FB 寄來的 mail 幾乎都被當成 sapm 檔掉了, 偶而還會收到 FB 通知說我有幾百則未讀訊息...

建議若有提問或討論, 還是發在公開論壇比較好, 越多人看到, 解決的機越高.

我對藍色小舖的貼圖操作也是很頭疼, 失敗好幾次, 相較之下 Msdn 論壇就方便許多,
您也可到 MSDN 論壇逛逛:
https://social.msdn.microsoft.com/Forums/zh-TW/home
只要有(免費)微軟帳號, 自由發問, 不需像藍色小舖要扣 QP, 貼圖也方便很多.
不過那裡只限討論微軟的開發工具/程式語言, 這部份藍色小舖就比較多樣化, 各有所長.
若還有其他優質論壇也請推薦.
本篇文章回覆於2019-10-02 13:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

Ader Chen
檢舉此回應
剛剛才發現:
您說 "不知大神有沒有FB之類的"
而我竟然回覆 "我是有 FB 帳號"
天啊! 我不是大神! 只是剛好對一些我遇過的問題提供參考建議,
比我所知更廣更深的前輩太多了,
所以建議最好在論壇公開提問或討論, 多釣一些前輩, 多聽一些經驗建議總沒錯.
本篇文章回覆於2019-10-02 13:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

何葦凡
檢舉此回應
OKOK 好的

對萌新來說 能回復都是大神OTZ

因為不知為什麼 只要一發問 沒隔多久自己就會突然想通怎麼做

如果只是訊息的話會比較不浪費論壇資源就是了(?
本篇文章回覆於2019-10-02 16:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.