[NET.VB]小问题集锦(供初学者参考)

原创 2004年07月19日 18:53:00

声明:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

1、所有代码不注明出处的皆为本人所写

 

2、所有代码均在本机调试通过

 

3、本贴适用于初学者(本人也是)

 

4、欢迎各位仁兄斧正,提供想法或代码

 

5、本人力求每日补充内容(现在发现这条做不到)

 

6、非本人同意,请勿转载本人所写的代码

 

7、各位说要不要上面第6条?

 

8、哈,声明是这样写的吗,一点都不严肃,也不规范

 

                                                        水如烟  2004.7.19

 

[控件类]

 

TreeView

 

1、给节点加个ToolTip(2004.7.19)

 

Private tmpTreeNode As TreeNode

Private mTreeViewToolTip As New ToolTip

 

Private Sub TreeView1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TreeView1.MouseMove

    Dim mNode As TreeNode

    mNode = Me.TreeView1.GetNodeAt(e.X, e.Y)

    '当前没节点

    If mNode Is Nothing Then

        mTreeViewToolTip.SetToolTip(Me.TreeView1, Nothing)

        Exit Sub

    End If

    '超过当前Node的边界

    If mNode.Bounds.Right < e.X OrElse mNode.Bounds.Left > e.X Then

        mTreeViewToolTip.SetToolTip(Me.TreeView1, Nothing)

        Exit Sub

    End If

    '同一个Node

    If mNode Is tmpTreeNode Then

        Exit Sub

    End If

    mTreeViewToolTip.AutomaticDelay = 500

    mTreeViewToolTip.SetToolTip(Me.TreeView1, mNode.Text)

    tmpTreeNode = mNode

End Sub

 

 

 

DataGrid

 

1、自适应各列长度(2004.7.19)

 

'定义一个字段信息类

Private Class ColumnInfo

    Public [Name] As String

    Public [DataType] As String

    Public MaxWidth As Integer = 0

    Public Sub CompareStringLength(ByVal mString As String)

        Dim mLength As Integer

        mLength = System.Text.Encoding.Default.GetBytes(mString).Length()

        If MaxWidth < mLength Then MaxWidth = mLength

    End Sub

    Public Function ColumnWidth(ByVal mDataGrid As DataGrid) As Integer

        Dim mGraphics As Graphics = mDataGrid.CreateGraphics

        Dim mColWidth As Single

        mColWidth = mGraphics.MeasureString(New String(CType("A", Char), MaxWidth), mDataGrid.Font).Width + 2

        Return CType(mColWidth, Integer)

    End Function

End Class

 

 

Private Sub MakeDataGridAutoExtend(ByVal mDataGrid As DataGrid)

    '判断mDataGrid数据源类型

    '如果绑定的是DataSetDataViewManager或没有绑定任何数据源,则退出,

    If TypeOf mDataGrid.DataSource Is System.Data.DataSet OrElse _

    TypeOf mDataGrid.DataSource Is System.Data.DataViewManager OrElse _

    mDataGrid.DataSource Is Nothing Then Exit Sub

 

    '以下分别考虑两种数据源,一是DataView,一是DataTable

    Dim dt As DataTable

    If TypeOf mDataGrid.DataSource Is System.Data.DataView Then

        dt = CType(mDataGrid.DataSource, DataView).Table

    Else

        dt = CType(mDataGrid.DataSource, DataTable)

    End If

 

    '取各字段信息

    Dim mColumnInfo(dt.Columns.Count - 1) As ColumnInfo

 

    Dim i As Integer = 0

 

    Dim mColumn As DataColumn

    For Each mColumn In dt.Columns

        Dim mInfo As New ColumnInfo

        With mInfo

            .Name = mColumn.ColumnName

            .DataType = mColumn.DataType.ToString

            .CompareStringLength(mColumn.ColumnName)

        End With

        mColumnInfo(i) = mInfo

        i += 1

    Next

 

    '取各字段的最大长度

    Dim mRow As DataRow

    For Each mRow In dt.Rows

        For i = 0 To dt.Columns.Count - 1

            If Not IsDBNull(mRow(i)) Then

                mColumnInfo(i).CompareStringLength(CType(mRow(i), String))

            End If

        Next

    Next

 

    'DataGridTableStyle

    Dim ts As New DataGridTableStyle

    ts.MappingName = dt.TableName  '这里映射到表

 

    For i = 0 To dt.Columns.Count - 1

        If mColumnInfo(i).DataType.Equals("System.Boolean") Then

            '这是Boolean字段

            Dim blnCol As New DataGridBoolColumn

            With blnCol

                .MappingName = mColumnInfo(i).Name

                .HeaderText = mColumnInfo(i).Name

                .Width = mColumnInfo(i).ColumnWidth(mDataGrid)

                .NullText = ""

            End With

            ts.GridColumnStyles.Add(blnCol)

        Else

            'Boolean字段

            Dim TxtCol As New DataGridTextBoxColumn

            With TxtCol

                .MappingName = mColumnInfo(i).Name  '这里映射到字段

                .HeaderText = mColumnInfo(i).Name  '这里可以改成自己要显示的名儿

                .Width = mColumnInfo(i).ColumnWidth(mDataGrid) '设为0就看不见的了

                .NullText = ""  '不显示(Null)

                .ReadOnly = False '这里可以设置为只读

                .Format = "" '这里可以设置显示格式,要显示日时分秒的就在这设

            End With

            ts.GridColumnStyles.Add(TxtCol)

        End If

    Next

 

    mDataGrid.TableStyles.Clear()

    mDataGrid.TableStyles.Add(ts)

    '至于其它的功能,比如绑定事件之类的,后面再补充

End Sub

 

 

'调用

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    MakeDataGridAutoExtend(Me.DataGrid1)

End Sub

 

 

 

2、定位到指定条件行(2004.7.20)

 

Public Function PointTo(ByVal mDataGrid As DataGrid, ByVal mFieldName As String, ByVal mFieldValue As String) As Integer

    '判断mDataGrid数据源类型

    '如果绑定的是DataSetDataViewManager或没有绑定任何数据源,则退出,

    If TypeOf mDataGrid.DataSource Is System.Data.DataSet OrElse _

    TypeOf mDataGrid.DataSource Is System.Data.DataViewManager OrElse _

    mDataGrid.DataSource Is Nothing Then Exit Function

 

    '以下分别考虑两种数据源,一是DataView,一是DataTable

    Dim dv As DataView

    If TypeOf mDataGrid.DataSource Is System.Data.DataView Then

        dv = CType(mDataGrid.DataSource, DataView)

    Else

        dv = CType(mDataGrid.DataSource, DataTable).DefaultView

    End If

    dv.Sort = mFieldName

    dv.ApplyDefaultSort = True

 

    Dim rowIndex As Integer = -1

 

    Try

        rowIndex = dv.Find(mFieldValue)

        If rowIndex <> -1 Then mDataGrid.CurrentRowIndex = rowIndex

    Catch ex As SystemException

        MsgBox(ex.Message)

    End Try

    Return rowIndex

End Function

 

2、多行选择的处理(2004.7.21)

 

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    Dim dm As BindingManagerBase

    dm = Me.BindingContext(ds, ds.Tables(0).TableName)

    Dim i As Integer

    ListBox2.Items.Clear()

    For i = 0 To dm.Count - 1

        If Me.DataGrid1.IsSelected(i) Then

            Me.ListBox2.Items.Add(ds.Tables(0).Rows(i)(1)) '这个i就是选中的行

        End If

    Next

End Sub

 

3、在TextBox里显示鼠标下的GridCell数据(2004.7.22)

 

Private Sub DataGrid1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseMove

    Dim myHit As DataGrid.HitTestInfo

    myHit = DataGrid1.HitTest(e.X, e.Y)

    If myHit.Row = -1 OrElse myHit.Column = -1 Then

        Me.TextBox1.Text = ""

    Else

        Me.TextBox1.Text = Me.DataGrid1.Item(myHit.Row, myHit.Column).ToString

    End If

End Sub

 

Mouse快速移出DataGrid时,上面的myHit = DataGrid1.HitTest(e.X, e.Y)

是不能及时响应的,所以还要加下面这个:

Private Sub DataGrid1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.MouseLeave

    Me.TextBox1.Text = ""

End Sub

 

 

 

[数据集类]

 

DataSet

 

1、如何在DataSet中,编写函数使其返回当前操作的记录的索引(2004.7.28)

 

Private Function GetPos(ByVal dt As DataTable) As Integer

    Dim mBind As BindingManagerBase

    mBind = Me.BindingContext(dt)

    Return mBind.Position

End Function

 

'调用

Dim mTablePos As Integer

mTablePos=GetPos(ds.Tables(tableName))

 

 

Reader

 

1、根据一个sql语句和相关的连接查询出一系列元组,将这些元组用一个二维的字符串数组保存并返回(2004.7.28)

 

Public Function SelectArray(ByVal query As String, ByVal connection As OleDb.OleDbConnection) As Array

    Dim mCols As Integer

    Dim RowList As New ArrayList

 

    Dim mCM As New OleDb.OleDbCommand(query, connection)

    If connection.State <> ConnectionState.Open Then connection.Open()

    Dim mRd As OleDb.OleDbDataReader = mCM.ExecuteReader

    mCols = mRd.FieldCount

 

    While mRd.Read

        Dim mRow(mCols - 1) As Object

        mRd.GetValues(mRow)

        RowList.Add(mRow)

    End While

 

    mRd.Close()

    connection.Close()

 

    Return RowList.ToArray

End Function

 

供魔方初学者参考

  • 2013年09月22日 15:37
  • 39KB
  • 下载

Delphi背后---初学者参考之二(1)

计算机语言一代一代地从机器语言发展到高级语言,从复杂到简单(其实也不简单),体现了计算机科学技术的发展。计算机语言越高级,就越抽象越人性化,与低层硬件的关系就越少,使用起来就越方便。但无论计算机语言如...
  • huojiehai
  • huojiehai
  • 2004-05-17 17:40:00
  • 662

Android应用源码安卓初学者必敲基础项目

本项目源码是某位朋友投稿的例子,是一个很简单的例子,请求https://s3-ap-northeast-1.amazonaws.com/testhotel/hotels.json这个json文件,然后...
  • u013783312
  • u013783312
  • 2014-02-26 13:39:22
  • 1800

Spring面试题常问的Top25

欢迎大家向我推荐你在面试过程中遇到关于spring的问题。我会把大家推荐的问题添加到下面的Spring常用面试题清单中供大家参考。问题清单:什么是Spring框架?Spring框架有哪些主要模块?使用...
  • u012401711
  • u012401711
  • 2017-06-23 21:07:10
  • 195

扬声器基础(供初学者参考)

  • 2009年03月30日 22:00
  • 237KB
  • 下载

php源码,供初学者学习参考

  • 2010年05月30日 16:22
  • 20KB
  • 下载

js特效事例---供初学者参考

  • 2011年10月27日 10:07
  • 222KB
  • 下载

ssh框架搭建,供初学者参考

  • 2010年02月25日 15:41
  • 18KB
  • 下载

bi解决方案,供初学者参考。

  • 2011年07月03日 14:26
  • 51KB
  • 下载

文件上传下载,供初学者参考使用

  • 2010年06月30日 16:14
  • 16KB
  • 下载
收藏助手
不良信息举报
您举报文章:[NET.VB]小问题集锦(供初学者参考)
举报原因:
原因补充:

(最多只允许输入30个字)