[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

 

Java初学者编程练习锦集(1)

Java初学者编程练习锦集(1)
  • javaniuniu
  • javaniuniu
  • 2017年03月13日 17:49
  • 1815

给一位27岁的编程初学者回答的四个问题

【来信】贺老师:  您好。在网上看了您给IT学子的指导,有几个问题想请教你。我是半年前发现自己对编程有兴趣,然后自学了VBA和部分python。期间用VBA写过一些功能简单的宏。目前在全力学习pyth...
  • sxhelijian
  • sxhelijian
  • 2013年03月23日 11:00
  • 5987

C++项目参考解答——小学生算术能力测试系统

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759【项目4-学习辅助软件开发】通过本题学习一些系统函数。任务2——小学生算术能...
  • sxhelijian
  • sxhelijian
  • 2013年11月16日 15:57
  • 5255

VB.NET机房重构篇之数据库小问题

SQL2014 错误代码5120 错误代码26 修改电脑名称 服务器名称
  • sky15732625340
  • sky15732625340
  • 2016年05月21日 21:30
  • 1461

解决DELPHI2005调试ASP.NET程序小问题.rar

  • 2011年05月15日 21:59
  • 273KB
  • 下载

解决DELPHI2005调试ASP.NET程序小问题

  • 2006年01月13日 09:51
  • 0B
  • 下载

MYSQL小问题解决集锦

1、 MySQL错误日志里出现: 140331 10:08:18 [ERROR] Error reading master configuration 140331 10:08:18 [ERRO...
  • Angelahhj
  • Angelahhj
  • 2015年08月05日 17:56
  • 1018

Android 小问题 集锦

1.如何禁用DrawerLayout阴影mDrawerLayout.setScrimColor(Color.TRANSPARENT); setDrawerShadow(Drawable shadowD...
  • wooder111
  • wooder111
  • 2016年01月16日 13:50
  • 6220

算法竞赛入门经典,练习代码 ,4.4.1 小问题集锦

编写函数:solve,给定浮点数a,b,c,d,e,f,求解方程组ax+by=c,dx+ey=f 任务1:使用assert宏,让解不唯一时异常退出。 任务2:解不唯一时仍然正常返回,但调用者有办法知...
  • zxm1306192988
  • zxm1306192988
  • 2016年02月02日 23:32
  • 392

sql语句的一些小问题集锦

针对下面的数据库表,完成后面的查询: create table student(  sno char(10) primary key, --学号  sname nvarchar(20),    ...
  • xhn904718441
  • xhn904718441
  • 2011年11月21日 11:30
  • 188
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[NET.VB]小问题集锦(供初学者参考)
举报原因:
原因补充:

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