如何获取动态添加拼贴项目的标记? [英] How Do I Get Tag For Dynamically Add Tile Items?

查看:112
本文介绍了如何获取动态添加拼贴项目的标记?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Imports System.IO
Imports DevExpress.XtraEditors
Imports DevExpress.XtraEditors.TileItem
Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Timer1.Start()
        GetDrive()
        'tile()
        'CompInfo()
    End Sub
    Private Function GetSize(ByVal bt As Int64) As String
        If bt < 1024 Then
            Return bt.ToString() + " Bytes"
        End If
        Dim s As String
        Dim sz As Double = Convert.ToDouble(bt)
        If sz < 1048576.0 Then
            s = " KB"
            sz /= 1024.0
        ElseIf sz < 1073741824.0 Then
            s = " MB"
            sz /= 1048576.0
        ElseIf sz < 1099511627776.0 Then
            s = " GB"
            sz /= 1073741824.0
        Else
            s = " TB"
            sz /= 1099511627776.0
        End If
        If sz >= 100.0 Then
            Return Math.Truncate(sz).ToString("0") + s
        End If
        If sz >= 10.0 Then
            Return (Math.Truncate(sz * 10.0) / 10.0).ToString("0.0") + s
        End If
        Return (Math.Truncate(sz * 100.0) / 100.0).ToString("0.00") + s
    End Function

    Public Function CompInfo() As String
        GetSize(My.Computer.Info.AvailablePhysicalMemory)
        Return CompInfo
    End Function

    Private Sub ShowDirectory(ByVal dirInfo As DirectoryInfo, ByVal keepOffset As Boolean)
        If Not dirInfo.Exists Then
            Return
        Else
            MsgBox(dirInfo)
        End If
        '
        'Dim TileItem As New TileItem
        'TileItem.ItemSize = TileItemSize.Large
    End Sub
    Private Sub TileItemClick(ByVal sender As Object, ByVal e As EventArgs)

        ShowDirectory(CType(CType(sender, TileItem).Tag, DriveInfo).RootDirectory, False)
        'Dim TileItem As New TileItem
        'TileItem.ItemSize = TileItemSize.Large
    End Sub
    Private Function GetDrive()
        For Each Drive In My.Computer.FileSystem.Drives
            Dim DriveType As DriveType = Drive.DriveType
            Dim grp As TileGroup = GetDriveGroup(DriveType)
            Dim Tile As New TileItem
            Dim TileText1 As New TileItemElement
            TileText1.TextAlignment = TileItemContentAlignment.BottomRight
            Select Case (DriveType)
                Case DriveType.CDRom
                    Tile.ImageAlignment = TileItemContentAlignment.BottomLeft
                    Tile.Image = My.Resources.cd_48
                    If Not Drive.IsReady Then
                        Tile.Text = "<Size=+5>Empty " + Drive.Name + "</size>"
                    Else
                        Tile.Text = "<size=+5>" + Drive.VolumeLabel.ToString + "</size>"
                        TileText1.Text = "<Size=+4>Free Space:" + GetSize(Drive.TotalFreeSpace) & "<br>" & "Total Space" + GetSize(Drive.TotalSize) & ""
                        Tile.Elements.Add(TileText1)
                    End If
                    Tile.ItemSize = TileItemSize.Wide
                Case DriveType.Fixed
                    Tile.ImageAlignment = TileItemContentAlignment.BottomLeft
                    Tile.Image = My.Resources.hdd_48
                    Tile.Text = "<Size=+5>" + Drive.VolumeLabel.ToString & " (" & Drive.Name & ")" + "</size=+3>"
                    TileText1.Text = "<Size=+4>Free Space:" + GetSize(Drive.TotalFreeSpace) & "<br>" & "Total Space" + GetSize(Drive.TotalSize) & ""
                    Tile.Elements.Add(TileText1)
                    Tile.ItemSize = TileItemSize.Wide
                Case DriveType.Removable

                    Tile.ImageAlignment = TileItemContentAlignment.BottomLeft
                    Tile.Image = My.Resources.usb_connected_48
                    If Not Drive.IsReady Then
                        Tile.Text = "<Size=+5>Empty " + Drive.Name + "</size>"
                        Tile.Image = My.Resources.usb_disconnected_48
                    Else
                        Tile.Text = "<Size=+5>" + Drive.VolumeLabel.ToString & " (" & Drive.Name & ")" + "</size=+3>"
                        TileText1.Text = "<Size=+4>Free Space:" + GetSize(Drive.TotalFreeSpace) & "<br>" & "Total Space" + GetSize(Drive.TotalSize) & ""
                        Tile.Elements.Add(TileText1)
                    End If
                    Tile.ItemSize = TileItemSize.Wide
            End Select
            grp.Items.Add(Tile)
            AddHandler Tile.ItemClick, AddressOf Me.TileItemClick
        Next
        Return GetDrive
    End Function

    Private Function GetDriveGroup(ByVal DriveType As DriveType) As TileGroup
        Dim GroupName As String = DriveType.ToString
        For Each Group As TileGroup In TileControl1.Groups
            If Group.Name = GroupName Then
                Return Group
            End If
        Next

        Dim NewGroup As New TileGroup
        Select Case DriveType
            Case DriveType.CDRom
                NewGroup.Text = "CD/DVD"
            Case DriveType.Fixed
                NewGroup.Text = "Fixed Drives"
            Case DriveType.Network
                NewGroup.Text = "Network Drives"
            Case DriveType.Removable
                NewGroup.Text = "Removable Drives"
            Case DriveType.Ram
                NewGroup.Text = "RAM Drives"
            Case Else
                NewGroup.Text = "Other"
        End Select
        TileControl1.Groups.Add(NewGroup)
        NewGroup.Name = GroupName
        Return NewGroup
    End Function
End Class





NullReferenceException未处理

对象引用未设置为对象实例



我正在使用devexpress winform工具表单我正在使用tile控件组件



NullReferenceException was unhandled
Object reference not set to an instance of an object

I am using devexpress winform tool form which I am using tile control component

推荐答案

你正在将tile.Tag转换为DriveInfo但是在动态创建Tile时,不要使用DriveInfo对象设置Tile属性。使用DriveInfo对象设置标记标记然后您可以将它们重新投射到您的事件上。

you are casting tile.Tag to a DriveInfo but you are not set Tag property of Tiles with DriveInfo objects when you dynamically creating them. set Tag of Tile with DriveInfo objects and then you can cast them back on your events.
Private Function GetDrive()
      For Each Drive In My.Computer.FileSystem.Drives
          Dim DriveType As DriveType = Drive.DriveType
          Dim grp As TileGroup = GetDriveGroup(DriveType)
          Dim Tile As New TileItem
          Tile.Tag = Drive


这篇关于如何获取动态添加拼贴项目的标记?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆