none
vs2008 如何使用listbox作萬年曆 RRS feed

  • 問題

  • 各位前輩大家好:
            小弟因需要用.net中的listbox作萬年曆..
    但玉到個問題:
            listbox中日期跟星期要如何呈現出來..且為橫向..排列,程式如何作?...謝謝前輩指導~
    2009年8月28日 上午 03:43

解答

  • Hi,

    試了一下
    昨天改的會把不是空白的都取消掉
    試試看這個
        Private Sub MonthCalendar1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MonthCalendar1.SelectedIndexChanged
            For idx As Integer = 0 To MonthCalendar1.SelectedIndices.Count - 1
                If MonthCalendar1.Items(MonthCalendar1.SelectedIndices(idx)).ToString = "    " Then
                    MonthCalendar1.SelectedIndices.Remove(MonthCalendar1.SelectedIndices(idx))
                    Return
                End If
            Next
        End Sub
    這個Code用起來會閃爍
    但會把選取到空白的選項給取消選取

    由於ListBox的事件不夠,目前用現有事件我只能做到這樣
    要更進階的改法
    應該可以繼承控制項去攔截處理事件訊息
    請自行研究吧

    變色部份可以用DrawItem事件自行用GDI+繪製
    也請自行研究

    我再弄下去當初用ListBox難處理的地方都變我要去克服的了

    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 天波 2009年9月2日 上午 01:12
    2009年9月1日 上午 09:52

所有回覆

  • 我比較想知道是誰叫你用 ListBox 做萬年曆 ...
    小人物一枚。
    2009年8月28日 下午 02:06
    版主
  • HI,

    製作萬年曆用MonthCalendar控制項比較適合, 請參考:Another Month Calendar(http://www.codeproject.com/KB/selection/MonthCalendar.aspx)
    2009年8月28日 下午 03:06
  • ListBox?那我寧願自己繼承Control來自己畫萬年曆。
    C#學習者,修練中,ACM解題魂 - http://kgame-blog.spaces.live.com/
    2009年8月29日 上午 04:53
  • 版主及各位前輩大家好:
    小弟因奉命要製作  要作十二個月利, 提供user一次點選一年中要休假日, 之前用過monthcalendar, 但由於一次要可以點好多
            天數, 然後要存檔成YN, 因找了很多資料.可能是本身技術太爛, 所以看到listbox可以一次多選, 所以才有這個
            想法,
            也找了(http://www.codeproject.com/KB/selection/MonthCalendar.aspx)這資料,因無法直套到vs2008 .net winform
            也因自已技術不太好.所以一直無法有進展.版主及各位前輩不知有什麼方法可以協助小弟完成這不可能的任務()
            目前有用下列把一月呈現出來..


    • 已編輯 天波 2009年9月2日 上午 01:14
    2009年8月31日 上午 12:43
  • Hi,

    實在很難解
    你給的Code不論是VS內建的MonthCalendar
    還是CodeProject的都不能用
    根本連使用到的類別成員都找不到
    疑似你的MonthCalendar1是ListBox
    而Code中又有與變數類別沒告知

    至於ListBox應該看起來是只能顯示一維資料的控制項
    卻要拿來顯示像二維資料的萬年曆
    不是說做不到
    但是內部耗的工一定少不了
    介面顯示要改
    內部資料處理要改
    機乎都要改

    還是你要先提供ListBox做MonthCalendar的示意圖給大家看看要怎樣顯示

    若要用VS內建的選取多個

    可參閱
    MonthCalendar.MaxSelectionCount Property

    http://www.dotblogs.com.tw/larrynung/
    2009年8月31日 上午 01:27
  •        1     2     3     4     5     6      7

    8    9    10   11   12   13    14    15

    16   17  18  19   20   21    22    23

    24   25  26  27   28   29    30    31


    一個月大約是如此..分十二個月..用listbox 及以上程式的.請參考
    2009年8月31日 上午 02:04
  • Hi,

    我想問一下你怎麼用ListBox排成上面這畫面的
    目前你附的程式可以達到嗎
    我上面也有說明你的程式缺少變數宣告與類別
    沒有給齊
    不能使用

    http://www.dotblogs.com.tw/larrynung/
    2009年8月31日 上午 03:55
  • 前輩您好:
    目前已可以用list及程式來排除對齊,並程現12個月份,12個listbox.
    只是如何將選的值12345值,每一個點到都存成"Y"字串存到DB
    及點到月利中空值該如何避免...或不能點呢

    2009年8月31日 上午 05:45
  • Hi,

    根據自行猜測
    終於把你的Code補齊了
    若我猜測沒錯你的萬年曆是透過MultiColumn屬性與調整到適當大小來模擬的

    而monthDays 據我猜測大概是這樣
    Dim monthDays() As Integer = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}

    DayInfo應該是
    Class DayInfo
        Public dayOfWeek As Integer
        Public dayOfMonth As Integer
        Public today As Date
    End Class

    你的第一個問題
    每一個點到都存成"Y"字串存到DB
    根據你的描述我還是猜不出你要存的格式
    只能告訴你你需要的值在MonthCalendar1 .SelectedItems 

    至於怎樣避免選取空的值
    這可以像下面這樣
        Private Sub MonthCalendar1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MonthCalendar1.MouseMove
            Dim idx As Integer = MonthCalendar1.IndexFromPoint(e.Location)
            If idx < 0 Then
                Return
            End If
            If MonthCalendar1.Items(idx).ToString = "    " Then
                MonthCalendar1.SelectionMode = SelectionMode.None
            Else
                MonthCalendar1.SelectionMode = SelectionMode.MultiSimple
            End If
        End Sub

    http://www.dotblogs.com.tw/larrynung/
    2009年8月31日 上午 06:59
  • 蹂躪 大,他的敘述看起來是要用 ListBox 半人工方式做成月曆,有點類似 TextBox 輸出成那個樣子...
    這種天才的想法,我覺得用畫得還比較快...

    所以我覺得目前是在雞同鴨講...
    他一直講 ListBox ,大家都在說 MonthCalendar...

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年8月31日 上午 07:28
  • Hi,

    心冷大
    我剛照他的方法試過了
    他Code中的MonthCalendar1是ListBox
    要設定ListBox.MultiColumn=true
    設定ListBox.ColumnWidth
    還要把控制項調到適當大小
    不過做出來的效果還是只具MonthCalendar的初步外觀
    其實還是直接用MonthCalendar比較快
    也較為方便
    畢竟前面有提到"之前用過monthcalendar, 但由於一次要可以點好多"
    所以只要能解決多選問題
    應該他就能用monthcalendar才是

    http://www.dotblogs.com.tw/larrynung/
    2009年8月31日 上午 07:38
  • 各位前輩們:
    不好意思..蹂躪前輩..我沒把程式用其..
    目前情況是..因每個list依日期排列出來後.總有一些空白的地方.且也可以點選..
            1     2     3     4     5     6      7

    8    9    10   11   12   13    14    15

    16   17  18  19   20   21    22    23

    24   25  26  27   28   29    30    31
    依以上範例..1日的左方是空的..也可以點選...如何讓這個空白不能點..我依前輩程式..try後.沒成功..還是可以點耶

    2.如何將點到的只變成紅色..因default是藍色..
    我有找網路上資料...但都不成功....

    2009年9月1日 上午 02:21
  • Hi,

    那部份我昨天試過了是可以的
    你要不要先Debug Run看看
    說不定是你程式改過了
    斷點設在
    If MonthCalendar1.Items(idx).ToString = "    " Then
    看看點選空白處是否會成立
    若不成立又是為何

    至於第二點
    你的發問一直缺東缺西很難處理
    既然有提到有找網路資料但不成功
    那應該把找到的資料告知
    這樣我們不需要再重找
    不成功之處也要提一下
    讓我們看一下不成功的問題點

    額外一題
    真的不考慮用MonthCalendar
    我倒是沒見過ListBox有屬性可以直接設定給每個選項不同的顏色
    應該是要自行繪制才是

    http://www.dotblogs.com.tw/larrynung/
    2009年9月1日 上午 02:46
  • 想問一下前輩:
    若我有用一月的查出後..點到空值會其他資料變空白...是否可以保留已秀出的值.但又不清除..但又會跟CType(obj, ListBox).SetSelected(i, True)沖到

    2.有關點到紅色的問題....

    已很多天沒睡好的初學者留..因為我是被長官order..不敢抗命....哎...


     

    • 已編輯 天波 2009年9月2日 上午 01:13
    2009年9月1日 上午 03:31
  • Hi,

    試了一下
    昨天改的會把不是空白的都取消掉
    試試看這個
        Private Sub MonthCalendar1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MonthCalendar1.SelectedIndexChanged
            For idx As Integer = 0 To MonthCalendar1.SelectedIndices.Count - 1
                If MonthCalendar1.Items(MonthCalendar1.SelectedIndices(idx)).ToString = "    " Then
                    MonthCalendar1.SelectedIndices.Remove(MonthCalendar1.SelectedIndices(idx))
                    Return
                End If
            Next
        End Sub
    這個Code用起來會閃爍
    但會把選取到空白的選項給取消選取

    由於ListBox的事件不夠,目前用現有事件我只能做到這樣
    要更進階的改法
    應該可以繼承控制項去攔截處理事件訊息
    請自行研究吧

    變色部份可以用DrawItem事件自行用GDI+繪製
    也請自行研究

    我再弄下去當初用ListBox難處理的地方都變我要去克服的了

    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 天波 2009年9月2日 上午 01:12
    2009年9月1日 上午 09:52
  • 蹂躪前輩:
    感謝您這樣不惜辛苦的協助...程式是最笨人..人才是聰明的...科技始終來自於人心..

    再次謝謝前輩~
    2009年9月2日 上午 01:13
  • 對不起~蹂躪前輩:
    想最後請你指導一下...對於某一年的二月有29天及28天之分..若依以下所以..不知該如何下手....

    2009年9月3日 上午 01:52